{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "sourceLocation",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "sourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "location",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "submitable",
          "type": "bool"
        },
        {
          "internalType": "string",
          "name": "methodSignature",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "returnAbiParametersArray",
          "type": "string"
        },
        {
          "internalType": "bool",
          "name": "isInternal",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "needsSender",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "position",
          "type": "uint256"
        }
      ],
      "name": "addFunctionality",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "sourceLocation",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "sourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "location",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "submitable",
          "type": "bool"
        },
        {
          "internalType": "string",
          "name": "methodSignature",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "returnAbiParametersArray",
          "type": "string"
        },
        {
          "internalType": "bool",
          "name": "isInternal",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "needsSender",
          "type": "bool"
        }
      ],
      "name": "addFunctionality",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clearCallingContext",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "functionalitiesToJSON",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "l",
          "type": "uint256"
        }
      ],
      "name": "functionalitiesToJSON",
      "outputs": [
        {
          "internalType": "string",
          "name": "functionsJSONArray",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "functionalityNames",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "l",
          "type": "uint256"
        }
      ],
      "name": "functionalityNames",
      "outputs": [
        {
          "internalType": "string",
          "name": "functionsJSONArray",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        }
      ],
      "name": "functionalityToJSON",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFunctionalitiesAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        }
      ],
      "name": "getFunctionalityData",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getProxy",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        }
      ],
      "name": "hasFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sourceLocation",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "getMinimumBlockNumberSourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "getMinimumBlockNumberFunctionalityAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "getEmergencyMinimumBlockNumberSourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "getEmergencyMinimumBlockNumberFunctionalityAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "getEmergencySurveyStakingSourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "getEmergencySurveyStakingFunctionalityAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "checkVoteResultSourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "checkVoteResultFunctionalityAddress",
          "type": "address"
        }
      ],
      "name": "init",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "functionality",
          "type": "address"
        }
      ],
      "name": "isAuthorizedFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "functionality",
          "type": "address"
        }
      ],
      "name": "isValidFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "uint8",
          "name": "submitable",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "preConditionCheck",
      "outputs": [
        {
          "internalType": "address",
          "name": "location",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "payload",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        }
      ],
      "name": "removeFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "removed",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "position",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "location",
          "type": "address"
        }
      ],
      "name": "setCallingContext",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setProxy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "proposalAddress",
          "type": "address"
        }
      ],
      "name": "setupFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "evm": {
    "bytecode": {
      "object": "",
      "sourceMap": ""
    },
    "deployedBytecode": {
      "object": "",
      "sourceMap": ""
    }
  },
  "metadata": "{\"compiler\":{\"version\":\"0.8.0+commit.c7dfd78e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"sourceLocation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sourceLocationId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"location\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"submitable\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"returnAbiParametersArray\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"isInternal\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"needsSender\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"}],\"name\":\"addFunctionality\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"sourceLocation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sourceLocationId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"location\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"submitable\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"returnAbiParametersArray\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"isInternal\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"needsSender\",\"type\":\"bool\"}],\"name\":\"addFunctionality\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clearCallingContext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"functionalitiesToJSON\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l\",\"type\":\"uint256\"}],\"name\":\"functionalitiesToJSON\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"functionsJSONArray\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"functionalityNames\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l\",\"type\":\"uint256\"}],\"name\":\"functionalityNames\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"functionsJSONArray\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"}],\"name\":\"functionalityToJSON\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFunctionalitiesAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"}],\"name\":\"getFunctionalityData\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"}],\"name\":\"hasFunctionality\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sourceLocation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"getMinimumBlockNumberSourceLocationId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"getMinimumBlockNumberFunctionalityAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"getEmergencyMinimumBlockNumberSourceLocationId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"getEmergencyMinimumBlockNumberFunctionalityAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"getEmergencySurveyStakingSourceLocationId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"getEmergencySurveyStakingFunctionalityAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"checkVoteResultSourceLocationId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"checkVoteResultFunctionalityAddress\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"functionality\",\"type\":\"address\"}],\"name\":\"isAuthorizedFunctionality\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"functionality\",\"type\":\"address\"}],\"name\":\"isValidFunctionality\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"submitable\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"preConditionCheck\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"location\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"}],\"name\":\"removeFunctionality\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"removed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"location\",\"type\":\"address\"}],\"name\":\"setCallingContext\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proposalAddress\",\"type\":\"address\"}],\"name\":\"setupFunctionality\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IMVDFunctionalitiesManager.sol\":\"IMVDFunctionalitiesManager\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IMVDFunctionalitiesManager.sol\":{\"keccak256\":\"0x050d033b3f1926ad9e2c4f0fbe7f90f81329031bc20f74a3763f94807ebbe1c9\",\"license\":\"GPL3\",\"urls\":[\"bzz-raw://ff6127103e5d260211c12c4724885a0ef94af693ca66f153d790bd362bbcc75e\",\"dweb:/ipfs/QmPWzoX8mm18cbLGtuybLpEkUWd4cPD6yYtLnTdUeWKMXQ\"]}},\"version\":1}",
  "bytecode": ""
}