{
  "contractName": "AgentRoles",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_role",
          "type": "string"
        }
      ],
      "name": "RoleAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_role",
          "type": "string"
        }
      ],
      "name": "RoleRemoved",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isAgentAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addAgentAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeAgentAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isSupplyModifier",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addSupplyModifier",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeSupplyModifier",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isFreezer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addFreezer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeFreezer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isTransferManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addTransferManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeTransferManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isRecoveryAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addRecoveryAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeRecoveryAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isComplianceAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addComplianceAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeComplianceAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isWhiteListManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addWhiteListManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeWhiteListManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_role\",\"type\":\"string\"}],\"name\":\"RoleAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_role\",\"type\":\"string\"}],\"name\":\"RoleRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addAgentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addComplianceAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addFreezer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addRecoveryAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addSupplyModifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addTransferManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addWhiteListManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isAgentAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isComplianceAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isFreezer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isRecoveryAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isSupplyModifier\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isTransferManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isWhiteListManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeAgentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeComplianceAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeFreezer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeRecoveryAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeSupplyModifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeTransferManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeWhiteListManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isAgentAdmin(address)\":{\"details\":\"AgentAdmin Role _agentAdmin\"},\"isComplianceAgent(address)\":{\"details\":\"ComplianceAgent Role _complianceAgents\"},\"isFreezer(address)\":{\"details\":\"Freezer Role _freezers\"},\"isRecoveryAgent(address)\":{\"details\":\"RecoveryAgent Role _recoveryAgents\"},\"isSupplyModifier(address)\":{\"details\":\"SupplyModifier Role _supplyModifiers\"},\"isTransferManager(address)\":{\"details\":\"TransferManager Role _transferManagers\"},\"isWhiteListManager(address)\":{\"details\":\"WhiteListManager Role _whiteListManagers\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/roles/AgentRoles.sol\":\"AgentRoles\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"project:/contracts/roles/AgentRoles.sol\":{\"keccak256\":\"0xe5187df1eee9821f4f9ad30e56aecc2494aafc7a069849a902dc29e1fbf413e1\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://3a26bbfcc957dd175014653a6bf4749d5721605f10673632aefabc885305a747\",\"dweb:/ipfs/QmToEGZUvbgPqVi3iJfySjNJcBkUU5AsdTifgUmEXUspEb\"]},\"project:/contracts/roles/Roles.sol\":{\"keccak256\":\"0x9e018cafd4e2a2890d4ed32f0a4e5edf92fe95000f35b15d7932890bd0efdb95\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://6c07fd269689b662d782817bc4fdfc00d33fd7e320c20916528fff7853847954\",\"dweb:/ipfs/QmUz39kdgQM8M2W2gcBZ8Vi3mzzSmXUx9NXxTJatYYQJyw\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f8d8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106101285760003560e01c8063042a36061461012d57806314f2d2761461015557806315d8ca621461016a5780632001c3501461017d5780632acd2000146101905780633966904d146101a35780633cdf8000146101b65780634599fb7b146101c95780634aff432c146101dc578063526606c9146101ef57806365d07b2e146102025780636c65fd6a14610215578063715018a6146102285780637489453d146102305780637ad78a4614610243578063860a2bcf146102565780638da5cb5b14610269578063965e61ea14610289578063bd92fcfe1461029c578063c6006c9a146102af578063c8777b50146102c2578063cdf1b693146102d5578063e86c6431146102e8578063f2fde38b146102fb575b600080fd5b61014061013b366004610e66565b61030e565b60405190151581526020015b60405180910390f35b610168610163366004610e66565b610321565b005b610168610178366004610e66565b6103cc565b61014061018b366004610e66565b610461565b61016861019e366004610e66565b61046e565b6101686101b1366004610e66565b6104fc565b6101686101c4366004610e66565b610593565b6101406101d7366004610e66565b610629565b6101686101ea366004610e66565b610636565b6101686101fd366004610e66565b6106cd565b610168610210366004610e66565b61075b565b610140610223366004610e66565b6107ec565b6101686107f9565b61016861023e366004610e66565b61080d565b610140610251366004610e66565b6108a1565b610168610264366004610e66565b6108ae565b610271610943565b6040516001600160a01b03909116815260200161014c565b610168610297366004610e66565b610952565b6101406102aa366004610e66565b6109e8565b6101686102bd366004610e66565b6109f5565b6101686102d0366004610e66565b610a8b565b6101686102e3366004610e66565b610b1f565b6101406102f6366004610e66565b610bb0565b610168610309366004610e66565b610bbd565b600061031b600183610c36565b92915050565b3361032a610943565b6001600160a01b03161480610343575061034333610629565b6103685760405162461bcd60e51b815260040161035f90610e96565b60405180910390fd5b610373600382610cb9565b604080518082018252600f81526e2a3930b739b332b926b0b730b3b2b960891b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b60405180910390a25050565b336103d5610943565b6001600160a01b031614806103ee57506103ee33610629565b61040a5760405162461bcd60e51b815260040161035f90610e96565b610415600182610cb9565b604080518082018252600e81526d29bab838363ca6b7b234b334b2b960911b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b600061031b600583610c36565b33610477610943565b6001600160a01b03161480610490575061049033610629565b6104ac5760405162461bcd60e51b815260040161035f90610e96565b6104b7600282610d35565b6040805180820182526007815266233932b2bd32b960c91b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b33610505610943565b6001600160a01b0316148061051e575061051e33610629565b61053a5760405162461bcd60e51b815260040161035f90610e96565b610545600682610cb9565b604080518082018252601081526f2bb434ba32a634b9ba26b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b3361059c610943565b6001600160a01b031614806105b557506105b533610629565b6105d15760405162461bcd60e51b815260040161035f90610e96565b6105dc600582610cb9565b604080518082018252600f81526e10dbdb5c1b1a585b98d95059d95b9d608a1b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b600061031b600783610c36565b3361063f610943565b6001600160a01b03161480610658575061065833610629565b6106745760405162461bcd60e51b815260040161035f90610e96565b61067f600682610d35565b604080518082018252601081526f2bb434ba32a634b9ba26b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b336106d6610943565b6001600160a01b031614806106ef57506106ef33610629565b61070b5760405162461bcd60e51b815260040161035f90610e96565b610716600282610cb9565b6040805180820182526007815266233932b2bd32b960c91b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b33610764610943565b6001600160a01b0316148061077d575061077d33610629565b6107995760405162461bcd60e51b815260040161035f90610e96565b6107a4600782610d35565b604080518082018252600a81526920b3b2b73a20b236b4b760b11b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b600061031b600283610c36565b610801610db7565b61080b6000610e16565b565b33610816610943565b6001600160a01b0316148061082f575061082f33610629565b61084b5760405162461bcd60e51b815260040161035f90610e96565b610856600482610cb9565b604080518082018252600d81526c149958dbdd995c9e5059d95b9d609a1b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b600061031b600483610c36565b336108b7610943565b6001600160a01b031614806108d057506108d033610629565b6108ec5760405162461bcd60e51b815260040161035f90610e96565b6108f7600182610d35565b604080518082018252600e81526d29bab838363ca6b7b234b334b2b960911b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b6000546001600160a01b031690565b3361095b610943565b6001600160a01b03161480610974575061097433610629565b6109905760405162461bcd60e51b815260040161035f90610e96565b61099b600382610d35565b604080518082018252600f81526e2a3930b739b332b926b0b730b3b2b960891b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b600061031b600683610c36565b336109fe610943565b6001600160a01b03161480610a175750610a1733610629565b610a335760405162461bcd60e51b815260040161035f90610e96565b610a3e600582610d35565b604080518082018252600f81526e10dbdb5c1b1a585b98d95059d95b9d608a1b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b33610a94610943565b6001600160a01b03161480610aad5750610aad33610629565b610ac95760405162461bcd60e51b815260040161035f90610e96565b610ad4600482610d35565b604080518082018252600d81526c149958dbdd995c9e5059d95b9d609a1b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b33610b28610943565b6001600160a01b03161480610b415750610b4133610629565b610b5d5760405162461bcd60e51b815260040161035f90610e96565b610b68600782610cb9565b604080518082018252600a81526920b3b2b73a20b236b4b760b11b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b600061031b600383610c36565b610bc5610db7565b6001600160a01b038116610c2a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161035f565b610c3381610e16565b50565b60006001600160a01b038216610c995760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840161035f565b506001600160a01b03166000908152602091909152604090205460ff1690565b610cc38282610c36565b15610d105760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015260640161035f565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b610d3f8282610c36565b610d955760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b606482015260840161035f565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b33610dc0610943565b6001600160a01b03161461080b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161035f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e7857600080fd5b81356001600160a01b0381168114610e8f57600080fd5b9392505050565b6020808252601990820152782937b6329d1029b2b73232b91034b9902727aa1020b236b4b760391b604082015260600190565b600060208083528351808285015260005b81811015610ef657858101830151858201604001528201610eda565b506000604082860101526040601f19601f830116850101925050509291505056fed211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803abfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489a2646970667358221220128252b41bd19996ffb4c5729ff198958540a164293651748bf93253de13e5a264736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101285760003560e01c8063042a36061461012d57806314f2d2761461015557806315d8ca621461016a5780632001c3501461017d5780632acd2000146101905780633966904d146101a35780633cdf8000146101b65780634599fb7b146101c95780634aff432c146101dc578063526606c9146101ef57806365d07b2e146102025780636c65fd6a14610215578063715018a6146102285780637489453d146102305780637ad78a4614610243578063860a2bcf146102565780638da5cb5b14610269578063965e61ea14610289578063bd92fcfe1461029c578063c6006c9a146102af578063c8777b50146102c2578063cdf1b693146102d5578063e86c6431146102e8578063f2fde38b146102fb575b600080fd5b61014061013b366004610e66565b61030e565b60405190151581526020015b60405180910390f35b610168610163366004610e66565b610321565b005b610168610178366004610e66565b6103cc565b61014061018b366004610e66565b610461565b61016861019e366004610e66565b61046e565b6101686101b1366004610e66565b6104fc565b6101686101c4366004610e66565b610593565b6101406101d7366004610e66565b610629565b6101686101ea366004610e66565b610636565b6101686101fd366004610e66565b6106cd565b610168610210366004610e66565b61075b565b610140610223366004610e66565b6107ec565b6101686107f9565b61016861023e366004610e66565b61080d565b610140610251366004610e66565b6108a1565b610168610264366004610e66565b6108ae565b610271610943565b6040516001600160a01b03909116815260200161014c565b610168610297366004610e66565b610952565b6101406102aa366004610e66565b6109e8565b6101686102bd366004610e66565b6109f5565b6101686102d0366004610e66565b610a8b565b6101686102e3366004610e66565b610b1f565b6101406102f6366004610e66565b610bb0565b610168610309366004610e66565b610bbd565b600061031b600183610c36565b92915050565b3361032a610943565b6001600160a01b03161480610343575061034333610629565b6103685760405162461bcd60e51b815260040161035f90610e96565b60405180910390fd5b610373600382610cb9565b604080518082018252600f81526e2a3930b739b332b926b0b730b3b2b960891b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b60405180910390a25050565b336103d5610943565b6001600160a01b031614806103ee57506103ee33610629565b61040a5760405162461bcd60e51b815260040161035f90610e96565b610415600182610cb9565b604080518082018252600e81526d29bab838363ca6b7b234b334b2b960911b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b600061031b600583610c36565b33610477610943565b6001600160a01b03161480610490575061049033610629565b6104ac5760405162461bcd60e51b815260040161035f90610e96565b6104b7600282610d35565b6040805180820182526007815266233932b2bd32b960c91b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b33610505610943565b6001600160a01b0316148061051e575061051e33610629565b61053a5760405162461bcd60e51b815260040161035f90610e96565b610545600682610cb9565b604080518082018252601081526f2bb434ba32a634b9ba26b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b3361059c610943565b6001600160a01b031614806105b557506105b533610629565b6105d15760405162461bcd60e51b815260040161035f90610e96565b6105dc600582610cb9565b604080518082018252600f81526e10dbdb5c1b1a585b98d95059d95b9d608a1b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b600061031b600783610c36565b3361063f610943565b6001600160a01b03161480610658575061065833610629565b6106745760405162461bcd60e51b815260040161035f90610e96565b61067f600682610d35565b604080518082018252601081526f2bb434ba32a634b9ba26b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b336106d6610943565b6001600160a01b031614806106ef57506106ef33610629565b61070b5760405162461bcd60e51b815260040161035f90610e96565b610716600282610cb9565b6040805180820182526007815266233932b2bd32b960c91b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b33610764610943565b6001600160a01b0316148061077d575061077d33610629565b6107995760405162461bcd60e51b815260040161035f90610e96565b6107a4600782610d35565b604080518082018252600a81526920b3b2b73a20b236b4b760b11b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b600061031b600283610c36565b610801610db7565b61080b6000610e16565b565b33610816610943565b6001600160a01b0316148061082f575061082f33610629565b61084b5760405162461bcd60e51b815260040161035f90610e96565b610856600482610cb9565b604080518082018252600d81526c149958dbdd995c9e5059d95b9d609a1b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b600061031b600483610c36565b336108b7610943565b6001600160a01b031614806108d057506108d033610629565b6108ec5760405162461bcd60e51b815260040161035f90610e96565b6108f7600182610d35565b604080518082018252600e81526d29bab838363ca6b7b234b334b2b960911b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b6000546001600160a01b031690565b3361095b610943565b6001600160a01b03161480610974575061097433610629565b6109905760405162461bcd60e51b815260040161035f90610e96565b61099b600382610d35565b604080518082018252600f81526e2a3930b739b332b926b0b730b3b2b960891b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b600061031b600683610c36565b336109fe610943565b6001600160a01b03161480610a175750610a1733610629565b610a335760405162461bcd60e51b815260040161035f90610e96565b610a3e600582610d35565b604080518082018252600f81526e10dbdb5c1b1a585b98d95059d95b9d608a1b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b33610a94610943565b6001600160a01b03161480610aad5750610aad33610629565b610ac95760405162461bcd60e51b815260040161035f90610e96565b610ad4600482610d35565b604080518082018252600d81526c149958dbdd995c9e5059d95b9d609a1b602082015290516001600160a01b03831690600080516020610f18833981519152906103c0908490610ec9565b33610b28610943565b6001600160a01b03161480610b415750610b4133610629565b610b5d5760405162461bcd60e51b815260040161035f90610e96565b610b68600782610cb9565b604080518082018252600a81526920b3b2b73a20b236b4b760b11b602082015290516001600160a01b03831690600080516020610f38833981519152906103c0908490610ec9565b600061031b600383610c36565b610bc5610db7565b6001600160a01b038116610c2a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161035f565b610c3381610e16565b50565b60006001600160a01b038216610c995760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840161035f565b506001600160a01b03166000908152602091909152604090205460ff1690565b610cc38282610c36565b15610d105760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015260640161035f565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b610d3f8282610c36565b610d955760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b606482015260840161035f565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b33610dc0610943565b6001600160a01b03161461080b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161035f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e7857600080fd5b81356001600160a01b0381168114610e8f57600080fd5b9392505050565b6020808252601990820152782937b6329d1029b2b73232b91034b9902727aa1020b236b4b760391b604082015260600190565b600060208083528351808285015260005b81811015610ef657858101830151858201604001528201610eda565b506000604082860101526040601f19601f830116850101925050509291505056fed211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803abfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489a2646970667358221220128252b41bd19996ffb4c5729ff198958540a164293651748bf93253de13e5a264736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:3542:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "84:216:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "130:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "139:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "142:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "132:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "132:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "132:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "105:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "114:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "101:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "101:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "126:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "97:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "97:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "94:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "155:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "181:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "168:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "168:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "159:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "254:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "263:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "266:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "256:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "256:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "256:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "213:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "224:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "239:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "244:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "235:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "235:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "248:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "231:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "231:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "220:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "220:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "210:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "210:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "203:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "203:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "200:70:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "279:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "289:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "279:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "50:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "61:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "73:6:54",
                "type": ""
              }
            ],
            "src": "14:286:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "400:92:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "410:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "422:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "433:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "418:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "418:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "410:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "452:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "477:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "470:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "470:14:54"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "463:6:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "463:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "445:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "445:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "445:41:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "369:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "380:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "391:4:54",
                "type": ""
              }
            ],
            "src": "305:187:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "598:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "608:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "620:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "631:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "616:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "616:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "608:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "650:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "665:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "681:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "686:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "677:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "677:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "690:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "673:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "673:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "661:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "661:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "643:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "643:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "643:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "567:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "578:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "589:4:54",
                "type": ""
              }
            ],
            "src": "497:203:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "879:175:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "896:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "907:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "889:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "889:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "889:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "930:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "941:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "926:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "926:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "946:2:54",
                        "type": "",
                        "value": "25"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "919:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "919:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "919:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "969:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "980:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "965:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "965:18:54"
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542041646d696e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "985:27:54",
                        "type": "",
                        "value": "Role: Sender is NOT Admin"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "958:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "958:55:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "958:55:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1022:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1034:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1045:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1030:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1030:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1022:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "856:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "870:4:54",
                "type": ""
              }
            ],
            "src": "705:349:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1180:427:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1190:12:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "1200:2:54",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "1194:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1218:9:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "1229:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1211:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1211:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1211:21:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1241:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "1261:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1255:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1255:13:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "1245:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1288:9:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1299:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1284:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1284:18:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1304:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1277:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1277:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1277:34:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1320:10:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "1329:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "1324:1:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1389:90:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "headStart",
                                      "nodeType": "YulIdentifier",
                                      "src": "1418:9:54"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "1429:1:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "1414:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1414:17:54"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1433:2:54",
                                  "type": "",
                                  "value": "64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "1410:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1410:26:54"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1452:6:54"
                                        },
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1460:1:54"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1448:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1448:14:54"
                                    },
                                    {
                                      "name": "_1",
                                      "nodeType": "YulIdentifier",
                                      "src": "1464:2:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "1444:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1444:23:54"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "1438:5:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1438:30:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1403:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1403:66:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1403:66:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "1350:1:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1353:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "1347:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1347:13:54"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "1361:19:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1363:15:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "1372:1:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "1375:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "1368:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1368:10:54"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "1363:1:54"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "1343:3:54",
                    "statements": []
                  },
                  "src": "1339:140:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1503:9:54"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "1514:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1499:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1499:22:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1523:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1495:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1495:31:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1528:1:54",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1488:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1488:42:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1488:42:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1539:62:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1555:9:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1574:6:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1582:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1570:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1570:15:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1591:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1587:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1587:7:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "1566:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1566:29:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1551:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1551:45:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1598:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1547:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1547:54:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1539:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1149:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1160:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1171:4:54",
                "type": ""
              }
            ],
            "src": "1059:548:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1786:228:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1803:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1814:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1796:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1796:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1796:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1837:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1848:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1833:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1833:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1853:2:54",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1826:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1826:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1826:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1876:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1887:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1872:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1872:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1892:34:54",
                        "type": "",
                        "value": "Ownable: new owner is the zero a"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1865:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1865:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1865:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1947:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1958:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1943:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1943:18:54"
                      },
                      {
                        "hexValue": "646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1963:8:54",
                        "type": "",
                        "value": "ddress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1936:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1936:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1936:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1981:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1993:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2004:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1989:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1989:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1981:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1763:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1777:4:54",
                "type": ""
              }
            ],
            "src": "1612:402:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2193:224:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2210:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2221:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2203:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2203:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2203:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2244:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2255:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2240:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2240:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2260:2:54",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2233:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2233:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2233:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2283:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2294:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2279:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2279:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420697320746865207a65726f206164647265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2299:34:54",
                        "type": "",
                        "value": "Roles: account is the zero addre"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2272:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2272:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2272:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2354:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2365:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2350:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2350:18:54"
                      },
                      {
                        "hexValue": "7373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2370:4:54",
                        "type": "",
                        "value": "ss"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2343:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2343:32:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2343:32:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2384:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2396:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2407:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2392:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2392:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2384:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2170:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2184:4:54",
                "type": ""
              }
            ],
            "src": "2019:398:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2596:181:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2613:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2624:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2606:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2606:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2606:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2647:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2658:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2643:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2643:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2663:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2636:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2636:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2636:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2686:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2697:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2682:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2682:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420616c72656164792068617320726f6c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2702:33:54",
                        "type": "",
                        "value": "Roles: account already has role"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2675:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2675:61:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2675:61:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2745:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2757:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2768:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2753:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2753:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2745:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2573:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2587:4:54",
                "type": ""
              }
            ],
            "src": "2422:355:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2956:223:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2973:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2984:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2966:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2966:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2966:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3007:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3018:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3003:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3003:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3023:2:54",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2996:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2996:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2996:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3046:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3057:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3042:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3042:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3062:34:54",
                        "type": "",
                        "value": "Roles: account does not have rol"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3035:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3035:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3035:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3117:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3128:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3113:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3113:18:54"
                      },
                      {
                        "hexValue": "65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3133:3:54",
                        "type": "",
                        "value": "e"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3106:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3106:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3106:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3146:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3158:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3169:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3154:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3154:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3146:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2933:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2947:4:54",
                "type": ""
              }
            ],
            "src": "2782:397:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3358:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3375:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3386:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3368:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3368:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3368:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3409:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3420:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3405:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3405:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3425:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3398:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3398:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3398:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3448:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3459:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3444:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3444:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3464:34:54",
                        "type": "",
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3437:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3437:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3437:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3508:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3520:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3531:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3516:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3516:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3508:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3335:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3349:4:54",
                "type": ""
              }
            ],
            "src": "3184:356:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"Role: Sender is NOT Admin\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"Roles: account is the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"Roles: account already has role\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"Roles: account does not have rol\")\n        mstore(add(headStart, 96), \"e\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "1195:4628:45:-:0;;;;;;;;;;;;-1:-1:-1;936:32:13;719:10:20;936:18:13;:32::i;:::-;1195:4628:45;;2433:187:13;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:13;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1195:4628:45:-;;;;;;;",
  "deployedSourceMap": "1195:4628:45:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2402:121;;;;;;:::i;:::-;;:::i;:::-;;;470:14:54;;463:22;445:41;;433:2;418:18;2402:121:45;;;;;;;;3635:197;;;;;;:::i;:::-;;:::i;:::-;;2529:194;;;;;;:::i;:::-;;:::i;4678:123::-;;;;;;:::i;:::-;;:::i;3266:181::-;;;;;;:::i;:::-;;:::i;5407:200::-;;;;;;:::i;:::-;;:::i;4807:197::-;;;;;;:::i;:::-;;:::i;1851:112::-;;;;;;:::i;:::-;;:::i;5613:208::-;;;;;;:::i;:::-;;:::i;3087:173::-;;;;;;:::i;:::-;;:::i;2156:189::-;;;;;;:::i;:::-;;:::i;2974:107::-;;;;;;:::i;:::-;;:::i;1831:101:13:-;;;:::i;4223:191:45:-;;;;;;:::i;:::-;;:::i;4098:119::-;;;;;;:::i;:::-;;:::i;2729:202::-;;;;;;:::i;:::-;;:::i;1201:85:13:-;;;:::i;:::-;;;-1:-1:-1;;;;;661:32:54;;;643:51;;631:2;616:18;1201:85:13;497:203:54;3838:205:45;;;;;;:::i;:::-;;:::i;5276:125::-;;;;;;:::i;:::-;;:::i;5010:205::-;;;;;;:::i;:::-;;:::i;4420:199::-;;;;;;:::i;:::-;;:::i;1969:181::-;;;;;;:::i;:::-;;:::i;3506:123::-;;;;;;:::i;:::-;;:::i;2081:198:13:-;;;;;;:::i;:::-;;:::i;2402:121:45:-;2465:4;2488:28;:16;2509:6;2488:20;:28::i;:::-;2481:35;2402:121;-1:-1:-1;;2402:121:45:o;3635:197::-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;;;;;;;;;3708:29:::1;:17;3730:6:::0;3708:21:::1;:29::i;:::-;3747:39;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3747:39:45::1;::::0;::::1;::::0;3801:24;;-1:-1:-1;;;;;3801:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;3801:24:45;::::1;::::0;3747:39;;3801:24:::1;:::i;:::-;;;;;;;;3698:134;3635:197:::0;:::o;2529:194::-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;2601:28:::1;:16;2622:6:::0;2601:20:::1;:28::i;:::-;2639:38;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2639:38:45::1;::::0;::::1;::::0;2692:24;;-1:-1:-1;;;;;2692:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;2692:24:45;::::1;::::0;2639:38;;2692:24:::1;:::i;4678:123::-:0;4742:4;4765:29;:17;4787:6;4765:21;:29::i;3266:181::-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;3334:24:::1;:9;3351:6:::0;3334:16:::1;:24::i;:::-;3368:31;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3368:31:45::1;::::0;::::1;::::0;3414:26;;-1:-1:-1;;;;;3414:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;3414:26:45;::::1;::::0;3368:31;;3414:26:::1;:::i;5407:200::-:0;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;5481:30:::1;:18;5504:6:::0;5481:22:::1;:30::i;:::-;5521:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5521:40:45::1;::::0;::::1;::::0;5576:24;;-1:-1:-1;;;;;5576:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;5576:24:45;::::1;::::0;5521:40;;5576:24:::1;:::i;4807:197::-:0;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;4880:29:::1;:17;4902:6:::0;4880:21:::1;:29::i;:::-;4919:39;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4919:39:45::1;::::0;::::1;::::0;4973:24;;-1:-1:-1;;;;;4973:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;4973:24:45;::::1;::::0;4919:39;;4973:24:::1;:::i;1851:112::-:0;1910:4;1933:23;:11;1949:6;1933:15;:23::i;5613:208::-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;5690:33:::1;:18;5716:6:::0;5690:25:::1;:33::i;:::-;5733:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5733:40:45::1;::::0;::::1;::::0;5788:26;;-1:-1:-1;;;;;5788:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;5788:26:45;::::1;::::0;5733:40;;5788:26:::1;:::i;3087:173::-:0;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;3152:21:::1;:9;3166:6:::0;3152:13:::1;:21::i;:::-;3183:31;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3183:31:45::1;::::0;::::1;::::0;3229:24;;-1:-1:-1;;;;;3229:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;3229:24:45;::::1;::::0;3183:31;;3229:24:::1;:::i;2156:189::-:0;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;2227:26:::1;:11;2246:6:::0;2227:18:::1;:26::i;:::-;2263:34;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2263:34:45::1;::::0;::::1;::::0;2312:26;;-1:-1:-1;;;;;2312:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;2312:26:45;::::1;::::0;2263:34;;2312:26:::1;:::i;2974:107::-:0;3030:4;3053:21;:9;3067:6;3053:13;:21::i;1831:101:13:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;4223:191:45:-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;4294:27:::1;:15;4314:6:::0;4294:19:::1;:27::i;:::-;4331:37;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4331:37:45::1;::::0;::::1;::::0;4383:24;;-1:-1:-1;;;;;4383:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;4383:24:45;::::1;::::0;4331:37;;4383:24:::1;:::i;4098:119::-:0;4160:4;4183:27;:15;4203:6;4183:19;:27::i;2729:202::-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;2804:31:::1;:16;2828:6:::0;2804:23:::1;:31::i;:::-;2845:38;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2845:38:45::1;::::0;::::1;::::0;2898:26;;-1:-1:-1;;;;;2898:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;2898:26:45;::::1;::::0;2845:38;;2898:26:::1;:::i;1201:85:13:-:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:13;;1201:85::o;3838:205:45:-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;3914:32:::1;:17;3939:6:::0;3914:24:::1;:32::i;:::-;3956:39;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3956:39:45::1;::::0;::::1;::::0;4010:26;;-1:-1:-1;;;;;4010:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;4010:26:45;::::1;::::0;3956:39;;4010:26:::1;:::i;5276:125::-:0;5341:4;5364:30;:18;5387:6;5364:22;:30::i;5010:205::-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;5086:32:::1;:17;5111:6:::0;5086:24:::1;:32::i;:::-;5128:39;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5128:39:45::1;::::0;::::1;::::0;5182:26;;-1:-1:-1;;;;;5182:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;5182:26:45;::::1;::::0;5128:39;;5182:26:::1;:::i;4420:199::-:0;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;4494:30:::1;:15;4517:6:::0;4494:22:::1;:30::i;:::-;4534:37;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4534:37:45::1;::::0;::::1;::::0;4586:26;;-1:-1:-1;;;;;4586:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;4586:26:45;::::1;::::0;4534:37;;4586:26:::1;:::i;1969:181::-:0;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;2037:23:::1;:11;2053:6:::0;2037:15:::1;:23::i;:::-;2070:34;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2070:34:45::1;::::0;::::1;::::0;2119:24;;-1:-1:-1;;;;;2119:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;2119:24:45;::::1;::::0;2070:34;;2119:24:::1;:::i;3506:123::-:0;3570:4;3593:29;:17;3615:6;3593:21;:29::i;2081:198:13:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:13;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:13;;1814:2:54;2161:73:13::1;::::0;::::1;1796:21:54::0;1853:2;1833:18;;;1826:30;1892:34;1872:18;;;1865:62;-1:-1:-1;;;1943:18:54;;;1936:36;1989:19;;2161:73:13::1;1612:402:54::0;2161:73:13::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;815:200:50:-;887:4;-1:-1:-1;;;;;911:21:50;;903:68;;;;-1:-1:-1;;;903:68:50;;2221:2:54;903:68:50;;;2203:21:54;2260:2;2240:18;;;2233:30;2299:34;2279:18;;;2272:62;-1:-1:-1;;;2350:18:54;;;2343:32;2392:19;;903:68:50;2019:398:54;903:68:50;-1:-1:-1;;;;;;988:20:50;:11;:20;;;;;;;;;;;;;;;815:200::o;296:175::-;373:18;377:4;383:7;373:3;:18::i;:::-;372:19;364:63;;;;-1:-1:-1;;;364:63:50;;2624:2:54;364:63:50;;;2606:21:54;2663:2;2643:18;;;2636:30;2702:33;2682:18;;;2675:61;2753:18;;364:63:50;2422:355:54;364:63:50;-1:-1:-1;;;;;437:20:50;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;437:27:50;460:4;437:27;;;296:175::o;546:180::-;625:18;629:4;635:7;625:3;:18::i;:::-;617:64;;;;-1:-1:-1;;;617:64:50;;2984:2:54;617:64:50;;;2966:21:54;3023:2;3003:18;;;2996:30;3062:34;3042:18;;;3035:62;-1:-1:-1;;;3113:18:54;;;3106:31;3154:19;;617:64:50;2782:397:54;617:64:50;-1:-1:-1;;;;;691:20:50;714:5;691:20;;;;;;;;;;;:28;;-1:-1:-1;;691:28:50;;;546:180::o;1359:130:13:-;719:10:20;1422:7:13;:5;:7::i;:::-;-1:-1:-1;;;;;1422:23:13;;1414:68;;;;-1:-1:-1;;;1414:68:13;;3386:2:54;1414:68:13;;;3368:21:54;;;3405:18;;;3398:30;3464:34;3444:18;;;3437:62;3516:18;;1414:68:13;3184:356:54;2433:187:13;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:13;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:286:54:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:54;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:54:o;705:349::-;907:2;889:21;;;946:2;926:18;;;919:30;-1:-1:-1;;;980:2:54;965:18;;958:55;1045:2;1030:18;;705:349::o;1059:548::-;1171:4;1200:2;1229;1218:9;1211:21;1261:6;1255:13;1304:6;1299:2;1288:9;1284:18;1277:34;1329:1;1339:140;1353:6;1350:1;1347:13;1339:140;;;1448:14;;;1444:23;;1438:30;1414:17;;;1433:2;1410:26;1403:66;1368:10;;1339:140;;;1343:3;1528:1;1523:2;1514:6;1503:9;1499:22;1495:31;1488:42;1598:2;1591;1587:7;1582:2;1574:6;1570:15;1566:29;1555:9;1551:45;1547:54;1539:62;;;;1059:548;;;;:::o",
  "source": "// SPDX-License-Identifier: GPL-3.0\n/**\n *     NOTICE\n *\n *     The T-REX software is licensed under a proprietary license or the GPL v.3.\n *     If you choose to receive it under the GPL v.3 license, the following applies:\n *     T-REX is a suite of smart contracts developed by Tokeny to manage and transfer financial assets on the ethereum blockchain\n *\n *     Copyright (C) 2021, Tokeny sàrl.\n *\n *     This program is free software: you can redistribute it and/or modify\n *     it under the terms of the GNU General Public License as published by\n *     the Free Software Foundation, either version 3 of the License, or\n *     (at your option) any later version.\n *\n *     This program is distributed in the hope that it will be useful,\n *     but WITHOUT ANY WARRANTY; without even the implied warranty of\n *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *     GNU General Public License for more details.\n *\n *     You should have received a copy of the GNU General Public License\n *     along with this program.  If not, see <https://www.gnu.org/licenses/>.\n */\n\npragma solidity ^0.8.0;\n\nimport '@openzeppelin/contracts/access/Ownable.sol';\n\nimport './Roles.sol';\n\ncontract AgentRoles is Ownable {\n    using Roles for Roles.Role;\n\n    event RoleAdded(address indexed _agent, string _role);\n    event RoleRemoved(address indexed _agent, string _role);\n\n    Roles.Role private _supplyModifiers;\n    Roles.Role private _freezers;\n    Roles.Role private _transferManagers;\n    Roles.Role private _recoveryAgents;\n    Roles.Role private _complianceAgents;\n    Roles.Role private _whiteListManagers;\n    Roles.Role private _agentAdmin;\n\n    modifier onlyAdmin() {\n        require(owner() == msg.sender || isAgentAdmin(_msgSender()), 'Role: Sender is NOT Admin');\n        _;\n    }\n\n    /// @dev AgentAdmin Role _agentAdmin\n\n    function isAgentAdmin(address _agent) public view returns (bool) {\n        return _agentAdmin.has(_agent);\n    }\n\n    function addAgentAdmin(address _agent) external onlyAdmin {\n        _agentAdmin.add(_agent);\n        string memory _role = 'AgentAdmin';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeAgentAdmin(address _agent) external onlyAdmin {\n        _agentAdmin.remove(_agent);\n        string memory _role = 'AgentAdmin';\n        emit RoleRemoved(_agent, _role);\n    }\n\n    /// @dev SupplyModifier Role _supplyModifiers\n\n    function isSupplyModifier(address _agent) public view returns (bool) {\n        return _supplyModifiers.has(_agent);\n    }\n\n    function addSupplyModifier(address _agent) external onlyAdmin {\n        _supplyModifiers.add(_agent);\n        string memory _role = 'SupplyModifier';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeSupplyModifier(address _agent) external onlyAdmin {\n        _supplyModifiers.remove(_agent);\n        string memory _role = 'SupplyModifier';\n        emit RoleRemoved(_agent, _role);\n    }\n\n    /// @dev Freezer Role _freezers\n\n    function isFreezer(address _agent) public view returns (bool) {\n        return _freezers.has(_agent);\n    }\n\n    function addFreezer(address _agent) external onlyAdmin {\n        _freezers.add(_agent);\n        string memory _role = 'Freezer';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeFreezer(address _agent) external onlyAdmin {\n        _freezers.remove(_agent);\n        string memory _role = 'Freezer';\n        emit RoleRemoved(_agent, _role);\n    }\n\n    /// @dev TransferManager Role _transferManagers\n\n    function isTransferManager(address _agent) public view returns (bool) {\n        return _transferManagers.has(_agent);\n    }\n\n    function addTransferManager(address _agent) external onlyAdmin {\n        _transferManagers.add(_agent);\n        string memory _role = 'TransferManager';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeTransferManager(address _agent) external onlyAdmin {\n        _transferManagers.remove(_agent);\n        string memory _role = 'TransferManager';\n        emit RoleRemoved(_agent, _role);\n    }\n\n    /// @dev RecoveryAgent Role _recoveryAgents\n\n    function isRecoveryAgent(address _agent) public view returns (bool) {\n        return _recoveryAgents.has(_agent);\n    }\n\n    function addRecoveryAgent(address _agent) external onlyAdmin {\n        _recoveryAgents.add(_agent);\n        string memory _role = 'RecoveryAgent';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeRecoveryAgent(address _agent) external onlyAdmin {\n        _recoveryAgents.remove(_agent);\n        string memory _role = 'RecoveryAgent';\n        emit RoleRemoved(_agent, _role);\n    }\n\n    /// @dev ComplianceAgent Role _complianceAgents\n\n    function isComplianceAgent(address _agent) public view returns (bool) {\n        return _complianceAgents.has(_agent);\n    }\n\n    function addComplianceAgent(address _agent) external onlyAdmin {\n        _complianceAgents.add(_agent);\n        string memory _role = 'ComplianceAgent';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeComplianceAgent(address _agent) external onlyAdmin {\n        _complianceAgents.remove(_agent);\n        string memory _role = 'ComplianceAgent';\n        emit RoleRemoved(_agent, _role);\n    }\n\n    /// @dev WhiteListManager Role _whiteListManagers\n\n    function isWhiteListManager(address _agent) public view returns (bool) {\n        return _whiteListManagers.has(_agent);\n    }\n\n    function addWhiteListManager(address _agent) external onlyAdmin {\n        _whiteListManagers.add(_agent);\n        string memory _role = 'WhiteListManager';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeWhiteListManager(address _agent) external onlyAdmin {\n        _whiteListManagers.remove(_agent);\n        string memory _role = 'WhiteListManager';\n        emit RoleRemoved(_agent, _role);\n    }\n}\n",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/roles/AgentRoles.sol",
  "ast": {
    "absolutePath": "project:/contracts/roles/AgentRoles.sol",
    "exportedSymbols": {
      "AgentRoles": [
        9685
      ],
      "Context": [
        3401
      ],
      "Ownable": [
        2505
      ],
      "Roles": [
        11901
      ]
    },
    "id": 9686,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 9205,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1093:23:45"
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 9206,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9686,
        "sourceUnit": 2506,
        "src": "1118:52:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/roles/Roles.sol",
        "file": "./Roles.sol",
        "id": 9207,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9686,
        "sourceUnit": 11902,
        "src": "1172:21:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 9208,
              "name": "Ownable",
              "nameLocations": [
                "1218:7:45"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2505,
              "src": "1218:7:45"
            },
            "id": 9209,
            "nodeType": "InheritanceSpecifier",
            "src": "1218:7:45"
          }
        ],
        "canonicalName": "AgentRoles",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 9685,
        "linearizedBaseContracts": [
          9685,
          2505,
          3401
        ],
        "name": "AgentRoles",
        "nameLocation": "1204:10:45",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "global": false,
            "id": 9213,
            "libraryName": {
              "id": 9210,
              "name": "Roles",
              "nameLocations": [
                "1238:5:45"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 11901,
              "src": "1238:5:45"
            },
            "nodeType": "UsingForDirective",
            "src": "1232:27:45",
            "typeName": {
              "id": 9212,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9211,
                "name": "Roles.Role",
                "nameLocations": [
                  "1248:5:45",
                  "1254:4:45"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1248:10:45"
              },
              "referencedDeclaration": 11820,
              "src": "1248:10:45",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "anonymous": false,
            "eventSelector": "bfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489",
            "id": 9219,
            "name": "RoleAdded",
            "nameLocation": "1271:9:45",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9218,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9215,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "1297:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9219,
                  "src": "1281:22:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9214,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1281:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9217,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_role",
                  "nameLocation": "1312:5:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9219,
                  "src": "1305:12:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9216,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1305:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1280:38:45"
            },
            "src": "1265:54:45"
          },
          {
            "anonymous": false,
            "eventSelector": "d211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a",
            "id": 9225,
            "name": "RoleRemoved",
            "nameLocation": "1330:11:45",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9224,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9221,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "1358:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9225,
                  "src": "1342:22:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9220,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1342:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9223,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_role",
                  "nameLocation": "1373:5:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9225,
                  "src": "1366:12:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9222,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1366:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1341:38:45"
            },
            "src": "1324:56:45"
          },
          {
            "constant": false,
            "id": 9228,
            "mutability": "mutable",
            "name": "_supplyModifiers",
            "nameLocation": "1405:16:45",
            "nodeType": "VariableDeclaration",
            "scope": 9685,
            "src": "1386:35:45",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9227,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9226,
                "name": "Roles.Role",
                "nameLocations": [
                  "1386:5:45",
                  "1392:4:45"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1386:10:45"
              },
              "referencedDeclaration": 11820,
              "src": "1386:10:45",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 9231,
            "mutability": "mutable",
            "name": "_freezers",
            "nameLocation": "1446:9:45",
            "nodeType": "VariableDeclaration",
            "scope": 9685,
            "src": "1427:28:45",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9230,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9229,
                "name": "Roles.Role",
                "nameLocations": [
                  "1427:5:45",
                  "1433:4:45"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1427:10:45"
              },
              "referencedDeclaration": 11820,
              "src": "1427:10:45",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 9234,
            "mutability": "mutable",
            "name": "_transferManagers",
            "nameLocation": "1480:17:45",
            "nodeType": "VariableDeclaration",
            "scope": 9685,
            "src": "1461:36:45",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9233,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9232,
                "name": "Roles.Role",
                "nameLocations": [
                  "1461:5:45",
                  "1467:4:45"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1461:10:45"
              },
              "referencedDeclaration": 11820,
              "src": "1461:10:45",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 9237,
            "mutability": "mutable",
            "name": "_recoveryAgents",
            "nameLocation": "1522:15:45",
            "nodeType": "VariableDeclaration",
            "scope": 9685,
            "src": "1503:34:45",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9236,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9235,
                "name": "Roles.Role",
                "nameLocations": [
                  "1503:5:45",
                  "1509:4:45"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1503:10:45"
              },
              "referencedDeclaration": 11820,
              "src": "1503:10:45",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 9240,
            "mutability": "mutable",
            "name": "_complianceAgents",
            "nameLocation": "1562:17:45",
            "nodeType": "VariableDeclaration",
            "scope": 9685,
            "src": "1543:36:45",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9239,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9238,
                "name": "Roles.Role",
                "nameLocations": [
                  "1543:5:45",
                  "1549:4:45"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1543:10:45"
              },
              "referencedDeclaration": 11820,
              "src": "1543:10:45",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 9243,
            "mutability": "mutable",
            "name": "_whiteListManagers",
            "nameLocation": "1604:18:45",
            "nodeType": "VariableDeclaration",
            "scope": 9685,
            "src": "1585:37:45",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9242,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9241,
                "name": "Roles.Role",
                "nameLocations": [
                  "1585:5:45",
                  "1591:4:45"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1585:10:45"
              },
              "referencedDeclaration": 11820,
              "src": "1585:10:45",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 9246,
            "mutability": "mutable",
            "name": "_agentAdmin",
            "nameLocation": "1647:11:45",
            "nodeType": "VariableDeclaration",
            "scope": 9685,
            "src": "1628:30:45",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9245,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9244,
                "name": "Roles.Role",
                "nameLocations": [
                  "1628:5:45",
                  "1634:4:45"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1628:10:45"
              },
              "referencedDeclaration": 11820,
              "src": "1628:10:45",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 9263,
              "nodeType": "Block",
              "src": "1686:117:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9258,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9253,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9249,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2433,
                              "src": "1704:5:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 9250,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1704:7:45",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 9251,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "1715:3:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 9252,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1719:6:45",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1715:10:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1704:21:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 9255,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3391,
                                "src": "1742:10:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 9256,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1742:12:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 9254,
                            "name": "isAgentAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9278,
                            "src": "1729:12:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 9257,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1729:26:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1704:51:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542041646d696e",
                        "id": 9259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1757:27:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24",
                          "typeString": "literal_string \"Role: Sender is NOT Admin\""
                        },
                        "value": "Role: Sender is NOT Admin"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24",
                          "typeString": "literal_string \"Role: Sender is NOT Admin\""
                        }
                      ],
                      "id": 9248,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1696:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9260,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1696:89:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9261,
                  "nodeType": "ExpressionStatement",
                  "src": "1696:89:45"
                },
                {
                  "id": 9262,
                  "nodeType": "PlaceholderStatement",
                  "src": "1795:1:45"
                }
              ]
            },
            "id": 9264,
            "name": "onlyAdmin",
            "nameLocation": "1674:9:45",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 9247,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1683:2:45"
            },
            "src": "1665:138:45",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9277,
              "nodeType": "Block",
              "src": "1916:47:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9274,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9267,
                        "src": "1949:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9272,
                        "name": "_agentAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9246,
                        "src": "1933:11:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9273,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1945:3:45",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "1933:15:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 9275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1933:23:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9271,
                  "id": 9276,
                  "nodeType": "Return",
                  "src": "1926:30:45"
                }
              ]
            },
            "documentation": {
              "id": 9265,
              "nodeType": "StructuredDocumentation",
              "src": "1809:37:45",
              "text": "@dev AgentAdmin Role _agentAdmin"
            },
            "functionSelector": "4599fb7b",
            "id": 9278,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAgentAdmin",
            "nameLocation": "1860:12:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9268,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9267,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "1881:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9278,
                  "src": "1873:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9266,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1873:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1872:16:45"
            },
            "returnParameters": {
              "id": 9271,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9270,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9278,
                  "src": "1910:4:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9269,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1910:4:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1909:6:45"
            },
            "scope": 9685,
            "src": "1851:112:45",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9300,
              "nodeType": "Block",
              "src": "2027:123:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9288,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9280,
                        "src": "2053:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9285,
                        "name": "_agentAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9246,
                        "src": "2037:11:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9287,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2049:3:45",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "2037:15:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2037:23:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9290,
                  "nodeType": "ExpressionStatement",
                  "src": "2037:23:45"
                },
                {
                  "assignments": [
                    9292
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9292,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2084:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9300,
                      "src": "2070:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9291,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2070:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9294,
                  "initialValue": {
                    "hexValue": "4167656e7441646d696e",
                    "id": 9293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2092:12:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b2245a96861b99efdc4643d40cce2832a12e5ef86875484f517d66446a504a61",
                      "typeString": "literal_string \"AgentAdmin\""
                    },
                    "value": "AgentAdmin"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2070:34:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9296,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9280,
                        "src": "2129:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9297,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9292,
                        "src": "2137:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9295,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9219,
                      "src": "2119:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9298,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2119:24:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9299,
                  "nodeType": "EmitStatement",
                  "src": "2114:29:45"
                }
              ]
            },
            "functionSelector": "cdf1b693",
            "id": 9301,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9283,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9282,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2017:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "2017:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "2017:9:45"
              }
            ],
            "name": "addAgentAdmin",
            "nameLocation": "1978:13:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9281,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9280,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "2000:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9301,
                  "src": "1992:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9279,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1992:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1991:16:45"
            },
            "returnParameters": {
              "id": 9284,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2027:0:45"
            },
            "scope": 9685,
            "src": "1969:181:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9323,
              "nodeType": "Block",
              "src": "2217:128:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9311,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9303,
                        "src": "2246:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9308,
                        "name": "_agentAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9246,
                        "src": "2227:11:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9310,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2239:6:45",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "2227:18:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2227:26:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9313,
                  "nodeType": "ExpressionStatement",
                  "src": "2227:26:45"
                },
                {
                  "assignments": [
                    9315
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9315,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2277:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9323,
                      "src": "2263:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9314,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2263:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9317,
                  "initialValue": {
                    "hexValue": "4167656e7441646d696e",
                    "id": 9316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2285:12:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b2245a96861b99efdc4643d40cce2832a12e5ef86875484f517d66446a504a61",
                      "typeString": "literal_string \"AgentAdmin\""
                    },
                    "value": "AgentAdmin"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2263:34:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9319,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9303,
                        "src": "2324:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9320,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9315,
                        "src": "2332:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9318,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9225,
                      "src": "2312:11:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2312:26:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9322,
                  "nodeType": "EmitStatement",
                  "src": "2307:31:45"
                }
              ]
            },
            "functionSelector": "65d07b2e",
            "id": 9324,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9306,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9305,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2207:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "2207:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "2207:9:45"
              }
            ],
            "name": "removeAgentAdmin",
            "nameLocation": "2165:16:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9303,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "2190:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9324,
                  "src": "2182:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9302,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2182:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2181:16:45"
            },
            "returnParameters": {
              "id": 9307,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2217:0:45"
            },
            "scope": 9685,
            "src": "2156:189:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9337,
              "nodeType": "Block",
              "src": "2471:52:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9334,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9327,
                        "src": "2509:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9332,
                        "name": "_supplyModifiers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9228,
                        "src": "2488:16:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9333,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2505:3:45",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "2488:20:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 9335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2488:28:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9331,
                  "id": 9336,
                  "nodeType": "Return",
                  "src": "2481:35:45"
                }
              ]
            },
            "documentation": {
              "id": 9325,
              "nodeType": "StructuredDocumentation",
              "src": "2351:46:45",
              "text": "@dev SupplyModifier Role _supplyModifiers"
            },
            "functionSelector": "042a3606",
            "id": 9338,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isSupplyModifier",
            "nameLocation": "2411:16:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9327,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "2436:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9338,
                  "src": "2428:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9326,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2428:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2427:16:45"
            },
            "returnParameters": {
              "id": 9331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9330,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9338,
                  "src": "2465:4:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9329,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2465:4:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2464:6:45"
            },
            "scope": 9685,
            "src": "2402:121:45",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9360,
              "nodeType": "Block",
              "src": "2591:132:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9348,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9340,
                        "src": "2622:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9345,
                        "name": "_supplyModifiers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9228,
                        "src": "2601:16:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9347,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2618:3:45",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "2601:20:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2601:28:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9350,
                  "nodeType": "ExpressionStatement",
                  "src": "2601:28:45"
                },
                {
                  "assignments": [
                    9352
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9352,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2653:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9360,
                      "src": "2639:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9351,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2639:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9354,
                  "initialValue": {
                    "hexValue": "537570706c794d6f646966696572",
                    "id": 9353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2661:16:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a783a689a3ac91b113cf2127b80323ff18a782352a3559c3a7a8a84f5247b0e7",
                      "typeString": "literal_string \"SupplyModifier\""
                    },
                    "value": "SupplyModifier"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2639:38:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9356,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9340,
                        "src": "2702:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9357,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9352,
                        "src": "2710:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9355,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9219,
                      "src": "2692:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2692:24:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9359,
                  "nodeType": "EmitStatement",
                  "src": "2687:29:45"
                }
              ]
            },
            "functionSelector": "15d8ca62",
            "id": 9361,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9343,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9342,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2581:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "2581:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "2581:9:45"
              }
            ],
            "name": "addSupplyModifier",
            "nameLocation": "2538:17:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9341,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9340,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "2564:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9361,
                  "src": "2556:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9339,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2556:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2555:16:45"
            },
            "returnParameters": {
              "id": 9344,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2591:0:45"
            },
            "scope": 9685,
            "src": "2529:194:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9383,
              "nodeType": "Block",
              "src": "2794:137:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9371,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9363,
                        "src": "2828:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9368,
                        "name": "_supplyModifiers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9228,
                        "src": "2804:16:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9370,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2821:6:45",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "2804:23:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2804:31:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9373,
                  "nodeType": "ExpressionStatement",
                  "src": "2804:31:45"
                },
                {
                  "assignments": [
                    9375
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9375,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2859:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9383,
                      "src": "2845:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9374,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2845:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9377,
                  "initialValue": {
                    "hexValue": "537570706c794d6f646966696572",
                    "id": 9376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2867:16:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a783a689a3ac91b113cf2127b80323ff18a782352a3559c3a7a8a84f5247b0e7",
                      "typeString": "literal_string \"SupplyModifier\""
                    },
                    "value": "SupplyModifier"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2845:38:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9379,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9363,
                        "src": "2910:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9380,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9375,
                        "src": "2918:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9378,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9225,
                      "src": "2898:11:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2898:26:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9382,
                  "nodeType": "EmitStatement",
                  "src": "2893:31:45"
                }
              ]
            },
            "functionSelector": "860a2bcf",
            "id": 9384,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9366,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9365,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2784:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "2784:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "2784:9:45"
              }
            ],
            "name": "removeSupplyModifier",
            "nameLocation": "2738:20:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9364,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9363,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "2767:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9384,
                  "src": "2759:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9362,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2759:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2758:16:45"
            },
            "returnParameters": {
              "id": 9367,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2794:0:45"
            },
            "scope": 9685,
            "src": "2729:202:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9397,
              "nodeType": "Block",
              "src": "3036:45:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9394,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9387,
                        "src": "3067:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9392,
                        "name": "_freezers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9231,
                        "src": "3053:9:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9393,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3063:3:45",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "3053:13:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 9395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3053:21:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9391,
                  "id": 9396,
                  "nodeType": "Return",
                  "src": "3046:28:45"
                }
              ]
            },
            "documentation": {
              "id": 9385,
              "nodeType": "StructuredDocumentation",
              "src": "2937:32:45",
              "text": "@dev Freezer Role _freezers"
            },
            "functionSelector": "6c65fd6a",
            "id": 9398,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isFreezer",
            "nameLocation": "2983:9:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9387,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "3001:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9398,
                  "src": "2993:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9386,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2993:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2992:16:45"
            },
            "returnParameters": {
              "id": 9391,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9390,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9398,
                  "src": "3030:4:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9389,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3030:4:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3029:6:45"
            },
            "scope": 9685,
            "src": "2974:107:45",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9420,
              "nodeType": "Block",
              "src": "3142:118:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9408,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9400,
                        "src": "3166:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9405,
                        "name": "_freezers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9231,
                        "src": "3152:9:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9407,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3162:3:45",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "3152:13:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3152:21:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9410,
                  "nodeType": "ExpressionStatement",
                  "src": "3152:21:45"
                },
                {
                  "assignments": [
                    9412
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9412,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "3197:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9420,
                      "src": "3183:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9411,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3183:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9414,
                  "initialValue": {
                    "hexValue": "467265657a6572",
                    "id": 9413,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3205:9:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_24e33447c847c15e68fca3f15a635d2d4d83cb99d7befc9068c4a148521fccf4",
                      "typeString": "literal_string \"Freezer\""
                    },
                    "value": "Freezer"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3183:31:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9416,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9400,
                        "src": "3239:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9417,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9412,
                        "src": "3247:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9415,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9219,
                      "src": "3229:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3229:24:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9419,
                  "nodeType": "EmitStatement",
                  "src": "3224:29:45"
                }
              ]
            },
            "functionSelector": "526606c9",
            "id": 9421,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9403,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9402,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3132:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "3132:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "3132:9:45"
              }
            ],
            "name": "addFreezer",
            "nameLocation": "3096:10:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9401,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9400,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "3115:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9421,
                  "src": "3107:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9399,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3107:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3106:16:45"
            },
            "returnParameters": {
              "id": 9404,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3142:0:45"
            },
            "scope": 9685,
            "src": "3087:173:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9443,
              "nodeType": "Block",
              "src": "3324:123:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9431,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9423,
                        "src": "3351:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9428,
                        "name": "_freezers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9231,
                        "src": "3334:9:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9430,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3344:6:45",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "3334:16:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9432,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3334:24:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9433,
                  "nodeType": "ExpressionStatement",
                  "src": "3334:24:45"
                },
                {
                  "assignments": [
                    9435
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9435,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "3382:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9443,
                      "src": "3368:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9434,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3368:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9437,
                  "initialValue": {
                    "hexValue": "467265657a6572",
                    "id": 9436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3390:9:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_24e33447c847c15e68fca3f15a635d2d4d83cb99d7befc9068c4a148521fccf4",
                      "typeString": "literal_string \"Freezer\""
                    },
                    "value": "Freezer"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3368:31:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9439,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9423,
                        "src": "3426:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9440,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9435,
                        "src": "3434:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9438,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9225,
                      "src": "3414:11:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3414:26:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9442,
                  "nodeType": "EmitStatement",
                  "src": "3409:31:45"
                }
              ]
            },
            "functionSelector": "2acd2000",
            "id": 9444,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9426,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9425,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3314:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "3314:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "3314:9:45"
              }
            ],
            "name": "removeFreezer",
            "nameLocation": "3275:13:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9424,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9423,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "3297:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9444,
                  "src": "3289:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9422,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3289:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3288:16:45"
            },
            "returnParameters": {
              "id": 9427,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3324:0:45"
            },
            "scope": 9685,
            "src": "3266:181:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9457,
              "nodeType": "Block",
              "src": "3576:53:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9454,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9447,
                        "src": "3615:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9452,
                        "name": "_transferManagers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9234,
                        "src": "3593:17:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9453,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3611:3:45",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "3593:21:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 9455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3593:29:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9451,
                  "id": 9456,
                  "nodeType": "Return",
                  "src": "3586:36:45"
                }
              ]
            },
            "documentation": {
              "id": 9445,
              "nodeType": "StructuredDocumentation",
              "src": "3453:48:45",
              "text": "@dev TransferManager Role _transferManagers"
            },
            "functionSelector": "e86c6431",
            "id": 9458,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isTransferManager",
            "nameLocation": "3515:17:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9447,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "3541:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9458,
                  "src": "3533:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9446,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3533:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3532:16:45"
            },
            "returnParameters": {
              "id": 9451,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9450,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9458,
                  "src": "3570:4:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9449,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3570:4:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3569:6:45"
            },
            "scope": 9685,
            "src": "3506:123:45",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9480,
              "nodeType": "Block",
              "src": "3698:134:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9468,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9460,
                        "src": "3730:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9465,
                        "name": "_transferManagers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9234,
                        "src": "3708:17:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9467,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3726:3:45",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "3708:21:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3708:29:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9470,
                  "nodeType": "ExpressionStatement",
                  "src": "3708:29:45"
                },
                {
                  "assignments": [
                    9472
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9472,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "3761:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9480,
                      "src": "3747:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9471,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3747:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9474,
                  "initialValue": {
                    "hexValue": "5472616e736665724d616e61676572",
                    "id": 9473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3769:17:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_e7caa93b03e98a472ffbdb5a38430e587fdccd6672a1e391dc128389ecb0c269",
                      "typeString": "literal_string \"TransferManager\""
                    },
                    "value": "TransferManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3747:39:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9476,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9460,
                        "src": "3811:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9477,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9472,
                        "src": "3819:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9475,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9219,
                      "src": "3801:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3801:24:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9479,
                  "nodeType": "EmitStatement",
                  "src": "3796:29:45"
                }
              ]
            },
            "functionSelector": "14f2d276",
            "id": 9481,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9463,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9462,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3688:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "3688:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "3688:9:45"
              }
            ],
            "name": "addTransferManager",
            "nameLocation": "3644:18:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9460,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "3671:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9481,
                  "src": "3663:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9459,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3663:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3662:16:45"
            },
            "returnParameters": {
              "id": 9464,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3698:0:45"
            },
            "scope": 9685,
            "src": "3635:197:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9503,
              "nodeType": "Block",
              "src": "3904:139:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9491,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9483,
                        "src": "3939:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9488,
                        "name": "_transferManagers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9234,
                        "src": "3914:17:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9490,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3932:6:45",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "3914:24:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3914:32:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9493,
                  "nodeType": "ExpressionStatement",
                  "src": "3914:32:45"
                },
                {
                  "assignments": [
                    9495
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9495,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "3970:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9503,
                      "src": "3956:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9494,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3956:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9497,
                  "initialValue": {
                    "hexValue": "5472616e736665724d616e61676572",
                    "id": 9496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3978:17:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_e7caa93b03e98a472ffbdb5a38430e587fdccd6672a1e391dc128389ecb0c269",
                      "typeString": "literal_string \"TransferManager\""
                    },
                    "value": "TransferManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3956:39:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9499,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9483,
                        "src": "4022:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9500,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9495,
                        "src": "4030:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9498,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9225,
                      "src": "4010:11:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4010:26:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9502,
                  "nodeType": "EmitStatement",
                  "src": "4005:31:45"
                }
              ]
            },
            "functionSelector": "965e61ea",
            "id": 9504,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9486,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9485,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3894:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "3894:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "3894:9:45"
              }
            ],
            "name": "removeTransferManager",
            "nameLocation": "3847:21:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9484,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9483,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "3877:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9504,
                  "src": "3869:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9482,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3869:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3868:16:45"
            },
            "returnParameters": {
              "id": 9487,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3904:0:45"
            },
            "scope": 9685,
            "src": "3838:205:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9517,
              "nodeType": "Block",
              "src": "4166:51:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9514,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9507,
                        "src": "4203:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9512,
                        "name": "_recoveryAgents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9237,
                        "src": "4183:15:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9513,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4199:3:45",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "4183:19:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 9515,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4183:27:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9511,
                  "id": 9516,
                  "nodeType": "Return",
                  "src": "4176:34:45"
                }
              ]
            },
            "documentation": {
              "id": 9505,
              "nodeType": "StructuredDocumentation",
              "src": "4049:44:45",
              "text": "@dev RecoveryAgent Role _recoveryAgents"
            },
            "functionSelector": "7ad78a46",
            "id": 9518,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isRecoveryAgent",
            "nameLocation": "4107:15:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9508,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9507,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "4131:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9518,
                  "src": "4123:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9506,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4123:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4122:16:45"
            },
            "returnParameters": {
              "id": 9511,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9510,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9518,
                  "src": "4160:4:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9509,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4160:4:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4159:6:45"
            },
            "scope": 9685,
            "src": "4098:119:45",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9540,
              "nodeType": "Block",
              "src": "4284:130:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9528,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9520,
                        "src": "4314:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9525,
                        "name": "_recoveryAgents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9237,
                        "src": "4294:15:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9527,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4310:3:45",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "4294:19:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4294:27:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9530,
                  "nodeType": "ExpressionStatement",
                  "src": "4294:27:45"
                },
                {
                  "assignments": [
                    9532
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9532,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "4345:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9540,
                      "src": "4331:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9531,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4331:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9534,
                  "initialValue": {
                    "hexValue": "5265636f766572794167656e74",
                    "id": 9533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4353:15:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_bcb75b988990bece39580fcc61a39717325526a6d8569b57a66c706f2b331fbc",
                      "typeString": "literal_string \"RecoveryAgent\""
                    },
                    "value": "RecoveryAgent"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4331:37:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9536,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9520,
                        "src": "4393:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9537,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9532,
                        "src": "4401:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9535,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9219,
                      "src": "4383:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4383:24:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9539,
                  "nodeType": "EmitStatement",
                  "src": "4378:29:45"
                }
              ]
            },
            "functionSelector": "7489453d",
            "id": 9541,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9523,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9522,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "4274:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "4274:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "4274:9:45"
              }
            ],
            "name": "addRecoveryAgent",
            "nameLocation": "4232:16:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9521,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9520,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "4257:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9541,
                  "src": "4249:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9519,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4249:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4248:16:45"
            },
            "returnParameters": {
              "id": 9524,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4284:0:45"
            },
            "scope": 9685,
            "src": "4223:191:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9563,
              "nodeType": "Block",
              "src": "4484:135:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9551,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9543,
                        "src": "4517:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9548,
                        "name": "_recoveryAgents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9237,
                        "src": "4494:15:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9550,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4510:6:45",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "4494:22:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4494:30:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9553,
                  "nodeType": "ExpressionStatement",
                  "src": "4494:30:45"
                },
                {
                  "assignments": [
                    9555
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9555,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "4548:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9563,
                      "src": "4534:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9554,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4534:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9557,
                  "initialValue": {
                    "hexValue": "5265636f766572794167656e74",
                    "id": 9556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4556:15:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_bcb75b988990bece39580fcc61a39717325526a6d8569b57a66c706f2b331fbc",
                      "typeString": "literal_string \"RecoveryAgent\""
                    },
                    "value": "RecoveryAgent"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4534:37:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9559,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9543,
                        "src": "4598:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9560,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9555,
                        "src": "4606:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9558,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9225,
                      "src": "4586:11:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4586:26:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9562,
                  "nodeType": "EmitStatement",
                  "src": "4581:31:45"
                }
              ]
            },
            "functionSelector": "c8777b50",
            "id": 9564,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9546,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9545,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "4474:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "4474:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "4474:9:45"
              }
            ],
            "name": "removeRecoveryAgent",
            "nameLocation": "4429:19:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9543,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "4457:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9564,
                  "src": "4449:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9542,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4449:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4448:16:45"
            },
            "returnParameters": {
              "id": 9547,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4484:0:45"
            },
            "scope": 9685,
            "src": "4420:199:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9577,
              "nodeType": "Block",
              "src": "4748:53:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9574,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9567,
                        "src": "4787:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9572,
                        "name": "_complianceAgents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9240,
                        "src": "4765:17:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9573,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4783:3:45",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "4765:21:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 9575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4765:29:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9571,
                  "id": 9576,
                  "nodeType": "Return",
                  "src": "4758:36:45"
                }
              ]
            },
            "documentation": {
              "id": 9565,
              "nodeType": "StructuredDocumentation",
              "src": "4625:48:45",
              "text": "@dev ComplianceAgent Role _complianceAgents"
            },
            "functionSelector": "2001c350",
            "id": 9578,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isComplianceAgent",
            "nameLocation": "4687:17:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9568,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9567,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "4713:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9578,
                  "src": "4705:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9566,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4705:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4704:16:45"
            },
            "returnParameters": {
              "id": 9571,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9570,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9578,
                  "src": "4742:4:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9569,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4742:4:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4741:6:45"
            },
            "scope": 9685,
            "src": "4678:123:45",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9600,
              "nodeType": "Block",
              "src": "4870:134:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9588,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9580,
                        "src": "4902:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9585,
                        "name": "_complianceAgents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9240,
                        "src": "4880:17:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9587,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4898:3:45",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "4880:21:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4880:29:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9590,
                  "nodeType": "ExpressionStatement",
                  "src": "4880:29:45"
                },
                {
                  "assignments": [
                    9592
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9592,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "4933:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9600,
                      "src": "4919:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9591,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4919:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9594,
                  "initialValue": {
                    "hexValue": "436f6d706c69616e63654167656e74",
                    "id": 9593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4941:17:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a508d6f9ac74eef76008f5e83c141fbac4bfed9575d3912bafeb1b7bd282dbb4",
                      "typeString": "literal_string \"ComplianceAgent\""
                    },
                    "value": "ComplianceAgent"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4919:39:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9596,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9580,
                        "src": "4983:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9597,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9592,
                        "src": "4991:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9595,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9219,
                      "src": "4973:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4973:24:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9599,
                  "nodeType": "EmitStatement",
                  "src": "4968:29:45"
                }
              ]
            },
            "functionSelector": "3cdf8000",
            "id": 9601,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9583,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9582,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "4860:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "4860:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "4860:9:45"
              }
            ],
            "name": "addComplianceAgent",
            "nameLocation": "4816:18:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9581,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9580,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "4843:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9601,
                  "src": "4835:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9579,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4835:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4834:16:45"
            },
            "returnParameters": {
              "id": 9584,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4870:0:45"
            },
            "scope": 9685,
            "src": "4807:197:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9623,
              "nodeType": "Block",
              "src": "5076:139:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9611,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9603,
                        "src": "5111:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9608,
                        "name": "_complianceAgents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9240,
                        "src": "5086:17:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9610,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5104:6:45",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "5086:24:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5086:32:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9613,
                  "nodeType": "ExpressionStatement",
                  "src": "5086:32:45"
                },
                {
                  "assignments": [
                    9615
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9615,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "5142:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9623,
                      "src": "5128:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9614,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5128:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9617,
                  "initialValue": {
                    "hexValue": "436f6d706c69616e63654167656e74",
                    "id": 9616,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5150:17:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a508d6f9ac74eef76008f5e83c141fbac4bfed9575d3912bafeb1b7bd282dbb4",
                      "typeString": "literal_string \"ComplianceAgent\""
                    },
                    "value": "ComplianceAgent"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5128:39:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9619,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9603,
                        "src": "5194:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9620,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9615,
                        "src": "5202:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9618,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9225,
                      "src": "5182:11:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5182:26:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9622,
                  "nodeType": "EmitStatement",
                  "src": "5177:31:45"
                }
              ]
            },
            "functionSelector": "c6006c9a",
            "id": 9624,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9606,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9605,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "5066:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "5066:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "5066:9:45"
              }
            ],
            "name": "removeComplianceAgent",
            "nameLocation": "5019:21:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9604,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9603,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "5049:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9624,
                  "src": "5041:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9602,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5041:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5040:16:45"
            },
            "returnParameters": {
              "id": 9607,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5076:0:45"
            },
            "scope": 9685,
            "src": "5010:205:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9637,
              "nodeType": "Block",
              "src": "5347:54:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9634,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9627,
                        "src": "5387:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9632,
                        "name": "_whiteListManagers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9243,
                        "src": "5364:18:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9633,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5383:3:45",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "5364:22:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 9635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5364:30:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9631,
                  "id": 9636,
                  "nodeType": "Return",
                  "src": "5357:37:45"
                }
              ]
            },
            "documentation": {
              "id": 9625,
              "nodeType": "StructuredDocumentation",
              "src": "5221:50:45",
              "text": "@dev WhiteListManager Role _whiteListManagers"
            },
            "functionSelector": "bd92fcfe",
            "id": 9638,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isWhiteListManager",
            "nameLocation": "5285:18:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9628,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9627,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "5312:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9638,
                  "src": "5304:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9626,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5304:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5303:16:45"
            },
            "returnParameters": {
              "id": 9631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9630,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9638,
                  "src": "5341:4:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9629,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5341:4:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5340:6:45"
            },
            "scope": 9685,
            "src": "5276:125:45",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9660,
              "nodeType": "Block",
              "src": "5471:136:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9648,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9640,
                        "src": "5504:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9645,
                        "name": "_whiteListManagers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9243,
                        "src": "5481:18:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9647,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5500:3:45",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "5481:22:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5481:30:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9650,
                  "nodeType": "ExpressionStatement",
                  "src": "5481:30:45"
                },
                {
                  "assignments": [
                    9652
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9652,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "5535:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9660,
                      "src": "5521:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9651,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5521:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9654,
                  "initialValue": {
                    "hexValue": "57686974654c6973744d616e61676572",
                    "id": 9653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5543:18:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_052868d2c8964dbaa3021ee983d1fb29a39ffbaeec64d9b774d6d61d1690ec93",
                      "typeString": "literal_string \"WhiteListManager\""
                    },
                    "value": "WhiteListManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5521:40:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9656,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9640,
                        "src": "5586:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9657,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9652,
                        "src": "5594:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9655,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9219,
                      "src": "5576:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9658,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5576:24:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9659,
                  "nodeType": "EmitStatement",
                  "src": "5571:29:45"
                }
              ]
            },
            "functionSelector": "3966904d",
            "id": 9661,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9643,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9642,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "5461:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "5461:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "5461:9:45"
              }
            ],
            "name": "addWhiteListManager",
            "nameLocation": "5416:19:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9641,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9640,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "5444:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9661,
                  "src": "5436:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9639,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5436:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5435:16:45"
            },
            "returnParameters": {
              "id": 9644,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5471:0:45"
            },
            "scope": 9685,
            "src": "5407:200:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9683,
              "nodeType": "Block",
              "src": "5680:141:45",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9671,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9663,
                        "src": "5716:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9668,
                        "name": "_whiteListManagers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9243,
                        "src": "5690:18:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9670,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5709:6:45",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "5690:25:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5690:33:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9673,
                  "nodeType": "ExpressionStatement",
                  "src": "5690:33:45"
                },
                {
                  "assignments": [
                    9675
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9675,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "5747:5:45",
                      "nodeType": "VariableDeclaration",
                      "scope": 9683,
                      "src": "5733:19:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9674,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5733:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9677,
                  "initialValue": {
                    "hexValue": "57686974654c6973744d616e61676572",
                    "id": 9676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5755:18:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_052868d2c8964dbaa3021ee983d1fb29a39ffbaeec64d9b774d6d61d1690ec93",
                      "typeString": "literal_string \"WhiteListManager\""
                    },
                    "value": "WhiteListManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5733:40:45"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9679,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9663,
                        "src": "5800:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9680,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9675,
                        "src": "5808:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9678,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9225,
                      "src": "5788:11:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5788:26:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9682,
                  "nodeType": "EmitStatement",
                  "src": "5783:31:45"
                }
              ]
            },
            "functionSelector": "4aff432c",
            "id": 9684,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9666,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9665,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "5670:9:45"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9264,
                  "src": "5670:9:45"
                },
                "nodeType": "ModifierInvocation",
                "src": "5670:9:45"
              }
            ],
            "name": "removeWhiteListManager",
            "nameLocation": "5622:22:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9664,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9663,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "5653:6:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 9684,
                  "src": "5645:14:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9662,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5645:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5644:16:45"
            },
            "returnParameters": {
              "id": 9667,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5680:0:45"
            },
            "scope": 9685,
            "src": "5613:208:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 9686,
        "src": "1195:4628:45",
        "usedErrors": []
      }
    ],
    "src": "1093:4731:45"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.392Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "isAgentAdmin(address)": {
        "details": "AgentAdmin Role _agentAdmin"
      },
      "isComplianceAgent(address)": {
        "details": "ComplianceAgent Role _complianceAgents"
      },
      "isFreezer(address)": {
        "details": "Freezer Role _freezers"
      },
      "isRecoveryAgent(address)": {
        "details": "RecoveryAgent Role _recoveryAgents"
      },
      "isSupplyModifier(address)": {
        "details": "SupplyModifier Role _supplyModifiers"
      },
      "isTransferManager(address)": {
        "details": "TransferManager Role _transferManagers"
      },
      "isWhiteListManager(address)": {
        "details": "WhiteListManager Role _whiteListManagers"
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}