{
  "contractName": "Identity",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "BlacklistAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "BlacklistRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ContractAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ContractRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "IdentityAdminAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "IdentityAdminRemoved",
      "type": "event"
    },
    {
      "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": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "PauserAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "PauserRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "WhitelistedAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "WhitelistedRemoved",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addIdentityAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addPauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "addrToDID",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "authenticationPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "dateAdded",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "dateAuthenticated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "didHashToAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isIdentityAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isPauser",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "scheme",
          "type": "address"
        }
      ],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeIdentityAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceIdentityAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renouncePauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "setAvatar",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "whitelistedContracts",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "whitelistedCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "setAuthenticationPeriod",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "authenticate",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addWhitelisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "did",
          "type": "string"
        }
      ],
      "name": "addWhitelistedWithDID",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeWhitelisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceWhitelisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "lastAuthenticated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addBlacklisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeBlacklisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addContract",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeContract",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isDAOContract",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isBlacklisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"BlacklistAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"BlacklistRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ContractAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ContractRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"IdentityAdminAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"IdentityAdminRemoved\",\"type\":\"event\"},{\"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\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"WhitelistedAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"WhitelistedRemoved\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addBlacklisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addContract\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addIdentityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addPauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addWhitelisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"did\",\"type\":\"string\"}],\"name\":\"addWhitelistedWithDID\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addrToDID\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"authenticate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"authenticationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"dateAdded\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"dateAuthenticated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"didHashToAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isBlacklisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isDAOContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isIdentityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isPauser\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"scheme\",\"type\":\"address\"}],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isWhitelisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"lastAuthenticated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeBlacklisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeContract\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeIdentityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeWhitelisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceIdentityAdmin\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renouncePauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceWhitelisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"name\":\"setAuthenticationPeriod\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"setAvatar\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"whitelistedContracts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"whitelistedCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"addIdentityAdmin(address)\":{\"details\":\"Adds a identity admin account. Is only callable by owner.\",\"params\":{\"account\":\"Address to be added\"},\"return\":\"true if successful\"},\"isIdentityAdmin(address)\":{\"details\":\"Checks if account is identity admin\",\"params\":{\"account\":\"Account to check\"},\"return\":\"Boolean indicating if account is identity admin\"},\"isOwner()\":{\"return\":\"true if `msg.sender` is the owner of the contract.\"},\"isRegistered()\":{\"details\":\"function to see if an avatar has been set and if this scheme is registered\",\"return\":\"true if scheme is registered\"},\"isRegistered(address)\":{\"details\":\"function to see if an avatar has been set and if this scheme is registered\",\"return\":\"true if scheme is registered\"},\"owner()\":{\"return\":\"the address of the owner.\"},\"pause()\":{\"details\":\"called by the owner to pause, triggers stopped state\"},\"paused()\":{\"return\":\"true if the contract is paused, false otherwise.\"},\"removeIdentityAdmin(address)\":{\"details\":\"Removes a identity admin account. Is only callable by owner.\",\"params\":{\"account\":\"Address to be removed\"},\"return\":\"true if successful\"},\"renounceIdentityAdmin()\":{\"details\":\"Allows an admin to renounce their role\"},\"renounceOwnership()\":{\"details\":\"Allows the current owner to relinquish control of the contract.\"},\"setAvatar(address)\":{\"details\":\"Function to set a new avatar and controller for scheme can only be done by owner of scheme\"},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}},\"unpause()\":{\"details\":\"called by the owner to unpause, returns to normal state\"}}},\"userdoc\":{\"methods\":{\"renounceOwnership()\":{\"notice\":\"Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore.\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol\":\"Identity\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol\":{\"keccak256\":\"0x32e1b2a172e2c22a6aa757bfcb0722cc67f64c5c2e48df3dec2737903516d565\",\"urls\":[\"bzz-raw://bee57a8eba08348e93a0c18f3ab534e67865c0fa27afe27f5cf234bd5f248915\",\"dweb:/ipfs/Qmd8aveHWcUkYWMyJrJRZPyVXj8MAMBfpBFo6g4Z2VJeo3\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol\":{\"keccak256\":\"0x282184478f1d618d3523b28a84a7f7003dfdc99cad120e5e358d2cce1f5fb491\",\"urls\":[\"bzz-raw://67e17ecb57b24c4fb801abc2c52c3148af3b967e28da4fb7e074d18efb7a57c1\",\"dweb:/ipfs/QmfZ8jXhdTHtxr3gfByRj4HnXnGynX7SLZWWGR8k768aGB\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol\":{\"keccak256\":\"0x8e82c45eefe0da77d017144dfad12602c68124297035937901cdd08ce48c57ff\",\"urls\":[\"bzz-raw://e20e606342b3b35f41a081294cf3f716fe7e27e81d3090daa37c5208f4ef4bc3\",\"dweb:/ipfs/QmVEhHpiwVsksnPyHkfNa5LpTBLxoP9kj5NRZUBv456ewK\"]},\"@daostack/arc/contracts/controller/Avatar.sol\":{\"keccak256\":\"0x4e4fb9d3bc21f42fbfc6a01e9f8aa483a59e9f447b0d604f55b587a81ec09ef4\",\"urls\":[\"bzz-raw://9d3c1c7575cf6075ea1d89921f09b9b8e322b208dacaf0446cd4f64506c999f0\",\"dweb:/ipfs/QmVGDDHAR2ByuQpbgV7BBKXGEAcbaWvejpEZYzHgaagBFK\"]},\"@daostack/arc/contracts/controller/ControllerInterface.sol\":{\"keccak256\":\"0x933e92612c90f292c7b59908958b003f1a13d90b97bed0572b566353c20974dc\",\"urls\":[\"bzz-raw://ce1fcf85b744fcce2dbd4205e3943e9b4ec36a5f0330d4bbf61e65f1a3e0e470\",\"dweb:/ipfs/QmUWiLkBDdekhpy93nTzBtxDHL6yNh6sTUM9G8VbsHcBzy\"]},\"@daostack/arc/contracts/controller/DAOToken.sol\":{\"keccak256\":\"0x9b213e4e3ceeffcfc1c962a43b70b8d763d8091a2dd713fc1989b97bb68786e6\",\"urls\":[\"bzz-raw://51d1d6e85fd90f45395a16b7a3c703c4636e836041f2a13f806e4222ef2e59c1\",\"dweb:/ipfs/QmQjeCeFf7TJzsYjT5scyZUDDixBA8Yy8YppgBuxcKPDnP\"]},\"@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol\":{\"keccak256\":\"0xc006c4591ec10b845a56e13f6791db2c428610953034686d52b2a934b6c8f36f\",\"urls\":[\"bzz-raw://19495cd88280e54d7ddcd043ffeff75e6d3777a0c42debcd61cae448e9497ea0\",\"dweb:/ipfs/QmYxWz7CgFmmddrcVXJKfob5Ktwykc2imNVUwLSR5WR8bJ\"]},\"@daostack/arc/contracts/libs/SafeERC20.sol\":{\"keccak256\":\"0xf6727d432f67046145b078f40c1cc4f6be7b0d12a6678ecaf457edf7550d244c\",\"urls\":[\"bzz-raw://5dba7734c4fed446c084a707761cbc66ba22b8b93ef53c8d4a22a76b6e271690\",\"dweb:/ipfs/QmP2VpPKUqLh4ZZs6LaxHVpCN1zCmiorygL9bMub4mbYCw\"]},\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzz-raw://8856852c8fe0ba1c9aab326f0a9a6e7f31a238de2778fa5188e6fc399f7eb352\",\"dweb:/ipfs/QmVH4ppR9Dk7v8yxaSgeArdMv9gBBVoQxEf4E3UsqQ4rY2\"]},\"openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzz-raw://4ca6617349a9b36fd82e9442a8e445ce9021a174e4399d1457ddc894ee3f5df3\",\"dweb:/ipfs/QmcmyB4cNazZ1sw963Afaijt67M9bDgwmGXCgQajGTD4tm\"]},\"openzeppelin-solidity/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0x6506133e295a7199df2ac5dfc52853d9d767f68450b6d0193e9d8056b164ce86\",\"urls\":[\"bzz-raw://9c03592a9e6b1377e401b74eccf175a250232b5a341347d3fc5cb50e9bc86ba2\",\"dweb:/ipfs/QmYAr1yXT89hNUMJ37aiBpD9HtYfBDqmueVCzphRuuU7oZ\"]},\"openzeppelin-solidity/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0x3b0ed31deeba7e3c6cfbbe8092a6b427084ee390800a06acdea5c17c8185d606\",\"urls\":[\"bzz-raw://bbdbf9d3754fcdcc85aec0432fabcec914317b1c2081b43753442ed53853a34a\",\"dweb:/ipfs/QmVHWQBn5xQkQEHhyGNEeS5gjjALZEk5ZfcjFt7kL6MoLy\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzz-raw://1eb493553b27efd46c231a836a83ce50d215639feb97b4aac9f301d0fd034ff5\",\"dweb:/ipfs/QmbMdvSXcqGKxeeYvzF3VrWpoHQyVzMXBhzhAokF2Gdymv\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzz-raw://f07a2c393caa85f62f0aaa461e3edd50aa59371d4209778ba0558d7f8b4b856c\",\"dweb:/ipfs/QmeN3ZiYGSjCnQFeYaJNgoXjF9eDue1g3e9pqManRkeBtV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzz-raw://f40c91ca270bdc9b156f339081a0fc2bbcf73cf5f62b8c73ba555df753ff6619\",\"dweb:/ipfs/QmT8y2VVjGaFdGphpcXrgvdPi2EgF9LuCDgJiJ89LvpFRV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0xa3e68fd7f987c8fbdaf4867d428a69a15f3cf2f69709a5b0a0fbef750b0e6fbc\",\"urls\":[\"bzz-raw://50b1ff986d3b2793850a66c8429d9886fdfb134b1509b3e98714e3e2a71e24f5\",\"dweb:/ipfs/QmSQBYPeY9tbR3ciGRNQqvcWKnNiuxtVMq2MsPWpLwuGGm\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzz-raw://ee762ff5b7746e41d27dcbcea00c7a3034b58adb1b45ddadddb5b721aff450df\",\"dweb:/ipfs/QmdxqtgEFZjHCoiYyz6pUAQ5iBm7As25jcyEbZoTaAgyDa\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x5c731061b804fa256fc8c05150eafe5d20b6bb94541a8f187912bf84f7033f34\",\"urls\":[\"bzz-raw://a3c2d9f046beebab7fb41b1b124a6a124a36f510f7c67365861402ac831bdc71\",\"dweb:/ipfs/QmUtASRgitregbKH83anopLtF9vFQe3BKeAjhUa6F7t9YV\"]}},\"version\":1}",
  "bytecode": "0x6080604052600380546001600160a01b031916905560006009819055600a55600e600b553480156200003057600080fd5b50600080546001600160a01b03191633178082556040516001600160a01b03919091169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36200008f336001600160e01b036200017916565b600280546001600160a01b0319166001600160a01b03838116919091179182905516156200015457600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200010657600080fd5b505afa1580156200011b573d6000803e3d6000fd5b505050506040513d60208110156200013257600080fd5b5051600380546001600160a01b0319166001600160a01b039092169190911790555b5062000169336001600160e01b03620001cb16565b6005805460ff19169055620002ac565b620001948160016200021d60201b620014d31790919060201c565b6040516001600160a01b038216907f3505858ac30c166c603cb64de4a970615e36a4ed8fea37ba93bc5f11a38dd30990600090a250565b620001e68160046200021d60201b620014d31790919060201c565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6001600160a01b0381166200023157600080fd5b6200024682826001600160e01b036200027616565b156200025157600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b0382166200028c57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b611a7780620002bc6000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80636ef8d66d11610130578063c3c5a547116100b8578063e5ecaf591161007c578063e5ecaf59146106d7578063f2fde38b146106fd578063f7d7f9cc14610723578063fe575a8714610749578063fff930d41461076f57610232565b8063c3c5a54714610637578063c6a276c21461065d578063c73cc4ae14610683578063d6cd9473146106a9578063e1e360ba146106b157610232565b80638da5cb5b116100ff5780638da5cb5b146105f15780638f32d59b146105f9578063b2a1de2214610601578063b30f7e7f14610609578063c375c2ef1461061157610232565b80636ef8d66d146105b3578063715018a6146105bb57806382dc1ec4146105c35780638456cb59146105e957610232565b80632bc298ac116101be57806346fbf68e1161018257806346fbf68e1461048b57806354f9f7a3146104b15780635c975abb1461054c5780635f539d691461055457806367c759371461057a57610232565b80632bc298ac146103f75780632ef1afc91461042f57806331b376e2146104555780633af32abf1461045d5780633f4ba83a1461048357610232565b8063188efc1611610205578063188efc16146102b35780631b027099146102d9578063223668441461038f578063291d9549146103ab5780632b32e46c146103d157610232565b8063086cfca81461023757806308e0d29d1461025f5780630f10a8b81461028557806310154bad1461028d575b600080fd5b61025d6004803603602081101561024d57600080fd5b50356001600160a01b031661078c565b005b61025d6004803603602081101561027557600080fd5b50356001600160a01b0316610847565b61025d610908565b61025d600480360360208110156102a357600080fd5b50356001600160a01b0316610913565b61025d600480360360208110156102c957600080fd5b50356001600160a01b03166109c4565b61025d600480360360408110156102ef57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561031a57600080fd5b82018360208201111561032c57600080fd5b8035906020019184600183028401116401000000008311171561034e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ab1945050505050565b610397610b64565b604080519115158252519081900360200190f35b61025d600480360360208110156103c157600080fd5b50356001600160a01b0316610b75565b610397600480360360208110156103e757600080fd5b50356001600160a01b0316610c23565b61041d6004803603602081101561040d57600080fd5b50356001600160a01b0316610c48565b60408051918252519081900360200190f35b61041d6004803603602081101561044557600080fd5b50356001600160a01b0316610c5a565b61041d610c6c565b6103976004803603602081101561047357600080fd5b50356001600160a01b0316610c72565b61025d610cd2565b610397600480360360208110156104a157600080fd5b50356001600160a01b0316610d32565b6104d7600480360360208110156104c757600080fd5b50356001600160a01b0316610d4b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156105115781810151838201526020016104f9565b50505050905090810190601f16801561053e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610397610de6565b61025d6004803603602081101561056a57600080fd5b50356001600160a01b0316610def565b6105976004803603602081101561059057600080fd5b5035610f3f565b604080516001600160a01b039092168252519081900360200190f35b61025d610f5a565b61025d610f63565b61025d600480360360208110156105d957600080fd5b50356001600160a01b0316610fbe565b61025d610fd9565b61059761103d565b61039761104c565b61041d61105d565b61041d611063565b61025d6004803603602081101561062757600080fd5b50356001600160a01b0316611069565b6103976004803603602081101561064d57600080fd5b50356001600160a01b031661115f565b61025d6004803603602081101561067357600080fd5b50356001600160a01b0316611243565b6103976004803603602081101561069957600080fd5b50356001600160a01b0316611330565b61025d611343565b61041d600480360360208110156106c757600080fd5b50356001600160a01b031661135c565b610397600480360360208110156106ed57600080fd5b50356001600160a01b0316611377565b61025d6004803603602081101561071357600080fd5b50356001600160a01b031661138a565b6103976004803603602081101561073957600080fd5b50356001600160a01b03166113a4565b6103976004803603602081101561075f57600080fd5b50356001600160a01b03166113c0565b61025d6004803603602081101561078557600080fd5b50356113d3565b61079461104c565b61079d57600080fd5b600280546001600160a01b0319166001600160a01b03838116919091179182905560408051638da5cb5b60e01b815290519290911691638da5cb5b91600480820192602092909190829003018186803b1580156107f957600080fd5b505afa15801561080d573d6000803e3d6000fd5b505050506040513d602081101561082357600080fd5b5051600380546001600160a01b0319166001600160a01b0390921691909117905550565b61084f610b64565b61088e576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61089733611377565b6108dc576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156108ec57600080fd5b6001600160a01b03166000908152600c60205260409020429055565b610911336113f9565b565b61091b610b64565b61095a576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61096333611377565b6109a8576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156109b857600080fd5b6109c181611441565b50565b6109cc610b64565b610a0b576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610a1433611377565b610a59576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610a6957600080fd5b610a7a60068263ffffffff6114d316565b6040516001600160a01b038216907f44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b87896790600090a250565b610ab9610b64565b610af8576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610b0133611377565b610b46576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610b5657600080fd5b610b60828261151f565b5050565b6000610b6f3061115f565b90505b90565b610b7d610b64565b610bbc576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610bc533611377565b610c0a576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610c1a57600080fd5b6109c1816115ed565b6000610c2d61104c565b610c3657600080fd5b610c3f8261176c565b5060015b919050565b600d6020526000908152604090205481565b600c6020526000908152604090205481565b600b5481565b6001600160a01b0381166000908152600c602052604081205481906201518090610ca390429063ffffffff6117b416565b81610caa57fe5b049050600b548111158015610ccb5750610ccb60078463ffffffff6117c916565b9392505050565b610cdb33610d32565b610ce457600080fd5b60055460ff16610cf357600080fd5b6005805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b6000610d4560048363ffffffff6117c916565b92915050565b600e6020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015610dde5780601f10610db357610100808354040283529160200191610dde565b820191906000526020600020905b815481529060010190602001808311610dc157829003601f168201915b505050505081565b60055460ff1690565b610df7610b64565b610e36576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610e3f33611377565b610e84576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610e9457600080fd5b610e9d816117fe565b610eee576040805162461bcd60e51b815260206004820152601f60248201527f476976656e2061646472657373206973206e6f74206120636f6e747261637400604482015290519081900360640190fd5b610eff60088263ffffffff6114d316565b610f0881611441565b6040516001600160a01b038216907f89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e20590600090a250565b600f602052600090815260409020546001600160a01b031681565b61091133611804565b610f6b61104c565b610f7457600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610fc733610d32565b610fd057600080fd5b6109c18161184c565b610fe233610d32565b610feb57600080fd5b60055460ff1615610ffb57600080fd5b6005805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60095481565b600a5481565b611071610b64565b6110b0576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b6110b933611377565b6110fe576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff161561110e57600080fd5b61111f60088263ffffffff61189416565b611128816115ed565b6040516001600160a01b038216907f8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b56590600090a250565b6002546000906001600160a01b03166111b3576040805162461bcd60e51b8152602060048201526011602482015270105d985d185c881a5cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b60035460025460408051639be2faed60e01b81526001600160a01b038681166004830152928316602482015290519190921691639be2faed916044808301926020929190829003018186803b15801561120b57600080fd5b505afa15801561121f573d6000803e3d6000fd5b505050506040513d602081101561123557600080fd5b5051610c3f57506000610c43565b61124b610b64565b61128a576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61129333611377565b6112d8576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156112e857600080fd5b6112f960068263ffffffff61189416565b6040516001600160a01b038216907f1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde890600090a250565b6000610d4560088363ffffffff6117c916565b60055460ff161561135357600080fd5b610911336115ed565b6001600160a01b03166000908152600c602052604090205490565b6000610d4560018363ffffffff6117c916565b61139261104c565b61139b57600080fd5b6109c1816118dc565b60006113ae61104c565b6113b757600080fd5b610c3f826113f9565b6000610d4560068363ffffffff6117c916565b6113db61104c565b6113e457600080fd5b60055460ff16156113f457600080fd5b600b55565b61140a60018263ffffffff61189416565b6040516001600160a01b038216907f869f6a5b4767d57c58d57f1ddf82e1516487f35944a19bf30a4a21bd35f6ad0590600090a250565b61145260078263ffffffff6114d316565b6009805460010190556001600160a01b0381166000908152600d602090815260408083204290819055600c9092529091205561148d816117fe565b1561149c57600a805460010190555b6040516001600160a01b038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b6001600160a01b0381166114e657600080fd5b6114f082826117c9565b156114fa57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b80516020808301919091206000818152600f9092526040909120546001600160a01b03161561158e576040805162461bcd60e51b815260206004820152601660248201527511125108185b1c9958591e481c9959da5cdd195c995960521b604482015290519081900360640190fd5b6001600160a01b0383166000908152600e6020908152604090912083516115b79285019061194a565b506000818152600f6020526040902080546001600160a01b0319166001600160a01b0385161790556115e883611441565b505050565b6115fe60078263ffffffff61189416565b600980546000190190556001600160a01b0381166000908152600c602052604081205561162a816117fe565b1561163a57600a80546000190190555b6001600160a01b0381166000908152600e602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156116d95780601f106116ae576101008083540402835291602001916116d9565b820191906000526020600020905b8154815290600101906020018083116116bc57829003601f168201915b505083516020808601919091206001600160a01b0388166000908152600c83526040808220829055600e9093529182209596509461171b9450925090506119c8565b6000818152600f602052604080822080546001600160a01b0319169055516001600160a01b038516917f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b691a2505050565b61177d60018263ffffffff6114d316565b6040516001600160a01b038216907f3505858ac30c166c603cb64de4a970615e36a4ed8fea37ba93bc5f11a38dd30990600090a250565b6000828211156117c357600080fd5b50900390565b60006001600160a01b0382166117de57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b3b151590565b61181560048263ffffffff61189416565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b61185d60048263ffffffff6114d316565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6001600160a01b0381166118a757600080fd5b6118b182826117c9565b6118ba57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b0381166118ef57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061198b57805160ff19168380011785556119b8565b828001600101855582156119b8579182015b828111156119b857825182559160200191906001019061199d565b506119c4929150611a08565b5090565b50805460018160011615610100020316600290046000825580601f106119ee57506109c1565b601f0160209004906000526020600020908101906109c191905b610b7291905b808211156119c45760008155600101611a0e56fe536368656d65206973206e6f7420726567697374657265640000000000000000a265627a7a72315820b9ee462a304f3e230d9f0f2ef9572afa917d30c3fc673b5b3dfcec4898572fd064736f6c63430005100032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102325760003560e01c80636ef8d66d11610130578063c3c5a547116100b8578063e5ecaf591161007c578063e5ecaf59146106d7578063f2fde38b146106fd578063f7d7f9cc14610723578063fe575a8714610749578063fff930d41461076f57610232565b8063c3c5a54714610637578063c6a276c21461065d578063c73cc4ae14610683578063d6cd9473146106a9578063e1e360ba146106b157610232565b80638da5cb5b116100ff5780638da5cb5b146105f15780638f32d59b146105f9578063b2a1de2214610601578063b30f7e7f14610609578063c375c2ef1461061157610232565b80636ef8d66d146105b3578063715018a6146105bb57806382dc1ec4146105c35780638456cb59146105e957610232565b80632bc298ac116101be57806346fbf68e1161018257806346fbf68e1461048b57806354f9f7a3146104b15780635c975abb1461054c5780635f539d691461055457806367c759371461057a57610232565b80632bc298ac146103f75780632ef1afc91461042f57806331b376e2146104555780633af32abf1461045d5780633f4ba83a1461048357610232565b8063188efc1611610205578063188efc16146102b35780631b027099146102d9578063223668441461038f578063291d9549146103ab5780632b32e46c146103d157610232565b8063086cfca81461023757806308e0d29d1461025f5780630f10a8b81461028557806310154bad1461028d575b600080fd5b61025d6004803603602081101561024d57600080fd5b50356001600160a01b031661078c565b005b61025d6004803603602081101561027557600080fd5b50356001600160a01b0316610847565b61025d610908565b61025d600480360360208110156102a357600080fd5b50356001600160a01b0316610913565b61025d600480360360208110156102c957600080fd5b50356001600160a01b03166109c4565b61025d600480360360408110156102ef57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561031a57600080fd5b82018360208201111561032c57600080fd5b8035906020019184600183028401116401000000008311171561034e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ab1945050505050565b610397610b64565b604080519115158252519081900360200190f35b61025d600480360360208110156103c157600080fd5b50356001600160a01b0316610b75565b610397600480360360208110156103e757600080fd5b50356001600160a01b0316610c23565b61041d6004803603602081101561040d57600080fd5b50356001600160a01b0316610c48565b60408051918252519081900360200190f35b61041d6004803603602081101561044557600080fd5b50356001600160a01b0316610c5a565b61041d610c6c565b6103976004803603602081101561047357600080fd5b50356001600160a01b0316610c72565b61025d610cd2565b610397600480360360208110156104a157600080fd5b50356001600160a01b0316610d32565b6104d7600480360360208110156104c757600080fd5b50356001600160a01b0316610d4b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156105115781810151838201526020016104f9565b50505050905090810190601f16801561053e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610397610de6565b61025d6004803603602081101561056a57600080fd5b50356001600160a01b0316610def565b6105976004803603602081101561059057600080fd5b5035610f3f565b604080516001600160a01b039092168252519081900360200190f35b61025d610f5a565b61025d610f63565b61025d600480360360208110156105d957600080fd5b50356001600160a01b0316610fbe565b61025d610fd9565b61059761103d565b61039761104c565b61041d61105d565b61041d611063565b61025d6004803603602081101561062757600080fd5b50356001600160a01b0316611069565b6103976004803603602081101561064d57600080fd5b50356001600160a01b031661115f565b61025d6004803603602081101561067357600080fd5b50356001600160a01b0316611243565b6103976004803603602081101561069957600080fd5b50356001600160a01b0316611330565b61025d611343565b61041d600480360360208110156106c757600080fd5b50356001600160a01b031661135c565b610397600480360360208110156106ed57600080fd5b50356001600160a01b0316611377565b61025d6004803603602081101561071357600080fd5b50356001600160a01b031661138a565b6103976004803603602081101561073957600080fd5b50356001600160a01b03166113a4565b6103976004803603602081101561075f57600080fd5b50356001600160a01b03166113c0565b61025d6004803603602081101561078557600080fd5b50356113d3565b61079461104c565b61079d57600080fd5b600280546001600160a01b0319166001600160a01b03838116919091179182905560408051638da5cb5b60e01b815290519290911691638da5cb5b91600480820192602092909190829003018186803b1580156107f957600080fd5b505afa15801561080d573d6000803e3d6000fd5b505050506040513d602081101561082357600080fd5b5051600380546001600160a01b0319166001600160a01b0390921691909117905550565b61084f610b64565b61088e576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61089733611377565b6108dc576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156108ec57600080fd5b6001600160a01b03166000908152600c60205260409020429055565b610911336113f9565b565b61091b610b64565b61095a576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61096333611377565b6109a8576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156109b857600080fd5b6109c181611441565b50565b6109cc610b64565b610a0b576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610a1433611377565b610a59576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610a6957600080fd5b610a7a60068263ffffffff6114d316565b6040516001600160a01b038216907f44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b87896790600090a250565b610ab9610b64565b610af8576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610b0133611377565b610b46576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610b5657600080fd5b610b60828261151f565b5050565b6000610b6f3061115f565b90505b90565b610b7d610b64565b610bbc576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610bc533611377565b610c0a576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610c1a57600080fd5b6109c1816115ed565b6000610c2d61104c565b610c3657600080fd5b610c3f8261176c565b5060015b919050565b600d6020526000908152604090205481565b600c6020526000908152604090205481565b600b5481565b6001600160a01b0381166000908152600c602052604081205481906201518090610ca390429063ffffffff6117b416565b81610caa57fe5b049050600b548111158015610ccb5750610ccb60078463ffffffff6117c916565b9392505050565b610cdb33610d32565b610ce457600080fd5b60055460ff16610cf357600080fd5b6005805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b6000610d4560048363ffffffff6117c916565b92915050565b600e6020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015610dde5780601f10610db357610100808354040283529160200191610dde565b820191906000526020600020905b815481529060010190602001808311610dc157829003601f168201915b505050505081565b60055460ff1690565b610df7610b64565b610e36576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610e3f33611377565b610e84576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610e9457600080fd5b610e9d816117fe565b610eee576040805162461bcd60e51b815260206004820152601f60248201527f476976656e2061646472657373206973206e6f74206120636f6e747261637400604482015290519081900360640190fd5b610eff60088263ffffffff6114d316565b610f0881611441565b6040516001600160a01b038216907f89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e20590600090a250565b600f602052600090815260409020546001600160a01b031681565b61091133611804565b610f6b61104c565b610f7457600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610fc733610d32565b610fd057600080fd5b6109c18161184c565b610fe233610d32565b610feb57600080fd5b60055460ff1615610ffb57600080fd5b6005805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60095481565b600a5481565b611071610b64565b6110b0576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b6110b933611377565b6110fe576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff161561110e57600080fd5b61111f60088263ffffffff61189416565b611128816115ed565b6040516001600160a01b038216907f8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b56590600090a250565b6002546000906001600160a01b03166111b3576040805162461bcd60e51b8152602060048201526011602482015270105d985d185c881a5cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b60035460025460408051639be2faed60e01b81526001600160a01b038681166004830152928316602482015290519190921691639be2faed916044808301926020929190829003018186803b15801561120b57600080fd5b505afa15801561121f573d6000803e3d6000fd5b505050506040513d602081101561123557600080fd5b5051610c3f57506000610c43565b61124b610b64565b61128a576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61129333611377565b6112d8576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156112e857600080fd5b6112f960068263ffffffff61189416565b6040516001600160a01b038216907f1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde890600090a250565b6000610d4560088363ffffffff6117c916565b60055460ff161561135357600080fd5b610911336115ed565b6001600160a01b03166000908152600c602052604090205490565b6000610d4560018363ffffffff6117c916565b61139261104c565b61139b57600080fd5b6109c1816118dc565b60006113ae61104c565b6113b757600080fd5b610c3f826113f9565b6000610d4560068363ffffffff6117c916565b6113db61104c565b6113e457600080fd5b60055460ff16156113f457600080fd5b600b55565b61140a60018263ffffffff61189416565b6040516001600160a01b038216907f869f6a5b4767d57c58d57f1ddf82e1516487f35944a19bf30a4a21bd35f6ad0590600090a250565b61145260078263ffffffff6114d316565b6009805460010190556001600160a01b0381166000908152600d602090815260408083204290819055600c9092529091205561148d816117fe565b1561149c57600a805460010190555b6040516001600160a01b038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b6001600160a01b0381166114e657600080fd5b6114f082826117c9565b156114fa57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b80516020808301919091206000818152600f9092526040909120546001600160a01b03161561158e576040805162461bcd60e51b815260206004820152601660248201527511125108185b1c9958591e481c9959da5cdd195c995960521b604482015290519081900360640190fd5b6001600160a01b0383166000908152600e6020908152604090912083516115b79285019061194a565b506000818152600f6020526040902080546001600160a01b0319166001600160a01b0385161790556115e883611441565b505050565b6115fe60078263ffffffff61189416565b600980546000190190556001600160a01b0381166000908152600c602052604081205561162a816117fe565b1561163a57600a80546000190190555b6001600160a01b0381166000908152600e602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156116d95780601f106116ae576101008083540402835291602001916116d9565b820191906000526020600020905b8154815290600101906020018083116116bc57829003601f168201915b505083516020808601919091206001600160a01b0388166000908152600c83526040808220829055600e9093529182209596509461171b9450925090506119c8565b6000818152600f602052604080822080546001600160a01b0319169055516001600160a01b038516917f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b691a2505050565b61177d60018263ffffffff6114d316565b6040516001600160a01b038216907f3505858ac30c166c603cb64de4a970615e36a4ed8fea37ba93bc5f11a38dd30990600090a250565b6000828211156117c357600080fd5b50900390565b60006001600160a01b0382166117de57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b3b151590565b61181560048263ffffffff61189416565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b61185d60048263ffffffff6114d316565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6001600160a01b0381166118a757600080fd5b6118b182826117c9565b6118ba57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b0381166118ef57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061198b57805160ff19168380011785556119b8565b828001600101855582156119b8579182015b828111156119b857825182559160200191906001019061199d565b506119c4929150611a08565b5090565b50805460018160011615610100020316600290046000825580601f106119ee57506109c1565b601f0160209004906000526020600020908101906109c191905b610b7291905b808211156119c45760008155600101611a0e56fe536368656d65206973206e6f7420726567697374657265640000000000000000a265627a7a72315820b9ee462a304f3e230d9f0f2ef9572afa917d30c3fc673b5b3dfcec4898572fd064736f6c63430005100032",
  "sourceMap": "456:8778:26:-;;;443:64:22;;;-1:-1:-1;;;;;;443:64:22;;;505:1;692:35:26;;;;733:39;;816:2;778:40;;1358:46;5:2:-1;;;;30:1;27;20:12;5:2;-1:-1;1398:1:26;515:19:72;;-1:-1:-1;;;;;;515:19:72;524:10;515:19;;;;549:40;;-1:-1:-1;;;;;582:6:72;;;;;1398:1:26;;549:40:72;;1398:1:26;;549:40:72;548:29:27;566:10;-1:-1:-1;;;;;548:17:27;:29;:::i;:::-;688:6:22;:16;;-1:-1:-1;;;;;;688:16:22;-1:-1:-1;;;;;688:16:22;;;;;;;;;;;719:6;:19;715:98;;787:6;;;;;;;;;-1:-1:-1;;;;;787:6:22;-1:-1:-1;;;;;787:12:22;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;787:14:22;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;787:14:22;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;787:14:22;754:10;:48;;-1:-1:-1;;;;;;754:48:22;-1:-1:-1;;;;;754:48:22;;;;;;;;;715:98;-1:-1:-1;275:22:67;286:10;-1:-1:-1;;;;;275:10:67;:22;:::i;:::-;352:7:69;:15;;-1:-1:-1;;352:15:69;;;456:8778:26;;1970:142:27;2034:27;2053:7;2034:14;:18;;;;;;:27;;;;:::i;:::-;2077;;-1:-1:-1;;;;;2077:27:27;;;;;;;;1970:142;:::o;685:119:67:-;741:21;754:7;741:8;:12;;;;;;:21;;;;:::i;:::-;777:20;;-1:-1:-1;;;;;777:20:67;;;;;;;;685:119;:::o;259:181:65:-;-1:-1:-1;;;;;335:21:65;;327:30;;;;;;376:18;380:4;386:7;-1:-1:-1;;;;;376:3:65;:18;:::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:65;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:65;429:4;406:27;;;259:181::o;786:162::-;858:4;-1:-1:-1;;;;;882:21:65;;874:30;;;;;;-1:-1:-1;;;;;;921:20:65;:11;:20;;;;;;;;;;;;;;;786:162::o;456:8778:26:-;;;;;;;",
  "deployedSourceMap": "456:8778:26:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;456:8778:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1698:143:22;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1698:143:22;-1:-1:-1;;;;;1698:143:22;;:::i;:::-;;1913:178:26;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1913:178:26;-1:-1:-1;;;;;1913:178:26;;:::i;1796:91:27:-;;;:::i;2255:172:26:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2255:172:26;-1:-1:-1;;;;;2255:172:26;;:::i;5366:208::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5366:208:26;-1:-1:-1;;;;;5366:208:26;;:::i;2591:210::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;2591:210:26;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;2591:210:26;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2591:210:26;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2591:210:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2591:210:26;;-1:-1:-1;2591:210:26;;-1:-1:-1;;;;;2591:210:26:i;1987:102:22:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;2971:178:26;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2971:178:26;-1:-1:-1;;;;;2971:178:26;;:::i;1248:142:27:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1248:142:27;-1:-1:-1;;;;;1248:142:27;;:::i;883:44:26:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;883:44:26;-1:-1:-1;;;;;883:44:26;;:::i;:::-;;;;;;;;;;;;;;;;825:52;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;825:52:26;-1:-1:-1;;;;;825:52:26;;:::i;778:40::-;;;:::i;3520:268::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3520:268:26;-1:-1:-1;;;;;3520:268:26;;:::i;1176:115:69:-;;;:::i;395:107:67:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;395:107:67;-1:-1:-1;;;;;395:107:67;;:::i;934:43:26:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;934:43:26;-1:-1:-1;;;;;934:43:26;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;934:43:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;460:76:69;;;:::i;6074:312:26:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6074:312:26;-1:-1:-1;;;;;6074:312:26;;:::i;983:51::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;983:51:26;;:::i;:::-;;;;-1:-1:-1;;;;;983:51:26;;;;;;;;;;;;;;604:75:67;;;:::i;1347:137:72:-;;;:::i;508:90:67:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;508:90:67;-1:-1:-1;;;;;508:90:67;;:::i;973:113:69:-;;;:::i;659:77:72:-;;;:::i;979:90::-;;;:::i;692:35:26:-;;;:::i;733:39::-;;;:::i;6506:250::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6506:250:26;-1:-1:-1;;;;;6506:250:26;;:::i;2235:262:22:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2235:262:22;-1:-1:-1;;;;;2235:262:22;;:::i;5743:216:26:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5743:216:26;-1:-1:-1;;;;;5743:216:26;;:::i;6942:113::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6942:113:26;-1:-1:-1;;;;;6942:113:26;;:::i;3217:99::-;;;:::i;3957:124::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3957:124:26;-1:-1:-1;;;;;3957:124:26;;:::i;951:122:27:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;951:122:27;-1:-1:-1;;;;;951:122:27;;:::i;1655:107:72:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1655:107:72;-1:-1:-1;;;;;1655:107:72;;:::i;1570:148:27:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1570:148:27;-1:-1:-1;;;;;1570:148:27;;:::i;8809:113:26:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8809:113:26;-1:-1:-1;;;;;8809:113:26;;:::i;1583:126::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1583:126:26;;:::i;1698:143:22:-;863:9:72;:7;:9::i;:::-;855:18;;;;;;1760:6:22;:16;;-1:-1:-1;;;;;;1760:16:22;-1:-1:-1;;;;;1760:16:22;;;;;;;;;;;1819:14;;;-1:-1:-1;;;1819:14:22;;;;:6;;;;;:12;;:14;;;;;;;;;;;;;;;:6;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;1819:14:22;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1819:14:22;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1819:14:22;1786:10;:48;;-1:-1:-1;;;;;;1786:48:22;-1:-1:-1;;;;;1786:48:22;;;;;;;;;-1:-1:-1;1698:143:22:o;1913:178:26:-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;-1:-1:-1;;;;;2052:26:26;;;;;:17;:26;;;;;2081:3;2052:32;;1913:178::o;1796:91:27:-;1847:32;1868:10;1847:20;:32::i;:::-;1796:91::o;2255:172:26:-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;2396:24:26;2412:7;2396:15;:24::i;:::-;2255:172;:::o;5366:208::-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;5507:22:26;:9;5521:7;5507:22;:13;:22;:::i;:::-;5544:23;;-1:-1:-1;;;;;5544:23:26;;;;;;;;5366:208;:::o;2591:210::-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;2758:36:26;2781:7;2790:3;2758:22;:36::i;:::-;2591:210;;:::o;1987:102:22:-;2032:4;2055:27;2076:4;2055:12;:27::i;:::-;2048:34;;1987:102;;:::o;2971:178:26:-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;3115:27:26;3134:7;3115:18;:27::i;1248:142:27:-;1317:4;863:9:72;:7;:9::i;:::-;855:18;;;;;;1334:26:27;1352:7;1334:17;:26::i;:::-;-1:-1:-1;1378:4:27;883:1:72;1248:142:27;;;:::o;883:44:26:-;;;;;;;;;;;;;:::o;825:52::-;;;;;;;;;;;;;:::o;778:40::-;;;;:::o;3520:268::-;-1:-1:-1;;;;;3640:26:26;;3581:4;3640:26;;;:17;:26;;;;;;3581:4;;3671:6;;3632:35;;:3;;:35;:7;:35;:::i;:::-;3631:46;;;;;;3597:80;;3734:20;;3707:23;:47;;3706:75;;;;-1:-1:-1;3759:22:26;:9;3773:7;3759:22;:13;:22;:::i;:::-;3687:94;3520:268;-1:-1:-1;;;3520:268:26:o;1176:115:69:-;350:20:67;359:10;350:8;:20::i;:::-;342:29;;;;;;860:7:69;;;;852:16;;;;;;1234:7;:15;;-1:-1:-1;;1234:15:69;;;1264:20;;;1273:10;1264:20;;;;;;;;;;;;;1176:115::o;395:107:67:-;451:4;474:21;:8;487:7;474:21;:12;:21;:::i;:::-;467:28;395:107;-1:-1:-1;;395:107:67:o;934:43:26:-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;934:43:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;460:76:69:-;522:7;;;;460:76;:::o;6074:312:26:-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;6220:19:26;6231:7;6220:10;:19::i;:::-;6212:63;;;;;-1:-1:-1;;;6212:63:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;6285:22;:9;6299:7;6285:22;:13;:22;:::i;:::-;6317:24;6333:7;6317:15;:24::i;:::-;6357:22;;-1:-1:-1;;;;;6357:22:26;;;;;;;;6074:312;:::o;983:51::-;;;;;;;;;;;;-1:-1:-1;;;;;983:51:26;;:::o;604:75:67:-;647:25;661:10;647:13;:25::i;1347:137:72:-;863:9;:7;:9::i;:::-;855:18;;;;;;1445:1;1429:6;;1408:40;;-1:-1:-1;;;;;1429:6:72;;;;1408:40;;1445:1;;1408:40;1475:1;1458:19;;-1:-1:-1;;;;;;1458:19:72;;;1347:137::o;508:90:67:-;350:20;359:10;350:8;:20::i;:::-;342:29;;;;;;572:19;583:7;572:10;:19::i;973:113:69:-;350:20:67;359:10;350:8;:20::i;:::-;342:29;;;;;;689:7:69;;;;688:8;680:17;;;;;;1032:7;:14;;-1:-1:-1;;1032:14:69;1042:4;1032:14;;;1061:18;;;1068:10;1061:18;;;;;;;;;;;;;973:113::o;659:77:72:-;697:7;723:6;-1:-1:-1;;;;;723:6:72;659:77;:::o;979:90::-;1019:4;1056:6;-1:-1:-1;;;;;1056:6:72;1042:10;:20;;979:90::o;692:35:26:-;;;;:::o;733:39::-;;;;:::o;6506:250::-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;6647:25:26;:9;6664:7;6647:25;:16;:25;:::i;:::-;6682:27;6701:7;6682:18;:27::i;:::-;6725:24;;-1:-1:-1;;;;;6725:24:26;;;;;;;;6506:250;:::o;2235:262:22:-;2318:6;;2294:4;;-1:-1:-1;;;;;2318:6:22;2310:49;;;;;-1:-1:-1;;;2310:49:22;;;;;;;;;;;;-1:-1:-1;;;2310:49:22;;;;;;;;;;;;;;;2376:10;;2422:6;;2376:54;;;-1:-1:-1;;;2376:54:22;;-1:-1:-1;;;;;2376:54:22;;;;;;;2422:6;;;2376:54;;;;;;:10;;;;;:29;;:54;;;;;;;;;;;;;;:10;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;2376:54:22;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2376:54:22;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2376:54:22;2370:100;;-1:-1:-1;2454:5:22;2447:12;;5743:216:26;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;5887:25:26;:9;5904:7;5887:25;:16;:25;:::i;:::-;5927;;-1:-1:-1;;;;;5927:25:26;;;;;;;;5743:216;:::o;6942:113::-;7003:4;7026:22;:9;7040:7;7026:22;:13;:22;:::i;3217:99::-;689:7:69;;;;688:8;680:17;;;;;;3279:30:26;3298:10;3279:18;:30::i;3957:124::-;-1:-1:-1;;;;;4048:26:26;4022:7;4048:26;;;:17;:26;;;;;;;3957:124::o;951:122:27:-;1014:4;1038:27;:14;1057:7;1038:27;:18;:27;:::i;1655:107:72:-;863:9;:7;:9::i;:::-;855:18;;;;;;1727:28;1746:8;1727:18;:28::i;1570:148:27:-;1642:4;863:9:72;:7;:9::i;:::-;855:18;;;;;;1659:29:27;1680:7;1659:20;:29::i;8809:113:26:-;8870:4;8893:22;:9;8907:7;8893:22;:13;:22;:::i;1583:126::-;863:9:72;:7;:9::i;:::-;855:18;;;;;;689:7:69;;;;688:8;680:17;;;;;;1673:20:26;:29;1583:126::o;2198:150:27:-;2265:30;:14;2287:7;2265:30;:21;:30;:::i;:::-;2311:29;;-1:-1:-1;;;;;2311:29:27;;;;;;;;2198:150;:::o;7162:324:26:-;7223:22;:9;7237:7;7223:22;:13;:22;:::i;:::-;7256:16;:21;;7276:1;7256:21;;;-1:-1:-1;;;;;7287:18:26;;7256:16;7287:18;;;:9;:18;;;;;;;;7308:3;7287:24;;;;7321:17;:26;;;;;;:32;7368:19;7297:7;7368:10;:19::i;:::-;7364:75;;;7403:20;:25;;7427:1;7403:25;;;7364:75;7454:25;;-1:-1:-1;;;;;7454:25:26;;;;;;;;7162:324;:::o;259:181:65:-;-1:-1:-1;;;;;335:21:65;;327:30;;;;;;376:18;380:4;386:7;376:3;:18::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:65;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:65;429:4;406:27;;;259:181::o;7645:326:26:-;7748:21;;;;;;;;;;7732:13;7787:23;;;:16;:23;;;;;;;;-1:-1:-1;;;;;7787:23:26;:37;7779:72;;;;;-1:-1:-1;;;7779:72:26;;;;;;;;;;;;-1:-1:-1;;;7779:72:26;;;;;;;;;;;;;;;-1:-1:-1;;;;;7862:18:26;;;;;;:9;:18;;;;;;;;:24;;;;;;;;:::i;:::-;-1:-1:-1;7896:23:26;;;;:16;:23;;;;;:33;;-1:-1:-1;;;;;;7896:33:26;-1:-1:-1;;;;;7896:33:26;;;;;7940:24;7896:33;7940:15;:24::i;:::-;7645:326;;;:::o;8083:514::-;8147:25;:9;8164:7;8147:25;:16;:25;:::i;:::-;8183:16;:21;;-1:-1:-1;;8183:21:26;;;-1:-1:-1;;;;;8221:26:26;;8183:16;8221:26;;;:17;:26;;;;;8214:33;8262:19;8239:7;8262:10;:19::i;:::-;8258:75;;;8297:20;:25;;-1:-1:-1;;8297:25:26;;;8258:75;-1:-1:-1;;;;;8363:18:26;;;;;;:9;:18;;;;;;;;;8343:38;;;;;;-1:-1:-1;;8343:38:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;;:38;;;8363:18;8343:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8407:21:26;;;;;;;;;;-1:-1:-1;;;;;8446:26:26;;8391:13;8446:26;;;:17;:26;;;;;;8439:33;;;8489:9;:18;;;;;;8343:38;;-1:-1:-1;8407:21:26;8482:25;;-1:-1:-1;8489:18:26;-1:-1:-1;8391:13:26;-1:-1:-1;8482:25:26;:::i;:::-;8524:23;;;;:16;:23;;;;;;8517:30;;-1:-1:-1;;;;;;8517:30:26;;;8563:27;-1:-1:-1;;;;;8563:27:26;;;;;;8083:514;;;:::o;1970:142:27:-;2034:27;:14;2053:7;2034:27;:18;:27;:::i;:::-;2077;;-1:-1:-1;;;;;2077:27:27;;;;;;;;1970:142;:::o;1205:145:71:-;1263:7;1295:1;1290;:6;;1282:15;;;;;;-1:-1:-1;1319:5:71;;;1205:145::o;786:162:65:-;858:4;-1:-1:-1;;;;;882:21:65;;874:30;;;;;;-1:-1:-1;;;;;;921:20:65;:11;:20;;;;;;;;;;;;;;;786:162::o;9040:192:26:-;9171:18;9215:10;;;9040:192::o;810:127:67:-;869:24;:8;885:7;869:24;:15;:24;:::i;:::-;908:22;;-1:-1:-1;;;;;908:22:67;;;;;;;;810:127;:::o;685:119::-;741:21;:8;754:7;741:21;:12;:21;:::i;:::-;777:20;;-1:-1:-1;;;;;777:20:67;;;;;;;;685:119;:::o;514:184:65:-;-1:-1:-1;;;;;593:21:65;;585:30;;;;;;633:18;637:4;643:7;633:3;:18::i;:::-;625:27;;;;;;-1:-1:-1;;;;;663:20:65;686:5;663:20;;;;;;;;;;;:28;;-1:-1:-1;;663:28:65;;;514:184::o;1906:183:72:-;-1:-1:-1;;;;;1979:22:72;;1971:31;;;;;;2038:6;;;2017:38;;-1:-1:-1;;;;;2017:38:72;;;;2038:6;;;2017:38;;;2065:6;:17;;-1:-1:-1;;;;;;2065:17:72;-1:-1:-1;;;;;2065:17:72;;;;;;;;;;1906:183::o;456:8778:26:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;456:8778:26;;;-1:-1:-1;456:8778:26;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity >0.5.4;\n\nimport \"openzeppelin-solidity/contracts/access/Roles.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/lifecycle/Pausable.sol\";\n\nimport \"@daostack/arc/contracts/controller/Avatar.sol\";\n\nimport \"../dao/schemes/SchemeGuard.sol\";\nimport \"./IdentityAdminRole.sol\";\n\n/* @title Identity contract responsible for whitelisting\n * and keeping track of amount of whitelisted users\n */\ncontract Identity is IdentityAdminRole, SchemeGuard, Pausable {\n    using Roles for Roles.Role;\n    using SafeMath for uint256;\n\n    Roles.Role private blacklist;\n    Roles.Role private whitelist;\n    Roles.Role private contracts;\n\n    uint256 public whitelistedCount = 0;\n    uint256 public whitelistedContracts = 0;\n    uint256 public authenticationPeriod = 14;\n\n    mapping(address => uint256) public dateAuthenticated;\n    mapping(address => uint256) public dateAdded;\n\n    mapping(address => string) public addrToDID;\n    mapping(bytes32 => address) public didHashToAddress;\n\n    event BlacklistAdded(address indexed account);\n    event BlacklistRemoved(address indexed account);\n\n    event WhitelistedAdded(address indexed account);\n    event WhitelistedRemoved(address indexed account);\n\n    event ContractAdded(address indexed account);\n    event ContractRemoved(address indexed account);\n\n    constructor() public SchemeGuard(Avatar(0)) {}\n\n    /* @dev Sets a new value for authenticationPeriod.\n     * Can only be called by Identity Administrators.\n     * @param period new value for authenticationPeriod\n     */\n    function setAuthenticationPeriod(uint256 period) public onlyOwner whenNotPaused {\n        authenticationPeriod = period;\n    }\n\n    /* @dev Sets the authentication date of `account`\n     * to the current time.\n     * Can only be called by Identity Administrators.\n     * @param account address to change its auth date\n     */\n    function authenticate(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        dateAuthenticated[account] = now;\n    }\n\n    /* @dev Adds an address as whitelisted.\n     * Can only be called by Identity Administrators.\n     * @param account address to add as whitelisted\n     */\n    function addWhitelisted(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        _addWhitelisted(account);\n    }\n\n    /* @dev Adds an address as whitelisted under a specific ID\n     * @param account The address to add\n     * @param did the ID to add account under\n     */\n    function addWhitelistedWithDID(address account, string memory did)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        _addWhitelistedWithDID(account, did);\n    }\n\n    /* @dev Removes an address as whitelisted.\n     * Can only be called by Identity Administrators.\n     * @param account address to remove as whitelisted\n     */\n    function removeWhitelisted(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        _removeWhitelisted(account);\n    }\n\n    /* @dev Renounces message sender from whitelisted\n     */\n    function renounceWhitelisted() public whenNotPaused {\n        _removeWhitelisted(msg.sender);\n    }\n\n    /* @dev Returns true if given address has been added to whitelist\n     * @param account the address to check\n     * @return a bool indicating weather the address is present in whitelist\n     */\n    function isWhitelisted(address account) public view returns (bool) {\n        uint256 daysSinceAuthentication = (now.sub(dateAuthenticated[account])) / 1 days;\n        return\n            (daysSinceAuthentication <= authenticationPeriod) && whitelist.has(account);\n    }\n\n    /* @dev Function that gives the date the given user was added\n     * @param account The address to check\n     * @return The date the address was added\n     */\n    function lastAuthenticated(address account) public view returns (uint256) {\n        return dateAuthenticated[account];\n    }\n\n    // /**\n    //  *\n    //  * @dev Function to transfer whitelisted privilege to another address\n    //  * relocates did of sender to give address\n    //  * @param account The address to transfer to\n    //  */\n    // function transferAccount(address account) public whenNotPaused {\n    //     ERC20 token = avatar.nativeToken();\n    //     require(!isBlacklisted(account), \"Cannot transfer to blacklisted\");\n    //     require(token.balanceOf(account) == 0, \"Account is already in use\");\n    //     require(isWhitelisted(msg.sender), \"Requester need to be whitelisted\");\n\n    //     require(\n    //         keccak256(bytes(addrToDID[account])) == keccak256(bytes(\"\")),\n    //         \"address already has DID\"\n    //     );\n\n    //     string memory did = addrToDID[msg.sender];\n    //     bytes32 pHash = keccak256(bytes(did));\n\n    //     uint256 balance = token.balanceOf(msg.sender);\n    //     token.transferFrom(msg.sender, account, balance);\n    //     _removeWhitelisted(msg.sender);\n    //     _addWhitelisted(account);\n    //     addrToDID[account] = did;\n    //     didHashToAddress[pHash] = account;\n    // }\n\n    /* @dev Adds an address to blacklist.\n     * Can only be called by Identity Administrators.\n     * @param account address to add as blacklisted\n     */\n    function addBlacklisted(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        blacklist.add(account);\n        emit BlacklistAdded(account);\n    }\n\n    /* @dev Removes an address from blacklist\n     * Can only be called by Identity Administrators.\n     * @param account address to remove as blacklisted\n     */\n    function removeBlacklisted(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        blacklist.remove(account);\n        emit BlacklistRemoved(account);\n    }\n\n    /* @dev Function to add a Contract to list of contracts\n     * @param account The address to add\n     */\n    function addContract(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        require(isContract(account), \"Given address is not a contract\");\n        contracts.add(account);\n        _addWhitelisted(account);\n\n        emit ContractAdded(account);\n    }\n\n    /* @dev Function to remove a Contract from list of contracts\n     * @param account The address to add\n     */\n    function removeContract(address account)\n        public\n        onlyRegistered\n        onlyIdentityAdmin\n        whenNotPaused\n    {\n        contracts.remove(account);\n        _removeWhitelisted(account);\n\n        emit ContractRemoved(account);\n    }\n\n    /* @dev Function to check if given contract is on list of contracts.\n     * @param address to check\n     * @return a bool indicating if address is on list of contracts\n     */\n    function isDAOContract(address account) public view returns (bool) {\n        return contracts.has(account);\n    }\n\n    /* @dev Internal function to add to whitelisted\n     * @param account the address to add\n     */\n    function _addWhitelisted(address account) internal {\n        whitelist.add(account);\n\n        whitelistedCount += 1;\n        dateAdded[account] = now;\n        dateAuthenticated[account] = now;\n\n        if (isContract(account)) {\n            whitelistedContracts += 1;\n        }\n\n        emit WhitelistedAdded(account);\n    }\n\n    /* @dev Internal whitelisting with did function.\n     * @param account the address to add\n     * @param did the id to register account under\n     */\n    function _addWhitelistedWithDID(address account, string memory did) internal {\n        bytes32 pHash = keccak256(bytes(did));\n        require(didHashToAddress[pHash] == address(0), \"DID already registered\");\n\n        addrToDID[account] = did;\n        didHashToAddress[pHash] = account;\n\n        _addWhitelisted(account);\n    }\n\n    /* @dev Internal function to remove from whitelisted\n     * @param account the address to add\n     */\n    function _removeWhitelisted(address account) internal {\n        whitelist.remove(account);\n\n        whitelistedCount -= 1;\n        delete dateAuthenticated[account];\n\n        if (isContract(account)) {\n            whitelistedContracts -= 1;\n        }\n\n        string memory did = addrToDID[account];\n        bytes32 pHash = keccak256(bytes(did));\n\n        delete dateAuthenticated[account];\n        delete addrToDID[account];\n        delete didHashToAddress[pHash];\n\n        emit WhitelistedRemoved(account);\n    }\n\n    /* @dev Returns true if given address has been added to the blacklist\n     * @param account the address to check\n     * @return a bool indicating weather the address is present in the blacklist\n     */\n    function isBlacklisted(address account) public view returns (bool) {\n        return blacklist.has(account);\n    }\n\n    /* @dev Function to see if given address is a contract\n     * @return true if address is a contract\n     */\n    function isContract(address _addr) internal view returns (bool) {\n        uint256 length;\n        assembly {\n            length := extcodesize(_addr)\n        }\n        return length > 0;\n    }\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol",
    "exportedSymbols": {
      "Identity": [
        5447
      ]
    },
    "id": 5448,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4936,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:26"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol",
        "file": "openzeppelin-solidity/contracts/access/Roles.sol",
        "id": 4937,
        "nodeType": "ImportDirective",
        "scope": 5448,
        "sourceUnit": 16578,
        "src": "25:58:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 4938,
        "nodeType": "ImportDirective",
        "scope": 5448,
        "sourceUnit": 17145,
        "src": "84:59:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "file": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "id": 4939,
        "nodeType": "ImportDirective",
        "scope": 5448,
        "sourceUnit": 16948,
        "src": "144:64:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 4940,
        "nodeType": "ImportDirective",
        "scope": 5448,
        "sourceUnit": 8542,
        "src": "210:55:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol",
        "file": "../dao/schemes/SchemeGuard.sol",
        "id": 4941,
        "nodeType": "ImportDirective",
        "scope": 5448,
        "sourceUnit": 4183,
        "src": "267:40:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol",
        "file": "./IdentityAdminRole.sol",
        "id": 4942,
        "nodeType": "ImportDirective",
        "scope": 5448,
        "sourceUnit": 5575,
        "src": "308:33:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4943,
              "name": "IdentityAdminRole",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5574,
              "src": "477:17:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IdentityAdminRole_$5574",
                "typeString": "contract IdentityAdminRole"
              }
            },
            "id": 4944,
            "nodeType": "InheritanceSpecifier",
            "src": "477:17:26"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4945,
              "name": "SchemeGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4182,
              "src": "496:11:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SchemeGuard_$4182",
                "typeString": "contract SchemeGuard"
              }
            },
            "id": 4946,
            "nodeType": "InheritanceSpecifier",
            "src": "496:11:26"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4947,
              "name": "Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16947,
              "src": "509:8:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Pausable_$16947",
                "typeString": "contract Pausable"
              }
            },
            "id": 4948,
            "nodeType": "InheritanceSpecifier",
            "src": "509:8:26"
          }
        ],
        "contractDependencies": [
          4182,
          5574,
          16783,
          16947,
          17253
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5447,
        "linearizedBaseContracts": [
          5447,
          16947,
          16783,
          4182,
          5574,
          17253
        ],
        "name": "Identity",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 4951,
            "libraryName": {
              "contractScope": null,
              "id": 4949,
              "name": "Roles",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16577,
              "src": "530:5:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Roles_$16577",
                "typeString": "library Roles"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "524:27:26",
            "typeName": {
              "contractScope": null,
              "id": 4950,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "540:10:26",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "id": 4954,
            "libraryName": {
              "contractScope": null,
              "id": 4952,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 17144,
              "src": "562:8:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$17144",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "556:27:26",
            "typeName": {
              "id": 4953,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "575:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 4956,
            "name": "blacklist",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "589:28:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$16490_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 4955,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "589:10:26",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4958,
            "name": "whitelist",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "623:28:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$16490_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 4957,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "623:10:26",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4960,
            "name": "contracts",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "657:28:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$16490_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 4959,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "657:10:26",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4963,
            "name": "whitelistedCount",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "692:35:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4961,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "692:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 4962,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "726:1:26",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4966,
            "name": "whitelistedContracts",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "733:39:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4964,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "733:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 4965,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "771:1:26",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4969,
            "name": "authenticationPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "778:40:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4967,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "778:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3134",
              "id": 4968,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "816:2:26",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_14_by_1",
                "typeString": "int_const 14"
              },
              "value": "14"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4973,
            "name": "dateAuthenticated",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "825:52:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 4972,
              "keyType": {
                "id": 4970,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "833:7:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "825:27:26",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 4971,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "844:7:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4977,
            "name": "dateAdded",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "883:44:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 4976,
              "keyType": {
                "id": 4974,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "891:7:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "883:27:26",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 4975,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "902:7:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4981,
            "name": "addrToDID",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "934:43:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
              "typeString": "mapping(address => string)"
            },
            "typeName": {
              "id": 4980,
              "keyType": {
                "id": 4978,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "942:7:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "934:26:26",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                "typeString": "mapping(address => string)"
              },
              "valueType": {
                "id": 4979,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "953:6:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4985,
            "name": "didHashToAddress",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "983:51:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 4984,
              "keyType": {
                "id": 4982,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "991:7:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "983:27:26",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 4983,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1002:7:26",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4989,
            "name": "BlacklistAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4987,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 4989,
                  "src": "1062:23:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4986,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1062:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1061:25:26"
            },
            "src": "1041:46:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4993,
            "name": "BlacklistRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4992,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4991,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 4993,
                  "src": "1115:23:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4990,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1115:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1114:25:26"
            },
            "src": "1092:48:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4997,
            "name": "WhitelistedAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4996,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4995,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 4997,
                  "src": "1169:23:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4994,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1169:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1168:25:26"
            },
            "src": "1146:48:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5001,
            "name": "WhitelistedRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5000,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4999,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5001,
                  "src": "1224:23:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4998,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1224:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1223:25:26"
            },
            "src": "1199:50:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5005,
            "name": "ContractAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5004,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5003,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5005,
                  "src": "1275:23:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5002,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1275:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1274:25:26"
            },
            "src": "1255:45:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5009,
            "name": "ContractRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5007,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1327:23:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5006,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1327:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1326:25:26"
            },
            "src": "1305:47:26"
          },
          {
            "body": {
              "id": 5017,
              "nodeType": "Block",
              "src": "1402:2:26",
              "statements": []
            },
            "documentation": null,
            "id": 5018,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5013,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1398:1:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 5012,
                      "name": "Avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8541,
                      "src": "1391:6:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Avatar_$8541_$",
                        "typeString": "type(contract Avatar)"
                      }
                    },
                    "id": 5014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1391:9:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$8541",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 5015,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5011,
                  "name": "SchemeGuard",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4182,
                  "src": "1379:11:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_SchemeGuard_$4182_$",
                    "typeString": "type(contract SchemeGuard)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1379:22:26"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5010,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1369:2:26"
            },
            "returnParameters": {
              "id": 5016,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1402:0:26"
            },
            "scope": 5447,
            "src": "1358:46:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5031,
              "nodeType": "Block",
              "src": "1663:46:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5027,
                      "name": "authenticationPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4969,
                      "src": "1673:20:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5028,
                      "name": "period",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5020,
                      "src": "1696:6:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1673:29:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5030,
                  "nodeType": "ExpressionStatement",
                  "src": "1673:29:26"
                }
              ]
            },
            "documentation": null,
            "id": 5032,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5023,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5022,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 17187,
                  "src": "1639:9:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1639:9:26"
              },
              {
                "arguments": null,
                "id": 5025,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5024,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "1649:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1649:13:26"
              }
            ],
            "name": "setAuthenticationPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5020,
                  "name": "period",
                  "nodeType": "VariableDeclaration",
                  "scope": 5032,
                  "src": "1616:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5019,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1616:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1615:16:26"
            },
            "returnParameters": {
              "id": 5026,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1663:0:26"
            },
            "scope": 5447,
            "src": "1583:126:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5049,
              "nodeType": "Block",
              "src": "2042:49:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5043,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4973,
                        "src": "2052:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5045,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5044,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5034,
                        "src": "2070:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2052:26:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5046,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18009,
                      "src": "2081:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2052:32:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5048,
                  "nodeType": "ExpressionStatement",
                  "src": "2052:32:26"
                }
              ]
            },
            "documentation": null,
            "id": 5050,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5037,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5036,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "1975:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1975:14:26"
              },
              {
                "arguments": null,
                "id": 5039,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5038,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "1998:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1998:17:26"
              },
              {
                "arguments": null,
                "id": 5041,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5040,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "2024:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2024:13:26"
              }
            ],
            "name": "authenticate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5035,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5034,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5050,
                  "src": "1935:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5033,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1935:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1934:17:26"
            },
            "returnParameters": {
              "id": 5042,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2042:0:26"
            },
            "scope": 5447,
            "src": "1913:178:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5065,
              "nodeType": "Block",
              "src": "2386:41:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5062,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5052,
                        "src": "2412:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5061,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5311,
                      "src": "2396:15:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2396:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5064,
                  "nodeType": "ExpressionStatement",
                  "src": "2396:24:26"
                }
              ]
            },
            "documentation": null,
            "id": 5066,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5055,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5054,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "2319:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2319:14:26"
              },
              {
                "arguments": null,
                "id": 5057,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5056,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "2342:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2342:17:26"
              },
              {
                "arguments": null,
                "id": 5059,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5058,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "2368:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2368:13:26"
              }
            ],
            "name": "addWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5053,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5052,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5066,
                  "src": "2279:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5051,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2279:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2278:17:26"
            },
            "returnParameters": {
              "id": 5060,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2386:0:26"
            },
            "scope": 5447,
            "src": "2255:172:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5084,
              "nodeType": "Block",
              "src": "2748:53:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5080,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5068,
                        "src": "2781:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5081,
                        "name": "did",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5070,
                        "src": "2790:3:26",
                        "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": 5079,
                      "name": "_addWhitelistedWithDID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5354,
                      "src": "2758:22:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 5082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2758:36:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5083,
                  "nodeType": "ExpressionStatement",
                  "src": "2758:36:26"
                }
              ]
            },
            "documentation": null,
            "id": 5085,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5073,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5072,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "2681:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2681:14:26"
              },
              {
                "arguments": null,
                "id": 5075,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5074,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "2704:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2704:17:26"
              },
              {
                "arguments": null,
                "id": 5077,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5076,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "2730:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2730:13:26"
              }
            ],
            "name": "addWhitelistedWithDID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5071,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5068,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5085,
                  "src": "2622:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5067,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2622:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5070,
                  "name": "did",
                  "nodeType": "VariableDeclaration",
                  "scope": 5085,
                  "src": "2639:17:26",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5069,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2639:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2621:36:26"
            },
            "returnParameters": {
              "id": 5078,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2748:0:26"
            },
            "scope": 5447,
            "src": "2591:210:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5100,
              "nodeType": "Block",
              "src": "3105:44:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5097,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5087,
                        "src": "3134:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5096,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5417,
                      "src": "3115:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5098,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3115:27:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5099,
                  "nodeType": "ExpressionStatement",
                  "src": "3115:27:26"
                }
              ]
            },
            "documentation": null,
            "id": 5101,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5090,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5089,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "3038:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3038:14:26"
              },
              {
                "arguments": null,
                "id": 5092,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5091,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "3061:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3061:17:26"
              },
              {
                "arguments": null,
                "id": 5094,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5093,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "3087:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3087:13:26"
              }
            ],
            "name": "removeWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5088,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5087,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5101,
                  "src": "2998:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5086,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2998:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2997:17:26"
            },
            "returnParameters": {
              "id": 5095,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3105:0:26"
            },
            "scope": 5447,
            "src": "2971:178:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5111,
              "nodeType": "Block",
              "src": "3269:47:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5107,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18007,
                          "src": "3298:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5108,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3298:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5106,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5417,
                      "src": "3279:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3279:30:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5110,
                  "nodeType": "ExpressionStatement",
                  "src": "3279:30:26"
                }
              ]
            },
            "documentation": null,
            "id": 5112,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5104,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5103,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "3255:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3255:13:26"
              }
            ],
            "name": "renounceWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5102,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3245:2:26"
            },
            "returnParameters": {
              "id": 5105,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3269:0:26"
            },
            "scope": 5447,
            "src": "3217:99:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5141,
              "nodeType": "Block",
              "src": "3587:201:26",
              "statements": [
                {
                  "assignments": [
                    5120
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5120,
                      "name": "daysSinceAuthentication",
                      "nodeType": "VariableDeclaration",
                      "scope": 5141,
                      "src": "3597:31:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5119,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3597:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5130,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 5123,
                                "name": "dateAuthenticated",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4973,
                                "src": "3640:17:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 5125,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 5124,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5114,
                                "src": "3658:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3640:26:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5121,
                              "name": "now",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18009,
                              "src": "3632:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5122,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 17099,
                            "src": "3632:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3632:35:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 5127,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3631:37:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5128,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3671:6:26",
                      "subdenomination": "days",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_86400_by_1",
                        "typeString": "int_const 86400"
                      },
                      "value": "1"
                    },
                    "src": "3631:46:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3597:80:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5139,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5131,
                            "name": "daysSinceAuthentication",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5120,
                            "src": "3707:23:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5132,
                            "name": "authenticationPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4969,
                            "src": "3734:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3707:47:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 5134,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3706:49:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5137,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5114,
                          "src": "3773:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 5135,
                          "name": "whitelist",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4958,
                          "src": "3759:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Role_$16490_storage",
                            "typeString": "struct Roles.Role storage ref"
                          }
                        },
                        "id": 5136,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "has",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 16576,
                        "src": "3759:13:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                          "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                        }
                      },
                      "id": 5138,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3759:22:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3706:75:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5118,
                  "id": 5140,
                  "nodeType": "Return",
                  "src": "3687:94:26"
                }
              ]
            },
            "documentation": null,
            "id": 5142,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5114,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5142,
                  "src": "3543:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5113,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3543:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3542:17:26"
            },
            "returnParameters": {
              "id": 5118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5117,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5142,
                  "src": "3581:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5116,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3581:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3580:6:26"
            },
            "scope": 5447,
            "src": "3520:268:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5153,
              "nodeType": "Block",
              "src": "4031:50:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5149,
                      "name": "dateAuthenticated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4973,
                      "src": "4048:17:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 5151,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5150,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5144,
                      "src": "4066:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4048:26:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5148,
                  "id": 5152,
                  "nodeType": "Return",
                  "src": "4041:33:26"
                }
              ]
            },
            "documentation": null,
            "id": 5154,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lastAuthenticated",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5145,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5144,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5154,
                  "src": "3984:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5143,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3984:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3983:17:26"
            },
            "returnParameters": {
              "id": 5148,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5147,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5154,
                  "src": "4022:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5146,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4022:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4021:9:26"
            },
            "scope": 5447,
            "src": "3957:124:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5175,
              "nodeType": "Block",
              "src": "5497:77:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5168,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5156,
                        "src": "5521:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5165,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4956,
                        "src": "5507:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5167,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16522,
                      "src": "5507:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5507:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5170,
                  "nodeType": "ExpressionStatement",
                  "src": "5507:22:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5172,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5156,
                        "src": "5559:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5171,
                      "name": "BlacklistAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4989,
                      "src": "5544:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5544:23:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5174,
                  "nodeType": "EmitStatement",
                  "src": "5539:28:26"
                }
              ]
            },
            "documentation": null,
            "id": 5176,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5159,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5158,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "5430:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5430:14:26"
              },
              {
                "arguments": null,
                "id": 5161,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5160,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "5453:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5453:17:26"
              },
              {
                "arguments": null,
                "id": 5163,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5162,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "5479:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5479:13:26"
              }
            ],
            "name": "addBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5156,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5176,
                  "src": "5390:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5155,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5390:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5389:17:26"
            },
            "returnParameters": {
              "id": 5164,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5497:0:26"
            },
            "scope": 5447,
            "src": "5366:208:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5197,
              "nodeType": "Block",
              "src": "5877:82:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5190,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5178,
                        "src": "5904:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5187,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4956,
                        "src": "5887:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5189,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16553,
                      "src": "5887:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5191,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5887:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5192,
                  "nodeType": "ExpressionStatement",
                  "src": "5887:25:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5194,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5178,
                        "src": "5944:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5193,
                      "name": "BlacklistRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4993,
                      "src": "5927:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5927:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5196,
                  "nodeType": "EmitStatement",
                  "src": "5922:30:26"
                }
              ]
            },
            "documentation": null,
            "id": 5198,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5181,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5180,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "5810:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5810:14:26"
              },
              {
                "arguments": null,
                "id": 5183,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5182,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "5833:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5833:17:26"
              },
              {
                "arguments": null,
                "id": 5185,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5184,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "5859:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5859:13:26"
              }
            ],
            "name": "removeBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5179,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5178,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5198,
                  "src": "5770:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5177,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5770:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5769:17:26"
            },
            "returnParameters": {
              "id": 5186,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5877:0:26"
            },
            "scope": 5447,
            "src": "5743:216:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5230,
              "nodeType": "Block",
              "src": "6202:184:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5211,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5200,
                            "src": "6231:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 5210,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5446,
                          "src": "6220:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 5212,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6220:19:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "476976656e2061646472657373206973206e6f74206120636f6e7472616374",
                        "id": 5213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6241:33:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c016cb8d50f495ff112d56868bcdc02233dd830483c688e57c25753f3ef679bb",
                          "typeString": "literal_string \"Given address is not a contract\""
                        },
                        "value": "Given address is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c016cb8d50f495ff112d56868bcdc02233dd830483c688e57c25753f3ef679bb",
                          "typeString": "literal_string \"Given address is not a contract\""
                        }
                      ],
                      "id": 5209,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18010,
                        18011
                      ],
                      "referencedDeclaration": 18011,
                      "src": "6212:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6212:63:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5215,
                  "nodeType": "ExpressionStatement",
                  "src": "6212:63:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5219,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5200,
                        "src": "6299:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5216,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4960,
                        "src": "6285:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5218,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16522,
                      "src": "6285:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6285:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5221,
                  "nodeType": "ExpressionStatement",
                  "src": "6285:22:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5223,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5200,
                        "src": "6333:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5222,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5311,
                      "src": "6317:15:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6317:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5225,
                  "nodeType": "ExpressionStatement",
                  "src": "6317:24:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5227,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5200,
                        "src": "6371:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5226,
                      "name": "ContractAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5005,
                      "src": "6357:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6357:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5229,
                  "nodeType": "EmitStatement",
                  "src": "6352:27:26"
                }
              ]
            },
            "documentation": null,
            "id": 5231,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5203,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5202,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "6135:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6135:14:26"
              },
              {
                "arguments": null,
                "id": 5205,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5204,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "6158:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6158:17:26"
              },
              {
                "arguments": null,
                "id": 5207,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5206,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "6184:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6184:13:26"
              }
            ],
            "name": "addContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5200,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5231,
                  "src": "6095:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5199,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6095:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6094:17:26"
            },
            "returnParameters": {
              "id": 5208,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6202:0:26"
            },
            "scope": 5447,
            "src": "6074:312:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5256,
              "nodeType": "Block",
              "src": "6637:119:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5245,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5233,
                        "src": "6664:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5242,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4960,
                        "src": "6647:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5244,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16553,
                      "src": "6647:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6647:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5247,
                  "nodeType": "ExpressionStatement",
                  "src": "6647:25:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5249,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5233,
                        "src": "6701:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5248,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5417,
                      "src": "6682:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6682:27:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5251,
                  "nodeType": "ExpressionStatement",
                  "src": "6682:27:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5253,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5233,
                        "src": "6741:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5252,
                      "name": "ContractRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5009,
                      "src": "6725:15:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6725:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5255,
                  "nodeType": "EmitStatement",
                  "src": "6720:29:26"
                }
              ]
            },
            "documentation": null,
            "id": 5257,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5236,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5235,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "6570:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6570:14:26"
              },
              {
                "arguments": null,
                "id": 5238,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5237,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "6593:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6593:17:26"
              },
              {
                "arguments": null,
                "id": 5240,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5239,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "6619:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6619:13:26"
              }
            ],
            "name": "removeContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5234,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5233,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5257,
                  "src": "6530:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5232,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6530:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6529:17:26"
            },
            "returnParameters": {
              "id": 5241,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6637:0:26"
            },
            "scope": 5447,
            "src": "6506:250:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5269,
              "nodeType": "Block",
              "src": "7009:46:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5266,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5259,
                        "src": "7040:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5264,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4960,
                        "src": "7026:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5265,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16576,
                      "src": "7026:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 5267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7026:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5263,
                  "id": 5268,
                  "nodeType": "Return",
                  "src": "7019:29:26"
                }
              ]
            },
            "documentation": null,
            "id": 5270,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isDAOContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5260,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5259,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5270,
                  "src": "6965:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5258,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6965:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6964:17:26"
            },
            "returnParameters": {
              "id": 5263,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5262,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5270,
                  "src": "7003:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5261,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7003:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7002:6:26"
            },
            "scope": 5447,
            "src": "6942:113:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5310,
              "nodeType": "Block",
              "src": "7213:273:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5278,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5272,
                        "src": "7237:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5275,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4958,
                        "src": "7223:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5277,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16522,
                      "src": "7223:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7223:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5280,
                  "nodeType": "ExpressionStatement",
                  "src": "7223:22:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5281,
                      "name": "whitelistedCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4963,
                      "src": "7256:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5282,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7276:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7256:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5284,
                  "nodeType": "ExpressionStatement",
                  "src": "7256:21:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5285,
                        "name": "dateAdded",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4977,
                        "src": "7287:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5287,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5286,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5272,
                        "src": "7297:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7287:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5288,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18009,
                      "src": "7308:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7287:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5290,
                  "nodeType": "ExpressionStatement",
                  "src": "7287:24:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5291,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4973,
                        "src": "7321:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5293,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5292,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5272,
                        "src": "7339:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7321:26:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5294,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18009,
                      "src": "7350:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7321:32:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5296,
                  "nodeType": "ExpressionStatement",
                  "src": "7321:32:26"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5298,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5272,
                        "src": "7379:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5297,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5446,
                      "src": "7368:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 5299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7368:19:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5305,
                  "nodeType": "IfStatement",
                  "src": "7364:75:26",
                  "trueBody": {
                    "id": 5304,
                    "nodeType": "Block",
                    "src": "7389:50:26",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5302,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5300,
                            "name": "whitelistedContracts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4966,
                            "src": "7403:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 5301,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7427:1:26",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "7403:25:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5303,
                        "nodeType": "ExpressionStatement",
                        "src": "7403:25:26"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5307,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5272,
                        "src": "7471:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5306,
                      "name": "WhitelistedAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4997,
                      "src": "7454:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7454:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5309,
                  "nodeType": "EmitStatement",
                  "src": "7449:30:26"
                }
              ]
            },
            "documentation": null,
            "id": 5311,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5273,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5272,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5311,
                  "src": "7187:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5271,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7187:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7186:17:26"
            },
            "returnParameters": {
              "id": 5274,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7213:0:26"
            },
            "scope": 5447,
            "src": "7162:324:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5353,
              "nodeType": "Block",
              "src": "7722:249:26",
              "statements": [
                {
                  "assignments": [
                    5319
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5319,
                      "name": "pHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 5353,
                      "src": "7732:13:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5318,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7732:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5325,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5322,
                            "name": "did",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5315,
                            "src": "7764:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 5321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7758:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": "bytes"
                        },
                        "id": 5323,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7758:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5320,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18001,
                      "src": "7748:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 5324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7748:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7732:37:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 5327,
                            "name": "didHashToAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4985,
                            "src": "7787:16:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                              "typeString": "mapping(bytes32 => address)"
                            }
                          },
                          "id": 5329,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 5328,
                            "name": "pHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5319,
                            "src": "7804:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7787:23:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5331,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7822:1:26",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5330,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7814:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 5332,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7814:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7787:37:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "44494420616c72656164792072656769737465726564",
                        "id": 5334,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7826:24:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_761cab18940f21d9559eeced38da846400e6144eb9c0e8f0f4c044714a4f97c4",
                          "typeString": "literal_string \"DID already registered\""
                        },
                        "value": "DID already registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_761cab18940f21d9559eeced38da846400e6144eb9c0e8f0f4c044714a4f97c4",
                          "typeString": "literal_string \"DID already registered\""
                        }
                      ],
                      "id": 5326,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18010,
                        18011
                      ],
                      "referencedDeclaration": 18011,
                      "src": "7779:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7779:72:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5336,
                  "nodeType": "ExpressionStatement",
                  "src": "7779:72:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5337,
                        "name": "addrToDID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4981,
                        "src": "7862:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 5339,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5338,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5313,
                        "src": "7872:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7862:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5340,
                      "name": "did",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5315,
                      "src": "7883:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "7862:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 5342,
                  "nodeType": "ExpressionStatement",
                  "src": "7862:24:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5343,
                        "name": "didHashToAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4985,
                        "src": "7896:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 5345,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5344,
                        "name": "pHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5319,
                        "src": "7913:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7896:23:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5346,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5313,
                      "src": "7922:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7896:33:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5348,
                  "nodeType": "ExpressionStatement",
                  "src": "7896:33:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5350,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5313,
                        "src": "7956:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5349,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5311,
                      "src": "7940:15:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7940:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5352,
                  "nodeType": "ExpressionStatement",
                  "src": "7940:24:26"
                }
              ]
            },
            "documentation": null,
            "id": 5354,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addWhitelistedWithDID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5313,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5354,
                  "src": "7677:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5312,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7677:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5315,
                  "name": "did",
                  "nodeType": "VariableDeclaration",
                  "scope": 5354,
                  "src": "7694:17:26",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5314,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7694:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7676:36:26"
            },
            "returnParameters": {
              "id": 5317,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7722:0:26"
            },
            "scope": 5447,
            "src": "7645:326:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5416,
              "nodeType": "Block",
              "src": "8137:460:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5362,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5356,
                        "src": "8164:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5359,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4958,
                        "src": "8147:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5361,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16553,
                      "src": "8147:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8147:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5364,
                  "nodeType": "ExpressionStatement",
                  "src": "8147:25:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5365,
                      "name": "whitelistedCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4963,
                      "src": "8183:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8203:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "8183:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5368,
                  "nodeType": "ExpressionStatement",
                  "src": "8183:21:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8214:33:26",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5369,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4973,
                        "src": "8221:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5371,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5370,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5356,
                        "src": "8239:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8221:26:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5373,
                  "nodeType": "ExpressionStatement",
                  "src": "8214:33:26"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5375,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5356,
                        "src": "8273:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5374,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5446,
                      "src": "8262:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 5376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8262:19:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5382,
                  "nodeType": "IfStatement",
                  "src": "8258:75:26",
                  "trueBody": {
                    "id": 5381,
                    "nodeType": "Block",
                    "src": "8283:50:26",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5379,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5377,
                            "name": "whitelistedContracts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4966,
                            "src": "8297:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 5378,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8321:1:26",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "8297:25:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5380,
                        "nodeType": "ExpressionStatement",
                        "src": "8297:25:26"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5384
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5384,
                      "name": "did",
                      "nodeType": "VariableDeclaration",
                      "scope": 5416,
                      "src": "8343:17:26",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 5383,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "8343:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5388,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5385,
                      "name": "addrToDID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4981,
                      "src": "8363:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                        "typeString": "mapping(address => string storage ref)"
                      }
                    },
                    "id": 5387,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5386,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5356,
                      "src": "8373:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8363:18:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8343:38:26"
                },
                {
                  "assignments": [
                    5390
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5390,
                      "name": "pHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 5416,
                      "src": "8391:13:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5389,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "8391:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5396,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5393,
                            "name": "did",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5384,
                            "src": "8423:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 5392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8417:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": "bytes"
                        },
                        "id": 5394,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8417:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5391,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18001,
                      "src": "8407:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 5395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8407:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8391:37:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5400,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8439:33:26",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5397,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4973,
                        "src": "8446:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5399,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5398,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5356,
                        "src": "8464:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8446:26:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5401,
                  "nodeType": "ExpressionStatement",
                  "src": "8439:33:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8482:25:26",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5402,
                        "name": "addrToDID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4981,
                        "src": "8489:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 5404,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5403,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5356,
                        "src": "8499:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8489:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5406,
                  "nodeType": "ExpressionStatement",
                  "src": "8482:25:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8517:30:26",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5407,
                        "name": "didHashToAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4985,
                        "src": "8524:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 5409,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5408,
                        "name": "pHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5390,
                        "src": "8541:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8524:23:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5411,
                  "nodeType": "ExpressionStatement",
                  "src": "8517:30:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5413,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5356,
                        "src": "8582:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5412,
                      "name": "WhitelistedRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5001,
                      "src": "8563:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5414,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8563:27:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5415,
                  "nodeType": "EmitStatement",
                  "src": "8558:32:26"
                }
              ]
            },
            "documentation": null,
            "id": 5417,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_removeWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5357,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5356,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5417,
                  "src": "8111:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5355,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8111:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8110:17:26"
            },
            "returnParameters": {
              "id": 5358,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8137:0:26"
            },
            "scope": 5447,
            "src": "8083:514:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5429,
              "nodeType": "Block",
              "src": "8876:46:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5426,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5419,
                        "src": "8907:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5424,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4956,
                        "src": "8893:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5425,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16576,
                      "src": "8893:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 5427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8893:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5423,
                  "id": 5428,
                  "nodeType": "Return",
                  "src": "8886:29:26"
                }
              ]
            },
            "documentation": null,
            "id": 5430,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5419,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5430,
                  "src": "8832:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5418,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8832:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8831:17:26"
            },
            "returnParameters": {
              "id": 5423,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5422,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5430,
                  "src": "8870:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5421,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8870:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8869:6:26"
            },
            "scope": 5447,
            "src": "8809:113:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5445,
              "nodeType": "Block",
              "src": "9104:128:26",
              "statements": [
                {
                  "assignments": [
                    5438
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5438,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 5445,
                      "src": "9114:14:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5437,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9114:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5439,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9114:14:26"
                },
                {
                  "externalReferences": [
                    {
                      "length": {
                        "declaration": 5438,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9161:6:26",
                        "valueSize": 1
                      }
                    },
                    {
                      "_addr": {
                        "declaration": 5432,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9183:5:26",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 5440,
                  "nodeType": "InlineAssembly",
                  "operations": "{ length := extcodesize(_addr) }",
                  "src": "9138:61:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5441,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5438,
                      "src": "9215:6:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 5442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9224:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9215:10:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5436,
                  "id": 5444,
                  "nodeType": "Return",
                  "src": "9208:17:26"
                }
              ]
            },
            "documentation": null,
            "id": 5446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5433,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5432,
                  "name": "_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 5446,
                  "src": "9060:13:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5431,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9060:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9059:15:26"
            },
            "returnParameters": {
              "id": 5436,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5435,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5446,
                  "src": "9098:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5434,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9098:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9097:6:26"
            },
            "scope": 5447,
            "src": "9040:192:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5448,
        "src": "456:8778:26"
      }
    ],
    "src": "0:9235:26"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol",
    "exportedSymbols": {
      "Identity": [
        5447
      ]
    },
    "id": 5448,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4936,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:26"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol",
        "file": "openzeppelin-solidity/contracts/access/Roles.sol",
        "id": 4937,
        "nodeType": "ImportDirective",
        "scope": 5448,
        "sourceUnit": 16578,
        "src": "25:58:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 4938,
        "nodeType": "ImportDirective",
        "scope": 5448,
        "sourceUnit": 17145,
        "src": "84:59:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "file": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "id": 4939,
        "nodeType": "ImportDirective",
        "scope": 5448,
        "sourceUnit": 16948,
        "src": "144:64:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 4940,
        "nodeType": "ImportDirective",
        "scope": 5448,
        "sourceUnit": 8542,
        "src": "210:55:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol",
        "file": "../dao/schemes/SchemeGuard.sol",
        "id": 4941,
        "nodeType": "ImportDirective",
        "scope": 5448,
        "sourceUnit": 4183,
        "src": "267:40:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol",
        "file": "./IdentityAdminRole.sol",
        "id": 4942,
        "nodeType": "ImportDirective",
        "scope": 5448,
        "sourceUnit": 5575,
        "src": "308:33:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4943,
              "name": "IdentityAdminRole",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5574,
              "src": "477:17:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IdentityAdminRole_$5574",
                "typeString": "contract IdentityAdminRole"
              }
            },
            "id": 4944,
            "nodeType": "InheritanceSpecifier",
            "src": "477:17:26"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4945,
              "name": "SchemeGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4182,
              "src": "496:11:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SchemeGuard_$4182",
                "typeString": "contract SchemeGuard"
              }
            },
            "id": 4946,
            "nodeType": "InheritanceSpecifier",
            "src": "496:11:26"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4947,
              "name": "Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16947,
              "src": "509:8:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Pausable_$16947",
                "typeString": "contract Pausable"
              }
            },
            "id": 4948,
            "nodeType": "InheritanceSpecifier",
            "src": "509:8:26"
          }
        ],
        "contractDependencies": [
          4182,
          5574,
          16783,
          16947,
          17253
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5447,
        "linearizedBaseContracts": [
          5447,
          16947,
          16783,
          4182,
          5574,
          17253
        ],
        "name": "Identity",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 4951,
            "libraryName": {
              "contractScope": null,
              "id": 4949,
              "name": "Roles",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16577,
              "src": "530:5:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Roles_$16577",
                "typeString": "library Roles"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "524:27:26",
            "typeName": {
              "contractScope": null,
              "id": 4950,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "540:10:26",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "id": 4954,
            "libraryName": {
              "contractScope": null,
              "id": 4952,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 17144,
              "src": "562:8:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$17144",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "556:27:26",
            "typeName": {
              "id": 4953,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "575:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 4956,
            "name": "blacklist",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "589:28:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$16490_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 4955,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "589:10:26",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4958,
            "name": "whitelist",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "623:28:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$16490_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 4957,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "623:10:26",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4960,
            "name": "contracts",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "657:28:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$16490_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 4959,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "657:10:26",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4963,
            "name": "whitelistedCount",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "692:35:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4961,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "692:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 4962,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "726:1:26",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4966,
            "name": "whitelistedContracts",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "733:39:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4964,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "733:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 4965,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "771:1:26",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4969,
            "name": "authenticationPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "778:40:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4967,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "778:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3134",
              "id": 4968,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "816:2:26",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_14_by_1",
                "typeString": "int_const 14"
              },
              "value": "14"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4973,
            "name": "dateAuthenticated",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "825:52:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 4972,
              "keyType": {
                "id": 4970,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "833:7:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "825:27:26",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 4971,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "844:7:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4977,
            "name": "dateAdded",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "883:44:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 4976,
              "keyType": {
                "id": 4974,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "891:7:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "883:27:26",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 4975,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "902:7:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4981,
            "name": "addrToDID",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "934:43:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
              "typeString": "mapping(address => string)"
            },
            "typeName": {
              "id": 4980,
              "keyType": {
                "id": 4978,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "942:7:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "934:26:26",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                "typeString": "mapping(address => string)"
              },
              "valueType": {
                "id": 4979,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "953:6:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4985,
            "name": "didHashToAddress",
            "nodeType": "VariableDeclaration",
            "scope": 5447,
            "src": "983:51:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 4984,
              "keyType": {
                "id": 4982,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "991:7:26",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "983:27:26",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 4983,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1002:7:26",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4989,
            "name": "BlacklistAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4987,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 4989,
                  "src": "1062:23:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4986,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1062:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1061:25:26"
            },
            "src": "1041:46:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4993,
            "name": "BlacklistRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4992,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4991,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 4993,
                  "src": "1115:23:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4990,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1115:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1114:25:26"
            },
            "src": "1092:48:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4997,
            "name": "WhitelistedAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4996,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4995,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 4997,
                  "src": "1169:23:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4994,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1169:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1168:25:26"
            },
            "src": "1146:48:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5001,
            "name": "WhitelistedRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5000,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4999,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5001,
                  "src": "1224:23:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4998,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1224:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1223:25:26"
            },
            "src": "1199:50:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5005,
            "name": "ContractAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5004,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5003,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5005,
                  "src": "1275:23:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5002,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1275:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1274:25:26"
            },
            "src": "1255:45:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5009,
            "name": "ContractRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5007,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1327:23:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5006,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1327:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1326:25:26"
            },
            "src": "1305:47:26"
          },
          {
            "body": {
              "id": 5017,
              "nodeType": "Block",
              "src": "1402:2:26",
              "statements": []
            },
            "documentation": null,
            "id": 5018,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5013,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1398:1:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 5012,
                      "name": "Avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8541,
                      "src": "1391:6:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Avatar_$8541_$",
                        "typeString": "type(contract Avatar)"
                      }
                    },
                    "id": 5014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1391:9:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$8541",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 5015,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5011,
                  "name": "SchemeGuard",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4182,
                  "src": "1379:11:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_SchemeGuard_$4182_$",
                    "typeString": "type(contract SchemeGuard)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1379:22:26"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5010,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1369:2:26"
            },
            "returnParameters": {
              "id": 5016,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1402:0:26"
            },
            "scope": 5447,
            "src": "1358:46:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5031,
              "nodeType": "Block",
              "src": "1663:46:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5027,
                      "name": "authenticationPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4969,
                      "src": "1673:20:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5028,
                      "name": "period",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5020,
                      "src": "1696:6:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1673:29:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5030,
                  "nodeType": "ExpressionStatement",
                  "src": "1673:29:26"
                }
              ]
            },
            "documentation": null,
            "id": 5032,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5023,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5022,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 17187,
                  "src": "1639:9:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1639:9:26"
              },
              {
                "arguments": null,
                "id": 5025,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5024,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "1649:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1649:13:26"
              }
            ],
            "name": "setAuthenticationPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5020,
                  "name": "period",
                  "nodeType": "VariableDeclaration",
                  "scope": 5032,
                  "src": "1616:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5019,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1616:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1615:16:26"
            },
            "returnParameters": {
              "id": 5026,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1663:0:26"
            },
            "scope": 5447,
            "src": "1583:126:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5049,
              "nodeType": "Block",
              "src": "2042:49:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5043,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4973,
                        "src": "2052:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5045,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5044,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5034,
                        "src": "2070:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2052:26:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5046,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18009,
                      "src": "2081:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2052:32:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5048,
                  "nodeType": "ExpressionStatement",
                  "src": "2052:32:26"
                }
              ]
            },
            "documentation": null,
            "id": 5050,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5037,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5036,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "1975:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1975:14:26"
              },
              {
                "arguments": null,
                "id": 5039,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5038,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "1998:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1998:17:26"
              },
              {
                "arguments": null,
                "id": 5041,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5040,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "2024:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2024:13:26"
              }
            ],
            "name": "authenticate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5035,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5034,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5050,
                  "src": "1935:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5033,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1935:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1934:17:26"
            },
            "returnParameters": {
              "id": 5042,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2042:0:26"
            },
            "scope": 5447,
            "src": "1913:178:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5065,
              "nodeType": "Block",
              "src": "2386:41:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5062,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5052,
                        "src": "2412:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5061,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5311,
                      "src": "2396:15:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2396:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5064,
                  "nodeType": "ExpressionStatement",
                  "src": "2396:24:26"
                }
              ]
            },
            "documentation": null,
            "id": 5066,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5055,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5054,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "2319:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2319:14:26"
              },
              {
                "arguments": null,
                "id": 5057,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5056,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "2342:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2342:17:26"
              },
              {
                "arguments": null,
                "id": 5059,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5058,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "2368:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2368:13:26"
              }
            ],
            "name": "addWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5053,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5052,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5066,
                  "src": "2279:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5051,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2279:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2278:17:26"
            },
            "returnParameters": {
              "id": 5060,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2386:0:26"
            },
            "scope": 5447,
            "src": "2255:172:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5084,
              "nodeType": "Block",
              "src": "2748:53:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5080,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5068,
                        "src": "2781:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5081,
                        "name": "did",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5070,
                        "src": "2790:3:26",
                        "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": 5079,
                      "name": "_addWhitelistedWithDID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5354,
                      "src": "2758:22:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 5082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2758:36:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5083,
                  "nodeType": "ExpressionStatement",
                  "src": "2758:36:26"
                }
              ]
            },
            "documentation": null,
            "id": 5085,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5073,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5072,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "2681:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2681:14:26"
              },
              {
                "arguments": null,
                "id": 5075,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5074,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "2704:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2704:17:26"
              },
              {
                "arguments": null,
                "id": 5077,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5076,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "2730:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2730:13:26"
              }
            ],
            "name": "addWhitelistedWithDID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5071,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5068,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5085,
                  "src": "2622:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5067,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2622:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5070,
                  "name": "did",
                  "nodeType": "VariableDeclaration",
                  "scope": 5085,
                  "src": "2639:17:26",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5069,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2639:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2621:36:26"
            },
            "returnParameters": {
              "id": 5078,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2748:0:26"
            },
            "scope": 5447,
            "src": "2591:210:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5100,
              "nodeType": "Block",
              "src": "3105:44:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5097,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5087,
                        "src": "3134:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5096,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5417,
                      "src": "3115:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5098,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3115:27:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5099,
                  "nodeType": "ExpressionStatement",
                  "src": "3115:27:26"
                }
              ]
            },
            "documentation": null,
            "id": 5101,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5090,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5089,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "3038:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3038:14:26"
              },
              {
                "arguments": null,
                "id": 5092,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5091,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "3061:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3061:17:26"
              },
              {
                "arguments": null,
                "id": 5094,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5093,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "3087:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3087:13:26"
              }
            ],
            "name": "removeWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5088,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5087,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5101,
                  "src": "2998:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5086,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2998:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2997:17:26"
            },
            "returnParameters": {
              "id": 5095,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3105:0:26"
            },
            "scope": 5447,
            "src": "2971:178:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5111,
              "nodeType": "Block",
              "src": "3269:47:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5107,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18007,
                          "src": "3298:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5108,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3298:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5106,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5417,
                      "src": "3279:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3279:30:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5110,
                  "nodeType": "ExpressionStatement",
                  "src": "3279:30:26"
                }
              ]
            },
            "documentation": null,
            "id": 5112,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5104,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5103,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "3255:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3255:13:26"
              }
            ],
            "name": "renounceWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5102,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3245:2:26"
            },
            "returnParameters": {
              "id": 5105,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3269:0:26"
            },
            "scope": 5447,
            "src": "3217:99:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5141,
              "nodeType": "Block",
              "src": "3587:201:26",
              "statements": [
                {
                  "assignments": [
                    5120
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5120,
                      "name": "daysSinceAuthentication",
                      "nodeType": "VariableDeclaration",
                      "scope": 5141,
                      "src": "3597:31:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5119,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3597:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5130,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 5123,
                                "name": "dateAuthenticated",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4973,
                                "src": "3640:17:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 5125,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 5124,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5114,
                                "src": "3658:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3640:26:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5121,
                              "name": "now",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18009,
                              "src": "3632:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5122,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 17099,
                            "src": "3632:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3632:35:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 5127,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3631:37:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5128,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3671:6:26",
                      "subdenomination": "days",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_86400_by_1",
                        "typeString": "int_const 86400"
                      },
                      "value": "1"
                    },
                    "src": "3631:46:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3597:80:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5139,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5131,
                            "name": "daysSinceAuthentication",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5120,
                            "src": "3707:23:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5132,
                            "name": "authenticationPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4969,
                            "src": "3734:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3707:47:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 5134,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3706:49:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5137,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5114,
                          "src": "3773:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 5135,
                          "name": "whitelist",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4958,
                          "src": "3759:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Role_$16490_storage",
                            "typeString": "struct Roles.Role storage ref"
                          }
                        },
                        "id": 5136,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "has",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 16576,
                        "src": "3759:13:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                          "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                        }
                      },
                      "id": 5138,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3759:22:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3706:75:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5118,
                  "id": 5140,
                  "nodeType": "Return",
                  "src": "3687:94:26"
                }
              ]
            },
            "documentation": null,
            "id": 5142,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5114,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5142,
                  "src": "3543:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5113,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3543:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3542:17:26"
            },
            "returnParameters": {
              "id": 5118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5117,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5142,
                  "src": "3581:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5116,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3581:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3580:6:26"
            },
            "scope": 5447,
            "src": "3520:268:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5153,
              "nodeType": "Block",
              "src": "4031:50:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5149,
                      "name": "dateAuthenticated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4973,
                      "src": "4048:17:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 5151,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5150,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5144,
                      "src": "4066:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4048:26:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5148,
                  "id": 5152,
                  "nodeType": "Return",
                  "src": "4041:33:26"
                }
              ]
            },
            "documentation": null,
            "id": 5154,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lastAuthenticated",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5145,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5144,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5154,
                  "src": "3984:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5143,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3984:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3983:17:26"
            },
            "returnParameters": {
              "id": 5148,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5147,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5154,
                  "src": "4022:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5146,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4022:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4021:9:26"
            },
            "scope": 5447,
            "src": "3957:124:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5175,
              "nodeType": "Block",
              "src": "5497:77:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5168,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5156,
                        "src": "5521:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5165,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4956,
                        "src": "5507:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5167,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16522,
                      "src": "5507:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5507:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5170,
                  "nodeType": "ExpressionStatement",
                  "src": "5507:22:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5172,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5156,
                        "src": "5559:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5171,
                      "name": "BlacklistAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4989,
                      "src": "5544:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5544:23:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5174,
                  "nodeType": "EmitStatement",
                  "src": "5539:28:26"
                }
              ]
            },
            "documentation": null,
            "id": 5176,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5159,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5158,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "5430:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5430:14:26"
              },
              {
                "arguments": null,
                "id": 5161,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5160,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "5453:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5453:17:26"
              },
              {
                "arguments": null,
                "id": 5163,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5162,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "5479:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5479:13:26"
              }
            ],
            "name": "addBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5156,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5176,
                  "src": "5390:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5155,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5390:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5389:17:26"
            },
            "returnParameters": {
              "id": 5164,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5497:0:26"
            },
            "scope": 5447,
            "src": "5366:208:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5197,
              "nodeType": "Block",
              "src": "5877:82:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5190,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5178,
                        "src": "5904:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5187,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4956,
                        "src": "5887:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5189,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16553,
                      "src": "5887:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5191,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5887:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5192,
                  "nodeType": "ExpressionStatement",
                  "src": "5887:25:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5194,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5178,
                        "src": "5944:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5193,
                      "name": "BlacklistRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4993,
                      "src": "5927:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5927:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5196,
                  "nodeType": "EmitStatement",
                  "src": "5922:30:26"
                }
              ]
            },
            "documentation": null,
            "id": 5198,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5181,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5180,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "5810:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5810:14:26"
              },
              {
                "arguments": null,
                "id": 5183,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5182,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "5833:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5833:17:26"
              },
              {
                "arguments": null,
                "id": 5185,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5184,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "5859:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5859:13:26"
              }
            ],
            "name": "removeBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5179,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5178,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5198,
                  "src": "5770:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5177,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5770:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5769:17:26"
            },
            "returnParameters": {
              "id": 5186,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5877:0:26"
            },
            "scope": 5447,
            "src": "5743:216:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5230,
              "nodeType": "Block",
              "src": "6202:184:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5211,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5200,
                            "src": "6231:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 5210,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5446,
                          "src": "6220:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 5212,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6220:19:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "476976656e2061646472657373206973206e6f74206120636f6e7472616374",
                        "id": 5213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6241:33:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c016cb8d50f495ff112d56868bcdc02233dd830483c688e57c25753f3ef679bb",
                          "typeString": "literal_string \"Given address is not a contract\""
                        },
                        "value": "Given address is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c016cb8d50f495ff112d56868bcdc02233dd830483c688e57c25753f3ef679bb",
                          "typeString": "literal_string \"Given address is not a contract\""
                        }
                      ],
                      "id": 5209,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18010,
                        18011
                      ],
                      "referencedDeclaration": 18011,
                      "src": "6212:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6212:63:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5215,
                  "nodeType": "ExpressionStatement",
                  "src": "6212:63:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5219,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5200,
                        "src": "6299:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5216,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4960,
                        "src": "6285:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5218,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16522,
                      "src": "6285:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6285:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5221,
                  "nodeType": "ExpressionStatement",
                  "src": "6285:22:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5223,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5200,
                        "src": "6333:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5222,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5311,
                      "src": "6317:15:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6317:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5225,
                  "nodeType": "ExpressionStatement",
                  "src": "6317:24:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5227,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5200,
                        "src": "6371:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5226,
                      "name": "ContractAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5005,
                      "src": "6357:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6357:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5229,
                  "nodeType": "EmitStatement",
                  "src": "6352:27:26"
                }
              ]
            },
            "documentation": null,
            "id": 5231,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5203,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5202,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "6135:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6135:14:26"
              },
              {
                "arguments": null,
                "id": 5205,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5204,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "6158:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6158:17:26"
              },
              {
                "arguments": null,
                "id": 5207,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5206,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "6184:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6184:13:26"
              }
            ],
            "name": "addContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5200,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5231,
                  "src": "6095:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5199,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6095:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6094:17:26"
            },
            "returnParameters": {
              "id": 5208,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6202:0:26"
            },
            "scope": 5447,
            "src": "6074:312:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5256,
              "nodeType": "Block",
              "src": "6637:119:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5245,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5233,
                        "src": "6664:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5242,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4960,
                        "src": "6647:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5244,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16553,
                      "src": "6647:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6647:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5247,
                  "nodeType": "ExpressionStatement",
                  "src": "6647:25:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5249,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5233,
                        "src": "6701:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5248,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5417,
                      "src": "6682:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6682:27:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5251,
                  "nodeType": "ExpressionStatement",
                  "src": "6682:27:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5253,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5233,
                        "src": "6741:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5252,
                      "name": "ContractRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5009,
                      "src": "6725:15:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6725:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5255,
                  "nodeType": "EmitStatement",
                  "src": "6720:29:26"
                }
              ]
            },
            "documentation": null,
            "id": 5257,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5236,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5235,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "6570:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6570:14:26"
              },
              {
                "arguments": null,
                "id": 5238,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5237,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "6593:17:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6593:17:26"
              },
              {
                "arguments": null,
                "id": 5240,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5239,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "6619:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6619:13:26"
              }
            ],
            "name": "removeContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5234,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5233,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5257,
                  "src": "6530:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5232,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6530:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6529:17:26"
            },
            "returnParameters": {
              "id": 5241,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6637:0:26"
            },
            "scope": 5447,
            "src": "6506:250:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5269,
              "nodeType": "Block",
              "src": "7009:46:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5266,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5259,
                        "src": "7040:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5264,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4960,
                        "src": "7026:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5265,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16576,
                      "src": "7026:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 5267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7026:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5263,
                  "id": 5268,
                  "nodeType": "Return",
                  "src": "7019:29:26"
                }
              ]
            },
            "documentation": null,
            "id": 5270,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isDAOContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5260,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5259,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5270,
                  "src": "6965:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5258,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6965:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6964:17:26"
            },
            "returnParameters": {
              "id": 5263,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5262,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5270,
                  "src": "7003:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5261,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7003:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7002:6:26"
            },
            "scope": 5447,
            "src": "6942:113:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5310,
              "nodeType": "Block",
              "src": "7213:273:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5278,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5272,
                        "src": "7237:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5275,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4958,
                        "src": "7223:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5277,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16522,
                      "src": "7223:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7223:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5280,
                  "nodeType": "ExpressionStatement",
                  "src": "7223:22:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5281,
                      "name": "whitelistedCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4963,
                      "src": "7256:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5282,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7276:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7256:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5284,
                  "nodeType": "ExpressionStatement",
                  "src": "7256:21:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5285,
                        "name": "dateAdded",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4977,
                        "src": "7287:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5287,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5286,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5272,
                        "src": "7297:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7287:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5288,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18009,
                      "src": "7308:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7287:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5290,
                  "nodeType": "ExpressionStatement",
                  "src": "7287:24:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5291,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4973,
                        "src": "7321:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5293,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5292,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5272,
                        "src": "7339:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7321:26:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5294,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18009,
                      "src": "7350:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7321:32:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5296,
                  "nodeType": "ExpressionStatement",
                  "src": "7321:32:26"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5298,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5272,
                        "src": "7379:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5297,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5446,
                      "src": "7368:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 5299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7368:19:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5305,
                  "nodeType": "IfStatement",
                  "src": "7364:75:26",
                  "trueBody": {
                    "id": 5304,
                    "nodeType": "Block",
                    "src": "7389:50:26",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5302,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5300,
                            "name": "whitelistedContracts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4966,
                            "src": "7403:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 5301,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7427:1:26",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "7403:25:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5303,
                        "nodeType": "ExpressionStatement",
                        "src": "7403:25:26"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5307,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5272,
                        "src": "7471:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5306,
                      "name": "WhitelistedAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4997,
                      "src": "7454:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7454:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5309,
                  "nodeType": "EmitStatement",
                  "src": "7449:30:26"
                }
              ]
            },
            "documentation": null,
            "id": 5311,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5273,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5272,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5311,
                  "src": "7187:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5271,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7187:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7186:17:26"
            },
            "returnParameters": {
              "id": 5274,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7213:0:26"
            },
            "scope": 5447,
            "src": "7162:324:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5353,
              "nodeType": "Block",
              "src": "7722:249:26",
              "statements": [
                {
                  "assignments": [
                    5319
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5319,
                      "name": "pHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 5353,
                      "src": "7732:13:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5318,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7732:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5325,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5322,
                            "name": "did",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5315,
                            "src": "7764:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 5321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7758:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": "bytes"
                        },
                        "id": 5323,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7758:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5320,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18001,
                      "src": "7748:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 5324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7748:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7732:37:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 5327,
                            "name": "didHashToAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4985,
                            "src": "7787:16:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                              "typeString": "mapping(bytes32 => address)"
                            }
                          },
                          "id": 5329,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 5328,
                            "name": "pHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5319,
                            "src": "7804:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7787:23:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5331,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7822:1:26",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5330,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7814:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 5332,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7814:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7787:37:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "44494420616c72656164792072656769737465726564",
                        "id": 5334,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7826:24:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_761cab18940f21d9559eeced38da846400e6144eb9c0e8f0f4c044714a4f97c4",
                          "typeString": "literal_string \"DID already registered\""
                        },
                        "value": "DID already registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_761cab18940f21d9559eeced38da846400e6144eb9c0e8f0f4c044714a4f97c4",
                          "typeString": "literal_string \"DID already registered\""
                        }
                      ],
                      "id": 5326,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18010,
                        18011
                      ],
                      "referencedDeclaration": 18011,
                      "src": "7779:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7779:72:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5336,
                  "nodeType": "ExpressionStatement",
                  "src": "7779:72:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5337,
                        "name": "addrToDID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4981,
                        "src": "7862:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 5339,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5338,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5313,
                        "src": "7872:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7862:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5340,
                      "name": "did",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5315,
                      "src": "7883:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "7862:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 5342,
                  "nodeType": "ExpressionStatement",
                  "src": "7862:24:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5343,
                        "name": "didHashToAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4985,
                        "src": "7896:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 5345,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5344,
                        "name": "pHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5319,
                        "src": "7913:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7896:23:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5346,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5313,
                      "src": "7922:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7896:33:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5348,
                  "nodeType": "ExpressionStatement",
                  "src": "7896:33:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5350,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5313,
                        "src": "7956:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5349,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5311,
                      "src": "7940:15:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7940:24:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5352,
                  "nodeType": "ExpressionStatement",
                  "src": "7940:24:26"
                }
              ]
            },
            "documentation": null,
            "id": 5354,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addWhitelistedWithDID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5313,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5354,
                  "src": "7677:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5312,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7677:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5315,
                  "name": "did",
                  "nodeType": "VariableDeclaration",
                  "scope": 5354,
                  "src": "7694:17:26",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5314,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7694:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7676:36:26"
            },
            "returnParameters": {
              "id": 5317,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7722:0:26"
            },
            "scope": 5447,
            "src": "7645:326:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5416,
              "nodeType": "Block",
              "src": "8137:460:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5362,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5356,
                        "src": "8164:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5359,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4958,
                        "src": "8147:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5361,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16553,
                      "src": "8147:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8147:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5364,
                  "nodeType": "ExpressionStatement",
                  "src": "8147:25:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5365,
                      "name": "whitelistedCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4963,
                      "src": "8183:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8203:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "8183:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5368,
                  "nodeType": "ExpressionStatement",
                  "src": "8183:21:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8214:33:26",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5369,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4973,
                        "src": "8221:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5371,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5370,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5356,
                        "src": "8239:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8221:26:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5373,
                  "nodeType": "ExpressionStatement",
                  "src": "8214:33:26"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5375,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5356,
                        "src": "8273:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5374,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5446,
                      "src": "8262:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 5376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8262:19:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5382,
                  "nodeType": "IfStatement",
                  "src": "8258:75:26",
                  "trueBody": {
                    "id": 5381,
                    "nodeType": "Block",
                    "src": "8283:50:26",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5379,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5377,
                            "name": "whitelistedContracts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4966,
                            "src": "8297:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 5378,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8321:1:26",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "8297:25:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5380,
                        "nodeType": "ExpressionStatement",
                        "src": "8297:25:26"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5384
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5384,
                      "name": "did",
                      "nodeType": "VariableDeclaration",
                      "scope": 5416,
                      "src": "8343:17:26",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 5383,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "8343:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5388,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5385,
                      "name": "addrToDID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4981,
                      "src": "8363:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                        "typeString": "mapping(address => string storage ref)"
                      }
                    },
                    "id": 5387,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5386,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5356,
                      "src": "8373:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8363:18:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8343:38:26"
                },
                {
                  "assignments": [
                    5390
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5390,
                      "name": "pHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 5416,
                      "src": "8391:13:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5389,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "8391:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5396,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5393,
                            "name": "did",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5384,
                            "src": "8423:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 5392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8417:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": "bytes"
                        },
                        "id": 5394,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8417:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5391,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18001,
                      "src": "8407:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 5395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8407:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8391:37:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5400,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8439:33:26",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5397,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4973,
                        "src": "8446:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5399,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5398,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5356,
                        "src": "8464:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8446:26:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5401,
                  "nodeType": "ExpressionStatement",
                  "src": "8439:33:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8482:25:26",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5402,
                        "name": "addrToDID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4981,
                        "src": "8489:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 5404,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5403,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5356,
                        "src": "8499:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8489:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5406,
                  "nodeType": "ExpressionStatement",
                  "src": "8482:25:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8517:30:26",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5407,
                        "name": "didHashToAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4985,
                        "src": "8524:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 5409,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5408,
                        "name": "pHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5390,
                        "src": "8541:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8524:23:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5411,
                  "nodeType": "ExpressionStatement",
                  "src": "8517:30:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5413,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5356,
                        "src": "8582:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5412,
                      "name": "WhitelistedRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5001,
                      "src": "8563:18:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5414,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8563:27:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5415,
                  "nodeType": "EmitStatement",
                  "src": "8558:32:26"
                }
              ]
            },
            "documentation": null,
            "id": 5417,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_removeWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5357,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5356,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5417,
                  "src": "8111:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5355,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8111:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8110:17:26"
            },
            "returnParameters": {
              "id": 5358,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8137:0:26"
            },
            "scope": 5447,
            "src": "8083:514:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5429,
              "nodeType": "Block",
              "src": "8876:46:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5426,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5419,
                        "src": "8907:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5424,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4956,
                        "src": "8893:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5425,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16576,
                      "src": "8893:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 5427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8893:22:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5423,
                  "id": 5428,
                  "nodeType": "Return",
                  "src": "8886:29:26"
                }
              ]
            },
            "documentation": null,
            "id": 5430,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5419,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5430,
                  "src": "8832:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5418,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8832:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8831:17:26"
            },
            "returnParameters": {
              "id": 5423,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5422,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5430,
                  "src": "8870:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5421,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8870:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8869:6:26"
            },
            "scope": 5447,
            "src": "8809:113:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5445,
              "nodeType": "Block",
              "src": "9104:128:26",
              "statements": [
                {
                  "assignments": [
                    5438
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5438,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 5445,
                      "src": "9114:14:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5437,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9114:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5439,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9114:14:26"
                },
                {
                  "externalReferences": [
                    {
                      "length": {
                        "declaration": 5438,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9161:6:26",
                        "valueSize": 1
                      }
                    },
                    {
                      "_addr": {
                        "declaration": 5432,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9183:5:26",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 5440,
                  "nodeType": "InlineAssembly",
                  "operations": "{ length := extcodesize(_addr) }",
                  "src": "9138:61:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5441,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5438,
                      "src": "9215:6:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 5442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9224:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9215:10:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5436,
                  "id": 5444,
                  "nodeType": "Return",
                  "src": "9208:17:26"
                }
              ]
            },
            "documentation": null,
            "id": 5446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5433,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5432,
                  "name": "_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 5446,
                  "src": "9060:13:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5431,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9060:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9059:15:26"
            },
            "returnParameters": {
              "id": 5436,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5435,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5446,
                  "src": "9098:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5434,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9098:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9097:6:26"
            },
            "scope": 5447,
            "src": "9040:192:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5448,
        "src": "456:8778:26"
      }
    ],
    "src": "0:9235:26"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {
        "0x44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b878967": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "BlacklistAdded",
          "type": "event"
        },
        "0x1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde8": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "BlacklistRemoved",
          "type": "event"
        },
        "0xee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "WhitelistedAdded",
          "type": "event"
        },
        "0x270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b6": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "WhitelistedRemoved",
          "type": "event"
        },
        "0x89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e205": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "ContractAdded",
          "type": "event"
        },
        "0x8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b565": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "ContractRemoved",
          "type": "event"
        },
        "0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Paused",
          "type": "event"
        },
        "0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Unpaused",
          "type": "event"
        },
        "0x6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f8": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "PauserAdded",
          "type": "event"
        },
        "0xcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "PauserRemoved",
          "type": "event"
        },
        "0x3505858ac30c166c603cb64de4a970615e36a4ed8fea37ba93bc5f11a38dd309": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "IdentityAdminAdded",
          "type": "event"
        },
        "0x869f6a5b4767d57c58d57f1ddf82e1516487f35944a19bf30a4a21bd35f6ad05": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "IdentityAdminRemoved",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xfb5dAF44cd18Db7b96DB3F9c6E411D65fcf4f372",
      "transactionHash": "0xfea4b67d0d9fd07b011755c8a86da72dbd403881d44770fd1bb3cf36fe34a2fa"
    },
    "122": {
      "events": {
        "0x44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b878967": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "BlacklistAdded",
          "type": "event"
        },
        "0x1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde8": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "BlacklistRemoved",
          "type": "event"
        },
        "0xee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "WhitelistedAdded",
          "type": "event"
        },
        "0x270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b6": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "WhitelistedRemoved",
          "type": "event"
        },
        "0x89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e205": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "ContractAdded",
          "type": "event"
        },
        "0x8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b565": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "ContractRemoved",
          "type": "event"
        },
        "0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Paused",
          "type": "event"
        },
        "0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Unpaused",
          "type": "event"
        },
        "0x6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f8": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "PauserAdded",
          "type": "event"
        },
        "0xcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "PauserRemoved",
          "type": "event"
        },
        "0x3505858ac30c166c603cb64de4a970615e36a4ed8fea37ba93bc5f11a38dd309": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "IdentityAdminAdded",
          "type": "event"
        },
        "0x869f6a5b4767d57c58d57f1ddf82e1516487f35944a19bf30a4a21bd35f6ad05": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "account",
              "type": "address"
            }
          ],
          "name": "IdentityAdminRemoved",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x104efFcBDddae9cd4813b8A05Ecd6A17BaBfE6d9",
      "transactionHash": "0x433cd127d8b30a7630c4857a233d9540495a70e6eb54883f52f597b72952d7e5"
    },
    "4447": {
      "events": {
        "0x44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b878967": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "BlacklistAdded",
          "type": "event"
        },
        "0x1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde8": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "BlacklistRemoved",
          "type": "event"
        },
        "0x89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e205": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "ContractAdded",
          "type": "event"
        },
        "0x8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b565": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "ContractRemoved",
          "type": "event"
        },
        "0x3505858ac30c166c603cb64de4a970615e36a4ed8fea37ba93bc5f11a38dd309": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "IdentityAdminAdded",
          "type": "event"
        },
        "0x869f6a5b4767d57c58d57f1ddf82e1516487f35944a19bf30a4a21bd35f6ad05": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "IdentityAdminRemoved",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        },
        "0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Paused",
          "type": "event"
        },
        "0x6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f8": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "PauserAdded",
          "type": "event"
        },
        "0xcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "PauserRemoved",
          "type": "event"
        },
        "0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Unpaused",
          "type": "event"
        },
        "0xee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "WhitelistedAdded",
          "type": "event"
        },
        "0x270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b6": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "WhitelistedRemoved",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x20dc01F017f50C1118BB15de855610c8b02147B8",
      "transactionHash": "0xb4e506f35790716ef0a4981b7f17ae127d8900c5d84271070497985c7a522f78"
    }
  },
  "schemaVersion": "3.2.3",
  "updatedAt": "2022-10-27T11:34:11.203Z",
  "devdoc": {
    "methods": {
      "addIdentityAdmin(address)": {
        "details": "Adds a identity admin account. Is only callable by owner.",
        "params": {
          "account": "Address to be added"
        },
        "return": "true if successful"
      },
      "isIdentityAdmin(address)": {
        "details": "Checks if account is identity admin",
        "params": {
          "account": "Account to check"
        },
        "return": "Boolean indicating if account is identity admin"
      },
      "isOwner()": {
        "return": "true if `msg.sender` is the owner of the contract."
      },
      "isRegistered()": {
        "details": "function to see if an avatar has been set and if this scheme is registered",
        "return": "true if scheme is registered"
      },
      "isRegistered(address)": {
        "details": "function to see if an avatar has been set and if this scheme is registered",
        "return": "true if scheme is registered"
      },
      "owner()": {
        "return": "the address of the owner."
      },
      "pause()": {
        "details": "called by the owner to pause, triggers stopped state"
      },
      "paused()": {
        "return": "true if the contract is paused, false otherwise."
      },
      "removeIdentityAdmin(address)": {
        "details": "Removes a identity admin account. Is only callable by owner.",
        "params": {
          "account": "Address to be removed"
        },
        "return": "true if successful"
      },
      "renounceIdentityAdmin()": {
        "details": "Allows an admin to renounce their role"
      },
      "renounceOwnership()": {
        "details": "Allows the current owner to relinquish control of the contract."
      },
      "setAvatar(address)": {
        "details": "Function to set a new avatar and controller for scheme can only be done by owner of scheme"
      },
      "transferOwnership(address)": {
        "details": "Allows the current owner to transfer control of the contract to a newOwner.",
        "params": {
          "newOwner": "The address to transfer ownership to."
        }
      },
      "unpause()": {
        "details": "called by the owner to unpause, returns to normal state"
      }
    }
  },
  "userdoc": {
    "methods": {
      "renounceOwnership()": {
        "notice": "Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore."
      }
    }
  }
}