{
  "contractName": "ACL",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "hasInitialized",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "NO_PERMISSION",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_script",
          "type": "bytes"
        }
      ],
      "name": "getEVMScriptExecutor",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRecoveryVault",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CREATE_PERMISSIONS_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "token",
          "type": "address"
        }
      ],
      "name": "allowRecoverability",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "appId",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInitializationBlock",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "transferToVault",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "_params",
          "type": "uint256[]"
        }
      ],
      "name": "canPerform",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getEVMScriptRegistry",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ANY_ENTITY",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "EMPTY_PARAM_HASH",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "kernel",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isPetrified",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "BURN_ENTITY",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "entity",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "app",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "allowed",
          "type": "bool"
        }
      ],
      "name": "SetPermission",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "entity",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "app",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "paramsHash",
          "type": "bytes32"
        }
      ],
      "name": "SetPermissionParams",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "app",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "manager",
          "type": "address"
        }
      ],
      "name": "ChangePermissionManager",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "executor",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "script",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "input",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "returnData",
          "type": "bytes"
        }
      ],
      "name": "ScriptResult",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "vault",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RecoverToVault",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_permissionsCreator",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_entity",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "_manager",
          "type": "address"
        }
      ],
      "name": "createPermission",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_entity",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "grantPermission",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_entity",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "_params",
          "type": "uint256[]"
        }
      ],
      "name": "grantPermissionP",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_entity",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "revokePermission",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newManager",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "setPermissionManager",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "removePermissionManager",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "createBurnedPermission",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "burnPermissionManager",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_entity",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "getPermissionParamsLength",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_entity",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "getPermissionParam",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        },
        {
          "name": "",
          "type": "uint8"
        },
        {
          "name": "",
          "type": "uint240"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "getPermissionManager",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_who",
          "type": "address"
        },
        {
          "name": "_where",
          "type": "address"
        },
        {
          "name": "_what",
          "type": "bytes32"
        }
      ],
      "name": "hasPermission",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_who",
          "type": "address"
        },
        {
          "name": "_where",
          "type": "address"
        },
        {
          "name": "_what",
          "type": "bytes32"
        },
        {
          "name": "_how",
          "type": "uint256[]"
        }
      ],
      "name": "hasPermission",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_who",
          "type": "address"
        },
        {
          "name": "_where",
          "type": "address"
        },
        {
          "name": "_what",
          "type": "bytes32"
        },
        {
          "name": "_how",
          "type": "bytes"
        }
      ],
      "name": "hasPermission",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_paramsHash",
          "type": "bytes32"
        },
        {
          "name": "_who",
          "type": "address"
        },
        {
          "name": "_where",
          "type": "address"
        },
        {
          "name": "_what",
          "type": "bytes32"
        },
        {
          "name": "_how",
          "type": "uint256[]"
        }
      ],
      "name": "evalParams",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"hasInitialized\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_app\",\"type\":\"address\"},{\"name\":\"_role\",\"type\":\"bytes32\"}],\"name\":\"createBurnedPermission\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_app\",\"type\":\"address\"},{\"name\":\"_role\",\"type\":\"bytes32\"}],\"name\":\"burnPermissionManager\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_entity\",\"type\":\"address\"},{\"name\":\"_app\",\"type\":\"address\"},{\"name\":\"_role\",\"type\":\"bytes32\"}],\"name\":\"grantPermission\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_entity\",\"type\":\"address\"},{\"name\":\"_app\",\"type\":\"address\"},{\"name\":\"_role\",\"type\":\"bytes32\"}],\"name\":\"getPermissionParamsLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_paramsHash\",\"type\":\"bytes32\"},{\"name\":\"_who\",\"type\":\"address\"},{\"name\":\"_where\",\"type\":\"address\"},{\"name\":\"_what\",\"type\":\"bytes32\"},{\"name\":\"_how\",\"type\":\"uint256[]\"}],\"name\":\"evalParams\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"NO_PERMISSION\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_script\",\"type\":\"bytes\"}],\"name\":\"getEVMScriptExecutor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getRecoveryVault\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CREATE_PERMISSIONS_ROLE\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_entity\",\"type\":\"address\"},{\"name\":\"_app\",\"type\":\"address\"},{\"name\":\"_role\",\"type\":\"bytes32\"},{\"name\":\"_params\",\"type\":\"uint256[]\"}],\"name\":\"grantPermissionP\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_who\",\"type\":\"address\"},{\"name\":\"_where\",\"type\":\"address\"},{\"name\":\"_what\",\"type\":\"bytes32\"}],\"name\":\"hasPermission\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"allowRecoverability\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"appId\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getInitializationBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_entity\",\"type\":\"address\"},{\"name\":\"_app\",\"type\":\"address\"},{\"name\":\"_role\",\"type\":\"bytes32\"}],\"name\":\"revokePermission\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"transferToVault\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_entity\",\"type\":\"address\"},{\"name\":\"_app\",\"type\":\"address\"},{\"name\":\"_role\",\"type\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getPermissionParam\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"uint240\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_sender\",\"type\":\"address\"},{\"name\":\"_role\",\"type\":\"bytes32\"},{\"name\":\"_params\",\"type\":\"uint256[]\"}],\"name\":\"canPerform\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getEVMScriptRegistry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ANY_ENTITY\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_app\",\"type\":\"address\"},{\"name\":\"_role\",\"type\":\"bytes32\"}],\"name\":\"removePermissionManager\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newManager\",\"type\":\"address\"},{\"name\":\"_app\",\"type\":\"address\"},{\"name\":\"_role\",\"type\":\"bytes32\"}],\"name\":\"setPermissionManager\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_app\",\"type\":\"address\"},{\"name\":\"_role\",\"type\":\"bytes32\"}],\"name\":\"getPermissionManager\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_entity\",\"type\":\"address\"},{\"name\":\"_app\",\"type\":\"address\"},{\"name\":\"_role\",\"type\":\"bytes32\"},{\"name\":\"_manager\",\"type\":\"address\"}],\"name\":\"createPermission\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_permissionsCreator\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"EMPTY_PARAM_HASH\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"kernel\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isPetrified\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BURN_ENTITY\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_who\",\"type\":\"address\"},{\"name\":\"_where\",\"type\":\"address\"},{\"name\":\"_what\",\"type\":\"bytes32\"},{\"name\":\"_how\",\"type\":\"uint256[]\"}],\"name\":\"hasPermission\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_who\",\"type\":\"address\"},{\"name\":\"_where\",\"type\":\"address\"},{\"name\":\"_what\",\"type\":\"bytes32\"},{\"name\":\"_how\",\"type\":\"bytes\"}],\"name\":\"hasPermission\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"entity\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"app\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"SetPermission\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"entity\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"app\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"paramsHash\",\"type\":\"bytes32\"}],\"name\":\"SetPermissionParams\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"app\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"ChangePermissionManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"script\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"input\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ScriptResult\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"vault\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RecoverToVault\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"allowRecoverability(address)\":{\"details\":\"By default deriving from AragonApp makes it recoverable\",\"params\":{\"token\":\"Token address that would be recovered\"},\"return\":\"bool whether the app allows the recovery\"},\"burnPermissionManager(address,bytes32)\":{\"params\":{\"_app\":\"Address of the app in which the permission is being burned\",\"_role\":\"Identifier for the group of actions being burned\"}},\"canPerform(address,bytes32,uint256[])\":{\"details\":\"Check whether an action can be performed by a sender for a particular role on this app\",\"params\":{\"_params\":\"Permission params for the role\",\"_role\":\"Role on this app\",\"_sender\":\"Sender of the call\"},\"return\":\"Boolean indicating whether the sender has the permissions to perform the action.        Always returns false if the app hasn't been initialized yet.\"},\"createBurnedPermission(address,bytes32)\":{\"params\":{\"_app\":\"Address of the app in which the permission is being burned\",\"_role\":\"Identifier for the group of actions being burned\"}},\"createPermission(address,address,bytes32,address)\":{\"details\":\"Creates a permission that wasn't previously set and managed.     If a created permission is removed it is possible to reset it with createPermission.     This is the **ONLY** way to create permissions and set managers to permissions that don't     have a manager.     In terms of the ACL being initialized, this function implicitly protects all the other     state-changing external functions, as they all require the sender to be a manager.\",\"params\":{\"_app\":\"Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\",\"_entity\":\"Address of the whitelisted entity that will be able to perform the role\",\"_manager\":\"Address of the entity that will be able to grant and revoke the permission further.\",\"_role\":\"Identifier for the group of actions in app given access to perform\"}},\"getInitializationBlock()\":{\"return\":\"Block number in which the contract was initialized\"},\"getPermissionManager(address,bytes32)\":{\"details\":\"Get manager for permission\",\"params\":{\"_app\":\"Address of the app\",\"_role\":\"Identifier for a group of actions in app\"},\"return\":\"address of the manager for the permission\"},\"getPermissionParam(address,address,bytes32,uint256)\":{\"params\":{\"_app\":\"Address of the app\",\"_entity\":\"Address of the whitelisted entity that will be able to perform the role\",\"_index\":\"Index of parameter in the array\",\"_role\":\"Identifier for a group of actions in app\"},\"return\":\"Parameter (id, op, value)\"},\"getPermissionParamsLength(address,address,bytes32)\":{\"params\":{\"_app\":\"Address of the app\",\"_entity\":\"Address of the whitelisted entity that will be able to perform the role\",\"_role\":\"Identifier for a group of actions in app\"},\"return\":\"Length of the array\"},\"getRecoveryVault()\":{\"details\":\"Get the recovery vault for the app\",\"return\":\"Recovery vault address for the app\"},\"grantPermission(address,address,bytes32)\":{\"details\":\"Grants permission if allowed. This requires `msg.sender` to be the permission manager\",\"params\":{\"_app\":\"Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\",\"_entity\":\"Address of the whitelisted entity that will be able to perform the role\",\"_role\":\"Identifier for the group of actions in app given access to perform\"}},\"grantPermissionP(address,address,bytes32,uint256[])\":{\"details\":\"Grants a permission with parameters if allowed. This requires `msg.sender` to be the permission manager\",\"params\":{\"_app\":\"Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\",\"_entity\":\"Address of the whitelisted entity that will be able to perform the role\",\"_params\":\"Permission parameters\",\"_role\":\"Identifier for the group of actions in app given access to perform\"}},\"hasInitialized()\":{\"return\":\"Whether the contract has been initialized by the time of the current block\"},\"hasPermission(address,address,bytes32,bytes)\":{\"details\":\"Function called by apps to check ACL on kernel or to check permission statu\",\"params\":{\"_how\":\"Permission parameters\",\"_where\":\"Identifier for a group of actions in app\",\"_who\":\"Sender of the original call\"},\"return\":\"boolean indicating whether the ACL allows the role or not\"},\"initialize(address)\":{\"details\":\"Initialize can only be called once. It saves the block number in which it was initialized.\",\"params\":{\"_permissionsCreator\":\"Entity that will be given permission over createPermission\"}},\"removePermissionManager(address,bytes32)\":{\"params\":{\"_app\":\"Address of the app in which the permission is being unmanaged\",\"_role\":\"Identifier for the group of actions being unmanaged\"}},\"revokePermission(address,address,bytes32)\":{\"details\":\"Revokes permission if allowed. This requires `msg.sender` to be the the permission manager\",\"params\":{\"_app\":\"Address of the app in which the role will be revoked\",\"_entity\":\"Address of the whitelisted entity to revoke access from\",\"_role\":\"Identifier for the group of actions in app being revoked\"}},\"setPermissionManager(address,address,bytes32)\":{\"params\":{\"_app\":\"Address of the app in which the permission management is being transferred\",\"_newManager\":\"Address for the new manager\",\"_role\":\"Identifier for the group of actions being transferred\"}},\"transferToVault(address)\":{\"params\":{\"_token\":\"Token balance to be sent to recovery vault.\"}}}},\"userdoc\":{\"methods\":{\"burnPermissionManager(address,bytes32)\":{\"notice\":\"Burn `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\"},\"createBurnedPermission(address,bytes32)\":{\"notice\":\"Burn non-existent `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\"},\"createPermission(address,address,bytes32,address)\":{\"notice\":\"Create a new permission granting `_entity` the ability to perform actions requiring `_role` on `_app`, setting `_manager` as the permission's manager\"},\"getPermissionParam(address,address,bytes32,uint256)\":{\"notice\":\"Get parameter for permission\"},\"getPermissionParamsLength(address,address,bytes32)\":{\"notice\":\"Get parameters for permission array length\"},\"grantPermission(address,address,bytes32)\":{\"notice\":\"Grant `_entity` the ability to perform actions requiring `_role` on `_app`\"},\"grantPermissionP(address,address,bytes32,uint256[])\":{\"notice\":\"Grant `_entity` the ability to perform actions requiring `_role` on `_app`\"},\"initialize(address)\":{\"notice\":\"Initialize an ACL instance and set `_permissionsCreator` as the entity that can create other permissions\"},\"removePermissionManager(address,bytes32)\":{\"notice\":\"Remove the manager of `_role` in `_app`\"},\"revokePermission(address,address,bytes32)\":{\"notice\":\"Revoke from `_entity` the ability to perform actions requiring `_role` on `_app`\"},\"setPermissionManager(address,address,bytes32)\":{\"notice\":\"Set `_newManager` as the manager of `_role` in `_app`\"},\"transferToVault(address)\":{\"notice\":\"Send funds to recovery Vault. This contract should never receive funds,        but in case it does, this function allows one to recover them.\"}}}},\"settings\":{\"compilationTarget\":{\"@aragon/os/contracts/acl/ACL.sol\":\"ACL\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@aragon/os/contracts/acl/ACL.sol\":{\"keccak256\":\"0xcb2488421b22af099bafe210916d33c9b7c3a06c4290583ff74733a825860754\",\"urls\":[\"bzzr://3bcd0183d28b5c50f72345d8aa2635eb89dba2d45e382c0f59ae66ead2296ad4\"]},\"@aragon/os/contracts/acl/ACLSyntaxSugar.sol\":{\"keccak256\":\"0x519915c14576b679b5ed5767d6b21b44a13aa7ae2fe7b33664ca364fafc33e00\",\"urls\":[\"bzzr://8d899afdbf161eaa5e6ce6a68d9ea420c3f98a00a71d70b293e8de8771e6aa62\"]},\"@aragon/os/contracts/acl/IACL.sol\":{\"keccak256\":\"0xe3492bc29d2482e65d2e39c96487b5388f6181f6bcdc6fe6329b8206b84c0cf1\",\"urls\":[\"bzzr://3af0b7e423c7ff4100a3b5868203ec169c866328f2d93d3b6a2111e916cdc411\"]},\"@aragon/os/contracts/acl/IACLOracle.sol\":{\"keccak256\":\"0xada5651af900192b440c9a7802d531846d9d4ce12338b53f3091257b4c2e9f28\",\"urls\":[\"bzzr://1b9787c7808d9217e6df31f50d62f78336909a695d80a6bfb1d031a2d968f7f4\"]},\"@aragon/os/contracts/apps/AppStorage.sol\":{\"keccak256\":\"0xb1c8eb71d1bdfe1241cc1714b280b46bbfc5bcb1e8499d42c24d3f5f5e8130f1\",\"urls\":[\"bzzr://503beec9e0e19834cb685a1d037eb9caaa412e3709d90bf6e53f51d143d58029\"]},\"@aragon/os/contracts/apps/AragonApp.sol\":{\"keccak256\":\"0xba456000d65bea8d9d82e9f1789086c3777df68fe364f8f397973b6d579f3a2a\",\"urls\":[\"bzzr://85ae9658277830a9454e34e319f8fbcb27d4e015d3bb1219c4d42ec33b9a184e\"]},\"@aragon/os/contracts/common/Autopetrified.sol\":{\"keccak256\":\"0x216e6ecbdcf45d90e8846ab2773072bd82180558a7dcf0c5425ed13b0188c5f3\",\"urls\":[\"bzzr://95b7ec6b2e8d3d8cd8c02f9be8b17d715c48a35445ba194429cca5264bfd0435\"]},\"@aragon/os/contracts/common/ConversionHelpers.sol\":{\"keccak256\":\"0x9872383d458352f5c68fa5afd1fc84ab6b172cbee33359cfa57655b8eda92416\",\"urls\":[\"bzzr://4636d13fecb497561ff5a2c54bb936a0339308bffa4e71a988b8ce00dcc249f3\"]},\"@aragon/os/contracts/common/EtherTokenConstant.sol\":{\"keccak256\":\"0xb18d16ad5127519251d9759349bf0ce1e5cfc861a776c5297b91a625c84d0363\",\"urls\":[\"bzzr://42b57d455cdbf7a8ab1383eb977c55d1826870a488cfc0cbc906a3d0f9ad2328\"]},\"@aragon/os/contracts/common/IVaultRecoverable.sol\":{\"keccak256\":\"0xd7cb66ee5d01be69a6abab04583cc86755bf63c2f1fd03b519a876162f52b323\",\"urls\":[\"bzzr://acb75e2637639bbc83b95032a822a54a588889f203b188e97cd78292cc0ee7f5\"]},\"@aragon/os/contracts/common/Initializable.sol\":{\"keccak256\":\"0xc559fdbee1c0ee18b6f2f866c28ed6eb96859b2c88f75867ca11f25ebd00b090\",\"urls\":[\"bzzr://3d3bca8b35030fc12f94bb52a162be9520868b27ff2cb32f09179d67b6ffdf93\"]},\"@aragon/os/contracts/common/IsContract.sol\":{\"keccak256\":\"0xb76e263e3532883fe32dfe4b1447eb487a570e121c5cce01cee604dd9e44a075\",\"urls\":[\"bzzr://4a7dd7aafff496a2c6403a7e9f4e74562088b5a38e2f6e2670e38dab11b9cd8f\"]},\"@aragon/os/contracts/common/Petrifiable.sol\":{\"keccak256\":\"0xb69f9d6de8ff6f2a084aca2e0228c9008a8776482a70bcab16f46a693ec77be6\",\"urls\":[\"bzzr://ca1d7bb504b8d9d75c162f5edc8588ac86934b69f765f2010d603027dc534375\"]},\"@aragon/os/contracts/common/ReentrancyGuard.sol\":{\"keccak256\":\"0x2b2014de57620aedded6365e742e17b9a23492d754e48dfeefa56f7e5bcf5645\",\"urls\":[\"bzzr://1aa2b79808ccb14b6c2d68f9283bd40300877c749b44edf0f66d78f0c1d17708\"]},\"@aragon/os/contracts/common/SafeERC20.sol\":{\"keccak256\":\"0xd251a1207e1faa4c41500bf927310bb739b1fbc0bf880f236f8e0a9236d6a03a\",\"urls\":[\"bzzr://b2d0f5981950b4e90eaee65c85050ac4f86a79f579f4ef38e6b281c0de980b2b\"]},\"@aragon/os/contracts/common/TimeHelpers.sol\":{\"keccak256\":\"0x95b785dc4319f6ce5255c9adf5e68a469a0f837f7b02e01b6bc974b4921d4024\",\"urls\":[\"bzzr://53f41920d95ed5cb7326de3062063c9296076809377fbadf2cbd26ab0c84ffd1\"]},\"@aragon/os/contracts/common/Uint256Helpers.sol\":{\"keccak256\":\"0x83033025a3f4402be3b7bcc9a23ce96ae4fadc7f251da8f139d73a13a3400b0c\",\"urls\":[\"bzzr://bd0e059eff36a66c3a28298ed5a2e1b058ce93057866ab36063e9f3095cef36f\"]},\"@aragon/os/contracts/common/UnstructuredStorage.sol\":{\"keccak256\":\"0xe0d627fc7a7716409389f34cfe49366ba7871309d3a73262ec9608ef73e47591\",\"urls\":[\"bzzr://9742204494402cdecc66b266f0e420fcfe2677ba710db7651c40f96a63940bef\"]},\"@aragon/os/contracts/common/VaultRecoverable.sol\":{\"keccak256\":\"0x4f4de2c27ea7df731ad7d9babc37965a805282fed16b422f46a35d9d2ef931a1\",\"urls\":[\"bzzr://02d492884e6b1cf7c0869974219c40453d23cf2021cc1deaa6895e0f1b4404b9\"]},\"@aragon/os/contracts/evmscript/EVMScriptRunner.sol\":{\"keccak256\":\"0xcb6b5f7d2610321882cdc86819f1a51341c33b510fff7c60936ac7d7a015d7be\",\"urls\":[\"bzzr://bc430c1487d75909dc059de848123822c257ea9e7c812a7252c10986be253e21\"]},\"@aragon/os/contracts/evmscript/IEVMScriptExecutor.sol\":{\"keccak256\":\"0x9cab64cd2f10148d4e20433ecd11679e69be1fbde112892c48db94f92e48c571\",\"urls\":[\"bzzr://b4bf9f4fc41e6e7791a84d0847410677fc0066ed393872186d90f819f5f22cc0\"]},\"@aragon/os/contracts/evmscript/IEVMScriptRegistry.sol\":{\"keccak256\":\"0x00d98507ec160cb7cc814cc9bdebd01a414353636d6045720fe6d1592277694b\",\"urls\":[\"bzzr://170505211d1846fe24b89cfceea7f5b59a587527f68f89e8f36fed8e08b02db4\"]},\"@aragon/os/contracts/kernel/IKernel.sol\":{\"keccak256\":\"0xd02b98282ccd271b0caa86f2c249986f1619dcf41811f5dadce520b32610b68e\",\"urls\":[\"bzzr://e77000fc50cf4cfb160518af1cfb612e6cbbc06cb4357b1e03ff492fd17d8d2e\"]},\"@aragon/os/contracts/kernel/KernelConstants.sol\":{\"keccak256\":\"0x95e46be2becfb4c8952880909cd32adf5dcfa8c2e0fdf4ae054bbf83ef7f53cd\",\"urls\":[\"bzzr://68d3ce6cda841600d1e5724c0752314a084e4eeebc1fdcb6bc22c92d77c9a3db\"]},\"@aragon/os/contracts/lib/token/ERC20.sol\":{\"keccak256\":\"0xa2e319fde92f9e70912f09bf6e99bbf8b9b798961d54ffcba59d347d37bde1b7\",\"urls\":[\"bzzr://8c9a4aec8e185884f26ffb125975bd52c2363359b9adff481649c59cfe15660f\"]}},\"version\":1}",
  "bytecode": "0x6080604052620000176401000000006200001d810204565b6200023b565b6200003064010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a45440000000000000000602082015290156200010c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000d0578181015183820152602001620000b6565b50505050905090810190601f168015620000fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506200012360001964010000000062000154810204565b565b60006200014f60008051602062003075833981519152640100000000620024116200023382021704565b905090565b6200016764010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901562000206576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015620000d0578181015183820152602001620000b6565b5062000230600080516020620030758339815191528264010000000062002dc16200023782021704565b50565b5490565b9055565b612e2a806200024b6000396000f3006080604052600436106101955763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630803fac0811461019a5780630808343e146101c357806309699ff5146101f65780630a8ed3db1461022757806315949ed71461025e5780631b5e75be146102a75780631d63ff2b146103295780632914b9bd1461033e57806332f0a3b5146103c05780633d6ab68f146103d55780636815c992146103ea5780636d6712d81461046b5780637e7db6e1146104a257806380afdea8146104d05780638b3dd749146104e55780639d0effdb146104fa5780639d4941d814610531578063a03c58321461055f578063a1658fad146105dd578063a479e50814610651578063a5ed8bf814610666578063a885508a1461067b578063afd925df146106ac578063b1905727146106e3578063be03847814610714578063c4d66de814610752578063c513f66e14610780578063d4aae0c414610795578063de4796ed146107aa578063f516bc0e146107bf578063f520b58d146107d4578063fdef910614610855575b600080fd5b3480156101a657600080fd5b506101af6108d1565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff600435166024356108fa565b005b34801561020257600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043516602435610aee565b34801561023357600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610bc0565b34801561026a57600080fd5b5061029573ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610bfc565b60408051918252519081900360200190f35b3480156102b357600080fd5b5060408051602060046084358181013583810280860185019096528085526101af958335956024803573ffffffffffffffffffffffffffffffffffffffff9081169760443590911696606435963696919560a495949091019282919085019084908082843750949750610c3e9650505050505050565b34801561033557600080fd5b50610295610c8b565b34801561034a57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610397943694929360249392840191908190840183828082843750949750610c909650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156103cc57600080fd5b50610397610d9c565b3480156103e157600080fd5b50610295610e3a565b3480156103f657600080fd5b5060408051606435600481810135602081810285810182019096528185526101f49573ffffffffffffffffffffffffffffffffffffffff84358116966024803590921696604435963696909560849593949290920192909182919085019084908082843750949750610e5e9650505050505050565b34801561047757600080fd5b506101af73ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610f6f565b3480156104ae57600080fd5b506101af73ffffffffffffffffffffffffffffffffffffffff60043516610f96565b3480156104dc57600080fd5b50610295610f9c565b3480156104f157600080fd5b50610295610fcc565b34801561050657600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610ff7565b34801561053d57600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff600435166110c4565b34801561056b57600080fd5b5061059973ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356064356113e6565b6040805160ff94851681529290931660208301527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168183015290519081900360600190f35b3480156105e957600080fd5b5060408051602060046044358181013583810280860185019096528085526101af95833573ffffffffffffffffffffffffffffffffffffffff1695602480359636969560649593949201929182918501908490808284375094975061147b9650505050505050565b34801561065d57600080fd5b50610397611609565b34801561067257600080fd5b506103976116cb565b34801561068757600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff600435166024356116d1565b3480156106b857600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff6004358116906024351660443561179d565b3480156106ef57600080fd5b5061039773ffffffffffffffffffffffffffffffffffffffff60043516602435611868565b34801561072057600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043581169060243581169060443590606435166118a6565b34801561075e57600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043516611a55565b34801561078c57600080fd5b50610295611bed565b3480156107a157600080fd5b50610397611c11565b3480156107b657600080fd5b506101af611c3c565b3480156107cb57600080fd5b50610397611c4f565b3480156107e057600080fd5b5060408051606435600481810135602081810285810182019096528185526101af9573ffffffffffffffffffffffffffffffffffffffff84358116966024803590921696604435963696909560849593949290920192909182919085019084908082843750949750611c549650505050505050565b34801561086157600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526101af9473ffffffffffffffffffffffffffffffffffffffff8135811695602480359092169560443595369560849401918190840183828082843750949750611cf89650505050505050565b6000806108dc610fcc565b905080158015906108f45750806108f1611d0e565b10155b91505090565b604080516000808252602082019092527f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a9161093c9133918491905b5061147b565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515610a15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109da5781810151838201526020016109c2565b50505050905090810190601f168015610a075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082826000610a248383611868565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f4558495354454e545f4d414e41474552000000000000000000000000815250901515610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610ae760018686611d12565b5050505050565b8181610afa8282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610bba60018585611d12565b50505050565b610bf78383836000604051908082528060200260200182016040528015610bf1578160200160208202803883390190505b50610e5e565b505050565b600060016000806000610c10888888611da9565b81526020808201929092526040908101600090812054845291830193909352910190205490505b9392505050565b60007f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563861415610c7057506001610c82565b610c7f86600087878787611ea8565b90505b95945050505050565b600081565b6000610c9a611609565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d1e578181015183820152602001610d06565b50505050905090810190601f168015610d4b5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015610d6a57600080fd5b505af1158015610d7e573d6000803e3d6000fd5b505050506040513d6020811015610d9457600080fd5b505192915050565b6000610da6611c11565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610e0957600080fd5b505af1158015610e1d573d6000803e3d6000fd5b505050506040513d6020811015610e3357600080fd5b5051905090565b7f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a81565b60008383610e6c8282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b506000845111610f4f577f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563610f58565b610f58846120f1565b9250610f6687878786612303565b50505050505050565b60408051600080825260208201909252610f8b85858584611c54565b91505b509392505050565b50600190565b6000610fc77fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b612411565b905090565b6000610fc77febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e612411565b81816110038282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1633146110b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610ae78585856000612303565b60008060006110d284610f96565b60408051808201909152601281527f5245434f5645525f444953414c4c4f5745440000000000000000000000000000602082015290151561116f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50611178610d9c565b925061118383612419565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5073ffffffffffffffffffffffffffffffffffffffff8416151561128b576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050158015611285573d6000803e3d6000fd5b5061137b565b50826112b373ffffffffffffffffffffffffffffffffffffffff82163063ffffffff61245316565b91506112dc73ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff61258c16565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c45440000006020820152901515611379576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b600080600080600160008060006113fe8c8c8c611da9565b815260208082019290925260409081016000908120548452918301939093529101902080548690811061142d57fe5b60009182526020909120015460ff8082169a61010083049091169950620100009091047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16975095505050505050565b6000806114866108d1565b15156114955760009150610f8e565b61149d611c11565b905073ffffffffffffffffffffffffffffffffffffffff811615156114c55760009150610f8e565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef91068630876114ed8861261b565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b8381101561158557818101518382015260200161156d565b50505050905090810190601f1680156115b25780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156115d457600080fd5b505af11580156115e8573d6000803e3d6000fd5b505050506040513d60208110156115fe57600080fd5b505195945050505050565b600080611614611c11565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b158015610d6a57600080fd5b60001981565b81816116dd8282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611790576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610bba60008585611d12565b81816117a98282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff16331461185c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610ae7858585611d12565b6000600260006118788585612625565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff169392505050565b604080516000808252602082019092527f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a916118e6913391849190610936565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611983576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50838360006119928383611868565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f4558495354454e545f4d414e41474552000000000000000000000000815250901515611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610f6687878787612719565b611a5d610fcc565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50611b02612750565b611b0a611c11565b60408051808201909152601481527f41434c5f415554485f494e49545f4b45524e454c00000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50611bea81307f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a82612719565b50565b7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381565b6000610fc77f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b612411565b6000600019611c49610fcc565b14905090565b600181565b6000806000806000611c67898989611da9565b815260208101919091526040016000205491508115801590611c915750611c918288888888610c3e565b15611c9f5760019250611cee565b600080611caf6000198989611da9565b815260208101919091526040016000205490508015801590611cdb5750611cdb81600019888888610c3e565b15611ce95760019250611cee565b600092505b5050949350505050565b6000610c82858585611d098661282f565b611c54565b4390565b8260026000611d218585612625565b815260208101919091526040908101600090812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559051858316928492908616917ff3addc8b8e25ee11528a61b0e65092cae0666ef0ec0c64cb303993c88d689b4d9190a4505050565b604080517f5045524d495353494f4e000000000000000000000000000000000000000000006020808301919091526c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8088168202602a850152861602603e8301526052808301859052835180840390910181526072909201928390528151600093918291908401908083835b60208310611e7457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611e37565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120979650505050505050565b6000611eb2612dde565b600088815260016020526040812054819063ffffffff8a1610611ed857600093506120e4565b60008a8152600160205260409020805463ffffffff8b16908110611ef857fe5b600091825260209182902060408051606081018252929091015460ff8082168085526101008304909116948401949094526201000090047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690820152935060cc1415611f7257611f6b838b8a8a8a8a6128f0565b93506120e4565b50604082015182517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091169060ff1660cb1415611fd557611fb9836040015189898989612ac3565b611fc4576000611fc7565b60015b60ff16915060019050612093565b825160ff1660c81415611ff157611fea611d0e565b9150612093565b825160ff1660c9141561200657611fea612c36565b825160ff1660cd141561203f5782604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169150612093565b8451835160ff161061205457600093506120e4565b82518551869160ff1690811061206657fe5b906020019060200201517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1691505b6007836020015160ff16600c8111156120a857fe5b600c8111156120b357fe5b14156120c4576000821193506120e4565b6120e182846020015160ff16600c8111156120db57fe5b83612c3a565b93505b5050509695505050505050565b6000806000806000612101612dde565b8660405160200180828051906020019060200280838360005b8381101561213257818101518382015260200161211a565b505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061219857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161215b565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120600081815260019092529290208054929950975050151591506122f8905057600092505b86518310156122f85786838151811015156121fb57fe5b90602001906020020151915060606040519081016040528061221c84612cf7565b60ff16815260200161222d84612d1d565b60ff90811682527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858116602093840152875460018082018a5560008a81528590208651920180549587015160408801517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909716938616939093177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010093909516929092029390931761ffff1662010000949092169390930217909155939093019290506121e4565b509295945050505050565b60008082600080612315898989611da9565b8152602081019190915260400160002055821580159250829061235857507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5638314155b6040805184151581529051919250859173ffffffffffffffffffffffffffffffffffffffff80891692908a16917f759b9a74d5354b5801710a0c1b283cc9f0d32b607ac8ced10c83ac8e75c77d529181900360200190a4801561240957604080518481529051859173ffffffffffffffffffffffffffffffffffffffff80891692908a16917f8dfee25d92d73b8c9b868f9fa3e215cc1981033f426e53803e3da4f09a2cfc30919081900360200190a45b505050505050565b5490565b5490565b60008073ffffffffffffffffffffffffffffffffffffffff83161515612442576000915061244d565b823b90506000811191505b50919050565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905260009081806124e08684612d42565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515612582576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052600090610f8b8582612d73565b8051602002815290565b604080517f524f4c45000000000000000000000000000000000000000000000000000000006020808301919091526c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff86160260248301526038808301859052835180840390910181526058909201928390528151600093918291908401908083835b602083106126e657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016126a9565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209695505050505050565b6127458484847f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563612303565b610bba818484611d12565b612758610fcc565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a45440000000000000000602082015290156127f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5061282d612800611d0e565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff612dc116565b565b606060006020835181151561284057fe5b049050806020028351146040805190810160405280601a81526020017f434f4e56455253494f4e5f494d50524f5045525f4c454e4754480000000000008152509015156128e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5082525090565b60008080808080808080600c8f6020015160ff16600c81111561290f57fe5b600c81111561291a57fe5b14156129855761294d8f604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612dc5565b919950975095506129628e898f8f8f8f611ea8565b945061297e8e866129735787612975565b885b8f8f8f8f611ea8565b9850612ab1565b6129b28f604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612dc5565b5090945092506129c68e858f8f8f8f611ea8565b915060088f6020015160ff16600c8111156129dd57fe5b600c8111156129e857fe5b14156129f75781159850612ab1565b818015612a215750600a8f6020015160ff16600c811115612a1457fe5b600c811115612a1f57fe5b145b15612a2f5760019850612ab1565b81158015612a5a575060098f6020015160ff16600c811115612a4d57fe5b600c811115612a5857fe5b145b15612a685760009850612ab1565b612a768e848f8f8f8f611ea8565b9050600b8f6020015160ff16600c811115612a8d57fe5b600c811115612a9857fe5b1415612aad5780151582151514159850612ab1565b8098505b50505050505050509695505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff85811660248301908152908516604483015260648201849052608060848301908152835160a484015283516000937f2a1510900000000000000000000000000000000000000000000000000000000093606093869384938493849389938f938f938f938f939192909160c490910190602080860191028083838d5b83811015612b6e578181015183820152602001612b56565b5050505090500195505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050945061753093506000808651602088018f88fa9250821515612bfe5760009650612c27565b3d915060208214612c125760009650612c27565b604051826000823e8051915060008152508096505b50505050505095945050505050565b4290565b6000600183600c811115612c4a57fe5b1415612c595750828114610c37565b600283600c811115612c6757fe5b1415612c77575082811415610c37565b600383600c811115612c8557fe5b1415612c945750808311610c37565b600483600c811115612ca257fe5b1415612cb15750808310610c37565b600583600c811115612cbf57fe5b1415612ccf575080831015610c37565b600683600c811115612cdd57fe5b1415612ced575080831115610c37565b5060009392505050565b7f0100000000000000000000000000000000000000000000000000000000000000900490565b7e01000000000000000000000000000000000000000000000000000000000000900490565b6000806000806040516020818751602089018a5afa92506000831115612d6757805191505b50909590945092505050565b6000806040516020818551602087016000895af16000811115612db7573d8015612da45760208114612dad57612db5565b60019350612db5565b600183511493505b505b5090949350505050565b9055565b9064010000000082049068010000000000000000830490565b6040805160608101825260008082526020820181905291810191909152905600a165627a7a723058205a13e185d04c4794e877b26e3ca356a02e941874fde5a45ea93ada078b220cc30029ebb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e",
  "deployedBytecode": "0x6080604052600436106101955763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630803fac0811461019a5780630808343e146101c357806309699ff5146101f65780630a8ed3db1461022757806315949ed71461025e5780631b5e75be146102a75780631d63ff2b146103295780632914b9bd1461033e57806332f0a3b5146103c05780633d6ab68f146103d55780636815c992146103ea5780636d6712d81461046b5780637e7db6e1146104a257806380afdea8146104d05780638b3dd749146104e55780639d0effdb146104fa5780639d4941d814610531578063a03c58321461055f578063a1658fad146105dd578063a479e50814610651578063a5ed8bf814610666578063a885508a1461067b578063afd925df146106ac578063b1905727146106e3578063be03847814610714578063c4d66de814610752578063c513f66e14610780578063d4aae0c414610795578063de4796ed146107aa578063f516bc0e146107bf578063f520b58d146107d4578063fdef910614610855575b600080fd5b3480156101a657600080fd5b506101af6108d1565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff600435166024356108fa565b005b34801561020257600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043516602435610aee565b34801561023357600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610bc0565b34801561026a57600080fd5b5061029573ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610bfc565b60408051918252519081900360200190f35b3480156102b357600080fd5b5060408051602060046084358181013583810280860185019096528085526101af958335956024803573ffffffffffffffffffffffffffffffffffffffff9081169760443590911696606435963696919560a495949091019282919085019084908082843750949750610c3e9650505050505050565b34801561033557600080fd5b50610295610c8b565b34801561034a57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610397943694929360249392840191908190840183828082843750949750610c909650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156103cc57600080fd5b50610397610d9c565b3480156103e157600080fd5b50610295610e3a565b3480156103f657600080fd5b5060408051606435600481810135602081810285810182019096528185526101f49573ffffffffffffffffffffffffffffffffffffffff84358116966024803590921696604435963696909560849593949290920192909182919085019084908082843750949750610e5e9650505050505050565b34801561047757600080fd5b506101af73ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610f6f565b3480156104ae57600080fd5b506101af73ffffffffffffffffffffffffffffffffffffffff60043516610f96565b3480156104dc57600080fd5b50610295610f9c565b3480156104f157600080fd5b50610295610fcc565b34801561050657600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610ff7565b34801561053d57600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff600435166110c4565b34801561056b57600080fd5b5061059973ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356064356113e6565b6040805160ff94851681529290931660208301527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168183015290519081900360600190f35b3480156105e957600080fd5b5060408051602060046044358181013583810280860185019096528085526101af95833573ffffffffffffffffffffffffffffffffffffffff1695602480359636969560649593949201929182918501908490808284375094975061147b9650505050505050565b34801561065d57600080fd5b50610397611609565b34801561067257600080fd5b506103976116cb565b34801561068757600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff600435166024356116d1565b3480156106b857600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff6004358116906024351660443561179d565b3480156106ef57600080fd5b5061039773ffffffffffffffffffffffffffffffffffffffff60043516602435611868565b34801561072057600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043581169060243581169060443590606435166118a6565b34801561075e57600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043516611a55565b34801561078c57600080fd5b50610295611bed565b3480156107a157600080fd5b50610397611c11565b3480156107b657600080fd5b506101af611c3c565b3480156107cb57600080fd5b50610397611c4f565b3480156107e057600080fd5b5060408051606435600481810135602081810285810182019096528185526101af9573ffffffffffffffffffffffffffffffffffffffff84358116966024803590921696604435963696909560849593949290920192909182919085019084908082843750949750611c549650505050505050565b34801561086157600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526101af9473ffffffffffffffffffffffffffffffffffffffff8135811695602480359092169560443595369560849401918190840183828082843750949750611cf89650505050505050565b6000806108dc610fcc565b905080158015906108f45750806108f1611d0e565b10155b91505090565b604080516000808252602082019092527f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a9161093c9133918491905b5061147b565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515610a15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109da5781810151838201526020016109c2565b50505050905090810190601f168015610a075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082826000610a248383611868565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f4558495354454e545f4d414e41474552000000000000000000000000815250901515610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610ae760018686611d12565b5050505050565b8181610afa8282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610bba60018585611d12565b50505050565b610bf78383836000604051908082528060200260200182016040528015610bf1578160200160208202803883390190505b50610e5e565b505050565b600060016000806000610c10888888611da9565b81526020808201929092526040908101600090812054845291830193909352910190205490505b9392505050565b60007f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563861415610c7057506001610c82565b610c7f86600087878787611ea8565b90505b95945050505050565b600081565b6000610c9a611609565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d1e578181015183820152602001610d06565b50505050905090810190601f168015610d4b5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015610d6a57600080fd5b505af1158015610d7e573d6000803e3d6000fd5b505050506040513d6020811015610d9457600080fd5b505192915050565b6000610da6611c11565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610e0957600080fd5b505af1158015610e1d573d6000803e3d6000fd5b505050506040513d6020811015610e3357600080fd5b5051905090565b7f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a81565b60008383610e6c8282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b506000845111610f4f577f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563610f58565b610f58846120f1565b9250610f6687878786612303565b50505050505050565b60408051600080825260208201909252610f8b85858584611c54565b91505b509392505050565b50600190565b6000610fc77fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b612411565b905090565b6000610fc77febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e612411565b81816110038282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1633146110b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610ae78585856000612303565b60008060006110d284610f96565b60408051808201909152601281527f5245434f5645525f444953414c4c4f5745440000000000000000000000000000602082015290151561116f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50611178610d9c565b925061118383612419565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5073ffffffffffffffffffffffffffffffffffffffff8416151561128b576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050158015611285573d6000803e3d6000fd5b5061137b565b50826112b373ffffffffffffffffffffffffffffffffffffffff82163063ffffffff61245316565b91506112dc73ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff61258c16565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c45440000006020820152901515611379576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b600080600080600160008060006113fe8c8c8c611da9565b815260208082019290925260409081016000908120548452918301939093529101902080548690811061142d57fe5b60009182526020909120015460ff8082169a61010083049091169950620100009091047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16975095505050505050565b6000806114866108d1565b15156114955760009150610f8e565b61149d611c11565b905073ffffffffffffffffffffffffffffffffffffffff811615156114c55760009150610f8e565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef91068630876114ed8861261b565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b8381101561158557818101518382015260200161156d565b50505050905090810190601f1680156115b25780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156115d457600080fd5b505af11580156115e8573d6000803e3d6000fd5b505050506040513d60208110156115fe57600080fd5b505195945050505050565b600080611614611c11565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b158015610d6a57600080fd5b60001981565b81816116dd8282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611790576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610bba60008585611d12565b81816117a98282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff16331461185c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610ae7858585611d12565b6000600260006118788585612625565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff169392505050565b604080516000808252602082019092527f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a916118e6913391849190610936565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611983576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50838360006119928383611868565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f4558495354454e545f4d414e41474552000000000000000000000000815250901515611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610f6687878787612719565b611a5d610fcc565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50611b02612750565b611b0a611c11565b60408051808201909152601481527f41434c5f415554485f494e49545f4b45524e454c00000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50611bea81307f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a82612719565b50565b7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381565b6000610fc77f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b612411565b6000600019611c49610fcc565b14905090565b600181565b6000806000806000611c67898989611da9565b815260208101919091526040016000205491508115801590611c915750611c918288888888610c3e565b15611c9f5760019250611cee565b600080611caf6000198989611da9565b815260208101919091526040016000205490508015801590611cdb5750611cdb81600019888888610c3e565b15611ce95760019250611cee565b600092505b5050949350505050565b6000610c82858585611d098661282f565b611c54565b4390565b8260026000611d218585612625565b815260208101919091526040908101600090812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559051858316928492908616917ff3addc8b8e25ee11528a61b0e65092cae0666ef0ec0c64cb303993c88d689b4d9190a4505050565b604080517f5045524d495353494f4e000000000000000000000000000000000000000000006020808301919091526c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8088168202602a850152861602603e8301526052808301859052835180840390910181526072909201928390528151600093918291908401908083835b60208310611e7457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611e37565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120979650505050505050565b6000611eb2612dde565b600088815260016020526040812054819063ffffffff8a1610611ed857600093506120e4565b60008a8152600160205260409020805463ffffffff8b16908110611ef857fe5b600091825260209182902060408051606081018252929091015460ff8082168085526101008304909116948401949094526201000090047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690820152935060cc1415611f7257611f6b838b8a8a8a8a6128f0565b93506120e4565b50604082015182517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091169060ff1660cb1415611fd557611fb9836040015189898989612ac3565b611fc4576000611fc7565b60015b60ff16915060019050612093565b825160ff1660c81415611ff157611fea611d0e565b9150612093565b825160ff1660c9141561200657611fea612c36565b825160ff1660cd141561203f5782604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169150612093565b8451835160ff161061205457600093506120e4565b82518551869160ff1690811061206657fe5b906020019060200201517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1691505b6007836020015160ff16600c8111156120a857fe5b600c8111156120b357fe5b14156120c4576000821193506120e4565b6120e182846020015160ff16600c8111156120db57fe5b83612c3a565b93505b5050509695505050505050565b6000806000806000612101612dde565b8660405160200180828051906020019060200280838360005b8381101561213257818101518382015260200161211a565b505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061219857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161215b565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120600081815260019092529290208054929950975050151591506122f8905057600092505b86518310156122f85786838151811015156121fb57fe5b90602001906020020151915060606040519081016040528061221c84612cf7565b60ff16815260200161222d84612d1d565b60ff90811682527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858116602093840152875460018082018a5560008a81528590208651920180549587015160408801517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909716938616939093177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010093909516929092029390931761ffff1662010000949092169390930217909155939093019290506121e4565b509295945050505050565b60008082600080612315898989611da9565b8152602081019190915260400160002055821580159250829061235857507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5638314155b6040805184151581529051919250859173ffffffffffffffffffffffffffffffffffffffff80891692908a16917f759b9a74d5354b5801710a0c1b283cc9f0d32b607ac8ced10c83ac8e75c77d529181900360200190a4801561240957604080518481529051859173ffffffffffffffffffffffffffffffffffffffff80891692908a16917f8dfee25d92d73b8c9b868f9fa3e215cc1981033f426e53803e3da4f09a2cfc30919081900360200190a45b505050505050565b5490565b5490565b60008073ffffffffffffffffffffffffffffffffffffffff83161515612442576000915061244d565b823b90506000811191505b50919050565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905260009081806124e08684612d42565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515612582576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052600090610f8b8582612d73565b8051602002815290565b604080517f524f4c45000000000000000000000000000000000000000000000000000000006020808301919091526c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff86160260248301526038808301859052835180840390910181526058909201928390528151600093918291908401908083835b602083106126e657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016126a9565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209695505050505050565b6127458484847f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563612303565b610bba818484611d12565b612758610fcc565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a45440000000000000000602082015290156127f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5061282d612800611d0e565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff612dc116565b565b606060006020835181151561284057fe5b049050806020028351146040805190810160405280601a81526020017f434f4e56455253494f4e5f494d50524f5045525f4c454e4754480000000000008152509015156128e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5082525090565b60008080808080808080600c8f6020015160ff16600c81111561290f57fe5b600c81111561291a57fe5b14156129855761294d8f604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612dc5565b919950975095506129628e898f8f8f8f611ea8565b945061297e8e866129735787612975565b885b8f8f8f8f611ea8565b9850612ab1565b6129b28f604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612dc5565b5090945092506129c68e858f8f8f8f611ea8565b915060088f6020015160ff16600c8111156129dd57fe5b600c8111156129e857fe5b14156129f75781159850612ab1565b818015612a215750600a8f6020015160ff16600c811115612a1457fe5b600c811115612a1f57fe5b145b15612a2f5760019850612ab1565b81158015612a5a575060098f6020015160ff16600c811115612a4d57fe5b600c811115612a5857fe5b145b15612a685760009850612ab1565b612a768e848f8f8f8f611ea8565b9050600b8f6020015160ff16600c811115612a8d57fe5b600c811115612a9857fe5b1415612aad5780151582151514159850612ab1565b8098505b50505050505050509695505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff85811660248301908152908516604483015260648201849052608060848301908152835160a484015283516000937f2a1510900000000000000000000000000000000000000000000000000000000093606093869384938493849389938f938f938f938f939192909160c490910190602080860191028083838d5b83811015612b6e578181015183820152602001612b56565b5050505090500195505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050945061753093506000808651602088018f88fa9250821515612bfe5760009650612c27565b3d915060208214612c125760009650612c27565b604051826000823e8051915060008152508096505b50505050505095945050505050565b4290565b6000600183600c811115612c4a57fe5b1415612c595750828114610c37565b600283600c811115612c6757fe5b1415612c77575082811415610c37565b600383600c811115612c8557fe5b1415612c945750808311610c37565b600483600c811115612ca257fe5b1415612cb15750808310610c37565b600583600c811115612cbf57fe5b1415612ccf575080831015610c37565b600683600c811115612cdd57fe5b1415612ced575080831115610c37565b5060009392505050565b7f0100000000000000000000000000000000000000000000000000000000000000900490565b7e01000000000000000000000000000000000000000000000000000000000000900490565b6000806000806040516020818751602089018a5afa92506000831115612d6757805191505b50909590945092505050565b6000806040516020818551602087016000895af16000811115612db7573d8015612da45760208114612dad57612db5565b60019350612db5565b600183511493505b505b5090949350505050565b9055565b9064010000000082049068010000000000000000830490565b6040805160608101825260008082526020820181905291810191909152905600a165627a7a723058205a13e185d04c4794e877b26e3ca356a02e941874fde5a45ea93ada078b220cc30029",
  "sourceMap": "293:19076:11:-;;;344:9:22;:7;;;;:9;:::i;:::-;293:19076:11;;590:84:32;615:24:30;:22;;;;:24;:::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;607:65:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;637:30:32;-1:-1:-1;;637:13:32;;;;:30;:::i;:::-;590:84::o;881:137:30:-;936:7;962:49;-1:-1:-1;;;;;;;;;;;962:47:30;;;;;;:49;:::i;:::-;955:56;;881:137;:::o;1751:141::-;615:24;:22;;;;:24;:::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;607:65:30;-1:-1:-1;1824:61:30;-1:-1:-1;;;;;;;;;;;1872:12:30;1824:47;;;;;;:61;:::i;:::-;1751:141;:::o;519:134:37:-;630:15;;620:27::o;1028:119::-;1117:22;;1115:26::o;293:19076:11:-;;;;;;;",
  "deployedSourceMap": "293:19076:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1128:208:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1128:208:30;;;;;;;;;;;;;;;;;;;;;;8512:225:11;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8512:225:11;;;;;;;;;;;9014:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9014:188:11;;;;;;;;;5610:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5610:165:11;;;;;;;;;;;;;;9510:208;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9510:208:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12153:339;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12153:339:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12153:339:11;;-1:-1:-1;12153:339:11;;-1:-1:-1;;;;;;;12153:339:11;1598:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1598:50:11;;;;795:179:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;795:179:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;795:179:40;;-1:-1:-1;795:179:40;;-1:-1:-1;;;;;;;795:179:40;;;;;;;;;;;;;;;;;;;;2253:229:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2253:229:21;;;;494:116:11;;8:9:-1;5:2;;;30:1;27;20:12;5:2;494:116:11;;;;6336:309;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6336:309:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6336:309:11;;-1:-1:-1;6336:309:11;;-1:-1:-1;;;;;;;6336:309:11;11936:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11936:211:11;;;;;;;;;;;;;;1659:99:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1659:99:38;;;;;;;796:106:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;796:106:20;;;;881:137:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;881:137:30;;;;7087:204:11;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7087:204:11;;;;;;;;;;;;;;836:623:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;836:623:38;;;;;;;10064:325:11;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10064:325:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1641:496:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1641:496:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1641:496:21;;-1:-1:-1;1641:496:21;;-1:-1:-1;;;;;;;1641:496:21;980:231:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;980:231:40;;;;1654:48:11;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1654:48:11;;;;8033:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8033:189:11;;;;;;;;;7599:208;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7599:208:11;;;;;;;;;;;;;;10601:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10601:153:11;;;;;;;;;4854:256;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4854:256:11;;;;;;;;;;;;;;;;;;;;3512:270;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3512:270:11;;;;;;;1483:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1483:109:11;;;;674:116:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;674:116:20;;;;287:117:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;287:117:32;;;;1708:48:11;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1708:48:11;;;;11355:575;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11355:575:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11355:575:11;;-1:-1:-1;11355:575:11;;-1:-1:-1;;;;;;;11355:575:11;11120:229;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11120:229:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11120:229:11;;-1:-1:-1;11120:229:11;;-1:-1:-1;;;;;;;11120:229:11;1128:208:30;1175:4;1191:27;1221:24;:22;:24::i;:::-;1191:54;-1:-1:-1;1262:24:30;;;;;:67;;;1310:19;1290:16;:14;:16::i;:::-;:39;;1262:67;1255:74;;1128:208;;:::o;8512:225:11:-;1020:16:21;;;1034:1;1020:16;;;;;;;;;544:66:11;;990:47:21;;1001:10;;544:66:11;;1020:16:21;;;990:10;:47::i;:::-;1039:17;;;;;;;;;;;;;;;;;;982:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;982:75:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8656:4:11;8662:5;3133:1;3088:33;8656:4;8662:5;3088:20;:33::i;:::-;:47;;;3137:22;;;;;;;;;;;;;;;;;;3080:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3080:80:11;;8683:47;1754:1;8718:4;8724:5;8683:21;:47::i;:::-;1067:1:21;;8512:225:11;;;:::o;9014:188::-;9121:4;9127:5;2847:33;2868:4;2874:5;2847:20;:33::i;:::-;2882:21;;;;;;;;;;;;;;;;;;2833:47;;:10;:47;2825:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2825:79:11;;9148:47;1754:1;9183:4;9189:5;9148:21;:47::i;:::-;9014:188;;;;:::o;5610:165::-;5712:56;5729:7;5738:4;5744:5;5765:1;5751:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;5751:16:11;;5712;:56::i;:::-;5610:165;;;:::o;9510:208::-;9614:4;9637:16;:67;9654:11;:49;9666:36;9681:7;9690:4;9696:5;9666:14;:36::i;:::-;9654:49;;;;;;;;;;;;;;;;;;;9637:67;;;;;;;;;;;;;:74;;-1:-1:-1;9510:208:11;;;;;;:::o;12153:339::-;12322:4;1526:66;12346:31;;12342:73;;;-1:-1:-1;12400:4:11;12393:11;;12342:73;12432:53;12443:11;12456:1;12459:4;12465:6;12473:5;12480:4;12432:10;:53::i;:::-;12425:60;;12153:339;;;;;;;;:::o;1598:50::-;1646:1;1598:50;:::o;795:179:40:-;861:18;917:22;:20;:22::i;:::-;:40;;;958:7;917:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;917:49:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;917:49:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;917:49:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;917:49:40;;795:179;-1:-1:-1;;795:179:40:o;2253:229:21:-;2302:7;2408:8;:6;:8::i;:::-;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2408:27:21;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2408:27:21;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2408:27:21;;-1:-1:-1;2253:229:21;:::o;494:116:11:-;544:66;494:116;:::o;6336:309::-;6499:18;6472:4;6478:5;2847:33;2868:4;2874:5;2847:20;:33::i;:::-;2882:21;;;;;;;;;;;;;;;;;;2833:47;;:10;:47;2825:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2825:79:11;;6537:1;6520:7;:14;:18;:60;;1526:66;6520:60;;;6541:20;6553:7;6541:11;:20::i;:::-;6499:81;;6590:48;6605:7;6614:4;6620:5;6627:10;6590:14;:48::i;:::-;6336:309;;;;;;;:::o;11936:211::-;12066:16;;;12025:4;12066:16;;;;;;;;;12099:41;12113:4;12119:6;12127:5;12134;12099:13;:41::i;:::-;12092:48;;11936:211;;;;;;;:::o;1659:99:38:-;-1:-1:-1;1747:4:38;;1659:99::o;796:106:20:-;834:7;860:35;601:66;860:33;:35::i;:::-;853:42;;796:106;:::o;881:137:30:-;936:7;962:49;345:66;962:47;:49::i;7087:204:11:-;7206:4;7212:5;2847:33;2868:4;2874:5;2847:20;:33::i;:::-;2882:21;;;;;;;;;;;;;;;;;;2833:47;;:10;:47;2825:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2825:79:11;-1:-1:-1;7233:51:11;7248:7;7257:4;7263:5;1646:1;7233:14;:51::i;836:623:38:-;960:13;1067:15;1224:11;904:27;924:6;904:19;:27::i;:::-;933:16;;;;;;;;;;;;;;;;;;896:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;896:54:38;;976:18;:16;:18::i;:::-;960:34;;1012:17;1023:5;1012:10;:17::i;:::-;1031:24;;;;;;;;;;;;;;;;;;1004:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1004:52:38;-1:-1:-1;1096:13:38;;;;1092:307;;;1170:23;;1143:4;1135:21;;-1:-1:-1;1135:21:38;1170:14;;;:23;;;;;1135:21;;1170:23;;;;1135:21;1170:14;:23;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1170:23:38;1092:307;;;-1:-1:-1;1244:6:38;1275:27;:21;;;1297:4;1275:27;:21;:27;:::i;:::-;1265:37;-1:-1:-1;1324:34:38;:18;;;1343:5;1265:37;1324:34;:18;:34;:::i;:::-;1360:27;;;;;;;;;;;;;;;;;;1316:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1316:72:38;;1092:307;1436:6;1414:38;;1429:5;1414:38;;;1444:7;1414:38;;;;;;;;;;;;;;;;;;836:623;;;;:::o;10064:325:11:-;10198:5;10205;10212:7;10235:19;10257:16;:67;10274:11;:49;10286:36;10301:7;10310:4;10316:5;10286:14;:36::i;:::-;10274:49;;;;;;;;;;;;;;;;;;;10257:67;;;;;;;;;;;;;:75;;10325:6;;10257:75;;;;;;;;;;;;;;;10350:8;;;;;;;10360;;;;;;-1:-1:-1;10370:11:11;;;;;;;-1:-1:-1;10064:325:11;-1:-1:-1;;;;;;10064:325:11:o;1641:496:21:-;1733:4;1819:20;1754:16;:14;:16::i;:::-;1753:17;1749:60;;;1793:5;1786:12;;;;1749:60;1842:8;:6;:8::i;:::-;1819:31;-1:-1:-1;1864:35:21;;;;1860:78;;;1922:5;1915:12;;;;1860:78;1955:12;:26;;;1995:7;2024:4;2043:5;2062:58;2112:7;2062:49;:58::i;:::-;1955:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1955:175:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1955:175:21;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1955:175:21;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1955:175:21;;1641:496;-1:-1:-1;;;;;1641:496:21:o;980:231:40:-;1033:18;1063:20;1086:8;:6;:8::i;:::-;:69;;;;;;1368:66:51;1086:69:40;;;;330:66:42;1086:69:40;;;;;;:15;;;;;;;;:69;;;;;;;;;;;;;;;;:15;:69;;;5:2:-1;;;;30:1;27;20:12;1654:48:11;-1:-1:-1;;1654:48:11;:::o;8033:189::-;8142:4;8148:5;2847:33;2868:4;2874:5;2847:20;:33::i;:::-;2882:21;;;;;;;;;;;;;;;;;;2833:47;;:10;:47;2825:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2825:79:11;;8169:46;8199:1;8203:4;8209:5;8169:21;:46::i;7599:208::-;7726:4;7732:5;2847:33;2868:4;2874:5;2847:20;:33::i;:::-;2882:21;;;;;;;;;;;;;;;;;;2833:47;;:10;:47;2825:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2825:79:11;;7753:47;7775:11;7788:4;7794:5;7753:21;:47::i;10601:153::-;10681:7;10707:17;:40;10725:21;10734:4;10740:5;10725:8;:21::i;:::-;10707:40;;;;;;;;;;;-1:-1:-1;10707:40:11;;;;;10601:153;-1:-1:-1;;;10601:153:11:o;4854:256::-;1020:16:21;;;1034:1;1020:16;;;;;;;;;544:66:11;;990:47:21;;1001:10;;544:66:11;;1020:16:21;;;990:47;1039:17;;;;;;;;;;;;;;;;;;982:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;982:75:21;-1:-1:-1;5027:4:11;5033:5;3133:1;3088:33;5027:4;5033:5;3088:20;:33::i;:::-;:47;;;3137:22;;;;;;;;;;;;;;;;;;3080:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3080:80:11;;5054:49;5072:7;5081:4;5087:5;5094:8;5054:17;:49::i;3512:270::-;615:24:30;:22;:24::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;607:65:30;;3587:13:11;:11;:13::i;:::-;3640:8;:6;:8::i;:::-;3651:22;;;;;;;;;;;;;;;;;;3618:31;;:10;:31;3610:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3610:64:11;-1:-1:-1;3685:90:11;3703:19;3724:4;544:66;3703:19;3685:17;:90::i;:::-;3512:270;:::o;1483:109::-;1526:66;1483:109;:::o;674:116:20:-;713:7;747:35;485:66;747:33;:35::i;287:117:32:-;331:4;-1:-1:-1;;354:24:32;:22;:24::i;:::-;:43;347:50;;287:117;:::o;1708:48:11:-;1754:1;1708:48;:::o;11355:575::-;11467:4;11483:17;11691;11503:11;:48;11515:35;11530:4;11536:6;11544:5;11515:14;:35::i;:::-;11503:48;;;;;;;;;;;;;;;-1:-1:-1;11565:26:11;;;;;:78;;;11595:48;11606:9;11617:4;11623:6;11631:5;11638:4;11595:10;:48::i;:::-;11561:120;;;11666:4;11659:11;;;;11561:120;11711:11;:54;11723:41;-1:-1:-1;;11750:6:11;11758:5;11723:14;:41::i;:::-;11711:54;;;;;;;;;;;;;;;-1:-1:-1;11779:26:11;;;;;:84;;;11809:54;11820:9;-1:-1:-1;;11843:6:11;11851:5;11858:4;11809:10;:54::i;:::-;11775:126;;;11886:4;11879:11;;;;11775:126;11918:5;11911:12;;11355:575;;;;;;;;;:::o;11120:229::-;11228:4;11251:91;11265:4;11271:6;11279:5;11286:55;11336:4;11286:49;:55::i;:::-;11251:13;:91::i;347:94:35:-;422:12;347:94;:::o;18788:225:11:-;18931:11;18888:17;:40;18906:21;18915:4;18921:5;18906:8;:21::i;:::-;18888:40;;;;;;;;;;;;;-1:-1:-1;18888:40:11;;;:54;;;;;;;;;;;18957:49;;;;;;18987:5;;18957:49;;;;;;-1:-1:-1;18957:49:11;18788:225;;;:::o;19180:187::-;19308:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;19308:51:11;;;;;;;;19298:62;;19272:7;;19308:51;;;19298:62;;;;;19308:51;19298:62;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;19298:62:11;;;;;;;;;;;;-1:-1:-1;;;;;;;19180:187:11:o;14064:1414::-;14260:4;14398:18;;:::i;:::-;14603:13;14296:29;;;:16;:29;;;;;:36;14603:13;;14284:48;;;;14280:108;;14355:5;14348:12;;;;14280:108;14419:29;;;;:16;:29;;;;;:39;;;;;;;;;;;;;;;;;;;;;14398:60;;;;;;;;14419:39;;;;14398:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1256:3:11;14473:29;14469:124;;;14525:57;14536:5;14543:11;14556:4;14562:6;14570:5;14577:4;14525:10;:57::i;:::-;14518:64;;;;14469:124;-1:-1:-1;14655:11:11;;;;14703:8;;14647:20;;;;;14703:27;;1199:3;14703:27;14699:627;;;14754:63;14777:5;:11;;;14791:4;14797:6;14805:5;14812:4;14754:11;:63::i;:::-;:71;;14824:1;14754:71;;;14820:1;14754:71;14746:79;;;;14852:1;14839:14;;14699:627;;;14874:8;;:33;;1064:3;14874:33;14870:456;;;14931:16;:14;:16::i;:::-;14923:24;;14870:456;;;14968:8;;:30;;1121:3;14968:30;14964:362;;;15022:14;:12;:14::i;14964:362::-;15057:8;;:32;;1313:3;15057:32;15053:273;;;15121:5;:11;;;15113:20;;15105:28;;15053:273;;;15180:11;;15168:8;;:23;;;15164:74;;15218:5;15211:12;;;;15164:74;15280:8;;15275:14;;:4;;:14;;;;;;;;;;;;;;;;;15259:32;;15251:40;;15053:273;15356:6;15343:5;:8;;;15340:12;;;;;;;;;;:22;;;;;;;;;15336:78;;;15402:1;15393:5;15385:18;15378:25;;;;15336:78;15431:40;15439:5;15449;:8;;;15446:12;;;;;;;;;;15460:10;15431:7;:40::i;:::-;15424:47;;14064:1414;;;;;;;;;;;;:::o;13444:614::-;13509:7;13528:17;13601:22;13734:9;13799:20;13857:18;;:::i;:::-;13575:14;13558:32;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13558:32:11;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13558:32:11;;;13548:43;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;13548:43:11;;;;;;;;;;;;;-1:-1:-1;13626:27:11;;;274:1:-1;13626:27:11;;;;;;13668:13;;13548:43;;-1:-1:-1;13626:27:11;-1:-1:-1;;13668:18:11;13664:361;;-1:-1:-1;13664:361:11;;-1:-1:-1;13664:361:11;13746:1;13734:13;;13729:286;13753:14;:21;13749:1;:25;13729:286;;;13822:14;13837:1;13822:17;;;;;;;;;;;;;;;;;;13799:40;;13878:86;;;;;;;;;13884:27;13898:12;13884:13;:27::i;:::-;13878:86;;;;;;13913:27;13927:12;13913:13;:27::i;:::-;13878:86;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;13982:18:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13776:3;;;;;13982:18;-1:-1:-1;13729:286:11;;;-1:-1:-1;14042:9:11;;13444:614;-1:-1:-1;;;;;13444:614:11:o;12912:526::-;13095:24;13160;13074:11;13022;:49;13034:36;13049:7;13058:4;13064:5;13034:14;:36::i;:::-;13022:49;;;;;;;;;;;;;:63;13122:28;;;;;-1:-1:-1;13122:28:11;;13187:54;;-1:-1:-1;1526:66:11;13210:31;;;13187:54;13257:56;;;;;;;;;;13160:81;;-1:-1:-1;13286:5:11;;13257:56;;;;;;;;;;;;;;;;;;13327:19;13323:109;;;13367:54;;;;;;;;13402:5;;13367:54;;;;;;;;;;;;;;;;;;;13323:109;12912:526;;;;;;:::o;379:134:37:-;490:15;;480:27::o;519:134::-;630:15;;620:27::o;426:244:31:-;486:4;;506:21;;;;502:64;;;550:5;543:12;;;;502:64;629:7;617:20;609:28;;662:1;655:4;:8;648:15;;426:244;;;;;:::o;4578:403:34:-;4708:91;;;4744:16;4708:91;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4708:91:34;;;;;;;;25:18:-1;;61:17;;4708:91:34;182:15:-1;4744:25:34;179:29:-1;160:49;;4656:7:34;;;;4849:39;4744:6;4708:91;4849:12;:39::i;:::-;4915:28;;;;;;;;;;;;;;;;;4810:78;;-1:-1:-1;4810:78:34;-1:-1:-1;4898:46:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4898:46:34;-1:-1:-1;4962:12:34;4578:403;-1:-1:-1;;;;;4578:403:34:o;3100:304::-;3232:101;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3232:101:34;;;;;;;;25:18:-1;;61:17;;3232:101:34;182:15:-1;3268:17:34;179:29:-1;160:49;;3184:4:34;;3350:47;3372:6;3232:101;3350:21;:47::i;142:539:23:-;559:13;;575:2;559:18;639:26;;559:6;596:79::o;19019:155:11:-;19127:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;19127:39:11;;;;;;;;19117:50;;19091:7;;19127:39;;;19117:50;;;;;19127:39;19117:50;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;19117:50:11;;;;;;;;;;;;-1:-1:-1;;;;;;19019:155:11:o;12598:225::-;12708:54;12723:7;12732:4;12738:5;1526:66;12708:14;:54::i;:::-;12772:44;12794:8;12804:4;12810:5;12772:21;:44::i;1447:123:30:-;615:24;:22;:24::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;607:65:30;;1498;1546:16;:14;:16::i;:::-;345:66;;1498:65;:47;:65;:::i;:::-;1447:123::o;687:612:23:-;772:23;1081:18;1118:2;1102:6;:13;:18;;;;;;;;1081:39;;1155:10;1168:2;1155:15;1138:6;:13;:32;1172:21;;;;;;;;;;;;;;;;;;1130:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1130:64:23;-1:-1:-1;1257:26:23;;-1:-1:-1;1238:6:23;1214:79::o;15484:1304:11:-;15647:4;;;;;;;;;15688:10;15674:6;:9;;;15671:13;;;;;;;;;;:27;;;;;;;;;15667:450;;;15863:39;15888:6;:12;;;15880:21;;15863:16;:39::i;:::-;15816:86;;-1:-1:-1;15816:86:11;-1:-1:-1;15816:86:11;-1:-1:-1;15930:66:11;15941:11;15816:86;15970:4;15976:6;15984:5;15991:4;15930:10;:66::i;:::-;15916:80;;16018:88;16029:11;16042:6;:36;;16066:12;16042:36;;;16051:12;16042:36;16080:4;16086:6;16094:5;16101:4;16018:10;:88::i;:::-;16011:95;;;;15667:450;16194:39;16219:6;:12;;;16211:21;;16194:16;:39::i;:::-;-1:-1:-1;16174:59:11;;-1:-1:-1;16174:59:11;-1:-1:-1;16253:58:11;16264:11;16174:59;16285:4;16291:6;16299:5;16306:4;16253:10;:58::i;:::-;16243:68;-1:-1:-1;16343:6:11;16329;:9;;;16326:13;;;;;;;;;;:23;;;;;;;;;16322:64;;;16373:2;16372:3;16365:10;;;;16322:64;16400:2;:28;;;;-1:-1:-1;16423:5:11;16409:6;:9;;;16406:13;;;;;;;;;;:22;;;;;;;;;16400:28;16396:70;;;16451:4;16444:11;;;;16396:70;16481:2;16480:3;:30;;;;-1:-1:-1;16504:6:11;16490;:9;;;16487:13;;;;;;;;;;:23;;;;;;;;;16480:30;16476:73;;;16533:5;16526:12;;;;16476:73;16569:58;16580:11;16593:6;16601:4;16607:6;16615:5;16622:4;16569:10;:58::i;:::-;16559:68;-1:-1:-1;16659:6:11;16645;:9;;;16642:13;;;;;;;;;;:23;;;;;;;;;16638:69;;;16694:2;16688:8;;:2;:8;;;;16681:15;;;;16638:69;16724:2;16717:9;;15484:1304;;;;;;;;;;;;;;;;;:::o;17525:1192::-;17854:54;;17683:22;17854:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17654:4;;17683:31;;17825:26;;17654:4;;;;;;;;17683:31;;17882:4;;17888:6;;17896:5;;17903:4;;17854:54;;;;;;;;;;;;;;;;;;17654:4;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;17854:54:11;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17854:54:11;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;17854:54:11;17825:83;;1865:5;17918:41;;18107:1;18104;18088:13;18082:20;18075:4;18060:13;18056:24;18043:11;18027:14;18016:93;18010:99;;18134:2;18133:3;18129:46;;;18159:5;18152:12;;;;18129:46;18226:14;;-1:-1:-1;18263:2:11;18255:10;;18251:53;;18288:5;18281:12;;;;18251:53;18375:4;18369:11;18450:4;18447:1;18442:3;18427:28;18523:3;18517:10;18507:20;;18601:1;18596:3;18589:14;18344:343;18704:6;18697:13;;17525:1192;;;;;;;;;;;;;;:::o;926:144:35:-;999:15;926:144;:::o;16794:725:11:-;16866:4;16893:5;16886:3;:12;;;;;;;;;16882:34;;;-1:-1:-1;16908:8:11;;;16901:15;;16882:34;16996:6;16989:3;:13;;;;;;;;;16985:34;;;-1:-1:-1;17011:8:11;;;;17004:15;;16985:34;17099:5;17092:3;:12;;;;;;;;;17088:33;;;-1:-1:-1;17114:7:11;;;17107:14;;17088:33;17202:5;17195:3;:12;;;;;;;;;17191:33;;;-1:-1:-1;17217:7:11;;;17210:14;;17191:33;17305:6;17298:3;:13;;;;;;;;;17294:34;;;-1:-1:-1;17320:8:11;;;;17313:15;;17294:34;17408:6;17401:3;:13;;;;;;;;;17397:34;;;-1:-1:-1;17423:8:11;;;;17416:15;;17397:34;-1:-1:-1;17507:5:11;16794:725;;;;;:::o;2662:112:12:-;2752:14;;;;2662:112::o;2544:::-;2634:14;;;;2544:112::o;2148:774:34:-;2255:4;2261:7;2284:12;2306:11;2367:4;2361:11;2741:4;2670:3;2619:9;2613:16;2572:4;2561:9;2557:20;2508:5;2451:3;2423:371;2412:382;;2823:1;2814:7;2811:14;2808:2;;;2857:3;2851:10;2844:17;;2808:2;-1:-1:-1;2902:7:34;;2911:3;;-1:-1:-1;2148:774:34;-1:-1:-1;;;2148:774:34:o;800:1342::-;903:4;923:8;981:4;975:11;1403:4;1332:3;1281:9;1275:16;1234:4;1223:9;1219:20;1169:1;1120:5;1063:3;1041:415;1485:1;1476:7;1473:14;1470:2;;;1587:14;1672:55;;;;1806:4;1801:193;;;;1580:512;;1672:55;1708:1;1701:8;;1672:55;;1801:193;1974:1;1968:3;1962:10;1959:17;1952:24;;1580:512;;1470:2;-1:-1:-1;2132:3:34;;800:1342;-1:-1:-1;;;;800:1342:34:o;1028:119:37:-;1117:22;;1115:26::o;2780:192:12:-;2892:2;2916:13;;;;2951;;;;2780:192::o;293:19076:11:-;;;;;;;;;-1:-1:-1;293:19076:11;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity 0.4.24;\n\nimport \"../apps/AragonApp.sol\";\nimport \"../common/ConversionHelpers.sol\";\nimport \"../common/TimeHelpers.sol\";\nimport \"./ACLSyntaxSugar.sol\";\nimport \"./IACL.sol\";\nimport \"./IACLOracle.sol\";\n\n\n/* solium-disable function-order */\n// Allow public initialize() to be first\ncontract ACL is IACL, TimeHelpers, AragonApp, ACLHelpers {\n    /* Hardcoded constants to save gas\n    bytes32 public constant CREATE_PERMISSIONS_ROLE = keccak256(\"CREATE_PERMISSIONS_ROLE\");\n    */\n    bytes32 public constant CREATE_PERMISSIONS_ROLE = 0x0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a;\n\n    enum Op { NONE, EQ, NEQ, GT, LT, GTE, LTE, RET, NOT, AND, OR, XOR, IF_ELSE } // op types\n\n    struct Param {\n        uint8 id;\n        uint8 op;\n        uint240 value; // even though value is an uint240 it can store addresses\n        // in the case of 32 byte hashes losing 2 bytes precision isn't a huge deal\n        // op and id take less than 1 byte each so it can be kept in 1 sstore\n    }\n\n    uint8 internal constant BLOCK_NUMBER_PARAM_ID = 200;\n    uint8 internal constant TIMESTAMP_PARAM_ID    = 201;\n    // 202 is unused\n    uint8 internal constant ORACLE_PARAM_ID       = 203;\n    uint8 internal constant LOGIC_OP_PARAM_ID     = 204;\n    uint8 internal constant PARAM_VALUE_PARAM_ID  = 205;\n    // TODO: Add execution times param type?\n\n    /* Hardcoded constant to save gas\n    bytes32 public constant EMPTY_PARAM_HASH = keccak256(uint256(0));\n    */\n    bytes32 public constant EMPTY_PARAM_HASH = 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563;\n    bytes32 public constant NO_PERMISSION = bytes32(0);\n    address public constant ANY_ENTITY = address(-1);\n    address public constant BURN_ENTITY = address(1); // address(0) is already used as \"no permission manager\"\n\n    uint256 internal constant ORACLE_CHECK_GAS = 30000;\n\n    string private constant ERROR_AUTH_INIT_KERNEL = \"ACL_AUTH_INIT_KERNEL\";\n    string private constant ERROR_AUTH_NO_MANAGER = \"ACL_AUTH_NO_MANAGER\";\n    string private constant ERROR_EXISTENT_MANAGER = \"ACL_EXISTENT_MANAGER\";\n\n    // Whether someone has a permission\n    mapping (bytes32 => bytes32) internal permissions; // permissions hash => params hash\n    mapping (bytes32 => Param[]) internal permissionParams; // params hash => params\n\n    // Who is the manager of a permission\n    mapping (bytes32 => address) internal permissionManager;\n\n    event SetPermission(address indexed entity, address indexed app, bytes32 indexed role, bool allowed);\n    event SetPermissionParams(address indexed entity, address indexed app, bytes32 indexed role, bytes32 paramsHash);\n    event ChangePermissionManager(address indexed app, bytes32 indexed role, address indexed manager);\n\n    modifier onlyPermissionManager(address _app, bytes32 _role) {\n        require(msg.sender == getPermissionManager(_app, _role), ERROR_AUTH_NO_MANAGER);\n        _;\n    }\n\n    modifier noPermissionManager(address _app, bytes32 _role) {\n        // only allow permission creation (or re-creation) when there is no manager\n        require(getPermissionManager(_app, _role) == address(0), ERROR_EXISTENT_MANAGER);\n        _;\n    }\n\n    /**\n    * @dev Initialize can only be called once. It saves the block number in which it was initialized.\n    * @notice Initialize an ACL instance and set `_permissionsCreator` as the entity that can create other permissions\n    * @param _permissionsCreator Entity that will be given permission over createPermission\n    */\n    function initialize(address _permissionsCreator) public onlyInit {\n        initialized();\n        require(msg.sender == address(kernel()), ERROR_AUTH_INIT_KERNEL);\n\n        _createPermission(_permissionsCreator, this, CREATE_PERMISSIONS_ROLE, _permissionsCreator);\n    }\n\n    /**\n    * @dev Creates a permission that wasn't previously set and managed.\n    *      If a created permission is removed it is possible to reset it with createPermission.\n    *      This is the **ONLY** way to create permissions and set managers to permissions that don't\n    *      have a manager.\n    *      In terms of the ACL being initialized, this function implicitly protects all the other\n    *      state-changing external functions, as they all require the sender to be a manager.\n    * @notice Create a new permission granting `_entity` the ability to perform actions requiring `_role` on `_app`, setting `_manager` as the permission's manager\n    * @param _entity Address of the whitelisted entity that will be able to perform the role\n    * @param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n    * @param _role Identifier for the group of actions in app given access to perform\n    * @param _manager Address of the entity that will be able to grant and revoke the permission further.\n    */\n    function createPermission(address _entity, address _app, bytes32 _role, address _manager)\n        external\n        auth(CREATE_PERMISSIONS_ROLE)\n        noPermissionManager(_app, _role)\n    {\n        _createPermission(_entity, _app, _role, _manager);\n    }\n\n    /**\n    * @dev Grants permission if allowed. This requires `msg.sender` to be the permission manager\n    * @notice Grant `_entity` the ability to perform actions requiring `_role` on `_app`\n    * @param _entity Address of the whitelisted entity that will be able to perform the role\n    * @param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n    * @param _role Identifier for the group of actions in app given access to perform\n    */\n    function grantPermission(address _entity, address _app, bytes32 _role)\n        external\n    {\n        grantPermissionP(_entity, _app, _role, new uint256[](0));\n    }\n\n    /**\n    * @dev Grants a permission with parameters if allowed. This requires `msg.sender` to be the permission manager\n    * @notice Grant `_entity` the ability to perform actions requiring `_role` on `_app`\n    * @param _entity Address of the whitelisted entity that will be able to perform the role\n    * @param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n    * @param _role Identifier for the group of actions in app given access to perform\n    * @param _params Permission parameters\n    */\n    function grantPermissionP(address _entity, address _app, bytes32 _role, uint256[] _params)\n        public\n        onlyPermissionManager(_app, _role)\n    {\n        bytes32 paramsHash = _params.length > 0 ? _saveParams(_params) : EMPTY_PARAM_HASH;\n        _setPermission(_entity, _app, _role, paramsHash);\n    }\n\n    /**\n    * @dev Revokes permission if allowed. This requires `msg.sender` to be the the permission manager\n    * @notice Revoke from `_entity` the ability to perform actions requiring `_role` on `_app`\n    * @param _entity Address of the whitelisted entity to revoke access from\n    * @param _app Address of the app in which the role will be revoked\n    * @param _role Identifier for the group of actions in app being revoked\n    */\n    function revokePermission(address _entity, address _app, bytes32 _role)\n        external\n        onlyPermissionManager(_app, _role)\n    {\n        _setPermission(_entity, _app, _role, NO_PERMISSION);\n    }\n\n    /**\n    * @notice Set `_newManager` as the manager of `_role` in `_app`\n    * @param _newManager Address for the new manager\n    * @param _app Address of the app in which the permission management is being transferred\n    * @param _role Identifier for the group of actions being transferred\n    */\n    function setPermissionManager(address _newManager, address _app, bytes32 _role)\n        external\n        onlyPermissionManager(_app, _role)\n    {\n        _setPermissionManager(_newManager, _app, _role);\n    }\n\n    /**\n    * @notice Remove the manager of `_role` in `_app`\n    * @param _app Address of the app in which the permission is being unmanaged\n    * @param _role Identifier for the group of actions being unmanaged\n    */\n    function removePermissionManager(address _app, bytes32 _role)\n        external\n        onlyPermissionManager(_app, _role)\n    {\n        _setPermissionManager(address(0), _app, _role);\n    }\n\n    /**\n    * @notice Burn non-existent `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\n    * @param _app Address of the app in which the permission is being burned\n    * @param _role Identifier for the group of actions being burned\n    */\n    function createBurnedPermission(address _app, bytes32 _role)\n        external\n        auth(CREATE_PERMISSIONS_ROLE)\n        noPermissionManager(_app, _role)\n    {\n        _setPermissionManager(BURN_ENTITY, _app, _role);\n    }\n\n    /**\n    * @notice Burn `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\n    * @param _app Address of the app in which the permission is being burned\n    * @param _role Identifier for the group of actions being burned\n    */\n    function burnPermissionManager(address _app, bytes32 _role)\n        external\n        onlyPermissionManager(_app, _role)\n    {\n        _setPermissionManager(BURN_ENTITY, _app, _role);\n    }\n\n    /**\n     * @notice Get parameters for permission array length\n     * @param _entity Address of the whitelisted entity that will be able to perform the role\n     * @param _app Address of the app\n     * @param _role Identifier for a group of actions in app\n     * @return Length of the array\n     */\n    function getPermissionParamsLength(address _entity, address _app, bytes32 _role) external view returns (uint) {\n        return permissionParams[permissions[permissionHash(_entity, _app, _role)]].length;\n    }\n\n    /**\n    * @notice Get parameter for permission\n    * @param _entity Address of the whitelisted entity that will be able to perform the role\n    * @param _app Address of the app\n    * @param _role Identifier for a group of actions in app\n    * @param _index Index of parameter in the array\n    * @return Parameter (id, op, value)\n    */\n    function getPermissionParam(address _entity, address _app, bytes32 _role, uint _index)\n        external\n        view\n        returns (uint8, uint8, uint240)\n    {\n        Param storage param = permissionParams[permissions[permissionHash(_entity, _app, _role)]][_index];\n        return (param.id, param.op, param.value);\n    }\n\n    /**\n    * @dev Get manager for permission\n    * @param _app Address of the app\n    * @param _role Identifier for a group of actions in app\n    * @return address of the manager for the permission\n    */\n    function getPermissionManager(address _app, bytes32 _role) public view returns (address) {\n        return permissionManager[roleHash(_app, _role)];\n    }\n\n    /**\n    * @dev Function called by apps to check ACL on kernel or to check permission statu\n    * @param _who Sender of the original call\n    * @param _where Address of the app\n    * @param _where Identifier for a group of actions in app\n    * @param _how Permission parameters\n    * @return boolean indicating whether the ACL allows the role or not\n    */\n    function hasPermission(address _who, address _where, bytes32 _what, bytes memory _how) public view returns (bool) {\n        return hasPermission(_who, _where, _what, ConversionHelpers.dangerouslyCastBytesToUintArray(_how));\n    }\n\n    function hasPermission(address _who, address _where, bytes32 _what, uint256[] memory _how) public view returns (bool) {\n        bytes32 whoParams = permissions[permissionHash(_who, _where, _what)];\n        if (whoParams != NO_PERMISSION && evalParams(whoParams, _who, _where, _what, _how)) {\n            return true;\n        }\n\n        bytes32 anyParams = permissions[permissionHash(ANY_ENTITY, _where, _what)];\n        if (anyParams != NO_PERMISSION && evalParams(anyParams, ANY_ENTITY, _where, _what, _how)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    function hasPermission(address _who, address _where, bytes32 _what) public view returns (bool) {\n        uint256[] memory empty = new uint256[](0);\n        return hasPermission(_who, _where, _what, empty);\n    }\n\n    function evalParams(\n        bytes32 _paramsHash,\n        address _who,\n        address _where,\n        bytes32 _what,\n        uint256[] _how\n    ) public view returns (bool)\n    {\n        if (_paramsHash == EMPTY_PARAM_HASH) {\n            return true;\n        }\n\n        return _evalParam(_paramsHash, 0, _who, _where, _what, _how);\n    }\n\n    /**\n    * @dev Internal createPermission for access inside the kernel (on instantiation)\n    */\n    function _createPermission(address _entity, address _app, bytes32 _role, address _manager) internal {\n        _setPermission(_entity, _app, _role, EMPTY_PARAM_HASH);\n        _setPermissionManager(_manager, _app, _role);\n    }\n\n    /**\n    * @dev Internal function called to actually save the permission\n    */\n    function _setPermission(address _entity, address _app, bytes32 _role, bytes32 _paramsHash) internal {\n        permissions[permissionHash(_entity, _app, _role)] = _paramsHash;\n        bool entityHasPermission = _paramsHash != NO_PERMISSION;\n        bool permissionHasParams = entityHasPermission && _paramsHash != EMPTY_PARAM_HASH;\n\n        emit SetPermission(_entity, _app, _role, entityHasPermission);\n        if (permissionHasParams) {\n            emit SetPermissionParams(_entity, _app, _role, _paramsHash);\n        }\n    }\n\n    function _saveParams(uint256[] _encodedParams) internal returns (bytes32) {\n        bytes32 paramHash = keccak256(abi.encodePacked(_encodedParams));\n        Param[] storage params = permissionParams[paramHash];\n\n        if (params.length == 0) { // params not saved before\n            for (uint256 i = 0; i < _encodedParams.length; i++) {\n                uint256 encodedParam = _encodedParams[i];\n                Param memory param = Param(decodeParamId(encodedParam), decodeParamOp(encodedParam), uint240(encodedParam));\n                params.push(param);\n            }\n        }\n\n        return paramHash;\n    }\n\n    function _evalParam(\n        bytes32 _paramsHash,\n        uint32 _paramId,\n        address _who,\n        address _where,\n        bytes32 _what,\n        uint256[] _how\n    ) internal view returns (bool)\n    {\n        if (_paramId >= permissionParams[_paramsHash].length) {\n            return false; // out of bounds\n        }\n\n        Param memory param = permissionParams[_paramsHash][_paramId];\n\n        if (param.id == LOGIC_OP_PARAM_ID) {\n            return _evalLogic(param, _paramsHash, _who, _where, _what, _how);\n        }\n\n        uint256 value;\n        uint256 comparedTo = uint256(param.value);\n\n        // get value\n        if (param.id == ORACLE_PARAM_ID) {\n            value = checkOracle(IACLOracle(param.value), _who, _where, _what, _how) ? 1 : 0;\n            comparedTo = 1;\n        } else if (param.id == BLOCK_NUMBER_PARAM_ID) {\n            value = getBlockNumber();\n        } else if (param.id == TIMESTAMP_PARAM_ID) {\n            value = getTimestamp();\n        } else if (param.id == PARAM_VALUE_PARAM_ID) {\n            value = uint256(param.value);\n        } else {\n            if (param.id >= _how.length) {\n                return false;\n            }\n            value = uint256(uint240(_how[param.id])); // force lost precision\n        }\n\n        if (Op(param.op) == Op.RET) {\n            return uint256(value) > 0;\n        }\n\n        return compare(value, Op(param.op), comparedTo);\n    }\n\n    function _evalLogic(Param _param, bytes32 _paramsHash, address _who, address _where, bytes32 _what, uint256[] _how)\n        internal\n        view\n        returns (bool)\n    {\n        if (Op(_param.op) == Op.IF_ELSE) {\n            uint32 conditionParam;\n            uint32 successParam;\n            uint32 failureParam;\n\n            (conditionParam, successParam, failureParam) = decodeParamsList(uint256(_param.value));\n            bool result = _evalParam(_paramsHash, conditionParam, _who, _where, _what, _how);\n\n            return _evalParam(_paramsHash, result ? successParam : failureParam, _who, _where, _what, _how);\n        }\n\n        uint32 param1;\n        uint32 param2;\n\n        (param1, param2,) = decodeParamsList(uint256(_param.value));\n        bool r1 = _evalParam(_paramsHash, param1, _who, _where, _what, _how);\n\n        if (Op(_param.op) == Op.NOT) {\n            return !r1;\n        }\n\n        if (r1 && Op(_param.op) == Op.OR) {\n            return true;\n        }\n\n        if (!r1 && Op(_param.op) == Op.AND) {\n            return false;\n        }\n\n        bool r2 = _evalParam(_paramsHash, param2, _who, _where, _what, _how);\n\n        if (Op(_param.op) == Op.XOR) {\n            return r1 != r2;\n        }\n\n        return r2; // both or and and depend on result of r2 after checks\n    }\n\n    function compare(uint256 _a, Op _op, uint256 _b) internal pure returns (bool) {\n        if (_op == Op.EQ)  return _a == _b;                              // solium-disable-line lbrace\n        if (_op == Op.NEQ) return _a != _b;                              // solium-disable-line lbrace\n        if (_op == Op.GT)  return _a > _b;                               // solium-disable-line lbrace\n        if (_op == Op.LT)  return _a < _b;                               // solium-disable-line lbrace\n        if (_op == Op.GTE) return _a >= _b;                              // solium-disable-line lbrace\n        if (_op == Op.LTE) return _a <= _b;                              // solium-disable-line lbrace\n        return false;\n    }\n\n    function checkOracle(IACLOracle _oracleAddr, address _who, address _where, bytes32 _what, uint256[] _how) internal view returns (bool) {\n        bytes4 sig = _oracleAddr.canPerform.selector;\n\n        // a raw call is required so we can return false if the call reverts, rather than reverting\n        bytes memory checkCalldata = abi.encodeWithSelector(sig, _who, _where, _what, _how);\n        uint256 oracleCheckGas = ORACLE_CHECK_GAS;\n\n        bool ok;\n        assembly {\n            ok := staticcall(oracleCheckGas, _oracleAddr, add(checkCalldata, 0x20), mload(checkCalldata), 0, 0)\n        }\n\n        if (!ok) {\n            return false;\n        }\n\n        uint256 size;\n        assembly { size := returndatasize }\n        if (size != 32) {\n            return false;\n        }\n\n        bool result;\n        assembly {\n            let ptr := mload(0x40)       // get next free memory ptr\n            returndatacopy(ptr, 0, size) // copy return from above `staticcall`\n            result := mload(ptr)         // read data at ptr and set it to result\n            mstore(ptr, 0)               // set pointer memory to 0 so it still is the next free ptr\n        }\n\n        return result;\n    }\n\n    /**\n    * @dev Internal function that sets management\n    */\n    function _setPermissionManager(address _newManager, address _app, bytes32 _role) internal {\n        permissionManager[roleHash(_app, _role)] = _newManager;\n        emit ChangePermissionManager(_app, _role, _newManager);\n    }\n\n    function roleHash(address _where, bytes32 _what) internal pure returns (bytes32) {\n        return keccak256(abi.encodePacked(\"ROLE\", _where, _what));\n    }\n\n    function permissionHash(address _who, address _where, bytes32 _what) internal pure returns (bytes32) {\n        return keccak256(abi.encodePacked(\"PERMISSION\", _who, _where, _what));\n    }\n}\n",
  "sourcePath": "@aragon/os/contracts/acl/ACL.sol",
  "ast": {
    "absolutePath": "@aragon/os/contracts/acl/ACL.sol",
    "exportedSymbols": {
      "ACL": [
        4783
      ]
    },
    "id": 4784,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3490,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:11"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "../apps/AragonApp.sol",
        "id": 3491,
        "nodeType": "ImportDirective",
        "scope": 4784,
        "sourceUnit": 6121,
        "src": "25:31:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/ConversionHelpers.sol",
        "file": "../common/ConversionHelpers.sol",
        "id": 3492,
        "nodeType": "ImportDirective",
        "scope": 4784,
        "sourceUnit": 6184,
        "src": "57:41:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/TimeHelpers.sol",
        "file": "../common/TimeHelpers.sol",
        "id": 3493,
        "nodeType": "ImportDirective",
        "scope": 4784,
        "sourceUnit": 6832,
        "src": "99:35:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/ACLSyntaxSugar.sol",
        "file": "./ACLSyntaxSugar.sol",
        "id": 3494,
        "nodeType": "ImportDirective",
        "scope": 4784,
        "sourceUnit": 5284,
        "src": "135:30:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/IACL.sol",
        "file": "./IACL.sol",
        "id": 3495,
        "nodeType": "ImportDirective",
        "scope": 4784,
        "sourceUnit": 5305,
        "src": "166:20:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/IACLOracle.sol",
        "file": "./IACLOracle.sol",
        "id": 3496,
        "nodeType": "ImportDirective",
        "scope": 4784,
        "sourceUnit": 5322,
        "src": "187:26:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3497,
              "name": "IACL",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5304,
              "src": "309:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IACL_$5304",
                "typeString": "contract IACL"
              }
            },
            "id": 3498,
            "nodeType": "InheritanceSpecifier",
            "src": "309:4:11"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3499,
              "name": "TimeHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6831,
              "src": "315:11:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TimeHelpers_$6831",
                "typeString": "contract TimeHelpers"
              }
            },
            "id": 3500,
            "nodeType": "InheritanceSpecifier",
            "src": "315:11:11"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3501,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6120,
              "src": "328:9:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$6120",
                "typeString": "contract AragonApp"
              }
            },
            "id": 3502,
            "nodeType": "InheritanceSpecifier",
            "src": "328:9:11"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3503,
              "name": "ACLHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5283,
              "src": "339:10:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ACLHelpers_$5283",
                "typeString": "contract ACLHelpers"
              }
            },
            "id": 3504,
            "nodeType": "InheritanceSpecifier",
            "src": "339:10:11"
          }
        ],
        "contractDependencies": [
          5208,
          5283,
          5304,
          5996,
          6120,
          6133,
          6293,
          6343,
          6441,
          6469,
          6502,
          6539,
          6831,
          7053,
          7454,
          7481,
          8745
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4783,
        "linearizedBaseContracts": [
          4783,
          5283,
          6120,
          5208,
          7454,
          8745,
          7481,
          6539,
          7053,
          6469,
          6293,
          6343,
          6133,
          6502,
          6441,
          6831,
          5996,
          5304
        ],
        "name": "ACL",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 3507,
            "name": "CREATE_PERMISSIONS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "494:116:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3505,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "494:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307830623731396233336338336238653564333030633532316362386235346165396264393333393936613134626566386332663465303238356432643234303061",
              "id": 3506,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "544:66:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_5176166219463878559501968259997826055329110201998247721302853912956666789898_by_1",
                "typeString": "int_const 5176...(68 digits omitted)...9898"
              },
              "value": "0x0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "ACL.Op",
            "id": 3521,
            "members": [
              {
                "id": 3508,
                "name": "NONE",
                "nodeType": "EnumValue",
                "src": "627:4:11"
              },
              {
                "id": 3509,
                "name": "EQ",
                "nodeType": "EnumValue",
                "src": "633:2:11"
              },
              {
                "id": 3510,
                "name": "NEQ",
                "nodeType": "EnumValue",
                "src": "637:3:11"
              },
              {
                "id": 3511,
                "name": "GT",
                "nodeType": "EnumValue",
                "src": "642:2:11"
              },
              {
                "id": 3512,
                "name": "LT",
                "nodeType": "EnumValue",
                "src": "646:2:11"
              },
              {
                "id": 3513,
                "name": "GTE",
                "nodeType": "EnumValue",
                "src": "650:3:11"
              },
              {
                "id": 3514,
                "name": "LTE",
                "nodeType": "EnumValue",
                "src": "655:3:11"
              },
              {
                "id": 3515,
                "name": "RET",
                "nodeType": "EnumValue",
                "src": "660:3:11"
              },
              {
                "id": 3516,
                "name": "NOT",
                "nodeType": "EnumValue",
                "src": "665:3:11"
              },
              {
                "id": 3517,
                "name": "AND",
                "nodeType": "EnumValue",
                "src": "670:3:11"
              },
              {
                "id": 3518,
                "name": "OR",
                "nodeType": "EnumValue",
                "src": "675:2:11"
              },
              {
                "id": 3519,
                "name": "XOR",
                "nodeType": "EnumValue",
                "src": "679:3:11"
              },
              {
                "id": 3520,
                "name": "IF_ELSE",
                "nodeType": "EnumValue",
                "src": "684:7:11"
              }
            ],
            "name": "Op",
            "nodeType": "EnumDefinition",
            "src": "617:76:11"
          },
          {
            "canonicalName": "ACL.Param",
            "id": 3528,
            "members": [
              {
                "constant": false,
                "id": 3523,
                "name": "id",
                "nodeType": "VariableDeclaration",
                "scope": 3528,
                "src": "734:8:11",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 3522,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "734:5:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3525,
                "name": "op",
                "nodeType": "VariableDeclaration",
                "scope": 3528,
                "src": "752:8:11",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 3524,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "752:5:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3527,
                "name": "value",
                "nodeType": "VariableDeclaration",
                "scope": 3528,
                "src": "770:13:11",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint240",
                  "typeString": "uint240"
                },
                "typeName": {
                  "id": 3526,
                  "name": "uint240",
                  "nodeType": "ElementaryTypeName",
                  "src": "770:7:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint240",
                    "typeString": "uint240"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Param",
            "nodeType": "StructDefinition",
            "scope": 4783,
            "src": "711:299:11",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3531,
            "name": "BLOCK_NUMBER_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1016:51:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3529,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1016:5:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323030",
              "id": 3530,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1064:3:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_200_by_1",
                "typeString": "int_const 200"
              },
              "value": "200"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3534,
            "name": "TIMESTAMP_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1073:51:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3532,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1073:5:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323031",
              "id": 3533,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1121:3:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_201_by_1",
                "typeString": "int_const 201"
              },
              "value": "201"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3537,
            "name": "ORACLE_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1151:51:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3535,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1151:5:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323033",
              "id": 3536,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1199:3:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_203_by_1",
                "typeString": "int_const 203"
              },
              "value": "203"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3540,
            "name": "LOGIC_OP_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1208:51:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3538,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1208:5:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323034",
              "id": 3539,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1256:3:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_204_by_1",
                "typeString": "int_const 204"
              },
              "value": "204"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3543,
            "name": "PARAM_VALUE_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1265:51:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3541,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1265:5:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323035",
              "id": 3542,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1313:3:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_205_by_1",
                "typeString": "int_const 205"
              },
              "value": "205"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3546,
            "name": "EMPTY_PARAM_HASH",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1483:109:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3544,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1483:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307832393064656364393534386236326138643630333435613938383338366663383462613662633935343834303038663633363266393331363065663365353633",
              "id": 3545,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1526:66:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_18569430475105882587588266137607568536673111973893317399460219858819262702947_by_1",
                "typeString": "int_const 1856...(69 digits omitted)...2947"
              },
              "value": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3551,
            "name": "NO_PERMISSION",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1598:50:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3547,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1598:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "30",
                  "id": 3549,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1646:1:11",
                  "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": 3548,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1638:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes32_$",
                  "typeString": "type(bytes32)"
                },
                "typeName": "bytes32"
              },
              "id": 3550,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1638:10:11",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3557,
            "name": "ANY_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1654:48:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3552,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1654:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 3555,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1699:2:11",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 3554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1700:1:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 3553,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1691:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 3556,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1691:11:11",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3562,
            "name": "BURN_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1708:48:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3558,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1708:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "31",
                  "id": 3560,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1754:1:11",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_1_by_1",
                    "typeString": "int_const 1"
                  },
                  "value": "1"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_1_by_1",
                    "typeString": "int_const 1"
                  }
                ],
                "id": 3559,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1746:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 3561,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1746:10:11",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3565,
            "name": "ORACLE_CHECK_GAS",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1820:50:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3563,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1820:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3330303030",
              "id": 3564,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1865:5:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_30000_by_1",
                "typeString": "int_const 30000"
              },
              "value": "30000"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3568,
            "name": "ERROR_AUTH_INIT_KERNEL",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1877:71:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3566,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1877:6:11",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f415554485f494e49545f4b45524e454c",
              "id": 3567,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1926:22:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b821e30579b9561be7f0b7b902ba336b331e39831108d09772a61766a2b465fb",
                "typeString": "literal_string \"ACL_AUTH_INIT_KERNEL\""
              },
              "value": "ACL_AUTH_INIT_KERNEL"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3571,
            "name": "ERROR_AUTH_NO_MANAGER",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1954:69:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3569,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1954:6:11",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f415554485f4e4f5f4d414e41474552",
              "id": 3570,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2002:21:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e2d6e781abad74150d786cba50506e9dd4199308c8c71d28e79e0e9232faf41e",
                "typeString": "literal_string \"ACL_AUTH_NO_MANAGER\""
              },
              "value": "ACL_AUTH_NO_MANAGER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3574,
            "name": "ERROR_EXISTENT_MANAGER",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "2029:71:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3572,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2029:6:11",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f4558495354454e545f4d414e41474552",
              "id": 3573,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2078:22:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4c0d68e0b4f86bab649749fdab1e22b7429153357a2704a5fd7b646a35ecc4d0",
                "typeString": "literal_string \"ACL_EXISTENT_MANAGER\""
              },
              "value": "ACL_EXISTENT_MANAGER"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 3578,
            "name": "permissions",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "2147:49:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
              "typeString": "mapping(bytes32 => bytes32)"
            },
            "typeName": {
              "id": 3577,
              "keyType": {
                "id": 3575,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2156:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2147:28:11",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                "typeString": "mapping(bytes32 => bytes32)"
              },
              "valueType": {
                "id": 3576,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2167:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3583,
            "name": "permissionParams",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "2237:54:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
              "typeString": "mapping(bytes32 => struct ACL.Param[])"
            },
            "typeName": {
              "id": 3582,
              "keyType": {
                "id": 3579,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2246:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2237:28:11",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
                "typeString": "mapping(bytes32 => struct ACL.Param[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 3580,
                  "name": "Param",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 3528,
                  "src": "2257:5:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                    "typeString": "struct ACL.Param"
                  }
                },
                "id": 3581,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "2257:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage_ptr",
                  "typeString": "struct ACL.Param[]"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3587,
            "name": "permissionManager",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "2365:55:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 3586,
              "keyType": {
                "id": 3584,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2374:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2365:28:11",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 3585,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2385:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3597,
            "name": "SetPermission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3596,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3589,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3597,
                  "src": "2447:22:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3588,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2447:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3591,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3597,
                  "src": "2471:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3590,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2471:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3593,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3597,
                  "src": "2492:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3592,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2492:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3595,
                  "indexed": false,
                  "name": "allowed",
                  "nodeType": "VariableDeclaration",
                  "scope": 3597,
                  "src": "2514:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3594,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2514:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2446:81:11"
            },
            "src": "2427:101:11"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3607,
            "name": "SetPermissionParams",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3599,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3607,
                  "src": "2559:22:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3598,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2559:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3601,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3607,
                  "src": "2583:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3600,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2583:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3603,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3607,
                  "src": "2604:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3602,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2604:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3605,
                  "indexed": false,
                  "name": "paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 3607,
                  "src": "2626:18:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3604,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2626:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2558:87:11"
            },
            "src": "2533:113:11"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3615,
            "name": "ChangePermissionManager",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3614,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3609,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3615,
                  "src": "2681:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3608,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2681:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3611,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3615,
                  "src": "2702:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3610,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2702:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3613,
                  "indexed": true,
                  "name": "manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 3615,
                  "src": "2724:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3612,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2724:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2680:68:11"
            },
            "src": "2651:98:11"
          },
          {
            "body": {
              "id": 3633,
              "nodeType": "Block",
              "src": "2815:107:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3628,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3622,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10404,
                            "src": "2833:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2833:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3625,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3617,
                              "src": "2868:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3626,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3619,
                              "src": "2874:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 3624,
                            "name": "getPermissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3946,
                            "src": "2847:20:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (address,bytes32) view returns (address)"
                            }
                          },
                          "id": 3627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2847:33:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2833:47:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3629,
                        "name": "ERROR_AUTH_NO_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3571,
                        "src": "2882:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3621,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "2825:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3630,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2825:79:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3631,
                  "nodeType": "ExpressionStatement",
                  "src": "2825:79:11"
                },
                {
                  "id": 3632,
                  "nodeType": "PlaceholderStatement",
                  "src": "2914:1:11"
                }
              ]
            },
            "documentation": null,
            "id": 3634,
            "name": "onlyPermissionManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3620,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3617,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3634,
                  "src": "2786:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3616,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2786:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3619,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3634,
                  "src": "2800:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3618,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2800:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2785:29:11"
            },
            "src": "2755:167:11",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3653,
              "nodeType": "Block",
              "src": "2986:192:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3648,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3642,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3636,
                              "src": "3109:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3643,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3638,
                              "src": "3115:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 3641,
                            "name": "getPermissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3946,
                            "src": "3088:20:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (address,bytes32) view returns (address)"
                            }
                          },
                          "id": 3644,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3088:33:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 3646,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3133:1:11",
                              "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": 3645,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3125:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 3647,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3125:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3088:47:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3649,
                        "name": "ERROR_EXISTENT_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3574,
                        "src": "3137:22:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3640,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "3080:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3080:80:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3651,
                  "nodeType": "ExpressionStatement",
                  "src": "3080:80:11"
                },
                {
                  "id": 3652,
                  "nodeType": "PlaceholderStatement",
                  "src": "3170:1:11"
                }
              ]
            },
            "documentation": null,
            "id": 3654,
            "name": "noPermissionManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3639,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3636,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3654,
                  "src": "2957:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3635,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2957:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3638,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3654,
                  "src": "2971:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3637,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2971:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2956:29:11"
            },
            "src": "2928:250:11",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3682,
              "nodeType": "Block",
              "src": "3577:205:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3661,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6426,
                      "src": "3587:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 3662,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3587:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3663,
                  "nodeType": "ExpressionStatement",
                  "src": "3587:13:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3671,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3665,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10404,
                            "src": "3618:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3618:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 3668,
                                "name": "kernel",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5959,
                                "src": "3640:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IKernel_$8231_$",
                                  "typeString": "function () view returns (contract IKernel)"
                                }
                              },
                              "id": 3669,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3640:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IKernel_$8231",
                                "typeString": "contract IKernel"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IKernel_$8231",
                                "typeString": "contract IKernel"
                              }
                            ],
                            "id": 3667,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3632:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 3670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3632:17:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3618:31:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3672,
                        "name": "ERROR_AUTH_INIT_KERNEL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3568,
                        "src": "3651:22:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3664,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "3610:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3610:64:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3674,
                  "nodeType": "ExpressionStatement",
                  "src": "3610:64:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3676,
                        "name": "_permissionsCreator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3656,
                        "src": "3703:19:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3677,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10511,
                        "src": "3724:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3678,
                        "name": "CREATE_PERMISSIONS_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3507,
                        "src": "3730:23:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3679,
                        "name": "_permissionsCreator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3656,
                        "src": "3755:19:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3675,
                      "name": "_createPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4124,
                      "src": "3685:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address)"
                      }
                    },
                    "id": 3680,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3685:90:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3681,
                  "nodeType": "ExpressionStatement",
                  "src": "3685:90:11"
                }
              ]
            },
            "documentation": "@dev Initialize can only be called once. It saves the block number in which it was initialized.\n@notice Initialize an ACL instance and set `_permissionsCreator` as the entity that can create other permissions\n@param _permissionsCreator Entity that will be given permission over createPermission",
            "id": 3683,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 3659,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3658,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6373,
                  "src": "3568:8:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3568:8:11"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3657,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3656,
                  "name": "_permissionsCreator",
                  "nodeType": "VariableDeclaration",
                  "scope": 3683,
                  "src": "3532:27:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3655,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3532:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3531:29:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3660,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3577:0:11"
            },
            "scope": 4783,
            "src": "3512:270:11",
            "stateMutability": "nonpayable",
            "superFunction": 5290,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3708,
              "nodeType": "Block",
              "src": "5044:66:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3702,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3685,
                        "src": "5072:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3703,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3687,
                        "src": "5081:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3704,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3689,
                        "src": "5087:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3705,
                        "name": "_manager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3691,
                        "src": "5094:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3701,
                      "name": "_createPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4124,
                      "src": "5054:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address)"
                      }
                    },
                    "id": 3706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5054:49:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3707,
                  "nodeType": "ExpressionStatement",
                  "src": "5054:49:11"
                }
              ]
            },
            "documentation": "@dev Creates a permission that wasn't previously set and managed.\n     If a created permission is removed it is possible to reset it with createPermission.\n     This is the **ONLY** way to create permissions and set managers to permissions that don't\n     have a manager.\n     In terms of the ACL being initialized, this function implicitly protects all the other\n     state-changing external functions, as they all require the sender to be a manager.\n@notice Create a new permission granting `_entity` the ability to perform actions requiring `_role` on `_app`, setting `_manager` as the permission's manager\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n@param _role Identifier for the group of actions in app given access to perform\n@param _manager Address of the entity that will be able to grant and revoke the permission further.",
            "id": 3709,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3694,
                    "name": "CREATE_PERMISSIONS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3507,
                    "src": "4974:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3695,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3693,
                  "name": "auth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6040,
                  "src": "4969:4:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4969:29:11"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3697,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3687,
                    "src": "5027:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3698,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3689,
                    "src": "5033:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3699,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3696,
                  "name": "noPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3654,
                  "src": "5007:19:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5007:32:11"
              }
            ],
            "name": "createPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3692,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3685,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3709,
                  "src": "4880:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3684,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4880:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3687,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3709,
                  "src": "4897:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3686,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4897:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3689,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3709,
                  "src": "4911:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3688,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4911:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3691,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 3709,
                  "src": "4926:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3690,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4926:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4879:64:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3700,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5044:0:11"
            },
            "scope": 4783,
            "src": "4854:256:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3729,
              "nodeType": "Block",
              "src": "5702:73:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3719,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3711,
                        "src": "5729:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3720,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3713,
                        "src": "5738:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3721,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3715,
                        "src": "5744:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3725,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5765:1:11",
                            "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": 3724,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "5751:13:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                            "typeString": "function (uint256) pure returns (uint256[] memory)"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 3722,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5755:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3723,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "5755:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          }
                        },
                        "id": 3726,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5751:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 3718,
                      "name": "grantPermissionP",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3766,
                      "src": "5712:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,bytes32,uint256[] memory)"
                      }
                    },
                    "id": 3727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5712:56:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3728,
                  "nodeType": "ExpressionStatement",
                  "src": "5712:56:11"
                }
              ]
            },
            "documentation": "@dev Grants permission if allowed. This requires `msg.sender` to be the permission manager\n@notice Grant `_entity` the ability to perform actions requiring `_role` on `_app`\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n@param _role Identifier for the group of actions in app given access to perform",
            "id": 3730,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "grantPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3716,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3711,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3730,
                  "src": "5635:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3710,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5635:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3713,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3730,
                  "src": "5652:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3712,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5652:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3715,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3730,
                  "src": "5666:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3714,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5666:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5634:46:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3717,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5702:0:11"
            },
            "scope": 4783,
            "src": "5610:165:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3765,
              "nodeType": "Block",
              "src": "6489:156:11",
              "statements": [
                {
                  "assignments": [
                    3747
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3747,
                      "name": "paramsHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 3766,
                      "src": "6499:18:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3746,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6499:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3757,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3751,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3748,
                          "name": "_params",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3739,
                          "src": "6520:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 3749,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6520:14:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 3750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6537:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6520:18:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 3755,
                      "name": "EMPTY_PARAM_HASH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3546,
                      "src": "6564:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 3756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6520:60:11",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3753,
                          "name": "_params",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3739,
                          "src": "6553:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        ],
                        "id": 3752,
                        "name": "_saveParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4250,
                        "src": "6541:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint256[] memory) returns (bytes32)"
                        }
                      },
                      "id": 3754,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6541:20:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6499:81:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3759,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3732,
                        "src": "6605:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3760,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3734,
                        "src": "6614:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3761,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3736,
                        "src": "6620:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3762,
                        "name": "paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3747,
                        "src": "6627:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3758,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4177,
                      "src": "6590:14:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 3763,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6590:48:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3764,
                  "nodeType": "ExpressionStatement",
                  "src": "6590:48:11"
                }
              ]
            },
            "documentation": "@dev Grants a permission with parameters if allowed. This requires `msg.sender` to be the permission manager\n@notice Grant `_entity` the ability to perform actions requiring `_role` on `_app`\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n@param _role Identifier for the group of actions in app given access to perform\n@param _params Permission parameters",
            "id": 3766,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3742,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3734,
                    "src": "6472:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3743,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3736,
                    "src": "6478:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3744,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3741,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3634,
                  "src": "6450:21:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6450:34:11"
              }
            ],
            "name": "grantPermissionP",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3740,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3732,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3766,
                  "src": "6362:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3731,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6362:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3734,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3766,
                  "src": "6379:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3733,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6379:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3736,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3766,
                  "src": "6393:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3735,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6393:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3739,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 3766,
                  "src": "6408:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3737,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "6408:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 3738,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6408:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6361:65:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3745,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6489:0:11"
            },
            "scope": 4783,
            "src": "6336:309:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3786,
              "nodeType": "Block",
              "src": "7223:68:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3780,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3768,
                        "src": "7248:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3781,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3770,
                        "src": "7257:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3782,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3772,
                        "src": "7263:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3783,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3551,
                        "src": "7270:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3779,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4177,
                      "src": "7233:14:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 3784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7233:51:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3785,
                  "nodeType": "ExpressionStatement",
                  "src": "7233:51:11"
                }
              ]
            },
            "documentation": "@dev Revokes permission if allowed. This requires `msg.sender` to be the the permission manager\n@notice Revoke from `_entity` the ability to perform actions requiring `_role` on `_app`\n@param _entity Address of the whitelisted entity to revoke access from\n@param _app Address of the app in which the role will be revoked\n@param _role Identifier for the group of actions in app being revoked",
            "id": 3787,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3775,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3770,
                    "src": "7206:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3776,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3772,
                    "src": "7212:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3777,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3774,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3634,
                  "src": "7184:21:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7184:34:11"
              }
            ],
            "name": "revokePermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3768,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3787,
                  "src": "7113:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3767,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7113:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3770,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3787,
                  "src": "7130:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3769,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7130:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3772,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3787,
                  "src": "7144:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3771,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7144:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7112:46:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3778,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7223:0:11"
            },
            "scope": 4783,
            "src": "7087:204:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3806,
              "nodeType": "Block",
              "src": "7743:64:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3801,
                        "name": "_newManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3789,
                        "src": "7775:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3802,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3791,
                        "src": "7788:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3803,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3793,
                        "src": "7794:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3800,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4741,
                      "src": "7753:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 3804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7753:47:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3805,
                  "nodeType": "ExpressionStatement",
                  "src": "7753:47:11"
                }
              ]
            },
            "documentation": "@notice Set `_newManager` as the manager of `_role` in `_app`\n@param _newManager Address for the new manager\n@param _app Address of the app in which the permission management is being transferred\n@param _role Identifier for the group of actions being transferred",
            "id": 3807,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3796,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3791,
                    "src": "7726:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3797,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3793,
                    "src": "7732:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3798,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3795,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3634,
                  "src": "7704:21:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7704:34:11"
              }
            ],
            "name": "setPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3794,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3789,
                  "name": "_newManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 3807,
                  "src": "7629:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3788,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7629:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3791,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3807,
                  "src": "7650:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3790,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7650:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3793,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3807,
                  "src": "7664:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3792,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7664:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7628:50:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3799,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7743:0:11"
            },
            "scope": 4783,
            "src": "7599:208:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3826,
              "nodeType": "Block",
              "src": "8159:63:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3820,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8199:1:11",
                            "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": 3819,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8191:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3821,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8191:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3822,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3809,
                        "src": "8203:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3823,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3811,
                        "src": "8209:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3818,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4741,
                      "src": "8169:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 3824,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8169:46:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3825,
                  "nodeType": "ExpressionStatement",
                  "src": "8169:46:11"
                }
              ]
            },
            "documentation": "@notice Remove the manager of `_role` in `_app`\n@param _app Address of the app in which the permission is being unmanaged\n@param _role Identifier for the group of actions being unmanaged",
            "id": 3827,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3814,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3809,
                    "src": "8142:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3815,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3811,
                    "src": "8148:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3816,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3813,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3634,
                  "src": "8120:21:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8120:34:11"
              }
            ],
            "name": "removePermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3812,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3809,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3827,
                  "src": "8066:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3808,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8066:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3811,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3827,
                  "src": "8080:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3810,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8080:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8065:29:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3817,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8159:0:11"
            },
            "scope": 4783,
            "src": "8033:189:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3847,
              "nodeType": "Block",
              "src": "8673:64:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3842,
                        "name": "BURN_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3562,
                        "src": "8705:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3843,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3829,
                        "src": "8718:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3844,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3831,
                        "src": "8724:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3841,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4741,
                      "src": "8683:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 3845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8683:47:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3846,
                  "nodeType": "ExpressionStatement",
                  "src": "8683:47:11"
                }
              ]
            },
            "documentation": "@notice Burn non-existent `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\n@param _app Address of the app in which the permission is being burned\n@param _role Identifier for the group of actions being burned",
            "id": 3848,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3834,
                    "name": "CREATE_PERMISSIONS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3507,
                    "src": "8603:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3835,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3833,
                  "name": "auth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6040,
                  "src": "8598:4:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8598:29:11"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3837,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3829,
                    "src": "8656:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3838,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3831,
                    "src": "8662:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3839,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3836,
                  "name": "noPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3654,
                  "src": "8636:19:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8636:32:11"
              }
            ],
            "name": "createBurnedPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3832,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3829,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3848,
                  "src": "8544:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3828,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8544:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3831,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3848,
                  "src": "8558:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3830,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8558:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8543:29:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3840,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8673:0:11"
            },
            "scope": 4783,
            "src": "8512:225:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3865,
              "nodeType": "Block",
              "src": "9138:64:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3860,
                        "name": "BURN_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3562,
                        "src": "9170:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3861,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3850,
                        "src": "9183:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3862,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3852,
                        "src": "9189:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3859,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4741,
                      "src": "9148:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 3863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9148:47:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3864,
                  "nodeType": "ExpressionStatement",
                  "src": "9148:47:11"
                }
              ]
            },
            "documentation": "@notice Burn `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\n@param _app Address of the app in which the permission is being burned\n@param _role Identifier for the group of actions being burned",
            "id": 3866,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3855,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3850,
                    "src": "9121:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3856,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3852,
                    "src": "9127:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3857,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3854,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3634,
                  "src": "9099:21:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9099:34:11"
              }
            ],
            "name": "burnPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3850,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3866,
                  "src": "9045:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3849,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9045:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3852,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3866,
                  "src": "9059:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3851,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9059:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9044:29:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3858,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9138:0:11"
            },
            "scope": 4783,
            "src": "9014:188:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3888,
              "nodeType": "Block",
              "src": "9620:98:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 3877,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3583,
                        "src": "9637:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 3885,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3878,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3578,
                          "src": "9654:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                            "typeString": "mapping(bytes32 => bytes32)"
                          }
                        },
                        "id": 3884,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3880,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3868,
                              "src": "9681:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3881,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3870,
                              "src": "9690:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3882,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3872,
                              "src": "9696:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 3879,
                            "name": "permissionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4782,
                            "src": "9666:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 3883,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9666:36:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9654:49:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9637:67:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 3886,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "9637:74:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3876,
                  "id": 3887,
                  "nodeType": "Return",
                  "src": "9630:81:11"
                }
              ]
            },
            "documentation": "@notice Get parameters for permission array length\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app\n@param _role Identifier for a group of actions in app\n@return Length of the array",
            "id": 3889,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionParamsLength",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3873,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3868,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3889,
                  "src": "9545:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3867,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9545:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3870,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3889,
                  "src": "9562:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3869,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9562:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3872,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3889,
                  "src": "9576:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3871,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9576:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9544:46:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3875,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3889,
                  "src": "9614:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3874,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9614:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9613:6:11"
            },
            "scope": 4783,
            "src": "9510:208:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3928,
              "nodeType": "Block",
              "src": "10225:164:11",
              "statements": [
                {
                  "assignments": [
                    3907
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3907,
                      "name": "param",
                      "nodeType": "VariableDeclaration",
                      "scope": 3929,
                      "src": "10235:19:11",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                        "typeString": "struct ACL.Param"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3906,
                        "name": "Param",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3528,
                        "src": "10235:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                          "typeString": "struct ACL.Param"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3919,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 3908,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3583,
                        "src": "10257:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 3916,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3909,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3578,
                          "src": "10274:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                            "typeString": "mapping(bytes32 => bytes32)"
                          }
                        },
                        "id": 3915,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3911,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3891,
                              "src": "10301:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3912,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3893,
                              "src": "10310:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3913,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3895,
                              "src": "10316:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 3910,
                            "name": "permissionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4782,
                            "src": "10286:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 3914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10286:36:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10274:49:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10257:67:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 3918,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 3917,
                      "name": "_index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3897,
                      "src": "10325:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10257:75:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$3528_storage",
                      "typeString": "struct ACL.Param storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10235:97:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3920,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3907,
                          "src": "10350:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 3921,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3523,
                        "src": "10350:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3922,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3907,
                          "src": "10360:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 3923,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "op",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3525,
                        "src": "10360:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3924,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3907,
                          "src": "10370:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 3925,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3527,
                        "src": "10370:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      }
                    ],
                    "id": 3926,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "10349:33:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint8_$_t_uint8_$_t_uint240_$",
                      "typeString": "tuple(uint8,uint8,uint240)"
                    }
                  },
                  "functionReturnParameters": 3905,
                  "id": 3927,
                  "nodeType": "Return",
                  "src": "10342:40:11"
                }
              ]
            },
            "documentation": "@notice Get parameter for permission\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app\n@param _role Identifier for a group of actions in app\n@param _index Index of parameter in the array\n@return Parameter (id, op, value)",
            "id": 3929,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionParam",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3898,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3891,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10092:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3890,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10092:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3893,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10109:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3892,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10109:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3895,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10123:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3894,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10123:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3897,
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10138:11:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3896,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10138:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10091:59:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3905,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3900,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10198:5:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 3899,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10198:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3902,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10205:5:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 3901,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10205:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3904,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10212:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint240",
                    "typeString": "uint240"
                  },
                  "typeName": {
                    "id": 3903,
                    "name": "uint240",
                    "nodeType": "ElementaryTypeName",
                    "src": "10212:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint240",
                      "typeString": "uint240"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10197:23:11"
            },
            "scope": 4783,
            "src": "10064:325:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3945,
              "nodeType": "Block",
              "src": "10690:64:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 3938,
                      "name": "permissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3587,
                      "src": "10707:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 3943,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3940,
                          "name": "_app",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3931,
                          "src": "10734:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3941,
                          "name": "_role",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3933,
                          "src": "10740:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 3939,
                        "name": "roleHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4760,
                        "src": "10725:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 3942,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10725:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10707:40:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3937,
                  "id": 3944,
                  "nodeType": "Return",
                  "src": "10700:47:11"
                }
              ]
            },
            "documentation": "@dev Get manager for permission\n@param _app Address of the app\n@param _role Identifier for a group of actions in app\n@return address of the manager for the permission",
            "id": 3946,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3934,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3931,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3946,
                  "src": "10631:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3930,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10631:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3933,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3946,
                  "src": "10645:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3932,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10645:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10630:29:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3937,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3936,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3946,
                  "src": "10681:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3935,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10681:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10680:9:11"
            },
            "scope": 4783,
            "src": "10601:153:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3969,
              "nodeType": "Block",
              "src": "11234:115:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3960,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3948,
                        "src": "11265:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3961,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3950,
                        "src": "11271:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3962,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3952,
                        "src": "11279:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3965,
                            "name": "_how",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3954,
                            "src": "11336:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3963,
                            "name": "ConversionHelpers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6183,
                            "src": "11286:17:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ConversionHelpers_$6183_$",
                              "typeString": "type(library ConversionHelpers)"
                            }
                          },
                          "id": 3964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "dangerouslyCastBytesToUintArray",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6182,
                          "src": "11286:49:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (uint256[] memory)"
                          }
                        },
                        "id": 3966,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11286:55:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 3959,
                      "name": "hasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3970,
                        4037,
                        4066
                      ],
                      "referencedDeclaration": 4037,
                      "src": "11251:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 3967,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11251:91:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 3958,
                  "id": 3968,
                  "nodeType": "Return",
                  "src": "11244:98:11"
                }
              ]
            },
            "documentation": "@dev Function called by apps to check ACL on kernel or to check permission statu\n@param _who Sender of the original call\n@param _where Address of the app\n@param _where Identifier for a group of actions in app\n@param _how Permission parameters\n@return boolean indicating whether the ACL allows the role or not",
            "id": 3970,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3948,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 3970,
                  "src": "11143:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11143:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3950,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 3970,
                  "src": "11157:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3949,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11157:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3952,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 3970,
                  "src": "11173:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3951,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11173:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3954,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 3970,
                  "src": "11188:17:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3953,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11188:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11142:64:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3957,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3970,
                  "src": "11228:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3956,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11228:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11227:6:11"
            },
            "scope": 4783,
            "src": "11120:229:11",
            "stateMutability": "view",
            "superFunction": 5303,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4036,
              "nodeType": "Block",
              "src": "11473:457:11",
              "statements": [
                {
                  "assignments": [
                    3985
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3985,
                      "name": "whoParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 4037,
                      "src": "11483:17:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3984,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11483:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3993,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 3986,
                      "name": "permissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3578,
                      "src": "11503:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                        "typeString": "mapping(bytes32 => bytes32)"
                      }
                    },
                    "id": 3992,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3988,
                          "name": "_who",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3972,
                          "src": "11530:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3989,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3974,
                          "src": "11536:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3990,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3976,
                          "src": "11544:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 3987,
                        "name": "permissionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4782,
                        "src": "11515:14:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 3991,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11515:35:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11503:48:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11483:68:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 3996,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3994,
                        "name": "whoParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3985,
                        "src": "11565:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 3995,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3551,
                        "src": "11578:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "11565:26:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3998,
                          "name": "whoParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3985,
                          "src": "11606:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3999,
                          "name": "_who",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3972,
                          "src": "11617:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4000,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3974,
                          "src": "11623:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4001,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3976,
                          "src": "11631:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4002,
                          "name": "_how",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3979,
                          "src": "11638:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        ],
                        "id": 3997,
                        "name": "evalParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4099,
                        "src": "11595:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (bytes32,address,address,bytes32,uint256[] memory) view returns (bool)"
                        }
                      },
                      "id": 4003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11595:48:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11565:78:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4008,
                  "nodeType": "IfStatement",
                  "src": "11561:120:11",
                  "trueBody": {
                    "id": 4007,
                    "nodeType": "Block",
                    "src": "11645:36:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 4005,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11666:4:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 3983,
                        "id": 4006,
                        "nodeType": "Return",
                        "src": "11659:11:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4010
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4010,
                      "name": "anyParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 4037,
                      "src": "11691:17:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4009,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11691:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4018,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4011,
                      "name": "permissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3578,
                      "src": "11711:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                        "typeString": "mapping(bytes32 => bytes32)"
                      }
                    },
                    "id": 4017,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4013,
                          "name": "ANY_ENTITY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3557,
                          "src": "11738:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4014,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3974,
                          "src": "11750:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4015,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3976,
                          "src": "11758:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 4012,
                        "name": "permissionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4782,
                        "src": "11723:14:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 4016,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11723:41:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11711:54:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11691:74:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 4021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4019,
                        "name": "anyParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4010,
                        "src": "11779:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4020,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3551,
                        "src": "11792:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "11779:26:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4023,
                          "name": "anyParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4010,
                          "src": "11820:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4024,
                          "name": "ANY_ENTITY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3557,
                          "src": "11831:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4025,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3974,
                          "src": "11843:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4026,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3976,
                          "src": "11851:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4027,
                          "name": "_how",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3979,
                          "src": "11858:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        ],
                        "id": 4022,
                        "name": "evalParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4099,
                        "src": "11809:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (bytes32,address,address,bytes32,uint256[] memory) view returns (bool)"
                        }
                      },
                      "id": 4028,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11809:54:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11779:84:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4033,
                  "nodeType": "IfStatement",
                  "src": "11775:126:11",
                  "trueBody": {
                    "id": 4032,
                    "nodeType": "Block",
                    "src": "11865:36:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 4030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11886:4:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 3983,
                        "id": 4031,
                        "nodeType": "Return",
                        "src": "11879:11:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 4034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11918:5:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 3983,
                  "id": 4035,
                  "nodeType": "Return",
                  "src": "11911:12:11"
                }
              ]
            },
            "documentation": null,
            "id": 4037,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3972,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4037,
                  "src": "11378:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3971,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11378:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3974,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4037,
                  "src": "11392:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3973,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11392:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3976,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4037,
                  "src": "11408:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3975,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11408:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3979,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 4037,
                  "src": "11423:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3977,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11423:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 3978,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11423:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11377:68:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3982,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4037,
                  "src": "11467:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3981,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11467:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11466:6:11"
            },
            "scope": 4783,
            "src": "11355:575:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4065,
              "nodeType": "Block",
              "src": "12031:116:11",
              "statements": [
                {
                  "assignments": [
                    4051
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4051,
                      "name": "empty",
                      "nodeType": "VariableDeclaration",
                      "scope": 4066,
                      "src": "12041:22:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4049,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12041:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4050,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "12041:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4057,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4055,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12080:1:11",
                        "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": 4054,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "12066:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (uint256[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4052,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12070:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4053,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "12070:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      }
                    },
                    "id": 4056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12066:16:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12041:41:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4059,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4039,
                        "src": "12113:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4060,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4041,
                        "src": "12119:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4061,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4043,
                        "src": "12127:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4062,
                        "name": "empty",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4051,
                        "src": "12134:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 4058,
                      "name": "hasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3970,
                        4037,
                        4066
                      ],
                      "referencedDeclaration": 4037,
                      "src": "12099:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 4063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12099:41:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4047,
                  "id": 4064,
                  "nodeType": "Return",
                  "src": "12092:48:11"
                }
              ]
            },
            "documentation": null,
            "id": 4066,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4039,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4066,
                  "src": "11959:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4038,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11959:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4041,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4066,
                  "src": "11973:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4040,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11973:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4043,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4066,
                  "src": "11989:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4042,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11989:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11958:45:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4047,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4046,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4066,
                  "src": "12025:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4045,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12025:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12024:6:11"
            },
            "scope": 4783,
            "src": "11936:211:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4098,
              "nodeType": "Block",
              "src": "12332:160:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 4084,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4082,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4068,
                      "src": "12346:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4083,
                      "name": "EMPTY_PARAM_HASH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3546,
                      "src": "12361:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "12346:31:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4088,
                  "nodeType": "IfStatement",
                  "src": "12342:73:11",
                  "trueBody": {
                    "id": 4087,
                    "nodeType": "Block",
                    "src": "12379:36:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 4085,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12400:4:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 4081,
                        "id": 4086,
                        "nodeType": "Return",
                        "src": "12393:11:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4090,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4068,
                        "src": "12443:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4091,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12456:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 4092,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4070,
                        "src": "12459:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4093,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4072,
                        "src": "12465:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4094,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4074,
                        "src": "12473:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4095,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4077,
                        "src": "12480:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 4089,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4418,
                      "src": "12432:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 4096,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12432:53:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4081,
                  "id": 4097,
                  "nodeType": "Return",
                  "src": "12425:60:11"
                }
              ]
            },
            "documentation": null,
            "id": 4099,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "evalParams",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4078,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4068,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 4099,
                  "src": "12182:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4067,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12182:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4070,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4099,
                  "src": "12211:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4069,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12211:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4072,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4099,
                  "src": "12233:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4071,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12233:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4074,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4099,
                  "src": "12257:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4073,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12257:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4077,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 4099,
                  "src": "12280:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4075,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12280:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4076,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12280:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12172:128:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4081,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4080,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4099,
                  "src": "12322:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4079,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12322:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12321:6:11"
            },
            "scope": 4783,
            "src": "12153:339:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4123,
              "nodeType": "Block",
              "src": "12698:125:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4111,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4101,
                        "src": "12723:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4112,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12732:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4113,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4105,
                        "src": "12738:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4114,
                        "name": "EMPTY_PARAM_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3546,
                        "src": "12745:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 4110,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4177,
                      "src": "12708:14:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 4115,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12708:54:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4116,
                  "nodeType": "ExpressionStatement",
                  "src": "12708:54:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4118,
                        "name": "_manager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4107,
                        "src": "12794:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4119,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12804:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4120,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4105,
                        "src": "12810:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 4117,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4741,
                      "src": "12772:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 4121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12772:44:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4122,
                  "nodeType": "ExpressionStatement",
                  "src": "12772:44:11"
                }
              ]
            },
            "documentation": "@dev Internal createPermission for access inside the kernel (on instantiation)",
            "id": 4124,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_createPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4108,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4101,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 4124,
                  "src": "12625:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4100,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12625:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4103,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 4124,
                  "src": "12642:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12642:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4105,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 4124,
                  "src": "12656:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4104,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12656:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4107,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 4124,
                  "src": "12671:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4106,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12671:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12624:64:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4109,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12698:0:11"
            },
            "scope": 4783,
            "src": "12598:225:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4176,
              "nodeType": "Block",
              "src": "13012:426:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4135,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3578,
                        "src": "13022:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                          "typeString": "mapping(bytes32 => bytes32)"
                        }
                      },
                      "id": 4141,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4137,
                            "name": "_entity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4126,
                            "src": "13049:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4138,
                            "name": "_app",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4128,
                            "src": "13058:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4139,
                            "name": "_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4130,
                            "src": "13064:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 4136,
                          "name": "permissionHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4782,
                          "src": "13034:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                          }
                        },
                        "id": 4140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13034:36:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13022:49:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4142,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4132,
                      "src": "13074:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13022:63:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 4144,
                  "nodeType": "ExpressionStatement",
                  "src": "13022:63:11"
                },
                {
                  "assignments": [
                    4146
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4146,
                      "name": "entityHasPermission",
                      "nodeType": "VariableDeclaration",
                      "scope": 4177,
                      "src": "13095:24:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4145,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13095:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4150,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 4149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4147,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4132,
                      "src": "13122:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4148,
                      "name": "NO_PERMISSION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3551,
                      "src": "13137:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13122:28:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13095:55:11"
                },
                {
                  "assignments": [
                    4152
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4152,
                      "name": "permissionHasParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 4177,
                      "src": "13160:24:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4151,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13160:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4158,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4153,
                      "name": "entityHasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4146,
                      "src": "13187:19:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 4156,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4154,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4132,
                        "src": "13210:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4155,
                        "name": "EMPTY_PARAM_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3546,
                        "src": "13225:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "13210:31:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13187:54:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13160:81:11"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4160,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4126,
                        "src": "13271:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4161,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4128,
                        "src": "13280:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4162,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4130,
                        "src": "13286:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4163,
                        "name": "entityHasPermission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4146,
                        "src": "13293:19:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4159,
                      "name": "SetPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3597,
                      "src": "13257:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,bytes32,bool)"
                      }
                    },
                    "id": 4164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13257:56:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4165,
                  "nodeType": "EmitStatement",
                  "src": "13252:61:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 4166,
                    "name": "permissionHasParams",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4152,
                    "src": "13327:19:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4175,
                  "nodeType": "IfStatement",
                  "src": "13323:109:11",
                  "trueBody": {
                    "id": 4174,
                    "nodeType": "Block",
                    "src": "13348:84:11",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4168,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4126,
                              "src": "13387:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4169,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4128,
                              "src": "13396:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4170,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4130,
                              "src": "13402:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4171,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4132,
                              "src": "13409:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 4167,
                            "name": "SetPermissionParams",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3607,
                            "src": "13367:19:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,address,bytes32,bytes32)"
                            }
                          },
                          "id": 4172,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13367:54:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4173,
                        "nodeType": "EmitStatement",
                        "src": "13362:59:11"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Internal function called to actually save the permission",
            "id": 4177,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4133,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4126,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 4177,
                  "src": "12936:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4125,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12936:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4128,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 4177,
                  "src": "12953:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4127,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12953:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4130,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 4177,
                  "src": "12967:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4129,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12967:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4132,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 4177,
                  "src": "12982:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4131,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12982:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12935:67:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4134,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13012:0:11"
            },
            "scope": 4783,
            "src": "12912:526:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4249,
              "nodeType": "Block",
              "src": "13518:540:11",
              "statements": [
                {
                  "assignments": [
                    4186
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4186,
                      "name": "paramHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 4250,
                      "src": "13528:17:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4185,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13528:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4193,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4190,
                            "name": "_encodedParams",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4180,
                            "src": "13575:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4188,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10391,
                            "src": "13558:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 4189,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13558:16:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 4191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13558:32:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 4187,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10398,
                      "src": "13548:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 4192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13548:43:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13528:63:11"
                },
                {
                  "assignments": [
                    4197
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4197,
                      "name": "params",
                      "nodeType": "VariableDeclaration",
                      "scope": 4250,
                      "src": "13601:22:11",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage_ptr",
                        "typeString": "struct ACL.Param[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 4195,
                          "name": "Param",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3528,
                          "src": "13601:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                            "typeString": "struct ACL.Param"
                          }
                        },
                        "id": 4196,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "13601:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage_ptr",
                          "typeString": "struct ACL.Param[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4201,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4198,
                      "name": "permissionParams",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3583,
                      "src": "13626:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
                        "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                      }
                    },
                    "id": 4200,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4199,
                      "name": "paramHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4186,
                      "src": "13643:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13626:27:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage",
                      "typeString": "struct ACL.Param storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13601:52:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4202,
                        "name": "params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4197,
                        "src": "13668:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage_ptr",
                          "typeString": "struct ACL.Param storage ref[] storage pointer"
                        }
                      },
                      "id": 4203,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "13668:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4204,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13685:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "13668:18:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4246,
                  "nodeType": "IfStatement",
                  "src": "13664:361:11",
                  "trueBody": {
                    "id": 4245,
                    "nodeType": "Block",
                    "src": "13688:337:11",
                    "statements": [
                      {
                        "body": {
                          "id": 4243,
                          "nodeType": "Block",
                          "src": "13781:234:11",
                          "statements": [
                            {
                              "assignments": [
                                4218
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4218,
                                  "name": "encodedParam",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4250,
                                  "src": "13799:20:11",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 4217,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13799:7:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4222,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 4219,
                                  "name": "_encodedParams",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4180,
                                  "src": "13822:14:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 4221,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 4220,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4207,
                                  "src": "13837:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "13822:17:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13799:40:11"
                            },
                            {
                              "assignments": [
                                4224
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4224,
                                  "name": "param",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4250,
                                  "src": "13857:18:11",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                    "typeString": "struct ACL.Param"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 4223,
                                    "name": "Param",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 3528,
                                    "src": "13857:5:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                                      "typeString": "struct ACL.Param"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4236,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4227,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4218,
                                        "src": "13898:12:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 4226,
                                      "name": "decodeParamId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5242,
                                      "src": "13884:13:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                        "typeString": "function (uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 4228,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13884:27:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4230,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4218,
                                        "src": "13927:12:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 4229,
                                      "name": "decodeParamOp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5225,
                                      "src": "13913:13:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                        "typeString": "function (uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 4231,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13913:27:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4233,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4218,
                                        "src": "13950:12:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 4232,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "13942:7:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint240_$",
                                        "typeString": "type(uint240)"
                                      },
                                      "typeName": "uint240"
                                    },
                                    "id": 4234,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13942:21:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  ],
                                  "id": 4225,
                                  "name": "Param",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3528,
                                  "src": "13878:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Param_$3528_storage_ptr_$",
                                    "typeString": "type(struct ACL.Param storage pointer)"
                                  }
                                },
                                "id": 4235,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "structConstructorCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13878:86:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Param_$3528_memory",
                                  "typeString": "struct ACL.Param memory"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13857:107:11"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4240,
                                    "name": "param",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4224,
                                    "src": "13994:5:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4237,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4197,
                                    "src": "13982:6:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage_ptr",
                                      "typeString": "struct ACL.Param storage ref[] storage pointer"
                                    }
                                  },
                                  "id": 4239,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13982:11:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Param_$3528_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct ACL.Param storage ref) returns (uint256)"
                                  }
                                },
                                "id": 4241,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13982:18:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4242,
                              "nodeType": "ExpressionStatement",
                              "src": "13982:18:11"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4210,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4207,
                            "src": "13749:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4211,
                              "name": "_encodedParams",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4180,
                              "src": "13753:14:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 4212,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "13753:21:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13749:25:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4244,
                        "initializationExpression": {
                          "assignments": [
                            4207
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 4207,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 4250,
                              "src": "13734:9:11",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 4206,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "13734:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 4209,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4208,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13746:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "13734:13:11"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 4215,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "13776:3:11",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 4214,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4207,
                              "src": "13776:1:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4216,
                          "nodeType": "ExpressionStatement",
                          "src": "13776:3:11"
                        },
                        "nodeType": "ForStatement",
                        "src": "13729:286:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4247,
                    "name": "paramHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4186,
                    "src": "14042:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 4184,
                  "id": 4248,
                  "nodeType": "Return",
                  "src": "14035:16:11"
                }
              ]
            },
            "documentation": null,
            "id": 4250,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_saveParams",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4180,
                  "name": "_encodedParams",
                  "nodeType": "VariableDeclaration",
                  "scope": 4250,
                  "src": "13465:24:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4178,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "13465:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4179,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13465:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13464:26:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4184,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4183,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4250,
                  "src": "13509:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4182,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13509:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13508:9:11"
            },
            "scope": 4783,
            "src": "13444:614:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4417,
              "nodeType": "Block",
              "src": "14270:1208:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4268,
                      "name": "_paramId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4254,
                      "src": "14284:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4269,
                          "name": "permissionParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3583,
                          "src": "14296:16:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
                            "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                          }
                        },
                        "id": 4271,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4270,
                          "name": "_paramsHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4252,
                          "src": "14313:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14296:29:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage",
                          "typeString": "struct ACL.Param storage ref[] storage ref"
                        }
                      },
                      "id": 4272,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "14296:36:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14284:48:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4277,
                  "nodeType": "IfStatement",
                  "src": "14280:108:11",
                  "trueBody": {
                    "id": 4276,
                    "nodeType": "Block",
                    "src": "14334:54:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 4274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14355:5:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 4267,
                        "id": 4275,
                        "nodeType": "Return",
                        "src": "14348:12:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4279
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4279,
                      "name": "param",
                      "nodeType": "VariableDeclaration",
                      "scope": 4418,
                      "src": "14398:18:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                        "typeString": "struct ACL.Param"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4278,
                        "name": "Param",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3528,
                        "src": "14398:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                          "typeString": "struct ACL.Param"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4285,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4280,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3583,
                        "src": "14419:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 4282,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4281,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4252,
                        "src": "14436:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14419:29:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 4284,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4283,
                      "name": "_paramId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4254,
                      "src": "14449:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14419:39:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$3528_storage",
                      "typeString": "struct ACL.Param storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14398:60:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 4289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4286,
                        "name": "param",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4279,
                        "src": "14473:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                          "typeString": "struct ACL.Param memory"
                        }
                      },
                      "id": 4287,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3523,
                      "src": "14473:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4288,
                      "name": "LOGIC_OP_PARAM_ID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3540,
                      "src": "14485:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14473:29:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4300,
                  "nodeType": "IfStatement",
                  "src": "14469:124:11",
                  "trueBody": {
                    "id": 4299,
                    "nodeType": "Block",
                    "src": "14504:89:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4291,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4279,
                              "src": "14536:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4292,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4252,
                              "src": "14543:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4293,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4256,
                              "src": "14556:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4294,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4258,
                              "src": "14562:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4295,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4260,
                              "src": "14570:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4296,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4263,
                              "src": "14577:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 4290,
                            "name": "_evalLogic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4583,
                            "src": "14525:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Param_$3528_memory_ptr_$_t_bytes32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (struct ACL.Param memory,bytes32,address,address,bytes32,uint256[] memory) view returns (bool)"
                            }
                          },
                          "id": 4297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14525:57:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4267,
                        "id": 4298,
                        "nodeType": "Return",
                        "src": "14518:64:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4302,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 4418,
                      "src": "14603:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4301,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14603:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4303,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14603:13:11"
                },
                {
                  "assignments": [
                    4305
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4305,
                      "name": "comparedTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 4418,
                      "src": "14626:18:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4304,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14626:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4310,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4307,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4279,
                          "src": "14655:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                            "typeString": "struct ACL.Param memory"
                          }
                        },
                        "id": 4308,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3527,
                        "src": "14655:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      ],
                      "id": 4306,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "14647:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 4309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14647:20:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14626:41:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 4314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4311,
                        "name": "param",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4279,
                        "src": "14703:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                          "typeString": "struct ACL.Param memory"
                        }
                      },
                      "id": 4312,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3523,
                      "src": "14703:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4313,
                      "name": "ORACLE_PARAM_ID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3537,
                      "src": "14715:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14703:27:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 4339,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4336,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4279,
                          "src": "14874:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                            "typeString": "struct ACL.Param memory"
                          }
                        },
                        "id": 4337,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3523,
                        "src": "14874:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4338,
                        "name": "BLOCK_NUMBER_PARAM_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3531,
                        "src": "14886:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "src": "14874:33:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 4349,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4346,
                            "name": "param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4279,
                            "src": "14968:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 4347,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3523,
                          "src": "14968:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4348,
                          "name": "TIMESTAMP_PARAM_ID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3534,
                          "src": "14980:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "14968:30:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 4359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4356,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4279,
                              "src": "15057:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 4357,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "id",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3523,
                            "src": "15057:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4358,
                            "name": "PARAM_VALUE_PARAM_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3543,
                            "src": "15069:20:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "15057:32:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 4388,
                          "nodeType": "Block",
                          "src": "15150:176:11",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4372,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4368,
                                    "name": "param",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4279,
                                    "src": "15168:5:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  },
                                  "id": 4369,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "id",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3523,
                                  "src": "15168:8:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4370,
                                    "name": "_how",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4263,
                                    "src": "15180:4:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 4371,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "15180:11:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15168:23:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 4376,
                              "nodeType": "IfStatement",
                              "src": "15164:74:11",
                              "trueBody": {
                                "id": 4375,
                                "nodeType": "Block",
                                "src": "15193:45:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "hexValue": "66616c7365",
                                      "id": 4373,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "15218:5:11",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "false"
                                    },
                                    "functionReturnParameters": 4267,
                                    "id": 4374,
                                    "nodeType": "Return",
                                    "src": "15211:12:11"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4386,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 4377,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4302,
                                  "src": "15251:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 4380,
                                            "name": "_how",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4263,
                                            "src": "15275:4:11",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 4383,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 4381,
                                              "name": "param",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 4279,
                                              "src": "15280:5:11",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                                "typeString": "struct ACL.Param memory"
                                              }
                                            },
                                            "id": 4382,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "id",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3523,
                                            "src": "15280:8:11",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "15275:14:11",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 4379,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "15267:7:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint240_$",
                                          "typeString": "type(uint240)"
                                        },
                                        "typeName": "uint240"
                                      },
                                      "id": 4384,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15267:23:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 4378,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15259:7:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 4385,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15259:32:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15251:40:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4387,
                              "nodeType": "ExpressionStatement",
                              "src": "15251:40:11"
                            }
                          ]
                        },
                        "id": 4389,
                        "nodeType": "IfStatement",
                        "src": "15053:273:11",
                        "trueBody": {
                          "id": 4367,
                          "nodeType": "Block",
                          "src": "15091:53:11",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4365,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 4360,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4302,
                                  "src": "15105:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4362,
                                        "name": "param",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4279,
                                        "src": "15121:5:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                          "typeString": "struct ACL.Param memory"
                                        }
                                      },
                                      "id": 4363,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3527,
                                      "src": "15121:11:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 4361,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15113:7:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 4364,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15113:20:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15105:28:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4366,
                              "nodeType": "ExpressionStatement",
                              "src": "15105:28:11"
                            }
                          ]
                        }
                      },
                      "id": 4390,
                      "nodeType": "IfStatement",
                      "src": "14964:362:11",
                      "trueBody": {
                        "id": 4355,
                        "nodeType": "Block",
                        "src": "15000:47:11",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 4353,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 4350,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4302,
                                "src": "15014:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 4351,
                                  "name": "getTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6819,
                                  "src": "15022:12:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 4352,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15022:14:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "15014:22:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4354,
                            "nodeType": "ExpressionStatement",
                            "src": "15014:22:11"
                          }
                        ]
                      }
                    },
                    "id": 4391,
                    "nodeType": "IfStatement",
                    "src": "14870:456:11",
                    "trueBody": {
                      "id": 4345,
                      "nodeType": "Block",
                      "src": "14909:49:11",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 4343,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 4340,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4302,
                              "src": "14923:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 4341,
                                "name": "getBlockNumber",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6799,
                                "src": "14931:14:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 4342,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14931:16:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "14923:24:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4344,
                          "nodeType": "ExpressionStatement",
                          "src": "14923:24:11"
                        }
                      ]
                    }
                  },
                  "id": 4392,
                  "nodeType": "IfStatement",
                  "src": "14699:627:11",
                  "trueBody": {
                    "id": 4335,
                    "nodeType": "Block",
                    "src": "14732:132:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4315,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4302,
                            "src": "14746:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4318,
                                        "name": "param",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4279,
                                        "src": "14777:5:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                          "typeString": "struct ACL.Param memory"
                                        }
                                      },
                                      "id": 4319,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3527,
                                      "src": "14777:11:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 4317,
                                    "name": "IACLOracle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5321,
                                    "src": "14766:10:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IACLOracle_$5321_$",
                                      "typeString": "type(contract IACLOracle)"
                                    }
                                  },
                                  "id": 4320,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14766:23:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IACLOracle_$5321",
                                    "typeString": "contract IACLOracle"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4321,
                                  "name": "_who",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4256,
                                  "src": "14791:4:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4322,
                                  "name": "_where",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4258,
                                  "src": "14797:6:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4323,
                                  "name": "_what",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4260,
                                  "src": "14805:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4324,
                                  "name": "_how",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4263,
                                  "src": "14812:4:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IACLOracle_$5321",
                                    "typeString": "contract IACLOracle"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                ],
                                "id": 4316,
                                "name": "checkOracle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4716,
                                "src": "14754:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_contract$_IACLOracle_$5321_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (contract IACLOracle,address,address,bytes32,uint256[] memory) view returns (bool)"
                                }
                              },
                              "id": 4325,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14754:63:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4327,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14824:1:11",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 4328,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "14754:71:11",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 4326,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14820:1:11",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "14746:79:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4330,
                        "nodeType": "ExpressionStatement",
                        "src": "14746:79:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4331,
                            "name": "comparedTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4305,
                            "src": "14839:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 4332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14852:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "14839:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4334,
                        "nodeType": "ExpressionStatement",
                        "src": "14839:14:11"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4394,
                            "name": "param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4279,
                            "src": "15343:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 4395,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3525,
                          "src": "15343:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 4393,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "15340:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4396,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15340:12:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4397,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "15356:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4398,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "RET",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15356:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "15340:22:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4407,
                  "nodeType": "IfStatement",
                  "src": "15336:78:11",
                  "trueBody": {
                    "id": 4406,
                    "nodeType": "Block",
                    "src": "15364:50:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4404,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4401,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4302,
                                "src": "15393:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4400,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15385:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 4402,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15385:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4403,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15402:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "15385:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4267,
                        "id": 4405,
                        "nodeType": "Return",
                        "src": "15378:25:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4409,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4302,
                        "src": "15439:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4411,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4279,
                              "src": "15449:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 4412,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3525,
                            "src": "15449:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 4410,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3521,
                          "src": "15446:2:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 4413,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15446:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$3521",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4414,
                        "name": "comparedTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4305,
                        "src": "15460:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_enum$_Op_$3521",
                          "typeString": "enum ACL.Op"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4408,
                      "name": "compare",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4651,
                      "src": "15431:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_Op_$3521_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256,enum ACL.Op,uint256) pure returns (bool)"
                      }
                    },
                    "id": 4415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15431:40:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4267,
                  "id": 4416,
                  "nodeType": "Return",
                  "src": "15424:47:11"
                }
              ]
            },
            "documentation": null,
            "id": 4418,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_evalParam",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4252,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14093:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4251,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14093:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4254,
                  "name": "_paramId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14122:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4253,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14122:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4256,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14147:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4255,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14147:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4258,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14169:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4257,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14169:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4260,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14193:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4259,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14193:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4263,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14216:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4261,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "14216:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4262,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "14216:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14083:153:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4266,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14260:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4265,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14260:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14259:6:11"
            },
            "scope": 4783,
            "src": "14064:1414:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4582,
              "nodeType": "Block",
              "src": "15657:1131:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4437,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4420,
                            "src": "15674:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 4438,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3525,
                          "src": "15674:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 4436,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "15671:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4439,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15671:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4440,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "15688:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4441,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "IF_ELSE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15688:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "15671:27:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4488,
                  "nodeType": "IfStatement",
                  "src": "15667:450:11",
                  "trueBody": {
                    "id": 4487,
                    "nodeType": "Block",
                    "src": "15700:417:11",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4444,
                            "name": "conditionParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 4583,
                            "src": "15714:21:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 4443,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15714:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4445,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15714:21:11"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4447,
                            "name": "successParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 4583,
                            "src": "15749:19:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 4446,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15749:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4448,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15749:19:11"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4450,
                            "name": "failureParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 4583,
                            "src": "15782:19:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 4449,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15782:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4451,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15782:19:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4462,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 4452,
                                "name": "conditionParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4444,
                                "src": "15817:14:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 4453,
                                "name": "successParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4447,
                                "src": "15833:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 4454,
                                "name": "failureParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4450,
                                "src": "15847:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "id": 4455,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "15816:44:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                              "typeString": "tuple(uint32,uint32,uint32)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4458,
                                      "name": "_param",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4420,
                                      "src": "15888:6:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                        "typeString": "struct ACL.Param memory"
                                      }
                                    },
                                    "id": 4459,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "value",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3527,
                                    "src": "15888:12:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  ],
                                  "id": 4457,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15880:7:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 4460,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15880:21:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4456,
                              "name": "decodeParamsList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5282,
                              "src": "15863:16:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$_t_uint32_$_t_uint32_$",
                                "typeString": "function (uint256) pure returns (uint32,uint32,uint32)"
                              }
                            },
                            "id": 4461,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15863:39:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                              "typeString": "tuple(uint32,uint32,uint32)"
                            }
                          },
                          "src": "15816:86:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4463,
                        "nodeType": "ExpressionStatement",
                        "src": "15816:86:11"
                      },
                      {
                        "assignments": [
                          4465
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4465,
                            "name": "result",
                            "nodeType": "VariableDeclaration",
                            "scope": 4583,
                            "src": "15916:11:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4464,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "15916:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4474,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4467,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4422,
                              "src": "15941:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4468,
                              "name": "conditionParam",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4444,
                              "src": "15954:14:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4469,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4424,
                              "src": "15970:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4470,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4426,
                              "src": "15976:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4471,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4428,
                              "src": "15984:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4472,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4431,
                              "src": "15991:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 4466,
                            "name": "_evalParam",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4418,
                            "src": "15930:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                            }
                          },
                          "id": 4473,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15930:66:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15916:80:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4476,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4422,
                              "src": "16029:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "condition": {
                                "argumentTypes": null,
                                "id": 4477,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4465,
                                "src": "16042:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "argumentTypes": null,
                                "id": 4479,
                                "name": "failureParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4450,
                                "src": "16066:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 4480,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "16042:36:11",
                              "trueExpression": {
                                "argumentTypes": null,
                                "id": 4478,
                                "name": "successParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4447,
                                "src": "16051:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4481,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4424,
                              "src": "16080:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4482,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4426,
                              "src": "16086:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4483,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4428,
                              "src": "16094:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4484,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4431,
                              "src": "16101:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 4475,
                            "name": "_evalParam",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4418,
                            "src": "16018:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                            }
                          },
                          "id": 4485,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16018:88:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4435,
                        "id": 4486,
                        "nodeType": "Return",
                        "src": "16011:95:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4490,
                      "name": "param1",
                      "nodeType": "VariableDeclaration",
                      "scope": 4583,
                      "src": "16127:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 4489,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16127:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4491,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16127:13:11"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4493,
                      "name": "param2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4583,
                      "src": "16150:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 4492,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16150:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4494,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16150:13:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 4495,
                          "name": "param1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4490,
                          "src": "16175:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4496,
                          "name": "param2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4493,
                          "src": "16183:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        null
                      ],
                      "id": 4497,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "16174:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$__$",
                        "typeString": "tuple(uint32,uint32,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4500,
                                "name": "_param",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4420,
                                "src": "16219:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                  "typeString": "struct ACL.Param memory"
                                }
                              },
                              "id": 4501,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3527,
                              "src": "16219:12:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint240",
                                "typeString": "uint240"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint240",
                                "typeString": "uint240"
                              }
                            ],
                            "id": 4499,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16211:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 4502,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16211:21:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 4498,
                        "name": "decodeParamsList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5282,
                        "src": "16194:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$_t_uint32_$_t_uint32_$",
                          "typeString": "function (uint256) pure returns (uint32,uint32,uint32)"
                        }
                      },
                      "id": 4503,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16194:39:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                        "typeString": "tuple(uint32,uint32,uint32)"
                      }
                    },
                    "src": "16174:59:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4505,
                  "nodeType": "ExpressionStatement",
                  "src": "16174:59:11"
                },
                {
                  "assignments": [
                    4507
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4507,
                      "name": "r1",
                      "nodeType": "VariableDeclaration",
                      "scope": 4583,
                      "src": "16243:7:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4506,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16243:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4516,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4509,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4422,
                        "src": "16264:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4510,
                        "name": "param1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "16277:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4511,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4424,
                        "src": "16285:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4512,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4426,
                        "src": "16291:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4513,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4428,
                        "src": "16299:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4514,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4431,
                        "src": "16306:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 4508,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4418,
                      "src": "16253:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 4515,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16253:58:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16243:68:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4518,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4420,
                            "src": "16329:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 4519,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3525,
                          "src": "16329:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 4517,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "16326:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16326:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4521,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "16343:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4522,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NOT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16343:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16326:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4528,
                  "nodeType": "IfStatement",
                  "src": "16322:64:11",
                  "trueBody": {
                    "id": 4527,
                    "nodeType": "Block",
                    "src": "16351:35:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "16372:3:11",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 4524,
                            "name": "r1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4507,
                            "src": "16373:2:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4435,
                        "id": 4526,
                        "nodeType": "Return",
                        "src": "16365:10:11"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4537,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4529,
                      "name": "r1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4507,
                      "src": "16400:2:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      },
                      "id": 4536,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4531,
                              "name": "_param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4420,
                              "src": "16409:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 4532,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3525,
                            "src": "16409:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 4530,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3521,
                          "src": "16406:2:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 4533,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16406:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$3521",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4534,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3521,
                          "src": "16423:2:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 4535,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "OR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16423:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$3521",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "src": "16406:22:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16400:28:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4541,
                  "nodeType": "IfStatement",
                  "src": "16396:70:11",
                  "trueBody": {
                    "id": 4540,
                    "nodeType": "Block",
                    "src": "16430:36:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 4538,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16451:4:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 4435,
                        "id": 4539,
                        "nodeType": "Return",
                        "src": "16444:11:11"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4543,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "16480:3:11",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4542,
                        "name": "r1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4507,
                        "src": "16481:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      },
                      "id": 4550,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4545,
                              "name": "_param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4420,
                              "src": "16490:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 4546,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3525,
                            "src": "16490:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 4544,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3521,
                          "src": "16487:2:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 4547,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16487:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$3521",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4548,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3521,
                          "src": "16504:2:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 4549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "AND",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16504:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$3521",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "src": "16487:23:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16480:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4555,
                  "nodeType": "IfStatement",
                  "src": "16476:73:11",
                  "trueBody": {
                    "id": 4554,
                    "nodeType": "Block",
                    "src": "16512:37:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 4552,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16533:5:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 4435,
                        "id": 4553,
                        "nodeType": "Return",
                        "src": "16526:12:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4557
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4557,
                      "name": "r2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4583,
                      "src": "16559:7:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4556,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16559:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4566,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4559,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4422,
                        "src": "16580:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4560,
                        "name": "param2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4493,
                        "src": "16593:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4561,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4424,
                        "src": "16601:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4562,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4426,
                        "src": "16607:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4563,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4428,
                        "src": "16615:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4564,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4431,
                        "src": "16622:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 4558,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4418,
                      "src": "16569:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 4565,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16569:58:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16559:68:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4573,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4568,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4420,
                            "src": "16645:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 4569,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3525,
                          "src": "16645:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 4567,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "16642:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16642:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4571,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "16659:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4572,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XOR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16659:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16642:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4579,
                  "nodeType": "IfStatement",
                  "src": "16638:69:11",
                  "trueBody": {
                    "id": 4578,
                    "nodeType": "Block",
                    "src": "16667:40:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4574,
                            "name": "r1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4507,
                            "src": "16688:2:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4575,
                            "name": "r2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4557,
                            "src": "16694:2:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "16688:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4435,
                        "id": 4577,
                        "nodeType": "Return",
                        "src": "16681:15:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4580,
                    "name": "r2",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4557,
                    "src": "16724:2:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4435,
                  "id": 4581,
                  "nodeType": "Return",
                  "src": "16717:9:11"
                }
              ]
            },
            "documentation": null,
            "id": 4583,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_evalLogic",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4420,
                  "name": "_param",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15504:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                    "typeString": "struct ACL.Param"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4419,
                    "name": "Param",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3528,
                    "src": "15504:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                      "typeString": "struct ACL.Param"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4422,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15518:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4421,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15518:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4424,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15539:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4423,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15539:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4426,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15553:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4425,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15553:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4428,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15569:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4427,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15569:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4431,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15584:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4429,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "15584:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4430,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "15584:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15503:96:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4435,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4434,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15647:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4433,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15647:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15646:6:11"
            },
            "scope": 4783,
            "src": "15484:1304:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4650,
              "nodeType": "Block",
              "src": "16872:647:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4597,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4594,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4587,
                      "src": "16886:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4595,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "16893:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4596,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "EQ",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16893:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16886:12:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4602,
                  "nodeType": "IfStatement",
                  "src": "16882:34:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4600,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4598,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4585,
                        "src": "16908:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4599,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4589,
                        "src": "16914:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "16908:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 4593,
                    "id": 4601,
                    "nodeType": "Return",
                    "src": "16901:15:11"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4603,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4587,
                      "src": "16989:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4604,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "16996:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4605,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NEQ",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16996:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16989:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4611,
                  "nodeType": "IfStatement",
                  "src": "16985:34:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4609,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4607,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4585,
                        "src": "17011:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4608,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4589,
                        "src": "17017:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17011:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 4593,
                    "id": 4610,
                    "nodeType": "Return",
                    "src": "17004:15:11"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4612,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4587,
                      "src": "17092:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4613,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "17099:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "GT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17099:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17092:12:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4620,
                  "nodeType": "IfStatement",
                  "src": "17088:33:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4616,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4585,
                        "src": "17114:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4617,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4589,
                        "src": "17119:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17114:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 4593,
                    "id": 4619,
                    "nodeType": "Return",
                    "src": "17107:14:11"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4624,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4621,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4587,
                      "src": "17195:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4622,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "17202:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4623,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "LT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17202:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17195:12:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4629,
                  "nodeType": "IfStatement",
                  "src": "17191:33:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4627,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4625,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4585,
                        "src": "17217:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4626,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4589,
                        "src": "17222:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17217:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 4593,
                    "id": 4628,
                    "nodeType": "Return",
                    "src": "17210:14:11"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4630,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4587,
                      "src": "17298:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4631,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "17305:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4632,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "GTE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17305:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17298:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4638,
                  "nodeType": "IfStatement",
                  "src": "17294:34:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4634,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4585,
                        "src": "17320:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4635,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4589,
                        "src": "17326:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17320:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 4593,
                    "id": 4637,
                    "nodeType": "Return",
                    "src": "17313:15:11"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4639,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4587,
                      "src": "17401:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4640,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "17408:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4641,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "LTE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17408:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17401:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4647,
                  "nodeType": "IfStatement",
                  "src": "17397:34:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4643,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4585,
                        "src": "17423:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4644,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4589,
                        "src": "17429:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17423:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 4593,
                    "id": 4646,
                    "nodeType": "Return",
                    "src": "17416:15:11"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 4648,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17507:5:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 4593,
                  "id": 4649,
                  "nodeType": "Return",
                  "src": "17500:12:11"
                }
              ]
            },
            "documentation": null,
            "id": 4651,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4590,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4585,
                  "name": "_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 4651,
                  "src": "16811:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4584,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16811:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4587,
                  "name": "_op",
                  "nodeType": "VariableDeclaration",
                  "scope": 4651,
                  "src": "16823:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Op_$3521",
                    "typeString": "enum ACL.Op"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4586,
                    "name": "Op",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3521,
                    "src": "16823:2:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4589,
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 4651,
                  "src": "16831:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4588,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16831:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16810:32:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4593,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4592,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4651,
                  "src": "16866:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4591,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16866:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16865:6:11"
            },
            "scope": 4783,
            "src": "16794:725:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4715,
              "nodeType": "Block",
              "src": "17660:1057:11",
              "statements": [
                {
                  "assignments": [
                    4668
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4668,
                      "name": "sig",
                      "nodeType": "VariableDeclaration",
                      "scope": 4716,
                      "src": "17670:10:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "typeName": {
                        "id": 4667,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "17670:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4672,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4669,
                        "name": "_oracleAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4653,
                        "src": "17683:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IACLOracle_$5321",
                          "typeString": "contract IACLOracle"
                        }
                      },
                      "id": 4670,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "canPerform",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5320,
                      "src": "17683:22:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,address,bytes32,uint256[] memory) view external returns (bool)"
                      }
                    },
                    "id": 4671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "selector",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "17683:31:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17670:44:11"
                },
                {
                  "assignments": [
                    4674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4674,
                      "name": "checkCalldata",
                      "nodeType": "VariableDeclaration",
                      "scope": 4716,
                      "src": "17825:26:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 4673,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "17825:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4683,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4677,
                        "name": "sig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4668,
                        "src": "17877:3:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4678,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4655,
                        "src": "17882:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4679,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4657,
                        "src": "17888:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4680,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4659,
                        "src": "17896:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4681,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4662,
                        "src": "17903:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4675,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10391,
                        "src": "17854:3:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 4676,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodeWithSelector",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17854:22:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes4) pure returns (bytes memory)"
                      }
                    },
                    "id": 4682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17854:54:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17825:83:11"
                },
                {
                  "assignments": [
                    4685
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4685,
                      "name": "oracleCheckGas",
                      "nodeType": "VariableDeclaration",
                      "scope": 4716,
                      "src": "17918:22:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4684,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17918:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4687,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 4686,
                    "name": "ORACLE_CHECK_GAS",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3565,
                    "src": "17943:16:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17918:41:11"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4689,
                      "name": "ok",
                      "nodeType": "VariableDeclaration",
                      "scope": 4716,
                      "src": "17970:7:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4688,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "17970:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4690,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17970:7:11"
                },
                {
                  "externalReferences": [
                    {
                      "checkCalldata": {
                        "declaration": 4674,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18060:13:11",
                        "valueSize": 1
                      }
                    },
                    {
                      "checkCalldata": {
                        "declaration": 4674,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18088:13:11",
                        "valueSize": 1
                      }
                    },
                    {
                      "ok": {
                        "declaration": 4689,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18010:2:11",
                        "valueSize": 1
                      }
                    },
                    {
                      "oracleCheckGas": {
                        "declaration": 4685,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18027:14:11",
                        "valueSize": 1
                      }
                    },
                    {
                      "_oracleAddr": {
                        "declaration": 4653,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18043:11:11",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4691,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ok := staticcall(oracleCheckGas, _oracleAddr, add(checkCalldata, 0x20), mload(checkCalldata), 0, 0)\n}",
                  "src": "17987:144:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 4693,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "18133:3:11",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 4692,
                      "name": "ok",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4689,
                      "src": "18134:2:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4697,
                  "nodeType": "IfStatement",
                  "src": "18129:46:11",
                  "trueBody": {
                    "id": 4696,
                    "nodeType": "Block",
                    "src": "18138:37:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 4694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18159:5:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 4666,
                        "id": 4695,
                        "nodeType": "Return",
                        "src": "18152:12:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4699,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 4716,
                      "src": "18185:12:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4698,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18185:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4700,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18185:12:11"
                },
                {
                  "externalReferences": [
                    {
                      "size": {
                        "declaration": 4699,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18218:4:11",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4701,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    size := returndatasize()\n}",
                  "src": "18207:46:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4702,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4699,
                      "src": "18255:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 4703,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18263:2:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "18255:10:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4708,
                  "nodeType": "IfStatement",
                  "src": "18251:53:11",
                  "trueBody": {
                    "id": 4707,
                    "nodeType": "Block",
                    "src": "18267:37:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 4705,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18288:5:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 4666,
                        "id": 4706,
                        "nodeType": "Return",
                        "src": "18281:12:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4710,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 4716,
                      "src": "18314:11:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4709,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "18314:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4711,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18314:11:11"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 4710,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18507:6:11",
                        "valueSize": 1
                      }
                    },
                    {
                      "size": {
                        "declaration": 4699,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18450:4:11",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4712,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let ptr := mload(0x40)\n    returndatacopy(ptr, 0, size)\n    result := mload(ptr)\n    mstore(ptr, 0)\n}",
                  "src": "18335:368:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4713,
                    "name": "result",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4710,
                    "src": "18704:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4666,
                  "id": 4714,
                  "nodeType": "Return",
                  "src": "18697:13:11"
                }
              ]
            },
            "documentation": null,
            "id": 4716,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4663,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4653,
                  "name": "_oracleAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 4716,
                  "src": "17546:22:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IACLOracle_$5321",
                    "typeString": "contract IACLOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4652,
                    "name": "IACLOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5321,
                    "src": "17546:10:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IACLOracle_$5321",
                      "typeString": "contract IACLOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4655,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4716,
                  "src": "17570:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4654,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17570:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4657,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4716,
                  "src": "17584:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4656,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17584:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4659,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4716,
                  "src": "17600:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4658,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "17600:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4662,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 4716,
                  "src": "17615:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4660,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "17615:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4661,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "17615:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17545:85:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4665,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4716,
                  "src": "17654:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4664,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17654:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17653:6:11"
            },
            "scope": 4783,
            "src": "17525:1192:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4740,
              "nodeType": "Block",
              "src": "18878:135:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4732,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4725,
                        "name": "permissionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3587,
                        "src": "18888:17:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 4730,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4727,
                            "name": "_app",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4720,
                            "src": "18915:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4728,
                            "name": "_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4722,
                            "src": "18921:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 4726,
                          "name": "roleHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4760,
                          "src": "18906:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (address,bytes32) pure returns (bytes32)"
                          }
                        },
                        "id": 4729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18906:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "18888:40:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4731,
                      "name": "_newManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4718,
                      "src": "18931:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "18888:54:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4733,
                  "nodeType": "ExpressionStatement",
                  "src": "18888:54:11"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4735,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4720,
                        "src": "18981:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4736,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4722,
                        "src": "18987:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4737,
                        "name": "_newManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4718,
                        "src": "18994:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4734,
                      "name": "ChangePermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3615,
                      "src": "18957:23:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,bytes32,address)"
                      }
                    },
                    "id": 4738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18957:49:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4739,
                  "nodeType": "EmitStatement",
                  "src": "18952:54:11"
                }
              ]
            },
            "documentation": "@dev Internal function that sets management",
            "id": 4741,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4718,
                  "name": "_newManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 4741,
                  "src": "18819:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4717,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18819:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4720,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 4741,
                  "src": "18840:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4719,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18840:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4722,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 4741,
                  "src": "18854:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4721,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18854:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18818:50:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4724,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18878:0:11"
            },
            "scope": 4783,
            "src": "18788:225:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4759,
              "nodeType": "Block",
              "src": "19100:74:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "524f4c45",
                            "id": 4753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19144:6:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ed9ea7bc2a13bc59432ab07436e7f7f5450f82d4b48c401bed177bfaf36b1873",
                              "typeString": "literal_string \"ROLE\""
                            },
                            "value": "ROLE"
                          },
                          {
                            "argumentTypes": null,
                            "id": 4754,
                            "name": "_where",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4743,
                            "src": "19152:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4755,
                            "name": "_what",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4745,
                            "src": "19160:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_ed9ea7bc2a13bc59432ab07436e7f7f5450f82d4b48c401bed177bfaf36b1873",
                              "typeString": "literal_string \"ROLE\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4751,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10391,
                            "src": "19127:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 4752,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19127:16:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 4756,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19127:39:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 4750,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10398,
                      "src": "19117:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 4757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19117:50:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 4749,
                  "id": 4758,
                  "nodeType": "Return",
                  "src": "19110:57:11"
                }
              ]
            },
            "documentation": null,
            "id": 4760,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "roleHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4746,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4743,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4760,
                  "src": "19037:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4742,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19037:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4745,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4760,
                  "src": "19053:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4744,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19053:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19036:31:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4749,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4748,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4760,
                  "src": "19091:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4747,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19091:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19090:9:11"
            },
            "scope": 4783,
            "src": "19019:155:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4781,
              "nodeType": "Block",
              "src": "19281:86:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "5045524d495353494f4e",
                            "id": 4774,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19325:12:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ec1029a550434f46cc722ae017b3a2e96fd6dfb85f48bea21a1c682e8b994de1",
                              "typeString": "literal_string \"PERMISSION\""
                            },
                            "value": "PERMISSION"
                          },
                          {
                            "argumentTypes": null,
                            "id": 4775,
                            "name": "_who",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4762,
                            "src": "19339:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4776,
                            "name": "_where",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4764,
                            "src": "19345:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4777,
                            "name": "_what",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4766,
                            "src": "19353:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_ec1029a550434f46cc722ae017b3a2e96fd6dfb85f48bea21a1c682e8b994de1",
                              "typeString": "literal_string \"PERMISSION\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4772,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10391,
                            "src": "19308:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 4773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19308:16:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 4778,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19308:51:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 4771,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10398,
                      "src": "19298:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 4779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19298:62:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 4770,
                  "id": 4780,
                  "nodeType": "Return",
                  "src": "19291:69:11"
                }
              ]
            },
            "documentation": null,
            "id": 4782,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "permissionHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4767,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4762,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4782,
                  "src": "19204:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4761,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19204:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4764,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4782,
                  "src": "19218:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4763,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19218:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4766,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4782,
                  "src": "19234:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4765,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19234:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19203:45:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4770,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4769,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4782,
                  "src": "19272:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4768,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19272:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19271:9:11"
            },
            "scope": 4783,
            "src": "19180:187:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 4784,
        "src": "293:19076:11"
      }
    ],
    "src": "0:19370:11"
  },
  "legacyAST": {
    "absolutePath": "@aragon/os/contracts/acl/ACL.sol",
    "exportedSymbols": {
      "ACL": [
        4783
      ]
    },
    "id": 4784,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3490,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:11"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "../apps/AragonApp.sol",
        "id": 3491,
        "nodeType": "ImportDirective",
        "scope": 4784,
        "sourceUnit": 6121,
        "src": "25:31:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/ConversionHelpers.sol",
        "file": "../common/ConversionHelpers.sol",
        "id": 3492,
        "nodeType": "ImportDirective",
        "scope": 4784,
        "sourceUnit": 6184,
        "src": "57:41:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/TimeHelpers.sol",
        "file": "../common/TimeHelpers.sol",
        "id": 3493,
        "nodeType": "ImportDirective",
        "scope": 4784,
        "sourceUnit": 6832,
        "src": "99:35:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/ACLSyntaxSugar.sol",
        "file": "./ACLSyntaxSugar.sol",
        "id": 3494,
        "nodeType": "ImportDirective",
        "scope": 4784,
        "sourceUnit": 5284,
        "src": "135:30:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/IACL.sol",
        "file": "./IACL.sol",
        "id": 3495,
        "nodeType": "ImportDirective",
        "scope": 4784,
        "sourceUnit": 5305,
        "src": "166:20:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/IACLOracle.sol",
        "file": "./IACLOracle.sol",
        "id": 3496,
        "nodeType": "ImportDirective",
        "scope": 4784,
        "sourceUnit": 5322,
        "src": "187:26:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3497,
              "name": "IACL",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5304,
              "src": "309:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IACL_$5304",
                "typeString": "contract IACL"
              }
            },
            "id": 3498,
            "nodeType": "InheritanceSpecifier",
            "src": "309:4:11"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3499,
              "name": "TimeHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6831,
              "src": "315:11:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TimeHelpers_$6831",
                "typeString": "contract TimeHelpers"
              }
            },
            "id": 3500,
            "nodeType": "InheritanceSpecifier",
            "src": "315:11:11"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3501,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6120,
              "src": "328:9:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$6120",
                "typeString": "contract AragonApp"
              }
            },
            "id": 3502,
            "nodeType": "InheritanceSpecifier",
            "src": "328:9:11"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3503,
              "name": "ACLHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5283,
              "src": "339:10:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ACLHelpers_$5283",
                "typeString": "contract ACLHelpers"
              }
            },
            "id": 3504,
            "nodeType": "InheritanceSpecifier",
            "src": "339:10:11"
          }
        ],
        "contractDependencies": [
          5208,
          5283,
          5304,
          5996,
          6120,
          6133,
          6293,
          6343,
          6441,
          6469,
          6502,
          6539,
          6831,
          7053,
          7454,
          7481,
          8745
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4783,
        "linearizedBaseContracts": [
          4783,
          5283,
          6120,
          5208,
          7454,
          8745,
          7481,
          6539,
          7053,
          6469,
          6293,
          6343,
          6133,
          6502,
          6441,
          6831,
          5996,
          5304
        ],
        "name": "ACL",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 3507,
            "name": "CREATE_PERMISSIONS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "494:116:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3505,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "494:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307830623731396233336338336238653564333030633532316362386235346165396264393333393936613134626566386332663465303238356432643234303061",
              "id": 3506,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "544:66:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_5176166219463878559501968259997826055329110201998247721302853912956666789898_by_1",
                "typeString": "int_const 5176...(68 digits omitted)...9898"
              },
              "value": "0x0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "ACL.Op",
            "id": 3521,
            "members": [
              {
                "id": 3508,
                "name": "NONE",
                "nodeType": "EnumValue",
                "src": "627:4:11"
              },
              {
                "id": 3509,
                "name": "EQ",
                "nodeType": "EnumValue",
                "src": "633:2:11"
              },
              {
                "id": 3510,
                "name": "NEQ",
                "nodeType": "EnumValue",
                "src": "637:3:11"
              },
              {
                "id": 3511,
                "name": "GT",
                "nodeType": "EnumValue",
                "src": "642:2:11"
              },
              {
                "id": 3512,
                "name": "LT",
                "nodeType": "EnumValue",
                "src": "646:2:11"
              },
              {
                "id": 3513,
                "name": "GTE",
                "nodeType": "EnumValue",
                "src": "650:3:11"
              },
              {
                "id": 3514,
                "name": "LTE",
                "nodeType": "EnumValue",
                "src": "655:3:11"
              },
              {
                "id": 3515,
                "name": "RET",
                "nodeType": "EnumValue",
                "src": "660:3:11"
              },
              {
                "id": 3516,
                "name": "NOT",
                "nodeType": "EnumValue",
                "src": "665:3:11"
              },
              {
                "id": 3517,
                "name": "AND",
                "nodeType": "EnumValue",
                "src": "670:3:11"
              },
              {
                "id": 3518,
                "name": "OR",
                "nodeType": "EnumValue",
                "src": "675:2:11"
              },
              {
                "id": 3519,
                "name": "XOR",
                "nodeType": "EnumValue",
                "src": "679:3:11"
              },
              {
                "id": 3520,
                "name": "IF_ELSE",
                "nodeType": "EnumValue",
                "src": "684:7:11"
              }
            ],
            "name": "Op",
            "nodeType": "EnumDefinition",
            "src": "617:76:11"
          },
          {
            "canonicalName": "ACL.Param",
            "id": 3528,
            "members": [
              {
                "constant": false,
                "id": 3523,
                "name": "id",
                "nodeType": "VariableDeclaration",
                "scope": 3528,
                "src": "734:8:11",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 3522,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "734:5:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3525,
                "name": "op",
                "nodeType": "VariableDeclaration",
                "scope": 3528,
                "src": "752:8:11",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 3524,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "752:5:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3527,
                "name": "value",
                "nodeType": "VariableDeclaration",
                "scope": 3528,
                "src": "770:13:11",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint240",
                  "typeString": "uint240"
                },
                "typeName": {
                  "id": 3526,
                  "name": "uint240",
                  "nodeType": "ElementaryTypeName",
                  "src": "770:7:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint240",
                    "typeString": "uint240"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Param",
            "nodeType": "StructDefinition",
            "scope": 4783,
            "src": "711:299:11",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3531,
            "name": "BLOCK_NUMBER_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1016:51:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3529,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1016:5:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323030",
              "id": 3530,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1064:3:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_200_by_1",
                "typeString": "int_const 200"
              },
              "value": "200"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3534,
            "name": "TIMESTAMP_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1073:51:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3532,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1073:5:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323031",
              "id": 3533,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1121:3:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_201_by_1",
                "typeString": "int_const 201"
              },
              "value": "201"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3537,
            "name": "ORACLE_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1151:51:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3535,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1151:5:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323033",
              "id": 3536,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1199:3:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_203_by_1",
                "typeString": "int_const 203"
              },
              "value": "203"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3540,
            "name": "LOGIC_OP_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1208:51:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3538,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1208:5:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323034",
              "id": 3539,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1256:3:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_204_by_1",
                "typeString": "int_const 204"
              },
              "value": "204"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3543,
            "name": "PARAM_VALUE_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1265:51:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3541,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1265:5:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323035",
              "id": 3542,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1313:3:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_205_by_1",
                "typeString": "int_const 205"
              },
              "value": "205"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3546,
            "name": "EMPTY_PARAM_HASH",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1483:109:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3544,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1483:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307832393064656364393534386236326138643630333435613938383338366663383462613662633935343834303038663633363266393331363065663365353633",
              "id": 3545,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1526:66:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_18569430475105882587588266137607568536673111973893317399460219858819262702947_by_1",
                "typeString": "int_const 1856...(69 digits omitted)...2947"
              },
              "value": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3551,
            "name": "NO_PERMISSION",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1598:50:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3547,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1598:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "30",
                  "id": 3549,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1646:1:11",
                  "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": 3548,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1638:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes32_$",
                  "typeString": "type(bytes32)"
                },
                "typeName": "bytes32"
              },
              "id": 3550,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1638:10:11",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3557,
            "name": "ANY_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1654:48:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3552,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1654:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 3555,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1699:2:11",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 3554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1700:1:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 3553,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1691:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 3556,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1691:11:11",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3562,
            "name": "BURN_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1708:48:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3558,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1708:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "31",
                  "id": 3560,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1754:1:11",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_1_by_1",
                    "typeString": "int_const 1"
                  },
                  "value": "1"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_1_by_1",
                    "typeString": "int_const 1"
                  }
                ],
                "id": 3559,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1746:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 3561,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1746:10:11",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3565,
            "name": "ORACLE_CHECK_GAS",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1820:50:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3563,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1820:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3330303030",
              "id": 3564,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1865:5:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_30000_by_1",
                "typeString": "int_const 30000"
              },
              "value": "30000"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3568,
            "name": "ERROR_AUTH_INIT_KERNEL",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1877:71:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3566,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1877:6:11",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f415554485f494e49545f4b45524e454c",
              "id": 3567,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1926:22:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b821e30579b9561be7f0b7b902ba336b331e39831108d09772a61766a2b465fb",
                "typeString": "literal_string \"ACL_AUTH_INIT_KERNEL\""
              },
              "value": "ACL_AUTH_INIT_KERNEL"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3571,
            "name": "ERROR_AUTH_NO_MANAGER",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "1954:69:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3569,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1954:6:11",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f415554485f4e4f5f4d414e41474552",
              "id": 3570,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2002:21:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e2d6e781abad74150d786cba50506e9dd4199308c8c71d28e79e0e9232faf41e",
                "typeString": "literal_string \"ACL_AUTH_NO_MANAGER\""
              },
              "value": "ACL_AUTH_NO_MANAGER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3574,
            "name": "ERROR_EXISTENT_MANAGER",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "2029:71:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3572,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2029:6:11",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f4558495354454e545f4d414e41474552",
              "id": 3573,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2078:22:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4c0d68e0b4f86bab649749fdab1e22b7429153357a2704a5fd7b646a35ecc4d0",
                "typeString": "literal_string \"ACL_EXISTENT_MANAGER\""
              },
              "value": "ACL_EXISTENT_MANAGER"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 3578,
            "name": "permissions",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "2147:49:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
              "typeString": "mapping(bytes32 => bytes32)"
            },
            "typeName": {
              "id": 3577,
              "keyType": {
                "id": 3575,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2156:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2147:28:11",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                "typeString": "mapping(bytes32 => bytes32)"
              },
              "valueType": {
                "id": 3576,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2167:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3583,
            "name": "permissionParams",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "2237:54:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
              "typeString": "mapping(bytes32 => struct ACL.Param[])"
            },
            "typeName": {
              "id": 3582,
              "keyType": {
                "id": 3579,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2246:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2237:28:11",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
                "typeString": "mapping(bytes32 => struct ACL.Param[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 3580,
                  "name": "Param",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 3528,
                  "src": "2257:5:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                    "typeString": "struct ACL.Param"
                  }
                },
                "id": 3581,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "2257:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage_ptr",
                  "typeString": "struct ACL.Param[]"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3587,
            "name": "permissionManager",
            "nodeType": "VariableDeclaration",
            "scope": 4783,
            "src": "2365:55:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 3586,
              "keyType": {
                "id": 3584,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2374:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2365:28:11",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 3585,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2385:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3597,
            "name": "SetPermission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3596,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3589,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3597,
                  "src": "2447:22:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3588,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2447:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3591,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3597,
                  "src": "2471:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3590,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2471:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3593,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3597,
                  "src": "2492:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3592,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2492:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3595,
                  "indexed": false,
                  "name": "allowed",
                  "nodeType": "VariableDeclaration",
                  "scope": 3597,
                  "src": "2514:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3594,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2514:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2446:81:11"
            },
            "src": "2427:101:11"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3607,
            "name": "SetPermissionParams",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3599,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3607,
                  "src": "2559:22:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3598,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2559:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3601,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3607,
                  "src": "2583:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3600,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2583:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3603,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3607,
                  "src": "2604:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3602,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2604:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3605,
                  "indexed": false,
                  "name": "paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 3607,
                  "src": "2626:18:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3604,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2626:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2558:87:11"
            },
            "src": "2533:113:11"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3615,
            "name": "ChangePermissionManager",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3614,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3609,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3615,
                  "src": "2681:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3608,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2681:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3611,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3615,
                  "src": "2702:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3610,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2702:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3613,
                  "indexed": true,
                  "name": "manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 3615,
                  "src": "2724:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3612,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2724:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2680:68:11"
            },
            "src": "2651:98:11"
          },
          {
            "body": {
              "id": 3633,
              "nodeType": "Block",
              "src": "2815:107:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3628,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3622,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10404,
                            "src": "2833:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2833:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3625,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3617,
                              "src": "2868:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3626,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3619,
                              "src": "2874:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 3624,
                            "name": "getPermissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3946,
                            "src": "2847:20:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (address,bytes32) view returns (address)"
                            }
                          },
                          "id": 3627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2847:33:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2833:47:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3629,
                        "name": "ERROR_AUTH_NO_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3571,
                        "src": "2882:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3621,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "2825:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3630,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2825:79:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3631,
                  "nodeType": "ExpressionStatement",
                  "src": "2825:79:11"
                },
                {
                  "id": 3632,
                  "nodeType": "PlaceholderStatement",
                  "src": "2914:1:11"
                }
              ]
            },
            "documentation": null,
            "id": 3634,
            "name": "onlyPermissionManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3620,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3617,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3634,
                  "src": "2786:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3616,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2786:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3619,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3634,
                  "src": "2800:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3618,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2800:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2785:29:11"
            },
            "src": "2755:167:11",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3653,
              "nodeType": "Block",
              "src": "2986:192:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3648,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3642,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3636,
                              "src": "3109:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3643,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3638,
                              "src": "3115:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 3641,
                            "name": "getPermissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3946,
                            "src": "3088:20:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (address,bytes32) view returns (address)"
                            }
                          },
                          "id": 3644,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3088:33:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 3646,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3133:1:11",
                              "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": 3645,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3125:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 3647,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3125:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3088:47:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3649,
                        "name": "ERROR_EXISTENT_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3574,
                        "src": "3137:22:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3640,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "3080:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3080:80:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3651,
                  "nodeType": "ExpressionStatement",
                  "src": "3080:80:11"
                },
                {
                  "id": 3652,
                  "nodeType": "PlaceholderStatement",
                  "src": "3170:1:11"
                }
              ]
            },
            "documentation": null,
            "id": 3654,
            "name": "noPermissionManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3639,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3636,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3654,
                  "src": "2957:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3635,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2957:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3638,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3654,
                  "src": "2971:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3637,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2971:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2956:29:11"
            },
            "src": "2928:250:11",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3682,
              "nodeType": "Block",
              "src": "3577:205:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3661,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6426,
                      "src": "3587:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 3662,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3587:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3663,
                  "nodeType": "ExpressionStatement",
                  "src": "3587:13:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3671,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3665,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10404,
                            "src": "3618:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3618:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 3668,
                                "name": "kernel",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5959,
                                "src": "3640:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IKernel_$8231_$",
                                  "typeString": "function () view returns (contract IKernel)"
                                }
                              },
                              "id": 3669,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3640:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IKernel_$8231",
                                "typeString": "contract IKernel"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IKernel_$8231",
                                "typeString": "contract IKernel"
                              }
                            ],
                            "id": 3667,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3632:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 3670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3632:17:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3618:31:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3672,
                        "name": "ERROR_AUTH_INIT_KERNEL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3568,
                        "src": "3651:22:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3664,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "3610:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3610:64:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3674,
                  "nodeType": "ExpressionStatement",
                  "src": "3610:64:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3676,
                        "name": "_permissionsCreator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3656,
                        "src": "3703:19:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3677,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10511,
                        "src": "3724:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3678,
                        "name": "CREATE_PERMISSIONS_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3507,
                        "src": "3730:23:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3679,
                        "name": "_permissionsCreator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3656,
                        "src": "3755:19:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3675,
                      "name": "_createPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4124,
                      "src": "3685:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address)"
                      }
                    },
                    "id": 3680,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3685:90:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3681,
                  "nodeType": "ExpressionStatement",
                  "src": "3685:90:11"
                }
              ]
            },
            "documentation": "@dev Initialize can only be called once. It saves the block number in which it was initialized.\n@notice Initialize an ACL instance and set `_permissionsCreator` as the entity that can create other permissions\n@param _permissionsCreator Entity that will be given permission over createPermission",
            "id": 3683,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 3659,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3658,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6373,
                  "src": "3568:8:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3568:8:11"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3657,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3656,
                  "name": "_permissionsCreator",
                  "nodeType": "VariableDeclaration",
                  "scope": 3683,
                  "src": "3532:27:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3655,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3532:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3531:29:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3660,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3577:0:11"
            },
            "scope": 4783,
            "src": "3512:270:11",
            "stateMutability": "nonpayable",
            "superFunction": 5290,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3708,
              "nodeType": "Block",
              "src": "5044:66:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3702,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3685,
                        "src": "5072:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3703,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3687,
                        "src": "5081:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3704,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3689,
                        "src": "5087:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3705,
                        "name": "_manager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3691,
                        "src": "5094:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3701,
                      "name": "_createPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4124,
                      "src": "5054:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address)"
                      }
                    },
                    "id": 3706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5054:49:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3707,
                  "nodeType": "ExpressionStatement",
                  "src": "5054:49:11"
                }
              ]
            },
            "documentation": "@dev Creates a permission that wasn't previously set and managed.\n     If a created permission is removed it is possible to reset it with createPermission.\n     This is the **ONLY** way to create permissions and set managers to permissions that don't\n     have a manager.\n     In terms of the ACL being initialized, this function implicitly protects all the other\n     state-changing external functions, as they all require the sender to be a manager.\n@notice Create a new permission granting `_entity` the ability to perform actions requiring `_role` on `_app`, setting `_manager` as the permission's manager\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n@param _role Identifier for the group of actions in app given access to perform\n@param _manager Address of the entity that will be able to grant and revoke the permission further.",
            "id": 3709,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3694,
                    "name": "CREATE_PERMISSIONS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3507,
                    "src": "4974:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3695,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3693,
                  "name": "auth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6040,
                  "src": "4969:4:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4969:29:11"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3697,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3687,
                    "src": "5027:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3698,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3689,
                    "src": "5033:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3699,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3696,
                  "name": "noPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3654,
                  "src": "5007:19:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5007:32:11"
              }
            ],
            "name": "createPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3692,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3685,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3709,
                  "src": "4880:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3684,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4880:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3687,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3709,
                  "src": "4897:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3686,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4897:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3689,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3709,
                  "src": "4911:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3688,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4911:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3691,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 3709,
                  "src": "4926:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3690,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4926:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4879:64:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3700,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5044:0:11"
            },
            "scope": 4783,
            "src": "4854:256:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3729,
              "nodeType": "Block",
              "src": "5702:73:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3719,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3711,
                        "src": "5729:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3720,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3713,
                        "src": "5738:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3721,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3715,
                        "src": "5744:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3725,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5765:1:11",
                            "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": 3724,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "5751:13:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                            "typeString": "function (uint256) pure returns (uint256[] memory)"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 3722,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5755:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3723,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "5755:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          }
                        },
                        "id": 3726,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5751:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 3718,
                      "name": "grantPermissionP",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3766,
                      "src": "5712:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,bytes32,uint256[] memory)"
                      }
                    },
                    "id": 3727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5712:56:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3728,
                  "nodeType": "ExpressionStatement",
                  "src": "5712:56:11"
                }
              ]
            },
            "documentation": "@dev Grants permission if allowed. This requires `msg.sender` to be the permission manager\n@notice Grant `_entity` the ability to perform actions requiring `_role` on `_app`\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n@param _role Identifier for the group of actions in app given access to perform",
            "id": 3730,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "grantPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3716,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3711,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3730,
                  "src": "5635:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3710,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5635:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3713,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3730,
                  "src": "5652:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3712,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5652:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3715,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3730,
                  "src": "5666:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3714,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5666:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5634:46:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3717,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5702:0:11"
            },
            "scope": 4783,
            "src": "5610:165:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3765,
              "nodeType": "Block",
              "src": "6489:156:11",
              "statements": [
                {
                  "assignments": [
                    3747
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3747,
                      "name": "paramsHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 3766,
                      "src": "6499:18:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3746,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6499:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3757,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3751,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3748,
                          "name": "_params",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3739,
                          "src": "6520:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 3749,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6520:14:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 3750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6537:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6520:18:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 3755,
                      "name": "EMPTY_PARAM_HASH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3546,
                      "src": "6564:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 3756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6520:60:11",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3753,
                          "name": "_params",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3739,
                          "src": "6553:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        ],
                        "id": 3752,
                        "name": "_saveParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4250,
                        "src": "6541:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint256[] memory) returns (bytes32)"
                        }
                      },
                      "id": 3754,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6541:20:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6499:81:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3759,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3732,
                        "src": "6605:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3760,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3734,
                        "src": "6614:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3761,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3736,
                        "src": "6620:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3762,
                        "name": "paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3747,
                        "src": "6627:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3758,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4177,
                      "src": "6590:14:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 3763,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6590:48:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3764,
                  "nodeType": "ExpressionStatement",
                  "src": "6590:48:11"
                }
              ]
            },
            "documentation": "@dev Grants a permission with parameters if allowed. This requires `msg.sender` to be the permission manager\n@notice Grant `_entity` the ability to perform actions requiring `_role` on `_app`\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n@param _role Identifier for the group of actions in app given access to perform\n@param _params Permission parameters",
            "id": 3766,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3742,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3734,
                    "src": "6472:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3743,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3736,
                    "src": "6478:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3744,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3741,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3634,
                  "src": "6450:21:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6450:34:11"
              }
            ],
            "name": "grantPermissionP",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3740,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3732,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3766,
                  "src": "6362:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3731,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6362:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3734,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3766,
                  "src": "6379:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3733,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6379:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3736,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3766,
                  "src": "6393:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3735,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6393:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3739,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 3766,
                  "src": "6408:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3737,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "6408:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 3738,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6408:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6361:65:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3745,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6489:0:11"
            },
            "scope": 4783,
            "src": "6336:309:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3786,
              "nodeType": "Block",
              "src": "7223:68:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3780,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3768,
                        "src": "7248:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3781,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3770,
                        "src": "7257:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3782,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3772,
                        "src": "7263:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3783,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3551,
                        "src": "7270:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3779,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4177,
                      "src": "7233:14:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 3784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7233:51:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3785,
                  "nodeType": "ExpressionStatement",
                  "src": "7233:51:11"
                }
              ]
            },
            "documentation": "@dev Revokes permission if allowed. This requires `msg.sender` to be the the permission manager\n@notice Revoke from `_entity` the ability to perform actions requiring `_role` on `_app`\n@param _entity Address of the whitelisted entity to revoke access from\n@param _app Address of the app in which the role will be revoked\n@param _role Identifier for the group of actions in app being revoked",
            "id": 3787,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3775,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3770,
                    "src": "7206:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3776,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3772,
                    "src": "7212:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3777,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3774,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3634,
                  "src": "7184:21:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7184:34:11"
              }
            ],
            "name": "revokePermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3768,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3787,
                  "src": "7113:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3767,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7113:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3770,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3787,
                  "src": "7130:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3769,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7130:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3772,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3787,
                  "src": "7144:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3771,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7144:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7112:46:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3778,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7223:0:11"
            },
            "scope": 4783,
            "src": "7087:204:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3806,
              "nodeType": "Block",
              "src": "7743:64:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3801,
                        "name": "_newManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3789,
                        "src": "7775:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3802,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3791,
                        "src": "7788:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3803,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3793,
                        "src": "7794:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3800,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4741,
                      "src": "7753:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 3804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7753:47:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3805,
                  "nodeType": "ExpressionStatement",
                  "src": "7753:47:11"
                }
              ]
            },
            "documentation": "@notice Set `_newManager` as the manager of `_role` in `_app`\n@param _newManager Address for the new manager\n@param _app Address of the app in which the permission management is being transferred\n@param _role Identifier for the group of actions being transferred",
            "id": 3807,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3796,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3791,
                    "src": "7726:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3797,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3793,
                    "src": "7732:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3798,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3795,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3634,
                  "src": "7704:21:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7704:34:11"
              }
            ],
            "name": "setPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3794,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3789,
                  "name": "_newManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 3807,
                  "src": "7629:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3788,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7629:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3791,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3807,
                  "src": "7650:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3790,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7650:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3793,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3807,
                  "src": "7664:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3792,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7664:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7628:50:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3799,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7743:0:11"
            },
            "scope": 4783,
            "src": "7599:208:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3826,
              "nodeType": "Block",
              "src": "8159:63:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3820,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8199:1:11",
                            "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": 3819,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8191:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3821,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8191:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3822,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3809,
                        "src": "8203:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3823,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3811,
                        "src": "8209:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3818,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4741,
                      "src": "8169:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 3824,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8169:46:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3825,
                  "nodeType": "ExpressionStatement",
                  "src": "8169:46:11"
                }
              ]
            },
            "documentation": "@notice Remove the manager of `_role` in `_app`\n@param _app Address of the app in which the permission is being unmanaged\n@param _role Identifier for the group of actions being unmanaged",
            "id": 3827,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3814,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3809,
                    "src": "8142:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3815,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3811,
                    "src": "8148:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3816,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3813,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3634,
                  "src": "8120:21:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8120:34:11"
              }
            ],
            "name": "removePermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3812,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3809,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3827,
                  "src": "8066:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3808,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8066:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3811,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3827,
                  "src": "8080:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3810,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8080:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8065:29:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3817,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8159:0:11"
            },
            "scope": 4783,
            "src": "8033:189:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3847,
              "nodeType": "Block",
              "src": "8673:64:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3842,
                        "name": "BURN_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3562,
                        "src": "8705:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3843,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3829,
                        "src": "8718:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3844,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3831,
                        "src": "8724:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3841,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4741,
                      "src": "8683:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 3845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8683:47:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3846,
                  "nodeType": "ExpressionStatement",
                  "src": "8683:47:11"
                }
              ]
            },
            "documentation": "@notice Burn non-existent `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\n@param _app Address of the app in which the permission is being burned\n@param _role Identifier for the group of actions being burned",
            "id": 3848,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3834,
                    "name": "CREATE_PERMISSIONS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3507,
                    "src": "8603:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3835,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3833,
                  "name": "auth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6040,
                  "src": "8598:4:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8598:29:11"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3837,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3829,
                    "src": "8656:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3838,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3831,
                    "src": "8662:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3839,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3836,
                  "name": "noPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3654,
                  "src": "8636:19:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8636:32:11"
              }
            ],
            "name": "createBurnedPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3832,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3829,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3848,
                  "src": "8544:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3828,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8544:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3831,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3848,
                  "src": "8558:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3830,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8558:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8543:29:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3840,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8673:0:11"
            },
            "scope": 4783,
            "src": "8512:225:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3865,
              "nodeType": "Block",
              "src": "9138:64:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3860,
                        "name": "BURN_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3562,
                        "src": "9170:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3861,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3850,
                        "src": "9183:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3862,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3852,
                        "src": "9189:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3859,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4741,
                      "src": "9148:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 3863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9148:47:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3864,
                  "nodeType": "ExpressionStatement",
                  "src": "9148:47:11"
                }
              ]
            },
            "documentation": "@notice Burn `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\n@param _app Address of the app in which the permission is being burned\n@param _role Identifier for the group of actions being burned",
            "id": 3866,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3855,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3850,
                    "src": "9121:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3856,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3852,
                    "src": "9127:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 3857,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3854,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3634,
                  "src": "9099:21:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9099:34:11"
              }
            ],
            "name": "burnPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3850,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3866,
                  "src": "9045:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3849,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9045:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3852,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3866,
                  "src": "9059:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3851,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9059:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9044:29:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3858,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9138:0:11"
            },
            "scope": 4783,
            "src": "9014:188:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3888,
              "nodeType": "Block",
              "src": "9620:98:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 3877,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3583,
                        "src": "9637:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 3885,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3878,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3578,
                          "src": "9654:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                            "typeString": "mapping(bytes32 => bytes32)"
                          }
                        },
                        "id": 3884,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3880,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3868,
                              "src": "9681:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3881,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3870,
                              "src": "9690:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3882,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3872,
                              "src": "9696:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 3879,
                            "name": "permissionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4782,
                            "src": "9666:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 3883,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9666:36:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9654:49:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9637:67:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 3886,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "9637:74:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3876,
                  "id": 3887,
                  "nodeType": "Return",
                  "src": "9630:81:11"
                }
              ]
            },
            "documentation": "@notice Get parameters for permission array length\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app\n@param _role Identifier for a group of actions in app\n@return Length of the array",
            "id": 3889,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionParamsLength",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3873,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3868,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3889,
                  "src": "9545:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3867,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9545:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3870,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3889,
                  "src": "9562:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3869,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9562:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3872,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3889,
                  "src": "9576:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3871,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9576:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9544:46:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3875,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3889,
                  "src": "9614:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3874,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9614:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9613:6:11"
            },
            "scope": 4783,
            "src": "9510:208:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3928,
              "nodeType": "Block",
              "src": "10225:164:11",
              "statements": [
                {
                  "assignments": [
                    3907
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3907,
                      "name": "param",
                      "nodeType": "VariableDeclaration",
                      "scope": 3929,
                      "src": "10235:19:11",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                        "typeString": "struct ACL.Param"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3906,
                        "name": "Param",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3528,
                        "src": "10235:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                          "typeString": "struct ACL.Param"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3919,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 3908,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3583,
                        "src": "10257:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 3916,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3909,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3578,
                          "src": "10274:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                            "typeString": "mapping(bytes32 => bytes32)"
                          }
                        },
                        "id": 3915,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3911,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3891,
                              "src": "10301:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3912,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3893,
                              "src": "10310:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3913,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3895,
                              "src": "10316:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 3910,
                            "name": "permissionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4782,
                            "src": "10286:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 3914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10286:36:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10274:49:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10257:67:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 3918,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 3917,
                      "name": "_index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3897,
                      "src": "10325:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10257:75:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$3528_storage",
                      "typeString": "struct ACL.Param storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10235:97:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3920,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3907,
                          "src": "10350:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 3921,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3523,
                        "src": "10350:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3922,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3907,
                          "src": "10360:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 3923,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "op",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3525,
                        "src": "10360:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3924,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3907,
                          "src": "10370:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 3925,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3527,
                        "src": "10370:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      }
                    ],
                    "id": 3926,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "10349:33:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint8_$_t_uint8_$_t_uint240_$",
                      "typeString": "tuple(uint8,uint8,uint240)"
                    }
                  },
                  "functionReturnParameters": 3905,
                  "id": 3927,
                  "nodeType": "Return",
                  "src": "10342:40:11"
                }
              ]
            },
            "documentation": "@notice Get parameter for permission\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app\n@param _role Identifier for a group of actions in app\n@param _index Index of parameter in the array\n@return Parameter (id, op, value)",
            "id": 3929,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionParam",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3898,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3891,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10092:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3890,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10092:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3893,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10109:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3892,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10109:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3895,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10123:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3894,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10123:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3897,
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10138:11:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3896,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10138:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10091:59:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3905,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3900,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10198:5:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 3899,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10198:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3902,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10205:5:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 3901,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10205:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3904,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3929,
                  "src": "10212:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint240",
                    "typeString": "uint240"
                  },
                  "typeName": {
                    "id": 3903,
                    "name": "uint240",
                    "nodeType": "ElementaryTypeName",
                    "src": "10212:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint240",
                      "typeString": "uint240"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10197:23:11"
            },
            "scope": 4783,
            "src": "10064:325:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3945,
              "nodeType": "Block",
              "src": "10690:64:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 3938,
                      "name": "permissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3587,
                      "src": "10707:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 3943,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3940,
                          "name": "_app",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3931,
                          "src": "10734:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3941,
                          "name": "_role",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3933,
                          "src": "10740:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 3939,
                        "name": "roleHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4760,
                        "src": "10725:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 3942,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10725:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10707:40:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3937,
                  "id": 3944,
                  "nodeType": "Return",
                  "src": "10700:47:11"
                }
              ]
            },
            "documentation": "@dev Get manager for permission\n@param _app Address of the app\n@param _role Identifier for a group of actions in app\n@return address of the manager for the permission",
            "id": 3946,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3934,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3931,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 3946,
                  "src": "10631:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3930,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10631:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3933,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 3946,
                  "src": "10645:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3932,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10645:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10630:29:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3937,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3936,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3946,
                  "src": "10681:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3935,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10681:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10680:9:11"
            },
            "scope": 4783,
            "src": "10601:153:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3969,
              "nodeType": "Block",
              "src": "11234:115:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3960,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3948,
                        "src": "11265:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3961,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3950,
                        "src": "11271:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3962,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3952,
                        "src": "11279:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3965,
                            "name": "_how",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3954,
                            "src": "11336:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3963,
                            "name": "ConversionHelpers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6183,
                            "src": "11286:17:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ConversionHelpers_$6183_$",
                              "typeString": "type(library ConversionHelpers)"
                            }
                          },
                          "id": 3964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "dangerouslyCastBytesToUintArray",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6182,
                          "src": "11286:49:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (uint256[] memory)"
                          }
                        },
                        "id": 3966,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11286:55:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 3959,
                      "name": "hasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3970,
                        4037,
                        4066
                      ],
                      "referencedDeclaration": 4037,
                      "src": "11251:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 3967,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11251:91:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 3958,
                  "id": 3968,
                  "nodeType": "Return",
                  "src": "11244:98:11"
                }
              ]
            },
            "documentation": "@dev Function called by apps to check ACL on kernel or to check permission statu\n@param _who Sender of the original call\n@param _where Address of the app\n@param _where Identifier for a group of actions in app\n@param _how Permission parameters\n@return boolean indicating whether the ACL allows the role or not",
            "id": 3970,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3948,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 3970,
                  "src": "11143:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11143:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3950,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 3970,
                  "src": "11157:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3949,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11157:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3952,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 3970,
                  "src": "11173:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3951,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11173:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3954,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 3970,
                  "src": "11188:17:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3953,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11188:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11142:64:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3957,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3970,
                  "src": "11228:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3956,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11228:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11227:6:11"
            },
            "scope": 4783,
            "src": "11120:229:11",
            "stateMutability": "view",
            "superFunction": 5303,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4036,
              "nodeType": "Block",
              "src": "11473:457:11",
              "statements": [
                {
                  "assignments": [
                    3985
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3985,
                      "name": "whoParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 4037,
                      "src": "11483:17:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3984,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11483:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3993,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 3986,
                      "name": "permissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3578,
                      "src": "11503:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                        "typeString": "mapping(bytes32 => bytes32)"
                      }
                    },
                    "id": 3992,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3988,
                          "name": "_who",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3972,
                          "src": "11530:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3989,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3974,
                          "src": "11536:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3990,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3976,
                          "src": "11544:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 3987,
                        "name": "permissionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4782,
                        "src": "11515:14:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 3991,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11515:35:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11503:48:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11483:68:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 3996,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3994,
                        "name": "whoParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3985,
                        "src": "11565:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 3995,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3551,
                        "src": "11578:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "11565:26:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3998,
                          "name": "whoParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3985,
                          "src": "11606:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3999,
                          "name": "_who",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3972,
                          "src": "11617:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4000,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3974,
                          "src": "11623:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4001,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3976,
                          "src": "11631:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4002,
                          "name": "_how",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3979,
                          "src": "11638:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        ],
                        "id": 3997,
                        "name": "evalParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4099,
                        "src": "11595:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (bytes32,address,address,bytes32,uint256[] memory) view returns (bool)"
                        }
                      },
                      "id": 4003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11595:48:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11565:78:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4008,
                  "nodeType": "IfStatement",
                  "src": "11561:120:11",
                  "trueBody": {
                    "id": 4007,
                    "nodeType": "Block",
                    "src": "11645:36:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 4005,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11666:4:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 3983,
                        "id": 4006,
                        "nodeType": "Return",
                        "src": "11659:11:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4010
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4010,
                      "name": "anyParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 4037,
                      "src": "11691:17:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4009,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11691:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4018,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4011,
                      "name": "permissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3578,
                      "src": "11711:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                        "typeString": "mapping(bytes32 => bytes32)"
                      }
                    },
                    "id": 4017,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4013,
                          "name": "ANY_ENTITY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3557,
                          "src": "11738:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4014,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3974,
                          "src": "11750:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4015,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3976,
                          "src": "11758:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 4012,
                        "name": "permissionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4782,
                        "src": "11723:14:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 4016,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11723:41:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11711:54:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11691:74:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 4021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4019,
                        "name": "anyParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4010,
                        "src": "11779:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4020,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3551,
                        "src": "11792:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "11779:26:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4023,
                          "name": "anyParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4010,
                          "src": "11820:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4024,
                          "name": "ANY_ENTITY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3557,
                          "src": "11831:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4025,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3974,
                          "src": "11843:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4026,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3976,
                          "src": "11851:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4027,
                          "name": "_how",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3979,
                          "src": "11858:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        ],
                        "id": 4022,
                        "name": "evalParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4099,
                        "src": "11809:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (bytes32,address,address,bytes32,uint256[] memory) view returns (bool)"
                        }
                      },
                      "id": 4028,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11809:54:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11779:84:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4033,
                  "nodeType": "IfStatement",
                  "src": "11775:126:11",
                  "trueBody": {
                    "id": 4032,
                    "nodeType": "Block",
                    "src": "11865:36:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 4030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11886:4:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 3983,
                        "id": 4031,
                        "nodeType": "Return",
                        "src": "11879:11:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 4034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11918:5:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 3983,
                  "id": 4035,
                  "nodeType": "Return",
                  "src": "11911:12:11"
                }
              ]
            },
            "documentation": null,
            "id": 4037,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3972,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4037,
                  "src": "11378:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3971,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11378:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3974,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4037,
                  "src": "11392:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3973,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11392:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3976,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4037,
                  "src": "11408:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3975,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11408:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3979,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 4037,
                  "src": "11423:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3977,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11423:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 3978,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11423:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11377:68:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 3983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3982,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4037,
                  "src": "11467:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3981,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11467:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11466:6:11"
            },
            "scope": 4783,
            "src": "11355:575:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4065,
              "nodeType": "Block",
              "src": "12031:116:11",
              "statements": [
                {
                  "assignments": [
                    4051
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4051,
                      "name": "empty",
                      "nodeType": "VariableDeclaration",
                      "scope": 4066,
                      "src": "12041:22:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4049,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12041:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4050,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "12041:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4057,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4055,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12080:1:11",
                        "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": 4054,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "12066:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (uint256[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4052,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12070:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4053,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "12070:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      }
                    },
                    "id": 4056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12066:16:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12041:41:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4059,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4039,
                        "src": "12113:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4060,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4041,
                        "src": "12119:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4061,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4043,
                        "src": "12127:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4062,
                        "name": "empty",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4051,
                        "src": "12134:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 4058,
                      "name": "hasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3970,
                        4037,
                        4066
                      ],
                      "referencedDeclaration": 4037,
                      "src": "12099:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 4063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12099:41:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4047,
                  "id": 4064,
                  "nodeType": "Return",
                  "src": "12092:48:11"
                }
              ]
            },
            "documentation": null,
            "id": 4066,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4039,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4066,
                  "src": "11959:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4038,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11959:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4041,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4066,
                  "src": "11973:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4040,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11973:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4043,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4066,
                  "src": "11989:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4042,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11989:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11958:45:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4047,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4046,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4066,
                  "src": "12025:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4045,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12025:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12024:6:11"
            },
            "scope": 4783,
            "src": "11936:211:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4098,
              "nodeType": "Block",
              "src": "12332:160:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 4084,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4082,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4068,
                      "src": "12346:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4083,
                      "name": "EMPTY_PARAM_HASH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3546,
                      "src": "12361:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "12346:31:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4088,
                  "nodeType": "IfStatement",
                  "src": "12342:73:11",
                  "trueBody": {
                    "id": 4087,
                    "nodeType": "Block",
                    "src": "12379:36:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 4085,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12400:4:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 4081,
                        "id": 4086,
                        "nodeType": "Return",
                        "src": "12393:11:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4090,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4068,
                        "src": "12443:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4091,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12456:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 4092,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4070,
                        "src": "12459:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4093,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4072,
                        "src": "12465:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4094,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4074,
                        "src": "12473:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4095,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4077,
                        "src": "12480:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 4089,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4418,
                      "src": "12432:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 4096,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12432:53:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4081,
                  "id": 4097,
                  "nodeType": "Return",
                  "src": "12425:60:11"
                }
              ]
            },
            "documentation": null,
            "id": 4099,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "evalParams",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4078,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4068,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 4099,
                  "src": "12182:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4067,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12182:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4070,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4099,
                  "src": "12211:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4069,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12211:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4072,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4099,
                  "src": "12233:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4071,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12233:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4074,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4099,
                  "src": "12257:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4073,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12257:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4077,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 4099,
                  "src": "12280:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4075,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12280:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4076,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12280:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12172:128:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4081,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4080,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4099,
                  "src": "12322:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4079,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12322:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12321:6:11"
            },
            "scope": 4783,
            "src": "12153:339:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4123,
              "nodeType": "Block",
              "src": "12698:125:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4111,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4101,
                        "src": "12723:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4112,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12732:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4113,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4105,
                        "src": "12738:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4114,
                        "name": "EMPTY_PARAM_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3546,
                        "src": "12745:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 4110,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4177,
                      "src": "12708:14:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 4115,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12708:54:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4116,
                  "nodeType": "ExpressionStatement",
                  "src": "12708:54:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4118,
                        "name": "_manager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4107,
                        "src": "12794:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4119,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12804:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4120,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4105,
                        "src": "12810:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 4117,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4741,
                      "src": "12772:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 4121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12772:44:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4122,
                  "nodeType": "ExpressionStatement",
                  "src": "12772:44:11"
                }
              ]
            },
            "documentation": "@dev Internal createPermission for access inside the kernel (on instantiation)",
            "id": 4124,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_createPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4108,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4101,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 4124,
                  "src": "12625:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4100,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12625:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4103,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 4124,
                  "src": "12642:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12642:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4105,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 4124,
                  "src": "12656:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4104,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12656:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4107,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 4124,
                  "src": "12671:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4106,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12671:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12624:64:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4109,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12698:0:11"
            },
            "scope": 4783,
            "src": "12598:225:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4176,
              "nodeType": "Block",
              "src": "13012:426:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4135,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3578,
                        "src": "13022:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                          "typeString": "mapping(bytes32 => bytes32)"
                        }
                      },
                      "id": 4141,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4137,
                            "name": "_entity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4126,
                            "src": "13049:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4138,
                            "name": "_app",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4128,
                            "src": "13058:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4139,
                            "name": "_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4130,
                            "src": "13064:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 4136,
                          "name": "permissionHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4782,
                          "src": "13034:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                          }
                        },
                        "id": 4140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13034:36:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13022:49:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4142,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4132,
                      "src": "13074:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13022:63:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 4144,
                  "nodeType": "ExpressionStatement",
                  "src": "13022:63:11"
                },
                {
                  "assignments": [
                    4146
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4146,
                      "name": "entityHasPermission",
                      "nodeType": "VariableDeclaration",
                      "scope": 4177,
                      "src": "13095:24:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4145,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13095:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4150,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 4149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4147,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4132,
                      "src": "13122:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4148,
                      "name": "NO_PERMISSION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3551,
                      "src": "13137:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13122:28:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13095:55:11"
                },
                {
                  "assignments": [
                    4152
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4152,
                      "name": "permissionHasParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 4177,
                      "src": "13160:24:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4151,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13160:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4158,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4153,
                      "name": "entityHasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4146,
                      "src": "13187:19:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 4156,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4154,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4132,
                        "src": "13210:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4155,
                        "name": "EMPTY_PARAM_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3546,
                        "src": "13225:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "13210:31:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13187:54:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13160:81:11"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4160,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4126,
                        "src": "13271:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4161,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4128,
                        "src": "13280:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4162,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4130,
                        "src": "13286:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4163,
                        "name": "entityHasPermission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4146,
                        "src": "13293:19:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4159,
                      "name": "SetPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3597,
                      "src": "13257:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,bytes32,bool)"
                      }
                    },
                    "id": 4164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13257:56:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4165,
                  "nodeType": "EmitStatement",
                  "src": "13252:61:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 4166,
                    "name": "permissionHasParams",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4152,
                    "src": "13327:19:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4175,
                  "nodeType": "IfStatement",
                  "src": "13323:109:11",
                  "trueBody": {
                    "id": 4174,
                    "nodeType": "Block",
                    "src": "13348:84:11",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4168,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4126,
                              "src": "13387:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4169,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4128,
                              "src": "13396:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4170,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4130,
                              "src": "13402:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4171,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4132,
                              "src": "13409:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 4167,
                            "name": "SetPermissionParams",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3607,
                            "src": "13367:19:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,address,bytes32,bytes32)"
                            }
                          },
                          "id": 4172,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13367:54:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4173,
                        "nodeType": "EmitStatement",
                        "src": "13362:59:11"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Internal function called to actually save the permission",
            "id": 4177,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4133,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4126,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 4177,
                  "src": "12936:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4125,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12936:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4128,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 4177,
                  "src": "12953:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4127,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12953:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4130,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 4177,
                  "src": "12967:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4129,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12967:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4132,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 4177,
                  "src": "12982:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4131,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12982:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12935:67:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4134,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13012:0:11"
            },
            "scope": 4783,
            "src": "12912:526:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4249,
              "nodeType": "Block",
              "src": "13518:540:11",
              "statements": [
                {
                  "assignments": [
                    4186
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4186,
                      "name": "paramHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 4250,
                      "src": "13528:17:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4185,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13528:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4193,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4190,
                            "name": "_encodedParams",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4180,
                            "src": "13575:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4188,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10391,
                            "src": "13558:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 4189,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13558:16:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 4191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13558:32:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 4187,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10398,
                      "src": "13548:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 4192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13548:43:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13528:63:11"
                },
                {
                  "assignments": [
                    4197
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4197,
                      "name": "params",
                      "nodeType": "VariableDeclaration",
                      "scope": 4250,
                      "src": "13601:22:11",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage_ptr",
                        "typeString": "struct ACL.Param[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 4195,
                          "name": "Param",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3528,
                          "src": "13601:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                            "typeString": "struct ACL.Param"
                          }
                        },
                        "id": 4196,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "13601:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage_ptr",
                          "typeString": "struct ACL.Param[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4201,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4198,
                      "name": "permissionParams",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3583,
                      "src": "13626:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
                        "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                      }
                    },
                    "id": 4200,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4199,
                      "name": "paramHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4186,
                      "src": "13643:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13626:27:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage",
                      "typeString": "struct ACL.Param storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13601:52:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4202,
                        "name": "params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4197,
                        "src": "13668:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage_ptr",
                          "typeString": "struct ACL.Param storage ref[] storage pointer"
                        }
                      },
                      "id": 4203,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "13668:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4204,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13685:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "13668:18:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4246,
                  "nodeType": "IfStatement",
                  "src": "13664:361:11",
                  "trueBody": {
                    "id": 4245,
                    "nodeType": "Block",
                    "src": "13688:337:11",
                    "statements": [
                      {
                        "body": {
                          "id": 4243,
                          "nodeType": "Block",
                          "src": "13781:234:11",
                          "statements": [
                            {
                              "assignments": [
                                4218
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4218,
                                  "name": "encodedParam",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4250,
                                  "src": "13799:20:11",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 4217,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13799:7:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4222,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 4219,
                                  "name": "_encodedParams",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4180,
                                  "src": "13822:14:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 4221,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 4220,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4207,
                                  "src": "13837:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "13822:17:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13799:40:11"
                            },
                            {
                              "assignments": [
                                4224
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4224,
                                  "name": "param",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4250,
                                  "src": "13857:18:11",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                    "typeString": "struct ACL.Param"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 4223,
                                    "name": "Param",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 3528,
                                    "src": "13857:5:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                                      "typeString": "struct ACL.Param"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4236,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4227,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4218,
                                        "src": "13898:12:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 4226,
                                      "name": "decodeParamId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5242,
                                      "src": "13884:13:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                        "typeString": "function (uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 4228,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13884:27:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4230,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4218,
                                        "src": "13927:12:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 4229,
                                      "name": "decodeParamOp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5225,
                                      "src": "13913:13:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                        "typeString": "function (uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 4231,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13913:27:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4233,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4218,
                                        "src": "13950:12:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 4232,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "13942:7:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint240_$",
                                        "typeString": "type(uint240)"
                                      },
                                      "typeName": "uint240"
                                    },
                                    "id": 4234,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13942:21:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  ],
                                  "id": 4225,
                                  "name": "Param",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3528,
                                  "src": "13878:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Param_$3528_storage_ptr_$",
                                    "typeString": "type(struct ACL.Param storage pointer)"
                                  }
                                },
                                "id": 4235,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "structConstructorCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13878:86:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Param_$3528_memory",
                                  "typeString": "struct ACL.Param memory"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13857:107:11"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4240,
                                    "name": "param",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4224,
                                    "src": "13994:5:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4237,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4197,
                                    "src": "13982:6:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage_ptr",
                                      "typeString": "struct ACL.Param storage ref[] storage pointer"
                                    }
                                  },
                                  "id": 4239,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13982:11:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Param_$3528_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct ACL.Param storage ref) returns (uint256)"
                                  }
                                },
                                "id": 4241,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13982:18:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4242,
                              "nodeType": "ExpressionStatement",
                              "src": "13982:18:11"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4210,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4207,
                            "src": "13749:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4211,
                              "name": "_encodedParams",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4180,
                              "src": "13753:14:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 4212,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "13753:21:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13749:25:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4244,
                        "initializationExpression": {
                          "assignments": [
                            4207
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 4207,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 4250,
                              "src": "13734:9:11",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 4206,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "13734:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 4209,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4208,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13746:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "13734:13:11"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 4215,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "13776:3:11",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 4214,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4207,
                              "src": "13776:1:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4216,
                          "nodeType": "ExpressionStatement",
                          "src": "13776:3:11"
                        },
                        "nodeType": "ForStatement",
                        "src": "13729:286:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4247,
                    "name": "paramHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4186,
                    "src": "14042:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 4184,
                  "id": 4248,
                  "nodeType": "Return",
                  "src": "14035:16:11"
                }
              ]
            },
            "documentation": null,
            "id": 4250,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_saveParams",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4180,
                  "name": "_encodedParams",
                  "nodeType": "VariableDeclaration",
                  "scope": 4250,
                  "src": "13465:24:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4178,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "13465:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4179,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13465:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13464:26:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4184,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4183,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4250,
                  "src": "13509:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4182,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13509:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13508:9:11"
            },
            "scope": 4783,
            "src": "13444:614:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4417,
              "nodeType": "Block",
              "src": "14270:1208:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4268,
                      "name": "_paramId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4254,
                      "src": "14284:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4269,
                          "name": "permissionParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3583,
                          "src": "14296:16:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
                            "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                          }
                        },
                        "id": 4271,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4270,
                          "name": "_paramsHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4252,
                          "src": "14313:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14296:29:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage",
                          "typeString": "struct ACL.Param storage ref[] storage ref"
                        }
                      },
                      "id": 4272,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "14296:36:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14284:48:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4277,
                  "nodeType": "IfStatement",
                  "src": "14280:108:11",
                  "trueBody": {
                    "id": 4276,
                    "nodeType": "Block",
                    "src": "14334:54:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 4274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14355:5:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 4267,
                        "id": 4275,
                        "nodeType": "Return",
                        "src": "14348:12:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4279
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4279,
                      "name": "param",
                      "nodeType": "VariableDeclaration",
                      "scope": 4418,
                      "src": "14398:18:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                        "typeString": "struct ACL.Param"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4278,
                        "name": "Param",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3528,
                        "src": "14398:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                          "typeString": "struct ACL.Param"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4285,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4280,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3583,
                        "src": "14419:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$3528_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 4282,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4281,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4252,
                        "src": "14436:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14419:29:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$3528_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 4284,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4283,
                      "name": "_paramId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4254,
                      "src": "14449:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14419:39:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$3528_storage",
                      "typeString": "struct ACL.Param storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14398:60:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 4289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4286,
                        "name": "param",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4279,
                        "src": "14473:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                          "typeString": "struct ACL.Param memory"
                        }
                      },
                      "id": 4287,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3523,
                      "src": "14473:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4288,
                      "name": "LOGIC_OP_PARAM_ID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3540,
                      "src": "14485:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14473:29:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4300,
                  "nodeType": "IfStatement",
                  "src": "14469:124:11",
                  "trueBody": {
                    "id": 4299,
                    "nodeType": "Block",
                    "src": "14504:89:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4291,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4279,
                              "src": "14536:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4292,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4252,
                              "src": "14543:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4293,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4256,
                              "src": "14556:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4294,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4258,
                              "src": "14562:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4295,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4260,
                              "src": "14570:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4296,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4263,
                              "src": "14577:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 4290,
                            "name": "_evalLogic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4583,
                            "src": "14525:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Param_$3528_memory_ptr_$_t_bytes32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (struct ACL.Param memory,bytes32,address,address,bytes32,uint256[] memory) view returns (bool)"
                            }
                          },
                          "id": 4297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14525:57:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4267,
                        "id": 4298,
                        "nodeType": "Return",
                        "src": "14518:64:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4302,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 4418,
                      "src": "14603:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4301,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14603:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4303,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14603:13:11"
                },
                {
                  "assignments": [
                    4305
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4305,
                      "name": "comparedTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 4418,
                      "src": "14626:18:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4304,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14626:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4310,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4307,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4279,
                          "src": "14655:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                            "typeString": "struct ACL.Param memory"
                          }
                        },
                        "id": 4308,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3527,
                        "src": "14655:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      ],
                      "id": 4306,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "14647:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 4309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14647:20:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14626:41:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 4314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4311,
                        "name": "param",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4279,
                        "src": "14703:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                          "typeString": "struct ACL.Param memory"
                        }
                      },
                      "id": 4312,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3523,
                      "src": "14703:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4313,
                      "name": "ORACLE_PARAM_ID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3537,
                      "src": "14715:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14703:27:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 4339,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4336,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4279,
                          "src": "14874:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                            "typeString": "struct ACL.Param memory"
                          }
                        },
                        "id": 4337,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3523,
                        "src": "14874:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4338,
                        "name": "BLOCK_NUMBER_PARAM_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3531,
                        "src": "14886:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "src": "14874:33:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 4349,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4346,
                            "name": "param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4279,
                            "src": "14968:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 4347,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3523,
                          "src": "14968:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4348,
                          "name": "TIMESTAMP_PARAM_ID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3534,
                          "src": "14980:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "14968:30:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 4359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4356,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4279,
                              "src": "15057:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 4357,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "id",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3523,
                            "src": "15057:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4358,
                            "name": "PARAM_VALUE_PARAM_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3543,
                            "src": "15069:20:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "15057:32:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 4388,
                          "nodeType": "Block",
                          "src": "15150:176:11",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4372,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4368,
                                    "name": "param",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4279,
                                    "src": "15168:5:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  },
                                  "id": 4369,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "id",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3523,
                                  "src": "15168:8:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4370,
                                    "name": "_how",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4263,
                                    "src": "15180:4:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 4371,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "15180:11:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15168:23:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 4376,
                              "nodeType": "IfStatement",
                              "src": "15164:74:11",
                              "trueBody": {
                                "id": 4375,
                                "nodeType": "Block",
                                "src": "15193:45:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "hexValue": "66616c7365",
                                      "id": 4373,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "15218:5:11",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "false"
                                    },
                                    "functionReturnParameters": 4267,
                                    "id": 4374,
                                    "nodeType": "Return",
                                    "src": "15211:12:11"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4386,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 4377,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4302,
                                  "src": "15251:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 4380,
                                            "name": "_how",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4263,
                                            "src": "15275:4:11",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 4383,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 4381,
                                              "name": "param",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 4279,
                                              "src": "15280:5:11",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                                "typeString": "struct ACL.Param memory"
                                              }
                                            },
                                            "id": 4382,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "id",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3523,
                                            "src": "15280:8:11",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "15275:14:11",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 4379,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "15267:7:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint240_$",
                                          "typeString": "type(uint240)"
                                        },
                                        "typeName": "uint240"
                                      },
                                      "id": 4384,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15267:23:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 4378,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15259:7:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 4385,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15259:32:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15251:40:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4387,
                              "nodeType": "ExpressionStatement",
                              "src": "15251:40:11"
                            }
                          ]
                        },
                        "id": 4389,
                        "nodeType": "IfStatement",
                        "src": "15053:273:11",
                        "trueBody": {
                          "id": 4367,
                          "nodeType": "Block",
                          "src": "15091:53:11",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4365,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 4360,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4302,
                                  "src": "15105:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4362,
                                        "name": "param",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4279,
                                        "src": "15121:5:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                          "typeString": "struct ACL.Param memory"
                                        }
                                      },
                                      "id": 4363,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3527,
                                      "src": "15121:11:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 4361,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15113:7:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 4364,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15113:20:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15105:28:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4366,
                              "nodeType": "ExpressionStatement",
                              "src": "15105:28:11"
                            }
                          ]
                        }
                      },
                      "id": 4390,
                      "nodeType": "IfStatement",
                      "src": "14964:362:11",
                      "trueBody": {
                        "id": 4355,
                        "nodeType": "Block",
                        "src": "15000:47:11",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 4353,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 4350,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4302,
                                "src": "15014:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 4351,
                                  "name": "getTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6819,
                                  "src": "15022:12:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 4352,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15022:14:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "15014:22:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4354,
                            "nodeType": "ExpressionStatement",
                            "src": "15014:22:11"
                          }
                        ]
                      }
                    },
                    "id": 4391,
                    "nodeType": "IfStatement",
                    "src": "14870:456:11",
                    "trueBody": {
                      "id": 4345,
                      "nodeType": "Block",
                      "src": "14909:49:11",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 4343,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 4340,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4302,
                              "src": "14923:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 4341,
                                "name": "getBlockNumber",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6799,
                                "src": "14931:14:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 4342,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14931:16:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "14923:24:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4344,
                          "nodeType": "ExpressionStatement",
                          "src": "14923:24:11"
                        }
                      ]
                    }
                  },
                  "id": 4392,
                  "nodeType": "IfStatement",
                  "src": "14699:627:11",
                  "trueBody": {
                    "id": 4335,
                    "nodeType": "Block",
                    "src": "14732:132:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4315,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4302,
                            "src": "14746:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4318,
                                        "name": "param",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4279,
                                        "src": "14777:5:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                          "typeString": "struct ACL.Param memory"
                                        }
                                      },
                                      "id": 4319,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3527,
                                      "src": "14777:11:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 4317,
                                    "name": "IACLOracle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5321,
                                    "src": "14766:10:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IACLOracle_$5321_$",
                                      "typeString": "type(contract IACLOracle)"
                                    }
                                  },
                                  "id": 4320,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14766:23:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IACLOracle_$5321",
                                    "typeString": "contract IACLOracle"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4321,
                                  "name": "_who",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4256,
                                  "src": "14791:4:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4322,
                                  "name": "_where",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4258,
                                  "src": "14797:6:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4323,
                                  "name": "_what",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4260,
                                  "src": "14805:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4324,
                                  "name": "_how",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4263,
                                  "src": "14812:4:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IACLOracle_$5321",
                                    "typeString": "contract IACLOracle"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                ],
                                "id": 4316,
                                "name": "checkOracle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4716,
                                "src": "14754:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_contract$_IACLOracle_$5321_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (contract IACLOracle,address,address,bytes32,uint256[] memory) view returns (bool)"
                                }
                              },
                              "id": 4325,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14754:63:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4327,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14824:1:11",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 4328,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "14754:71:11",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 4326,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14820:1:11",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "14746:79:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4330,
                        "nodeType": "ExpressionStatement",
                        "src": "14746:79:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4331,
                            "name": "comparedTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4305,
                            "src": "14839:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 4332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14852:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "14839:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4334,
                        "nodeType": "ExpressionStatement",
                        "src": "14839:14:11"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4394,
                            "name": "param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4279,
                            "src": "15343:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 4395,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3525,
                          "src": "15343:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 4393,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "15340:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4396,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15340:12:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4397,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "15356:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4398,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "RET",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15356:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "15340:22:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4407,
                  "nodeType": "IfStatement",
                  "src": "15336:78:11",
                  "trueBody": {
                    "id": 4406,
                    "nodeType": "Block",
                    "src": "15364:50:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4404,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4401,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4302,
                                "src": "15393:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4400,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15385:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 4402,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15385:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4403,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15402:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "15385:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4267,
                        "id": 4405,
                        "nodeType": "Return",
                        "src": "15378:25:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4409,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4302,
                        "src": "15439:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4411,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4279,
                              "src": "15449:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 4412,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3525,
                            "src": "15449:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 4410,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3521,
                          "src": "15446:2:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 4413,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15446:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$3521",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4414,
                        "name": "comparedTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4305,
                        "src": "15460:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_enum$_Op_$3521",
                          "typeString": "enum ACL.Op"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4408,
                      "name": "compare",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4651,
                      "src": "15431:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_Op_$3521_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256,enum ACL.Op,uint256) pure returns (bool)"
                      }
                    },
                    "id": 4415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15431:40:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4267,
                  "id": 4416,
                  "nodeType": "Return",
                  "src": "15424:47:11"
                }
              ]
            },
            "documentation": null,
            "id": 4418,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_evalParam",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4252,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14093:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4251,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14093:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4254,
                  "name": "_paramId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14122:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4253,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14122:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4256,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14147:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4255,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14147:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4258,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14169:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4257,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14169:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4260,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14193:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4259,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14193:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4263,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14216:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4261,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "14216:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4262,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "14216:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14083:153:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4266,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4418,
                  "src": "14260:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4265,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14260:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14259:6:11"
            },
            "scope": 4783,
            "src": "14064:1414:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4582,
              "nodeType": "Block",
              "src": "15657:1131:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4437,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4420,
                            "src": "15674:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 4438,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3525,
                          "src": "15674:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 4436,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "15671:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4439,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15671:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4440,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "15688:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4441,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "IF_ELSE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15688:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "15671:27:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4488,
                  "nodeType": "IfStatement",
                  "src": "15667:450:11",
                  "trueBody": {
                    "id": 4487,
                    "nodeType": "Block",
                    "src": "15700:417:11",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4444,
                            "name": "conditionParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 4583,
                            "src": "15714:21:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 4443,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15714:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4445,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15714:21:11"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4447,
                            "name": "successParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 4583,
                            "src": "15749:19:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 4446,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15749:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4448,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15749:19:11"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4450,
                            "name": "failureParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 4583,
                            "src": "15782:19:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 4449,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15782:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4451,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15782:19:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4462,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 4452,
                                "name": "conditionParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4444,
                                "src": "15817:14:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 4453,
                                "name": "successParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4447,
                                "src": "15833:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 4454,
                                "name": "failureParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4450,
                                "src": "15847:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "id": 4455,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "15816:44:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                              "typeString": "tuple(uint32,uint32,uint32)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4458,
                                      "name": "_param",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4420,
                                      "src": "15888:6:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                        "typeString": "struct ACL.Param memory"
                                      }
                                    },
                                    "id": 4459,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "value",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3527,
                                    "src": "15888:12:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  ],
                                  "id": 4457,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15880:7:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 4460,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15880:21:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4456,
                              "name": "decodeParamsList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5282,
                              "src": "15863:16:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$_t_uint32_$_t_uint32_$",
                                "typeString": "function (uint256) pure returns (uint32,uint32,uint32)"
                              }
                            },
                            "id": 4461,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15863:39:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                              "typeString": "tuple(uint32,uint32,uint32)"
                            }
                          },
                          "src": "15816:86:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4463,
                        "nodeType": "ExpressionStatement",
                        "src": "15816:86:11"
                      },
                      {
                        "assignments": [
                          4465
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4465,
                            "name": "result",
                            "nodeType": "VariableDeclaration",
                            "scope": 4583,
                            "src": "15916:11:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4464,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "15916:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4474,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4467,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4422,
                              "src": "15941:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4468,
                              "name": "conditionParam",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4444,
                              "src": "15954:14:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4469,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4424,
                              "src": "15970:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4470,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4426,
                              "src": "15976:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4471,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4428,
                              "src": "15984:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4472,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4431,
                              "src": "15991:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 4466,
                            "name": "_evalParam",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4418,
                            "src": "15930:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                            }
                          },
                          "id": 4473,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15930:66:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15916:80:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4476,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4422,
                              "src": "16029:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "condition": {
                                "argumentTypes": null,
                                "id": 4477,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4465,
                                "src": "16042:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "argumentTypes": null,
                                "id": 4479,
                                "name": "failureParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4450,
                                "src": "16066:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 4480,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "16042:36:11",
                              "trueExpression": {
                                "argumentTypes": null,
                                "id": 4478,
                                "name": "successParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4447,
                                "src": "16051:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4481,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4424,
                              "src": "16080:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4482,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4426,
                              "src": "16086:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4483,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4428,
                              "src": "16094:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4484,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4431,
                              "src": "16101:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 4475,
                            "name": "_evalParam",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4418,
                            "src": "16018:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                            }
                          },
                          "id": 4485,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16018:88:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4435,
                        "id": 4486,
                        "nodeType": "Return",
                        "src": "16011:95:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4490,
                      "name": "param1",
                      "nodeType": "VariableDeclaration",
                      "scope": 4583,
                      "src": "16127:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 4489,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16127:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4491,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16127:13:11"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4493,
                      "name": "param2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4583,
                      "src": "16150:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 4492,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16150:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4494,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16150:13:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 4495,
                          "name": "param1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4490,
                          "src": "16175:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4496,
                          "name": "param2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4493,
                          "src": "16183:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        null
                      ],
                      "id": 4497,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "16174:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$__$",
                        "typeString": "tuple(uint32,uint32,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4500,
                                "name": "_param",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4420,
                                "src": "16219:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                  "typeString": "struct ACL.Param memory"
                                }
                              },
                              "id": 4501,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3527,
                              "src": "16219:12:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint240",
                                "typeString": "uint240"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint240",
                                "typeString": "uint240"
                              }
                            ],
                            "id": 4499,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16211:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 4502,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16211:21:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 4498,
                        "name": "decodeParamsList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5282,
                        "src": "16194:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$_t_uint32_$_t_uint32_$",
                          "typeString": "function (uint256) pure returns (uint32,uint32,uint32)"
                        }
                      },
                      "id": 4503,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16194:39:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                        "typeString": "tuple(uint32,uint32,uint32)"
                      }
                    },
                    "src": "16174:59:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4505,
                  "nodeType": "ExpressionStatement",
                  "src": "16174:59:11"
                },
                {
                  "assignments": [
                    4507
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4507,
                      "name": "r1",
                      "nodeType": "VariableDeclaration",
                      "scope": 4583,
                      "src": "16243:7:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4506,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16243:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4516,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4509,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4422,
                        "src": "16264:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4510,
                        "name": "param1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "16277:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4511,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4424,
                        "src": "16285:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4512,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4426,
                        "src": "16291:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4513,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4428,
                        "src": "16299:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4514,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4431,
                        "src": "16306:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 4508,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4418,
                      "src": "16253:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 4515,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16253:58:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16243:68:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4518,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4420,
                            "src": "16329:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 4519,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3525,
                          "src": "16329:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 4517,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "16326:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16326:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4521,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "16343:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4522,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NOT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16343:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16326:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4528,
                  "nodeType": "IfStatement",
                  "src": "16322:64:11",
                  "trueBody": {
                    "id": 4527,
                    "nodeType": "Block",
                    "src": "16351:35:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "16372:3:11",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 4524,
                            "name": "r1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4507,
                            "src": "16373:2:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4435,
                        "id": 4526,
                        "nodeType": "Return",
                        "src": "16365:10:11"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4537,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4529,
                      "name": "r1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4507,
                      "src": "16400:2:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      },
                      "id": 4536,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4531,
                              "name": "_param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4420,
                              "src": "16409:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 4532,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3525,
                            "src": "16409:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 4530,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3521,
                          "src": "16406:2:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 4533,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16406:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$3521",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4534,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3521,
                          "src": "16423:2:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 4535,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "OR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16423:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$3521",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "src": "16406:22:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16400:28:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4541,
                  "nodeType": "IfStatement",
                  "src": "16396:70:11",
                  "trueBody": {
                    "id": 4540,
                    "nodeType": "Block",
                    "src": "16430:36:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 4538,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16451:4:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 4435,
                        "id": 4539,
                        "nodeType": "Return",
                        "src": "16444:11:11"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4543,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "16480:3:11",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4542,
                        "name": "r1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4507,
                        "src": "16481:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      },
                      "id": 4550,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4545,
                              "name": "_param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4420,
                              "src": "16490:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 4546,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3525,
                            "src": "16490:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 4544,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3521,
                          "src": "16487:2:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 4547,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16487:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$3521",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4548,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3521,
                          "src": "16504:2:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 4549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "AND",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16504:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$3521",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "src": "16487:23:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16480:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4555,
                  "nodeType": "IfStatement",
                  "src": "16476:73:11",
                  "trueBody": {
                    "id": 4554,
                    "nodeType": "Block",
                    "src": "16512:37:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 4552,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16533:5:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 4435,
                        "id": 4553,
                        "nodeType": "Return",
                        "src": "16526:12:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4557
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4557,
                      "name": "r2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4583,
                      "src": "16559:7:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4556,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16559:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4566,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4559,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4422,
                        "src": "16580:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4560,
                        "name": "param2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4493,
                        "src": "16593:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4561,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4424,
                        "src": "16601:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4562,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4426,
                        "src": "16607:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4563,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4428,
                        "src": "16615:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4564,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4431,
                        "src": "16622:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 4558,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4418,
                      "src": "16569:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 4565,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16569:58:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16559:68:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4573,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4568,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4420,
                            "src": "16645:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 4569,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3525,
                          "src": "16645:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 4567,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "16642:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16642:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4571,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "16659:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4572,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XOR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16659:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16642:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4579,
                  "nodeType": "IfStatement",
                  "src": "16638:69:11",
                  "trueBody": {
                    "id": 4578,
                    "nodeType": "Block",
                    "src": "16667:40:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4574,
                            "name": "r1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4507,
                            "src": "16688:2:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4575,
                            "name": "r2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4557,
                            "src": "16694:2:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "16688:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4435,
                        "id": 4577,
                        "nodeType": "Return",
                        "src": "16681:15:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4580,
                    "name": "r2",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4557,
                    "src": "16724:2:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4435,
                  "id": 4581,
                  "nodeType": "Return",
                  "src": "16717:9:11"
                }
              ]
            },
            "documentation": null,
            "id": 4583,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_evalLogic",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4420,
                  "name": "_param",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15504:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Param_$3528_memory_ptr",
                    "typeString": "struct ACL.Param"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4419,
                    "name": "Param",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3528,
                    "src": "15504:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$3528_storage_ptr",
                      "typeString": "struct ACL.Param"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4422,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15518:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4421,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15518:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4424,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15539:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4423,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15539:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4426,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15553:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4425,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15553:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4428,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15569:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4427,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15569:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4431,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15584:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4429,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "15584:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4430,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "15584:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15503:96:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4435,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4434,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "15647:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4433,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15647:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15646:6:11"
            },
            "scope": 4783,
            "src": "15484:1304:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4650,
              "nodeType": "Block",
              "src": "16872:647:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4597,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4594,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4587,
                      "src": "16886:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4595,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "16893:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4596,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "EQ",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16893:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16886:12:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4602,
                  "nodeType": "IfStatement",
                  "src": "16882:34:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4600,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4598,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4585,
                        "src": "16908:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4599,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4589,
                        "src": "16914:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "16908:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 4593,
                    "id": 4601,
                    "nodeType": "Return",
                    "src": "16901:15:11"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4603,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4587,
                      "src": "16989:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4604,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "16996:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4605,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NEQ",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16996:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16989:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4611,
                  "nodeType": "IfStatement",
                  "src": "16985:34:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4609,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4607,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4585,
                        "src": "17011:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4608,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4589,
                        "src": "17017:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17011:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 4593,
                    "id": 4610,
                    "nodeType": "Return",
                    "src": "17004:15:11"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4612,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4587,
                      "src": "17092:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4613,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "17099:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "GT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17099:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17092:12:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4620,
                  "nodeType": "IfStatement",
                  "src": "17088:33:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4616,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4585,
                        "src": "17114:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4617,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4589,
                        "src": "17119:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17114:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 4593,
                    "id": 4619,
                    "nodeType": "Return",
                    "src": "17107:14:11"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4624,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4621,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4587,
                      "src": "17195:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4622,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "17202:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4623,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "LT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17202:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17195:12:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4629,
                  "nodeType": "IfStatement",
                  "src": "17191:33:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4627,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4625,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4585,
                        "src": "17217:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4626,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4589,
                        "src": "17222:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17217:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 4593,
                    "id": 4628,
                    "nodeType": "Return",
                    "src": "17210:14:11"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4630,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4587,
                      "src": "17298:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4631,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "17305:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4632,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "GTE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17305:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17298:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4638,
                  "nodeType": "IfStatement",
                  "src": "17294:34:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4634,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4585,
                        "src": "17320:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4635,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4589,
                        "src": "17326:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17320:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 4593,
                    "id": 4637,
                    "nodeType": "Return",
                    "src": "17313:15:11"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 4642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4639,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4587,
                      "src": "17401:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4640,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3521,
                        "src": "17408:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$3521_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 4641,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "LTE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17408:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$3521",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17401:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4647,
                  "nodeType": "IfStatement",
                  "src": "17397:34:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4643,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4585,
                        "src": "17423:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4644,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4589,
                        "src": "17429:2:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17423:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 4593,
                    "id": 4646,
                    "nodeType": "Return",
                    "src": "17416:15:11"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 4648,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17507:5:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 4593,
                  "id": 4649,
                  "nodeType": "Return",
                  "src": "17500:12:11"
                }
              ]
            },
            "documentation": null,
            "id": 4651,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4590,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4585,
                  "name": "_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 4651,
                  "src": "16811:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4584,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16811:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4587,
                  "name": "_op",
                  "nodeType": "VariableDeclaration",
                  "scope": 4651,
                  "src": "16823:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Op_$3521",
                    "typeString": "enum ACL.Op"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4586,
                    "name": "Op",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3521,
                    "src": "16823:2:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Op_$3521",
                      "typeString": "enum ACL.Op"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4589,
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 4651,
                  "src": "16831:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4588,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16831:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16810:32:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4593,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4592,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4651,
                  "src": "16866:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4591,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16866:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16865:6:11"
            },
            "scope": 4783,
            "src": "16794:725:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4715,
              "nodeType": "Block",
              "src": "17660:1057:11",
              "statements": [
                {
                  "assignments": [
                    4668
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4668,
                      "name": "sig",
                      "nodeType": "VariableDeclaration",
                      "scope": 4716,
                      "src": "17670:10:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "typeName": {
                        "id": 4667,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "17670:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4672,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4669,
                        "name": "_oracleAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4653,
                        "src": "17683:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IACLOracle_$5321",
                          "typeString": "contract IACLOracle"
                        }
                      },
                      "id": 4670,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "canPerform",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5320,
                      "src": "17683:22:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,address,bytes32,uint256[] memory) view external returns (bool)"
                      }
                    },
                    "id": 4671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "selector",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "17683:31:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17670:44:11"
                },
                {
                  "assignments": [
                    4674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4674,
                      "name": "checkCalldata",
                      "nodeType": "VariableDeclaration",
                      "scope": 4716,
                      "src": "17825:26:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 4673,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "17825:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4683,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4677,
                        "name": "sig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4668,
                        "src": "17877:3:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4678,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4655,
                        "src": "17882:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4679,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4657,
                        "src": "17888:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4680,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4659,
                        "src": "17896:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4681,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4662,
                        "src": "17903:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4675,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10391,
                        "src": "17854:3:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 4676,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodeWithSelector",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17854:22:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes4) pure returns (bytes memory)"
                      }
                    },
                    "id": 4682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17854:54:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17825:83:11"
                },
                {
                  "assignments": [
                    4685
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4685,
                      "name": "oracleCheckGas",
                      "nodeType": "VariableDeclaration",
                      "scope": 4716,
                      "src": "17918:22:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4684,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17918:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4687,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 4686,
                    "name": "ORACLE_CHECK_GAS",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3565,
                    "src": "17943:16:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17918:41:11"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4689,
                      "name": "ok",
                      "nodeType": "VariableDeclaration",
                      "scope": 4716,
                      "src": "17970:7:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4688,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "17970:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4690,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17970:7:11"
                },
                {
                  "externalReferences": [
                    {
                      "checkCalldata": {
                        "declaration": 4674,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18060:13:11",
                        "valueSize": 1
                      }
                    },
                    {
                      "checkCalldata": {
                        "declaration": 4674,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18088:13:11",
                        "valueSize": 1
                      }
                    },
                    {
                      "ok": {
                        "declaration": 4689,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18010:2:11",
                        "valueSize": 1
                      }
                    },
                    {
                      "oracleCheckGas": {
                        "declaration": 4685,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18027:14:11",
                        "valueSize": 1
                      }
                    },
                    {
                      "_oracleAddr": {
                        "declaration": 4653,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18043:11:11",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4691,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ok := staticcall(oracleCheckGas, _oracleAddr, add(checkCalldata, 0x20), mload(checkCalldata), 0, 0)\n}",
                  "src": "17987:144:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 4693,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "18133:3:11",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 4692,
                      "name": "ok",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4689,
                      "src": "18134:2:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4697,
                  "nodeType": "IfStatement",
                  "src": "18129:46:11",
                  "trueBody": {
                    "id": 4696,
                    "nodeType": "Block",
                    "src": "18138:37:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 4694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18159:5:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 4666,
                        "id": 4695,
                        "nodeType": "Return",
                        "src": "18152:12:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4699,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 4716,
                      "src": "18185:12:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4698,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18185:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4700,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18185:12:11"
                },
                {
                  "externalReferences": [
                    {
                      "size": {
                        "declaration": 4699,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18218:4:11",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4701,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    size := returndatasize()\n}",
                  "src": "18207:46:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4702,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4699,
                      "src": "18255:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 4703,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18263:2:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "18255:10:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4708,
                  "nodeType": "IfStatement",
                  "src": "18251:53:11",
                  "trueBody": {
                    "id": 4707,
                    "nodeType": "Block",
                    "src": "18267:37:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 4705,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18288:5:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 4666,
                        "id": 4706,
                        "nodeType": "Return",
                        "src": "18281:12:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4710,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 4716,
                      "src": "18314:11:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4709,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "18314:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4711,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18314:11:11"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 4710,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18507:6:11",
                        "valueSize": 1
                      }
                    },
                    {
                      "size": {
                        "declaration": 4699,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18450:4:11",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4712,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let ptr := mload(0x40)\n    returndatacopy(ptr, 0, size)\n    result := mload(ptr)\n    mstore(ptr, 0)\n}",
                  "src": "18335:368:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4713,
                    "name": "result",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4710,
                    "src": "18704:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4666,
                  "id": 4714,
                  "nodeType": "Return",
                  "src": "18697:13:11"
                }
              ]
            },
            "documentation": null,
            "id": 4716,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4663,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4653,
                  "name": "_oracleAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 4716,
                  "src": "17546:22:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IACLOracle_$5321",
                    "typeString": "contract IACLOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4652,
                    "name": "IACLOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5321,
                    "src": "17546:10:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IACLOracle_$5321",
                      "typeString": "contract IACLOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4655,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4716,
                  "src": "17570:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4654,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17570:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4657,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4716,
                  "src": "17584:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4656,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17584:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4659,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4716,
                  "src": "17600:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4658,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "17600:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4662,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 4716,
                  "src": "17615:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4660,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "17615:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4661,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "17615:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17545:85:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4665,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4716,
                  "src": "17654:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4664,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17654:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17653:6:11"
            },
            "scope": 4783,
            "src": "17525:1192:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4740,
              "nodeType": "Block",
              "src": "18878:135:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4732,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4725,
                        "name": "permissionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3587,
                        "src": "18888:17:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 4730,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4727,
                            "name": "_app",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4720,
                            "src": "18915:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4728,
                            "name": "_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4722,
                            "src": "18921:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 4726,
                          "name": "roleHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4760,
                          "src": "18906:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (address,bytes32) pure returns (bytes32)"
                          }
                        },
                        "id": 4729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18906:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "18888:40:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4731,
                      "name": "_newManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4718,
                      "src": "18931:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "18888:54:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4733,
                  "nodeType": "ExpressionStatement",
                  "src": "18888:54:11"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4735,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4720,
                        "src": "18981:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4736,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4722,
                        "src": "18987:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4737,
                        "name": "_newManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4718,
                        "src": "18994:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4734,
                      "name": "ChangePermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3615,
                      "src": "18957:23:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,bytes32,address)"
                      }
                    },
                    "id": 4738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18957:49:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4739,
                  "nodeType": "EmitStatement",
                  "src": "18952:54:11"
                }
              ]
            },
            "documentation": "@dev Internal function that sets management",
            "id": 4741,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4718,
                  "name": "_newManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 4741,
                  "src": "18819:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4717,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18819:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4720,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 4741,
                  "src": "18840:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4719,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18840:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4722,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 4741,
                  "src": "18854:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4721,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18854:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18818:50:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4724,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18878:0:11"
            },
            "scope": 4783,
            "src": "18788:225:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4759,
              "nodeType": "Block",
              "src": "19100:74:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "524f4c45",
                            "id": 4753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19144:6:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ed9ea7bc2a13bc59432ab07436e7f7f5450f82d4b48c401bed177bfaf36b1873",
                              "typeString": "literal_string \"ROLE\""
                            },
                            "value": "ROLE"
                          },
                          {
                            "argumentTypes": null,
                            "id": 4754,
                            "name": "_where",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4743,
                            "src": "19152:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4755,
                            "name": "_what",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4745,
                            "src": "19160:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_ed9ea7bc2a13bc59432ab07436e7f7f5450f82d4b48c401bed177bfaf36b1873",
                              "typeString": "literal_string \"ROLE\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4751,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10391,
                            "src": "19127:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 4752,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19127:16:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 4756,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19127:39:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 4750,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10398,
                      "src": "19117:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 4757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19117:50:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 4749,
                  "id": 4758,
                  "nodeType": "Return",
                  "src": "19110:57:11"
                }
              ]
            },
            "documentation": null,
            "id": 4760,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "roleHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4746,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4743,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4760,
                  "src": "19037:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4742,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19037:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4745,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4760,
                  "src": "19053:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4744,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19053:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19036:31:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4749,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4748,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4760,
                  "src": "19091:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4747,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19091:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19090:9:11"
            },
            "scope": 4783,
            "src": "19019:155:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4781,
              "nodeType": "Block",
              "src": "19281:86:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "5045524d495353494f4e",
                            "id": 4774,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19325:12:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ec1029a550434f46cc722ae017b3a2e96fd6dfb85f48bea21a1c682e8b994de1",
                              "typeString": "literal_string \"PERMISSION\""
                            },
                            "value": "PERMISSION"
                          },
                          {
                            "argumentTypes": null,
                            "id": 4775,
                            "name": "_who",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4762,
                            "src": "19339:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4776,
                            "name": "_where",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4764,
                            "src": "19345:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4777,
                            "name": "_what",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4766,
                            "src": "19353:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_ec1029a550434f46cc722ae017b3a2e96fd6dfb85f48bea21a1c682e8b994de1",
                              "typeString": "literal_string \"PERMISSION\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4772,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10391,
                            "src": "19308:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 4773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19308:16:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 4778,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19308:51:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 4771,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10398,
                      "src": "19298:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 4779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19298:62:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 4770,
                  "id": 4780,
                  "nodeType": "Return",
                  "src": "19291:69:11"
                }
              ]
            },
            "documentation": null,
            "id": 4782,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "permissionHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4767,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4762,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 4782,
                  "src": "19204:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4761,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19204:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4764,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 4782,
                  "src": "19218:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4763,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19218:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4766,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 4782,
                  "src": "19234:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4765,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19234:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19203:45:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 4770,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4769,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4782,
                  "src": "19272:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4768,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19272:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19271:9:11"
            },
            "scope": 4783,
            "src": "19180:187:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 4784,
        "src": "293:19076:11"
      }
    ],
    "src": "0:19370:11"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-06-07T23:27:00.537Z",
  "devdoc": {
    "methods": {
      "allowRecoverability(address)": {
        "details": "By default deriving from AragonApp makes it recoverable",
        "params": {
          "token": "Token address that would be recovered"
        },
        "return": "bool whether the app allows the recovery"
      },
      "burnPermissionManager(address,bytes32)": {
        "params": {
          "_app": "Address of the app in which the permission is being burned",
          "_role": "Identifier for the group of actions being burned"
        }
      },
      "canPerform(address,bytes32,uint256[])": {
        "details": "Check whether an action can be performed by a sender for a particular role on this app",
        "params": {
          "_params": "Permission params for the role",
          "_role": "Role on this app",
          "_sender": "Sender of the call"
        },
        "return": "Boolean indicating whether the sender has the permissions to perform the action.        Always returns false if the app hasn't been initialized yet."
      },
      "createBurnedPermission(address,bytes32)": {
        "params": {
          "_app": "Address of the app in which the permission is being burned",
          "_role": "Identifier for the group of actions being burned"
        }
      },
      "createPermission(address,address,bytes32,address)": {
        "details": "Creates a permission that wasn't previously set and managed.     If a created permission is removed it is possible to reset it with createPermission.     This is the **ONLY** way to create permissions and set managers to permissions that don't     have a manager.     In terms of the ACL being initialized, this function implicitly protects all the other     state-changing external functions, as they all require the sender to be a manager.",
        "params": {
          "_app": "Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)",
          "_entity": "Address of the whitelisted entity that will be able to perform the role",
          "_manager": "Address of the entity that will be able to grant and revoke the permission further.",
          "_role": "Identifier for the group of actions in app given access to perform"
        }
      },
      "getInitializationBlock()": {
        "return": "Block number in which the contract was initialized"
      },
      "getPermissionManager(address,bytes32)": {
        "details": "Get manager for permission",
        "params": {
          "_app": "Address of the app",
          "_role": "Identifier for a group of actions in app"
        },
        "return": "address of the manager for the permission"
      },
      "getPermissionParam(address,address,bytes32,uint256)": {
        "params": {
          "_app": "Address of the app",
          "_entity": "Address of the whitelisted entity that will be able to perform the role",
          "_index": "Index of parameter in the array",
          "_role": "Identifier for a group of actions in app"
        },
        "return": "Parameter (id, op, value)"
      },
      "getPermissionParamsLength(address,address,bytes32)": {
        "params": {
          "_app": "Address of the app",
          "_entity": "Address of the whitelisted entity that will be able to perform the role",
          "_role": "Identifier for a group of actions in app"
        },
        "return": "Length of the array"
      },
      "getRecoveryVault()": {
        "details": "Get the recovery vault for the app",
        "return": "Recovery vault address for the app"
      },
      "grantPermission(address,address,bytes32)": {
        "details": "Grants permission if allowed. This requires `msg.sender` to be the permission manager",
        "params": {
          "_app": "Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)",
          "_entity": "Address of the whitelisted entity that will be able to perform the role",
          "_role": "Identifier for the group of actions in app given access to perform"
        }
      },
      "grantPermissionP(address,address,bytes32,uint256[])": {
        "details": "Grants a permission with parameters if allowed. This requires `msg.sender` to be the permission manager",
        "params": {
          "_app": "Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)",
          "_entity": "Address of the whitelisted entity that will be able to perform the role",
          "_params": "Permission parameters",
          "_role": "Identifier for the group of actions in app given access to perform"
        }
      },
      "hasInitialized()": {
        "return": "Whether the contract has been initialized by the time of the current block"
      },
      "hasPermission(address,address,bytes32,bytes)": {
        "details": "Function called by apps to check ACL on kernel or to check permission statu",
        "params": {
          "_how": "Permission parameters",
          "_where": "Identifier for a group of actions in app",
          "_who": "Sender of the original call"
        },
        "return": "boolean indicating whether the ACL allows the role or not"
      },
      "initialize(address)": {
        "details": "Initialize can only be called once. It saves the block number in which it was initialized.",
        "params": {
          "_permissionsCreator": "Entity that will be given permission over createPermission"
        }
      },
      "removePermissionManager(address,bytes32)": {
        "params": {
          "_app": "Address of the app in which the permission is being unmanaged",
          "_role": "Identifier for the group of actions being unmanaged"
        }
      },
      "revokePermission(address,address,bytes32)": {
        "details": "Revokes permission if allowed. This requires `msg.sender` to be the the permission manager",
        "params": {
          "_app": "Address of the app in which the role will be revoked",
          "_entity": "Address of the whitelisted entity to revoke access from",
          "_role": "Identifier for the group of actions in app being revoked"
        }
      },
      "setPermissionManager(address,address,bytes32)": {
        "params": {
          "_app": "Address of the app in which the permission management is being transferred",
          "_newManager": "Address for the new manager",
          "_role": "Identifier for the group of actions being transferred"
        }
      },
      "transferToVault(address)": {
        "params": {
          "_token": "Token balance to be sent to recovery vault."
        }
      }
    }
  },
  "userdoc": {
    "methods": {
      "burnPermissionManager(address,bytes32)": {
        "notice": "Burn `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)"
      },
      "createBurnedPermission(address,bytes32)": {
        "notice": "Burn non-existent `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)"
      },
      "createPermission(address,address,bytes32,address)": {
        "notice": "Create a new permission granting `_entity` the ability to perform actions requiring `_role` on `_app`, setting `_manager` as the permission's manager"
      },
      "getPermissionParam(address,address,bytes32,uint256)": {
        "notice": "Get parameter for permission"
      },
      "getPermissionParamsLength(address,address,bytes32)": {
        "notice": "Get parameters for permission array length"
      },
      "grantPermission(address,address,bytes32)": {
        "notice": "Grant `_entity` the ability to perform actions requiring `_role` on `_app`"
      },
      "grantPermissionP(address,address,bytes32,uint256[])": {
        "notice": "Grant `_entity` the ability to perform actions requiring `_role` on `_app`"
      },
      "initialize(address)": {
        "notice": "Initialize an ACL instance and set `_permissionsCreator` as the entity that can create other permissions"
      },
      "removePermissionManager(address,bytes32)": {
        "notice": "Remove the manager of `_role` in `_app`"
      },
      "revokePermission(address,address,bytes32)": {
        "notice": "Revoke from `_entity` the ability to perform actions requiring `_role` on `_app`"
      },
      "setPermissionManager(address,address,bytes32)": {
        "notice": "Set `_newManager` as the manager of `_role` in `_app`"
      },
      "transferToVault(address)": {
        "notice": "Send funds to recovery Vault. This contract should never receive funds,        but in case it does, this function allows one to recover them."
      }
    }
  }
}