{
  "contractName": "SignatureAggregator",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "userContract",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "aggregatorName",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "notifiersKey",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "signaturit",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_userContractAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "id",
          "type": "string"
        }
      ],
      "name": "getSignatureById",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getSignature",
      "outputs": [
        {
          "name": "addr",
          "type": "address"
        },
        {
          "name": "more",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "count",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "eventType",
          "type": "string"
        },
        {
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "notify",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50604051602080610b448339810180604052602081101561003057600080fd5b5051604080518082018252601481527f7369676e61747572652d61676772656761746f7200000000000000000000000060208281019182528351808501909452601384527f7369676e61747572652d6e6f74696669657273000000000000000000000000009084015260018054600160a060020a0319163317905581518493916100bd91600291906102e9565b5080516100d19060039060208401906102e9565b5060008054600160a060020a031916600160a060020a038581169190911791829055604080517f34311d8e0000000000000000000000000000000000000000000000000000000081523060248201819052600482019283526002805461010060018216150260001901168190046044840181905295909416946334311d8e949391928291606490910190859080156101aa5780601f1061017f576101008083540402835291602001916101aa565b820191906000526020600020905b81548152906001019060200180831161018d57829003601f168201915b50509350505050600060405180830381600087803b1580156101cb57600080fd5b505af11580156101df573d6000803e3d6000fd5b5050600054604080517fd661f878000000000000000000000000000000000000000000000000000000008152306024820181905260048201928352600380546002600019600183161561010002019091160460448401819052600160a060020a03909516965063d661f8789550939092918291606490910190859080156102a75780601f1061027c576101008083540402835291602001916102a7565b820191906000526020600020905b81548152906001019060200180831161028a57829003601f168201915b50509350505050600060405180830381600087803b1580156102c857600080fd5b505af11580156102dc573d6000803e3d6000fd5b5050505050505050610384565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061032a57805160ff1916838001178555610357565b82800160010185558215610357579182015b8281111561035757825182559160200191906001019061033c565b50610363929150610367565b5090565b61038191905b80821115610363576000815560010161036d565b90565b6107b1806103936000396000f3fe6080604052600436106100745763ffffffff60e060020a60003504166302a569e6811461007957806306661abd146100c6578063446521ca146100ed5780635000596b146101ba578063984eec37146101cf578063d9026ed114610259578063e71e65761461026e578063f9b533351461032c575b600080fd5b34801561008557600080fd5b506100a36004803603602081101561009c57600080fd5b5035610341565b60408051600160a060020a03909316835290151560208301528051918290030190f35b3480156100d257600080fd5b506100db6103b8565b60408051918252519081900360200190f35b3480156100f957600080fd5b5061019e6004803603602081101561011057600080fd5b810190602081018135602060020a81111561012a57600080fd5b82018360208201111561013c57600080fd5b803590602001918460018302840111602060020a8311171561015d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506103be945050505050565b60408051600160a060020a039092168252519081900360200190f35b3480156101c657600080fd5b5061019e6103e9565b3480156101db57600080fd5b506101e46103f8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561021e578181015183820152602001610206565b50505050905090810190601f16801561024b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026557600080fd5b506101e4610483565b34801561027a57600080fd5b5061032a6004803603604081101561029157600080fd5b810190602081018135602060020a8111156102ab57600080fd5b8201836020820111156102bd57600080fd5b803590602001918460018302840111602060020a831117156102de57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050509035600160a060020a031691506104de9050565b005b34801561033857600080fd5b5061019e6106e4565b6005805460009182916001850181119183918690811061035d57fe5b60009182526020808320909101548083526004909152604090912054909150600160a060020a0316156103ab57600090815260046020526040902054600160a060020a0316925090506103b3565b506000925090505b915091565b60055490565b6000806103ca836106f3565b600090815260046020526040902054600160a060020a03169392505050565b600054600160a060020a031681565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152929183018282801561047b5780601f106104505761010080835404028352916020019161047b565b820191906000526020600020905b81548152906001019060200180831161045e57829003601f168201915b505050505081565b6003805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561047b5780601f106104505761010080835404028352916020019161047b565b600154600160a060020a0316321461055b576040805160e560020a62461bcd02815260206004820152602f60248201527f4f6e6c79205369676e617475726974206163636f756e742063616e20706572666044820152608960020a6e37b936903a3434b99030b1ba34b7b702606482015290519081900360840190fd5b6000610566836106f3565b9050806105a76040805190810160405280601a81526020017f7369676e61747572652e636f6e74726163742e637265617465640000000000008152506106f3565b14156106df576000829050600061068082600160a060020a031663af640d0f6040518163ffffffff1660e060020a02815260040160006040518083038186803b1580156105f357600080fd5b505afa158015610607573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561063057600080fd5b810190808051602060020a81111561064757600080fd5b8201602081018481111561065a57600080fd5b8151602060020a81118282018710171561067357600080fd5b50509291905050506106f3565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00181905560009081526004602052604090208054600160a060020a031916600160a060020a039390931692909217909155505b505050565b600154600160a060020a031681565b6000816040516020018080602001828103825283818151815260200191508051906020019080838360005b8381101561073657818101518382015260200161071e565b50505050905090810190601f1680156107635780820380516001836020036101000a031916815260200191505b509250505060405160208183030381529060405280519060200120905091905056fea165627a7a723058201334ba18e28261156d08f0488e840b5f1161ab3c0d587c6a20acae5ebdf891500029",
  "deployedBytecode": "0x6080604052600436106100745763ffffffff60e060020a60003504166302a569e6811461007957806306661abd146100c6578063446521ca146100ed5780635000596b146101ba578063984eec37146101cf578063d9026ed114610259578063e71e65761461026e578063f9b533351461032c575b600080fd5b34801561008557600080fd5b506100a36004803603602081101561009c57600080fd5b5035610341565b60408051600160a060020a03909316835290151560208301528051918290030190f35b3480156100d257600080fd5b506100db6103b8565b60408051918252519081900360200190f35b3480156100f957600080fd5b5061019e6004803603602081101561011057600080fd5b810190602081018135602060020a81111561012a57600080fd5b82018360208201111561013c57600080fd5b803590602001918460018302840111602060020a8311171561015d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506103be945050505050565b60408051600160a060020a039092168252519081900360200190f35b3480156101c657600080fd5b5061019e6103e9565b3480156101db57600080fd5b506101e46103f8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561021e578181015183820152602001610206565b50505050905090810190601f16801561024b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026557600080fd5b506101e4610483565b34801561027a57600080fd5b5061032a6004803603604081101561029157600080fd5b810190602081018135602060020a8111156102ab57600080fd5b8201836020820111156102bd57600080fd5b803590602001918460018302840111602060020a831117156102de57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050509035600160a060020a031691506104de9050565b005b34801561033857600080fd5b5061019e6106e4565b6005805460009182916001850181119183918690811061035d57fe5b60009182526020808320909101548083526004909152604090912054909150600160a060020a0316156103ab57600090815260046020526040902054600160a060020a0316925090506103b3565b506000925090505b915091565b60055490565b6000806103ca836106f3565b600090815260046020526040902054600160a060020a03169392505050565b600054600160a060020a031681565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152929183018282801561047b5780601f106104505761010080835404028352916020019161047b565b820191906000526020600020905b81548152906001019060200180831161045e57829003601f168201915b505050505081565b6003805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561047b5780601f106104505761010080835404028352916020019161047b565b600154600160a060020a0316321461055b576040805160e560020a62461bcd02815260206004820152602f60248201527f4f6e6c79205369676e617475726974206163636f756e742063616e20706572666044820152608960020a6e37b936903a3434b99030b1ba34b7b702606482015290519081900360840190fd5b6000610566836106f3565b9050806105a76040805190810160405280601a81526020017f7369676e61747572652e636f6e74726163742e637265617465640000000000008152506106f3565b14156106df576000829050600061068082600160a060020a031663af640d0f6040518163ffffffff1660e060020a02815260040160006040518083038186803b1580156105f357600080fd5b505afa158015610607573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561063057600080fd5b810190808051602060020a81111561064757600080fd5b8201602081018481111561065a57600080fd5b8151602060020a81118282018710171561067357600080fd5b50509291905050506106f3565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00181905560009081526004602052604090208054600160a060020a031916600160a060020a039390931692909217909155505b505050565b600154600160a060020a031681565b6000816040516020018080602001828103825283818151815260200191508051906020019080838360005b8381101561073657818101518382015260200161071e565b50505050905090810190601f1680156107635780820380516001836020036101000a031916815260200191505b509250505060405160208183030381529060405280519060200120905091905056fea165627a7a723058201334ba18e28261156d08f0488e840b5f1161ab3c0d587c6a20acae5ebdf891500029",
  "sourceMap": "158:1797:15:-;;;421:216;8:9:-1;5:2;;;30:1;27;20:12;5:2;421:216:15;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;421:216:15;436:554:0;;;;;;;;;;;;421:216:15;436:554:0;;;;;;;;;;;;;;;;;;;;;;587:10;:23;;-1:-1:-1;;;;;;587:23:0;600:10;587:23;;;621:33;;421:216:15;;436:554:0;621:33;;:14;;436:554;621:33;:::i;:::-;-1:-1:-1;664:30:0;;;;:12;;:30;;;;;:::i;:::-;-1:-1:-1;705:12:0;:59;;-1:-1:-1;;;;;;705:59:0;-1:-1:-1;;;;;705:59:0;;;;;;;;;;;775:97;;;;;;857:4;775:97;;;;;;;;;;;;821:14;775:97;;705:59;-1:-1:-1;775:97:0;;;;-1:-1:-1;;775:97:0;;;;;;;;;;;:12;;;;;:32;;821:14;857:4;;775:97;;;;;;;821:14;;775:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;775:97:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;883:12:0;;:100;;;;;;968:4;883:100;;;;;;;;;;;;934:12;883:100;;;-1:-1:-1;;883:12:0;:100;;;:12;:100;;;;;;;;;;;;-1:-1:-1;;;;;883:12:0;;;;-1:-1:-1;883:37:0;;-1:-1:-1;934:12:0;968:4;;883:100;;;;;;;;934:12;;883:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;883:100:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;883:100:0;;;;436:554;;;421:216:15;158:1797;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;158:1797:15;;;-1:-1:-1;158:1797:15;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "158:1797:15:-;;;;;;;;;-1:-1:-1;;;158:1797:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;866:486;;8:9:-1;5:2;;;30:1;27;20:12;5:2;866:486:15;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;866:486:15;;;;;;;-1:-1:-1;;;;;866:486:15;;;;;;;;;;;;;;;;;;;;;1358:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1358:115:15;;;;;;;;;;;;;;;;;;;;643:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;643:217:15;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;643:217:15;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;643:217:15;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;643:217:15;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;643:217:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;643:217:15;;-1:-1:-1;643:217:15;;-1:-1:-1;;;;;643:217:15;;;;;-1:-1:-1;;;;;643:217:15;;;;;;;;;;;;;;108:43:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;108:43:0;;;;190:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;190:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;190:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;224:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;224:26:0;;;;1479:474:15;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1479:474:15;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1479:474:15;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;1479:474:15;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1479:474:15;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1479:474:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1479:474:15;;-1:-1:-1;;;1479:474:15;;-1:-1:-1;;;;;1479:474:15;;-1:-1:-1;1479:474:15;;-1:-1:-1;1479:474:15;;;158:25:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;158:25:0;;;;866:486:15;1023:12;:19;;959:12;;;;1019:1;1011:9;;:31;-1:-1:-1;1011:31:15;959:12;;1011:5;;1074:19;;;;;;;;;;;;;;;;;;1116:23;;;:10;:23;;;;;;;;1074:19;;-1:-1:-1;;;;;;1116:23:15;1108:46;1104:171;;1203:23;;;;:10;:23;;;;;;-1:-1:-1;;;;;1203:23:15;;-1:-1:-1;1245:5:15;-1:-1:-1;1170:94:15;;1104:171;-1:-1:-1;1314:1:15;;-1:-1:-1;1330:5:15;-1:-1:-1;866:486:15;;;;:::o;1358:115::-;1447:12;:19;1358:115;:::o;643:217::-;746:7;769:17;789:16;802:2;789:12;:16::i;:::-;831:21;;;;:10;:21;;;;;;-1:-1:-1;;;;;831:21:15;;643:217;-1:-1:-1;;;643:217:15:o;108:43:0:-;;;-1:-1:-1;;;;;108:43:0;;:::o;190:28::-;;;;;;;;;;;;;;-1:-1:-1;;190:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;224:26::-;;;;;;;;;;;;;;;-1:-1:-1;;224:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1479:474:15;328:10:0;;-1:-1:-1;;;;;328:10:0;315:9;:23;294:117;;;;;-1:-1:-1;;;;;294:117:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;294:117:0;;;;;;;;;;;;;;;1608:24:15;1635:23;1648:9;1635:12;:23::i;:::-;1608:50;;1714:16;1673:37;1686:23;;;;;;;;;;;;;;;;;;1673:12;:37::i;:::-;:57;1669:278;;;1746:19;1778:4;1746:37;;1798:17;1818:28;1831:9;-1:-1:-1;;;;;1831:12:15;;:14;;;;;-1:-1:-1;;;1831:14:15;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1831:14:15;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1831:14:15;;;;;;39:16:-1;36:1;17:17;2:54;101:4;1831:14:15;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;1831:14:15;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;-1:-1;;;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;1831:14:15;;;;;;1818:12;:28::i;:::-;1861:12;27:10:-1;;39:1;23:18;;45:23;;;1861:28:15;;;;;-1:-1:-1;1903:21:15;;;:10;1861:28;1903:21;;;;:33;;-1:-1:-1;;;;;;1903:33:15;-1:-1:-1;;;;;1903:33:15;;;;;;;;;;;-1:-1:-1;1669:278:15;422:1:0;1479:474:15;;:::o;158:25:0:-;;;-1:-1:-1;;;;;158:25:0;;:::o;342:182:31:-;439:7;503:3;492:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;492:15:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;492:15:31;;;469:48;;;;;;462:55;;342:182;;;:::o",
  "source": "pragma solidity <0.6.0;\n\n/*\nGas to deploy: 784.355\n*/\n\nimport \"./interfaces/NotifierInterface.sol\";\nimport \"./BaseAggregator.sol\";\nimport \"./Signature.sol\";\n\ncontract SignatureAggregator is\n    NotifierInterface,\n    BaseAggregator\n{\n\n    string constant private SIGNATURE_CREATED_EVENT = \"signature.contract.created\";\n\n    mapping (bytes32 => Signature) private signatures;\n    \n    bytes32[] private signatureIds;\n\n    constructor (\n        address _userContractAddress\n    )\n        public\n        BaseAggregator(\n            _userContractAddress,\n            \"signature-aggregator\",\n            \"signature-notifiers\"\n        )\n    {}\n\n    function getSignatureById(\n        string memory id\n    )\n        public\n        view\n        returns (address)\n    {\n        bytes32 bytes32id = Utils.keccak(id);\n\n        return address(signatures[bytes32id]);\n    }\n\n    function getSignature(\n        uint index\n    )\n        public\n        view\n        returns (address addr, bool more)\n    {\n        bool _more = index + 1 < signatureIds.length;\n        bytes32 signatureId = signatureIds[index];\n\n        if (address(signatures[signatureId]) != address(0)) {\n            return (\n                address(signatures[signatureId]),\n                _more\n            );\n        }\n\n        return (\n            address(0),\n            _more\n        );\n    }\n\n    function count()\n        public\n        view\n        returns (uint)\n    {\n        return signatureIds.length;\n    }\n\n    function notify(\n        string memory eventType,\n        address addr\n    )\n        public\n        signaturitOnly\n    {\n        bytes32 bytes32eventType = Utils.keccak(eventType);\n\n        if (Utils.keccak(SIGNATURE_CREATED_EVENT) == bytes32eventType) {\n            Signature signature = Signature(addr);\n\n            bytes32 bytes32id = Utils.keccak(signature.id());\n\n            signatureIds.push(bytes32id);\n            signatures[bytes32id] = signature;\n        }\n    }\n}",
  "sourcePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/SignatureAggregator.sol",
  "ast": {
    "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/SignatureAggregator.sol",
    "exportedSymbols": {
      "SignatureAggregator": [
        3970
      ]
    },
    "id": 3971,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3809,
        "literals": [
          "solidity",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:15"
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/NotifierInterface.sol",
        "file": "./interfaces/NotifierInterface.sol",
        "id": 3810,
        "nodeType": "ImportDirective",
        "scope": 3971,
        "sourceUnit": 6928,
        "src": "55:44:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/BaseAggregator.sol",
        "file": "./BaseAggregator.sol",
        "id": 3811,
        "nodeType": "ImportDirective",
        "scope": 3971,
        "sourceUnit": 71,
        "src": "100:30:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/Signature.sol",
        "file": "./Signature.sol",
        "id": 3812,
        "nodeType": "ImportDirective",
        "scope": 3971,
        "sourceUnit": 3808,
        "src": "131:25:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3813,
              "name": "NotifierInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6927,
              "src": "194:17:15",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NotifierInterface_$6927",
                "typeString": "contract NotifierInterface"
              }
            },
            "id": 3814,
            "nodeType": "InheritanceSpecifier",
            "src": "194:17:15"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3815,
              "name": "BaseAggregator",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 70,
              "src": "217:14:15",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BaseAggregator_$70",
                "typeString": "contract BaseAggregator"
              }
            },
            "id": 3816,
            "nodeType": "InheritanceSpecifier",
            "src": "217:14:15"
          }
        ],
        "contractDependencies": [
          70,
          6927
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 3970,
        "linearizedBaseContracts": [
          3970,
          70,
          6927
        ],
        "name": "SignatureAggregator",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 3819,
            "name": "SIGNATURE_CREATED_EVENT",
            "nodeType": "VariableDeclaration",
            "scope": 3970,
            "src": "239:78:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3817,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "239:6:15",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "7369676e61747572652e636f6e74726163742e63726561746564",
              "id": 3818,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "289:28:15",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_3c84dd064979bbdb715484653bafe8622e8a568c4ab0aeaa9d5d3f68f5a44beb",
                "typeString": "literal_string \"signature.contract.created\""
              },
              "value": "signature.contract.created"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 3823,
            "name": "signatures",
            "nodeType": "VariableDeclaration",
            "scope": 3970,
            "src": "324:49:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_Signature_$3807_$",
              "typeString": "mapping(bytes32 => contract Signature)"
            },
            "typeName": {
              "id": 3822,
              "keyType": {
                "id": 3820,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "333:7:15",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "324:30:15",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_Signature_$3807_$",
                "typeString": "mapping(bytes32 => contract Signature)"
              },
              "valueType": {
                "contractScope": null,
                "id": 3821,
                "name": "Signature",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 3807,
                "src": "344:9:15",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_Signature_$3807",
                  "typeString": "contract Signature"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 3826,
            "name": "signatureIds",
            "nodeType": "VariableDeclaration",
            "scope": 3970,
            "src": "384:30:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
              "typeString": "bytes32[]"
            },
            "typeName": {
              "baseType": {
                "id": 3824,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "384:7:15",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "id": 3825,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "384:9:15",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                "typeString": "bytes32[]"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 3836,
              "nodeType": "Block",
              "src": "635:2:15",
              "statements": []
            },
            "documentation": null,
            "id": 3837,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3831,
                    "name": "_userContractAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3828,
                    "src": "529:20:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "7369676e61747572652d61676772656761746f72",
                    "id": 3832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "563:22:15",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_33a2f7a8eb265f5c70bc3e115d18d34d9f6263f649174edadd090e65642de791",
                      "typeString": "literal_string \"signature-aggregator\""
                    },
                    "value": "signature-aggregator"
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "7369676e61747572652d6e6f74696669657273",
                    "id": 3833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "599:21:15",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_3b317d4221d274688226013f55affecc0f5c09cf980dc6d9578c6a596721f3cf",
                      "typeString": "literal_string \"signature-notifiers\""
                    },
                    "value": "signature-notifiers"
                  }
                ],
                "id": 3834,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3830,
                  "name": "BaseAggregator",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 70,
                  "src": "501:14:15",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_BaseAggregator_$70_$",
                    "typeString": "type(contract BaseAggregator)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "501:129:15"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3829,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3828,
                  "name": "_userContractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 3837,
                  "src": "443:28:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3827,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "443:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "433:44:15"
            },
            "returnParameters": {
              "id": 3835,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "635:0:15"
            },
            "scope": 3970,
            "src": "421:216:15",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3857,
              "nodeType": "Block",
              "src": "759:101:15",
              "statements": [
                {
                  "assignments": [
                    3845
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3845,
                      "name": "bytes32id",
                      "nodeType": "VariableDeclaration",
                      "scope": 3857,
                      "src": "769:17:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3844,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "769:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3850,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3848,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3839,
                        "src": "802:2:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3846,
                        "name": "Utils",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7289,
                        "src": "789:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                          "typeString": "type(library Utils)"
                        }
                      },
                      "id": 3847,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7288,
                      "src": "789:12:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (string memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "789:16:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "769:36:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3852,
                          "name": "signatures",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3823,
                          "src": "831:10:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_Signature_$3807_$",
                            "typeString": "mapping(bytes32 => contract Signature)"
                          }
                        },
                        "id": 3854,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3853,
                          "name": "bytes32id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3845,
                          "src": "842:9:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "831:21:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Signature_$3807",
                          "typeString": "contract Signature"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Signature_$3807",
                          "typeString": "contract Signature"
                        }
                      ],
                      "id": 3851,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "823:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 3855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "823:30:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3843,
                  "id": 3856,
                  "nodeType": "Return",
                  "src": "816:37:15"
                }
              ]
            },
            "documentation": null,
            "id": 3858,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSignatureById",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3840,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3839,
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 3858,
                  "src": "678:16:15",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3838,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "678:6:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "668:32:15"
            },
            "returnParameters": {
              "id": 3843,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3842,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3858,
                  "src": "746:7:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3841,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "746:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "745:9:15"
            },
            "scope": 3970,
            "src": "643:217:15",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3907,
              "nodeType": "Block",
              "src": "988:364:15",
              "statements": [
                {
                  "assignments": [
                    3868
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3868,
                      "name": "_more",
                      "nodeType": "VariableDeclaration",
                      "scope": 3907,
                      "src": "998:10:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 3867,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "998:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3875,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3871,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3869,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3860,
                        "src": "1011:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 3870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1019:1:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "1011:9:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3872,
                        "name": "signatureIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3826,
                        "src": "1023:12:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 3873,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1023:19:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1011:31:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "998:44:15"
                },
                {
                  "assignments": [
                    3877
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3877,
                      "name": "signatureId",
                      "nodeType": "VariableDeclaration",
                      "scope": 3907,
                      "src": "1052:19:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3876,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1052:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3881,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 3878,
                      "name": "signatureIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3826,
                      "src": "1074:12:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                        "typeString": "bytes32[] storage ref"
                      }
                    },
                    "id": 3880,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 3879,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3860,
                      "src": "1087:5:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1074:19:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1052:41:15"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3883,
                            "name": "signatures",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3823,
                            "src": "1116:10:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_Signature_$3807_$",
                              "typeString": "mapping(bytes32 => contract Signature)"
                            }
                          },
                          "id": 3885,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 3884,
                            "name": "signatureId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3877,
                            "src": "1127:11:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1116:23:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Signature_$3807",
                            "typeString": "contract Signature"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Signature_$3807",
                            "typeString": "contract Signature"
                          }
                        ],
                        "id": 3882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1108:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3886,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1108:32:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3888,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1152:1:15",
                          "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": 3887,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1144:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3889,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1144:10:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1108:46:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3900,
                  "nodeType": "IfStatement",
                  "src": "1104:171:15",
                  "trueBody": {
                    "id": 3899,
                    "nodeType": "Block",
                    "src": "1156:119:15",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 3892,
                                    "name": "signatures",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3823,
                                    "src": "1203:10:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_Signature_$3807_$",
                                      "typeString": "mapping(bytes32 => contract Signature)"
                                    }
                                  },
                                  "id": 3894,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 3893,
                                    "name": "signatureId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3877,
                                    "src": "1214:11:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1203:23:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Signature_$3807",
                                    "typeString": "contract Signature"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Signature_$3807",
                                    "typeString": "contract Signature"
                                  }
                                ],
                                "id": 3891,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1195:7:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 3895,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1195:32:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3896,
                              "name": "_more",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3868,
                              "src": "1245:5:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 3897,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1177:87:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_bool_$",
                            "typeString": "tuple(address,bool)"
                          }
                        },
                        "functionReturnParameters": 3866,
                        "id": 3898,
                        "nodeType": "Return",
                        "src": "1170:94:15"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3902,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1314:1:15",
                            "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": 3901,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1306:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3903,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1306:10:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3904,
                        "name": "_more",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3868,
                        "src": "1330:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 3905,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1292:53:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_payable_$_t_bool_$",
                      "typeString": "tuple(address payable,bool)"
                    }
                  },
                  "functionReturnParameters": 3866,
                  "id": 3906,
                  "nodeType": "Return",
                  "src": "1285:60:15"
                }
              ]
            },
            "documentation": null,
            "id": 3908,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSignature",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3861,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3860,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "897:10:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3859,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "897:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "887:26:15"
            },
            "returnParameters": {
              "id": 3866,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3863,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "959:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3862,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "959:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3865,
                  "name": "more",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "973:9:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3864,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "973:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "958:25:15"
            },
            "scope": 3970,
            "src": "866:486:15",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3916,
              "nodeType": "Block",
              "src": "1430:43:15",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 3913,
                      "name": "signatureIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3826,
                      "src": "1447:12:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                        "typeString": "bytes32[] storage ref"
                      }
                    },
                    "id": 3914,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1447:19:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3912,
                  "id": 3915,
                  "nodeType": "Return",
                  "src": "1440:26:15"
                }
              ]
            },
            "documentation": null,
            "id": 3917,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "count",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3909,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1372:2:15"
            },
            "returnParameters": {
              "id": 3912,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3911,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3917,
                  "src": "1420:4:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3910,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1420:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1419:6:15"
            },
            "scope": 3970,
            "src": "1358:115:15",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3968,
              "nodeType": "Block",
              "src": "1598:355:15",
              "statements": [
                {
                  "assignments": [
                    3927
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3927,
                      "name": "bytes32eventType",
                      "nodeType": "VariableDeclaration",
                      "scope": 3968,
                      "src": "1608:24:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3926,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1608:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3932,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3930,
                        "name": "eventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3919,
                        "src": "1648:9:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3928,
                        "name": "Utils",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7289,
                        "src": "1635:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                          "typeString": "type(library Utils)"
                        }
                      },
                      "id": 3929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7288,
                      "src": "1635:12:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (string memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1635:23:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1608:50:15"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 3938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3935,
                          "name": "SIGNATURE_CREATED_EVENT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3819,
                          "src": "1686:23:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3933,
                          "name": "Utils",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7289,
                          "src": "1673:5:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                            "typeString": "type(library Utils)"
                          }
                        },
                        "id": 3934,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "keccak",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7288,
                        "src": "1673:12:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (string memory) pure returns (bytes32)"
                        }
                      },
                      "id": 3936,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1673:37:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3937,
                      "name": "bytes32eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3927,
                      "src": "1714:16:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1673:57:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3967,
                  "nodeType": "IfStatement",
                  "src": "1669:278:15",
                  "trueBody": {
                    "id": 3966,
                    "nodeType": "Block",
                    "src": "1732:215:15",
                    "statements": [
                      {
                        "assignments": [
                          3940
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3940,
                            "name": "signature",
                            "nodeType": "VariableDeclaration",
                            "scope": 3966,
                            "src": "1746:19:15",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Signature_$3807",
                              "typeString": "contract Signature"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 3939,
                              "name": "Signature",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 3807,
                              "src": "1746:9:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Signature_$3807",
                                "typeString": "contract Signature"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3944,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3942,
                              "name": "addr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3921,
                              "src": "1778:4:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3941,
                            "name": "Signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3807,
                            "src": "1768:9:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Signature_$3807_$",
                              "typeString": "type(contract Signature)"
                            }
                          },
                          "id": 3943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1768:15:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Signature_$3807",
                            "typeString": "contract Signature"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1746:37:15"
                      },
                      {
                        "assignments": [
                          3946
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3946,
                            "name": "bytes32id",
                            "nodeType": "VariableDeclaration",
                            "scope": 3966,
                            "src": "1798:17:15",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 3945,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1798:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3953,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3949,
                                  "name": "signature",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3940,
                                  "src": "1831:9:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Signature_$3807",
                                    "typeString": "contract Signature"
                                  }
                                },
                                "id": 3950,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "id",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3212,
                                "src": "1831:12:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_$",
                                  "typeString": "function () view external returns (string memory)"
                                }
                              },
                              "id": 3951,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1831:14:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3947,
                              "name": "Utils",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7289,
                              "src": "1818:5:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                                "typeString": "type(library Utils)"
                              }
                            },
                            "id": 3948,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "keccak",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7288,
                            "src": "1818:12:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (string memory) pure returns (bytes32)"
                            }
                          },
                          "id": 3952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1818:28:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1798:48:15"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3957,
                              "name": "bytes32id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3946,
                              "src": "1879:9:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3954,
                              "name": "signatureIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3826,
                              "src": "1861:12:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                "typeString": "bytes32[] storage ref"
                              }
                            },
                            "id": 3956,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1861:17:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_bytes32_$returns$_t_uint256_$",
                              "typeString": "function (bytes32) returns (uint256)"
                            }
                          },
                          "id": 3958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1861:28:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3959,
                        "nodeType": "ExpressionStatement",
                        "src": "1861:28:15"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 3960,
                              "name": "signatures",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3823,
                              "src": "1903:10:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_Signature_$3807_$",
                                "typeString": "mapping(bytes32 => contract Signature)"
                              }
                            },
                            "id": 3962,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3961,
                              "name": "bytes32id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3946,
                              "src": "1914:9:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1903:21:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Signature_$3807",
                              "typeString": "contract Signature"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3963,
                            "name": "signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3940,
                            "src": "1927:9:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Signature_$3807",
                              "typeString": "contract Signature"
                            }
                          },
                          "src": "1903:33:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Signature_$3807",
                            "typeString": "contract Signature"
                          }
                        },
                        "id": 3965,
                        "nodeType": "ExpressionStatement",
                        "src": "1903:33:15"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 3969,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 3924,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3923,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22,
                  "src": "1579:14:15",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1579:14:15"
              }
            ],
            "name": "notify",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3919,
                  "name": "eventType",
                  "nodeType": "VariableDeclaration",
                  "scope": 3969,
                  "src": "1504:23:15",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3918,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1504:6:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3921,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3969,
                  "src": "1537:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3920,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1537:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1494:61:15"
            },
            "returnParameters": {
              "id": 3925,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1598:0:15"
            },
            "scope": 3970,
            "src": "1479:474:15",
            "stateMutability": "nonpayable",
            "superFunction": 6926,
            "visibility": "public"
          }
        ],
        "scope": 3971,
        "src": "158:1797:15"
      }
    ],
    "src": "0:1955:15"
  },
  "legacyAST": {
    "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/SignatureAggregator.sol",
    "exportedSymbols": {
      "SignatureAggregator": [
        3970
      ]
    },
    "id": 3971,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3809,
        "literals": [
          "solidity",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:15"
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/NotifierInterface.sol",
        "file": "./interfaces/NotifierInterface.sol",
        "id": 3810,
        "nodeType": "ImportDirective",
        "scope": 3971,
        "sourceUnit": 6928,
        "src": "55:44:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/BaseAggregator.sol",
        "file": "./BaseAggregator.sol",
        "id": 3811,
        "nodeType": "ImportDirective",
        "scope": 3971,
        "sourceUnit": 71,
        "src": "100:30:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/Signature.sol",
        "file": "./Signature.sol",
        "id": 3812,
        "nodeType": "ImportDirective",
        "scope": 3971,
        "sourceUnit": 3808,
        "src": "131:25:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3813,
              "name": "NotifierInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6927,
              "src": "194:17:15",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NotifierInterface_$6927",
                "typeString": "contract NotifierInterface"
              }
            },
            "id": 3814,
            "nodeType": "InheritanceSpecifier",
            "src": "194:17:15"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3815,
              "name": "BaseAggregator",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 70,
              "src": "217:14:15",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BaseAggregator_$70",
                "typeString": "contract BaseAggregator"
              }
            },
            "id": 3816,
            "nodeType": "InheritanceSpecifier",
            "src": "217:14:15"
          }
        ],
        "contractDependencies": [
          70,
          6927
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 3970,
        "linearizedBaseContracts": [
          3970,
          70,
          6927
        ],
        "name": "SignatureAggregator",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 3819,
            "name": "SIGNATURE_CREATED_EVENT",
            "nodeType": "VariableDeclaration",
            "scope": 3970,
            "src": "239:78:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3817,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "239:6:15",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "7369676e61747572652e636f6e74726163742e63726561746564",
              "id": 3818,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "289:28:15",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_3c84dd064979bbdb715484653bafe8622e8a568c4ab0aeaa9d5d3f68f5a44beb",
                "typeString": "literal_string \"signature.contract.created\""
              },
              "value": "signature.contract.created"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 3823,
            "name": "signatures",
            "nodeType": "VariableDeclaration",
            "scope": 3970,
            "src": "324:49:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_Signature_$3807_$",
              "typeString": "mapping(bytes32 => contract Signature)"
            },
            "typeName": {
              "id": 3822,
              "keyType": {
                "id": 3820,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "333:7:15",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "324:30:15",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_Signature_$3807_$",
                "typeString": "mapping(bytes32 => contract Signature)"
              },
              "valueType": {
                "contractScope": null,
                "id": 3821,
                "name": "Signature",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 3807,
                "src": "344:9:15",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_Signature_$3807",
                  "typeString": "contract Signature"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 3826,
            "name": "signatureIds",
            "nodeType": "VariableDeclaration",
            "scope": 3970,
            "src": "384:30:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
              "typeString": "bytes32[]"
            },
            "typeName": {
              "baseType": {
                "id": 3824,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "384:7:15",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "id": 3825,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "384:9:15",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                "typeString": "bytes32[]"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 3836,
              "nodeType": "Block",
              "src": "635:2:15",
              "statements": []
            },
            "documentation": null,
            "id": 3837,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3831,
                    "name": "_userContractAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3828,
                    "src": "529:20:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "7369676e61747572652d61676772656761746f72",
                    "id": 3832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "563:22:15",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_33a2f7a8eb265f5c70bc3e115d18d34d9f6263f649174edadd090e65642de791",
                      "typeString": "literal_string \"signature-aggregator\""
                    },
                    "value": "signature-aggregator"
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "7369676e61747572652d6e6f74696669657273",
                    "id": 3833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "599:21:15",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_3b317d4221d274688226013f55affecc0f5c09cf980dc6d9578c6a596721f3cf",
                      "typeString": "literal_string \"signature-notifiers\""
                    },
                    "value": "signature-notifiers"
                  }
                ],
                "id": 3834,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3830,
                  "name": "BaseAggregator",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 70,
                  "src": "501:14:15",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_BaseAggregator_$70_$",
                    "typeString": "type(contract BaseAggregator)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "501:129:15"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3829,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3828,
                  "name": "_userContractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 3837,
                  "src": "443:28:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3827,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "443:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "433:44:15"
            },
            "returnParameters": {
              "id": 3835,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "635:0:15"
            },
            "scope": 3970,
            "src": "421:216:15",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3857,
              "nodeType": "Block",
              "src": "759:101:15",
              "statements": [
                {
                  "assignments": [
                    3845
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3845,
                      "name": "bytes32id",
                      "nodeType": "VariableDeclaration",
                      "scope": 3857,
                      "src": "769:17:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3844,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "769:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3850,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3848,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3839,
                        "src": "802:2:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3846,
                        "name": "Utils",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7289,
                        "src": "789:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                          "typeString": "type(library Utils)"
                        }
                      },
                      "id": 3847,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7288,
                      "src": "789:12:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (string memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "789:16:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "769:36:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3852,
                          "name": "signatures",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3823,
                          "src": "831:10:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_Signature_$3807_$",
                            "typeString": "mapping(bytes32 => contract Signature)"
                          }
                        },
                        "id": 3854,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3853,
                          "name": "bytes32id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3845,
                          "src": "842:9:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "831:21:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Signature_$3807",
                          "typeString": "contract Signature"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Signature_$3807",
                          "typeString": "contract Signature"
                        }
                      ],
                      "id": 3851,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "823:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 3855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "823:30:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3843,
                  "id": 3856,
                  "nodeType": "Return",
                  "src": "816:37:15"
                }
              ]
            },
            "documentation": null,
            "id": 3858,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSignatureById",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3840,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3839,
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 3858,
                  "src": "678:16:15",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3838,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "678:6:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "668:32:15"
            },
            "returnParameters": {
              "id": 3843,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3842,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3858,
                  "src": "746:7:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3841,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "746:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "745:9:15"
            },
            "scope": 3970,
            "src": "643:217:15",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3907,
              "nodeType": "Block",
              "src": "988:364:15",
              "statements": [
                {
                  "assignments": [
                    3868
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3868,
                      "name": "_more",
                      "nodeType": "VariableDeclaration",
                      "scope": 3907,
                      "src": "998:10:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 3867,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "998:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3875,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3871,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3869,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3860,
                        "src": "1011:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 3870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1019:1:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "1011:9:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3872,
                        "name": "signatureIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3826,
                        "src": "1023:12:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 3873,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1023:19:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1011:31:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "998:44:15"
                },
                {
                  "assignments": [
                    3877
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3877,
                      "name": "signatureId",
                      "nodeType": "VariableDeclaration",
                      "scope": 3907,
                      "src": "1052:19:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3876,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1052:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3881,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 3878,
                      "name": "signatureIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3826,
                      "src": "1074:12:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                        "typeString": "bytes32[] storage ref"
                      }
                    },
                    "id": 3880,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 3879,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3860,
                      "src": "1087:5:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1074:19:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1052:41:15"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3883,
                            "name": "signatures",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3823,
                            "src": "1116:10:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_Signature_$3807_$",
                              "typeString": "mapping(bytes32 => contract Signature)"
                            }
                          },
                          "id": 3885,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 3884,
                            "name": "signatureId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3877,
                            "src": "1127:11:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1116:23:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Signature_$3807",
                            "typeString": "contract Signature"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Signature_$3807",
                            "typeString": "contract Signature"
                          }
                        ],
                        "id": 3882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1108:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3886,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1108:32:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3888,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1152:1:15",
                          "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": 3887,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1144:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3889,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1144:10:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1108:46:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3900,
                  "nodeType": "IfStatement",
                  "src": "1104:171:15",
                  "trueBody": {
                    "id": 3899,
                    "nodeType": "Block",
                    "src": "1156:119:15",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 3892,
                                    "name": "signatures",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3823,
                                    "src": "1203:10:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_Signature_$3807_$",
                                      "typeString": "mapping(bytes32 => contract Signature)"
                                    }
                                  },
                                  "id": 3894,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 3893,
                                    "name": "signatureId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3877,
                                    "src": "1214:11:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1203:23:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Signature_$3807",
                                    "typeString": "contract Signature"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Signature_$3807",
                                    "typeString": "contract Signature"
                                  }
                                ],
                                "id": 3891,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1195:7:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 3895,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1195:32:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3896,
                              "name": "_more",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3868,
                              "src": "1245:5:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 3897,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1177:87:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_bool_$",
                            "typeString": "tuple(address,bool)"
                          }
                        },
                        "functionReturnParameters": 3866,
                        "id": 3898,
                        "nodeType": "Return",
                        "src": "1170:94:15"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3902,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1314:1:15",
                            "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": 3901,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1306:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3903,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1306:10:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3904,
                        "name": "_more",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3868,
                        "src": "1330:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 3905,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1292:53:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_payable_$_t_bool_$",
                      "typeString": "tuple(address payable,bool)"
                    }
                  },
                  "functionReturnParameters": 3866,
                  "id": 3906,
                  "nodeType": "Return",
                  "src": "1285:60:15"
                }
              ]
            },
            "documentation": null,
            "id": 3908,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSignature",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3861,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3860,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "897:10:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3859,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "897:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "887:26:15"
            },
            "returnParameters": {
              "id": 3866,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3863,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "959:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3862,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "959:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3865,
                  "name": "more",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "973:9:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3864,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "973:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "958:25:15"
            },
            "scope": 3970,
            "src": "866:486:15",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3916,
              "nodeType": "Block",
              "src": "1430:43:15",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 3913,
                      "name": "signatureIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3826,
                      "src": "1447:12:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                        "typeString": "bytes32[] storage ref"
                      }
                    },
                    "id": 3914,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1447:19:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3912,
                  "id": 3915,
                  "nodeType": "Return",
                  "src": "1440:26:15"
                }
              ]
            },
            "documentation": null,
            "id": 3917,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "count",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3909,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1372:2:15"
            },
            "returnParameters": {
              "id": 3912,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3911,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3917,
                  "src": "1420:4:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3910,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1420:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1419:6:15"
            },
            "scope": 3970,
            "src": "1358:115:15",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3968,
              "nodeType": "Block",
              "src": "1598:355:15",
              "statements": [
                {
                  "assignments": [
                    3927
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3927,
                      "name": "bytes32eventType",
                      "nodeType": "VariableDeclaration",
                      "scope": 3968,
                      "src": "1608:24:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3926,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1608:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3932,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3930,
                        "name": "eventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3919,
                        "src": "1648:9:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3928,
                        "name": "Utils",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7289,
                        "src": "1635:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                          "typeString": "type(library Utils)"
                        }
                      },
                      "id": 3929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7288,
                      "src": "1635:12:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (string memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1635:23:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1608:50:15"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 3938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3935,
                          "name": "SIGNATURE_CREATED_EVENT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3819,
                          "src": "1686:23:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3933,
                          "name": "Utils",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7289,
                          "src": "1673:5:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                            "typeString": "type(library Utils)"
                          }
                        },
                        "id": 3934,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "keccak",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7288,
                        "src": "1673:12:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (string memory) pure returns (bytes32)"
                        }
                      },
                      "id": 3936,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1673:37:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3937,
                      "name": "bytes32eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3927,
                      "src": "1714:16:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1673:57:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3967,
                  "nodeType": "IfStatement",
                  "src": "1669:278:15",
                  "trueBody": {
                    "id": 3966,
                    "nodeType": "Block",
                    "src": "1732:215:15",
                    "statements": [
                      {
                        "assignments": [
                          3940
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3940,
                            "name": "signature",
                            "nodeType": "VariableDeclaration",
                            "scope": 3966,
                            "src": "1746:19:15",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Signature_$3807",
                              "typeString": "contract Signature"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 3939,
                              "name": "Signature",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 3807,
                              "src": "1746:9:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Signature_$3807",
                                "typeString": "contract Signature"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3944,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3942,
                              "name": "addr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3921,
                              "src": "1778:4:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3941,
                            "name": "Signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3807,
                            "src": "1768:9:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Signature_$3807_$",
                              "typeString": "type(contract Signature)"
                            }
                          },
                          "id": 3943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1768:15:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Signature_$3807",
                            "typeString": "contract Signature"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1746:37:15"
                      },
                      {
                        "assignments": [
                          3946
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3946,
                            "name": "bytes32id",
                            "nodeType": "VariableDeclaration",
                            "scope": 3966,
                            "src": "1798:17:15",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 3945,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1798:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3953,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3949,
                                  "name": "signature",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3940,
                                  "src": "1831:9:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Signature_$3807",
                                    "typeString": "contract Signature"
                                  }
                                },
                                "id": 3950,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "id",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3212,
                                "src": "1831:12:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_$",
                                  "typeString": "function () view external returns (string memory)"
                                }
                              },
                              "id": 3951,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1831:14:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3947,
                              "name": "Utils",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7289,
                              "src": "1818:5:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                                "typeString": "type(library Utils)"
                              }
                            },
                            "id": 3948,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "keccak",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7288,
                            "src": "1818:12:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (string memory) pure returns (bytes32)"
                            }
                          },
                          "id": 3952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1818:28:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1798:48:15"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3957,
                              "name": "bytes32id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3946,
                              "src": "1879:9:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3954,
                              "name": "signatureIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3826,
                              "src": "1861:12:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                "typeString": "bytes32[] storage ref"
                              }
                            },
                            "id": 3956,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1861:17:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_bytes32_$returns$_t_uint256_$",
                              "typeString": "function (bytes32) returns (uint256)"
                            }
                          },
                          "id": 3958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1861:28:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3959,
                        "nodeType": "ExpressionStatement",
                        "src": "1861:28:15"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 3960,
                              "name": "signatures",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3823,
                              "src": "1903:10:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_Signature_$3807_$",
                                "typeString": "mapping(bytes32 => contract Signature)"
                              }
                            },
                            "id": 3962,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3961,
                              "name": "bytes32id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3946,
                              "src": "1914:9:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1903:21:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Signature_$3807",
                              "typeString": "contract Signature"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3963,
                            "name": "signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3940,
                            "src": "1927:9:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Signature_$3807",
                              "typeString": "contract Signature"
                            }
                          },
                          "src": "1903:33:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Signature_$3807",
                            "typeString": "contract Signature"
                          }
                        },
                        "id": 3965,
                        "nodeType": "ExpressionStatement",
                        "src": "1903:33:15"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 3969,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 3924,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3923,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22,
                  "src": "1579:14:15",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1579:14:15"
              }
            ],
            "name": "notify",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3919,
                  "name": "eventType",
                  "nodeType": "VariableDeclaration",
                  "scope": 3969,
                  "src": "1504:23:15",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3918,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1504:6:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3921,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3969,
                  "src": "1537:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3920,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1537:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1494:61:15"
            },
            "returnParameters": {
              "id": 3925,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1598:0:15"
            },
            "scope": 3970,
            "src": "1479:474:15",
            "stateMutability": "nonpayable",
            "superFunction": 6926,
            "visibility": "public"
          }
        ],
        "scope": 3971,
        "src": "158:1797:15"
      }
    ],
    "src": "0:1955:15"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.0+commit.1d4f565a.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.3",
  "updatedAt": "2020-01-15T10:55:50.246Z"
}