{
  "contractName": "CertifiedEmailAggregator",
  "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": "getCertifiedEmailById",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getCertifiedEmail",
      "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": "0x608060405234801561001057600080fd5b50604051602080610b448339810180604052602081101561003057600080fd5b5051604080518082018252601a81527f6365727469666965642d656d61696c2d61676772656761746f7200000000000060208281019182528351808501909452601984527f6365727469666965642d656d61696c2d6e6f74696669657273000000000000009084015260018054600160a060020a0319163317905581518493916100bd91600291906102e9565b5080516100d19060039060208401906102e9565b5060008054600160a060020a031916600160a060020a038581169190911791829055604080517f34311d8e0000000000000000000000000000000000000000000000000000000081523060248201819052600482019283526002805461010060018216150260001901168190046044840181905295909416946334311d8e949391928291606490910190859080156101aa5780601f1061017f576101008083540402835291602001916101aa565b820191906000526020600020905b81548152906001019060200180831161018d57829003601f168201915b50509350505050600060405180830381600087803b1580156101cb57600080fd5b505af11580156101df573d6000803e3d6000fd5b5050600054604080517fd661f878000000000000000000000000000000000000000000000000000000008152306024820181905260048201928352600380546002600019600183161561010002019091160460448401819052600160a060020a03909516965063d661f8789550939092918291606490910190859080156102a75780601f1061027c576101008083540402835291602001916102a7565b820191906000526020600020905b81548152906001019060200180831161028a57829003601f168201915b50509350505050600060405180830381600087803b1580156102c857600080fd5b505af11580156102dc573d6000803e3d6000fd5b5050505050505050610384565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061032a57805160ff1916838001178555610357565b82800160010185558215610357579182015b8281111561035757825182559160200191906001019061033c565b50610363929150610367565b5090565b61038191905b80821115610363576000815560010161036d565b90565b6107b1806103936000396000f3fe6080604052600436106100745763ffffffff60e060020a60003504166306661abd811461007957806307158d5d146100a05780635000596b146100ed5780636d1ff7511461011e578063984eec37146101cf578063d9026ed114610259578063e71e65761461026e578063f9b533351461032c575b600080fd5b34801561008557600080fd5b5061008e610341565b60408051918252519081900360200190f35b3480156100ac57600080fd5b506100ca600480360360208110156100c357600080fd5b5035610347565b60408051600160a060020a03909316835290151560208301528051918290030190f35b3480156100f957600080fd5b506101026103be565b60408051600160a060020a039092168252519081900360200190f35b34801561012a57600080fd5b506101026004803603602081101561014157600080fd5b810190602081018135602060020a81111561015b57600080fd5b82018360208201111561016d57600080fd5b803590602001918460018302840111602060020a8311171561018e57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506103cd945050505050565b3480156101db57600080fd5b506101e46103f8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561021e578181015183820152602001610206565b50505050905090810190601f16801561024b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026557600080fd5b506101e4610483565b34801561027a57600080fd5b5061032a6004803603604081101561029157600080fd5b810190602081018135602060020a8111156102ab57600080fd5b8201836020820111156102bd57600080fd5b803590602001918460018302840111602060020a831117156102de57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050509035600160a060020a031691506104de9050565b005b34801561033857600080fd5b506101026106e4565b60055490565b6005805460009182916001850181119183918690811061036357fe5b60009182526020808320909101548083526004909152604090912054909150600160a060020a0316156103b157600090815260046020526040902054600160a060020a0316925090506103b9565b506000925090505b915091565b600054600160a060020a031681565b6000806103d9836106f3565b600090815260046020526040902054600160a060020a03169392505050565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152929183018282801561047b5780601f106104505761010080835404028352916020019161047b565b820191906000526020600020905b81548152906001019060200180831161045e57829003601f168201915b505050505081565b6003805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561047b5780601f106104505761010080835404028352916020019161047b565b600154600160a060020a0316321461055b576040805160e560020a62461bcd02815260206004820152602f60248201527f4f6e6c79205369676e617475726974206163636f756e742063616e20706572666044820152608960020a6e37b936903a3434b99030b1ba34b7b702606482015290519081900360840190fd5b6000610566836106f3565b9050806105a76040805190810160405280602081526020017f6365727469666965645f656d61696c2e636f6e74726163742e637265617465648152506106f3565b14156106df576000829050600061068082600160a060020a031663af640d0f6040518163ffffffff1660e060020a02815260040160006040518083038186803b1580156105f357600080fd5b505afa158015610607573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561063057600080fd5b810190808051602060020a81111561064757600080fd5b8201602081018481111561065a57600080fd5b8151602060020a81118282018710171561067357600080fd5b50509291905050506106f3565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00181905560009081526004602052604090208054600160a060020a031916600160a060020a039390931692909217909155505b505050565b600154600160a060020a031681565b6000816040516020018080602001828103825283818151815260200191508051906020019080838360005b8381101561073657818101518382015260200161071e565b50505050905090810190601f1680156107635780820380516001836020036101000a031916815260200191505b509250505060405160208183030381529060405280519060200120905091905056fea165627a7a72305820957d54305d0883707544116a8099ce50c9f5d8c61d767c5192d6f7f3f1fad0730029",
  "deployedBytecode": "0x6080604052600436106100745763ffffffff60e060020a60003504166306661abd811461007957806307158d5d146100a05780635000596b146100ed5780636d1ff7511461011e578063984eec37146101cf578063d9026ed114610259578063e71e65761461026e578063f9b533351461032c575b600080fd5b34801561008557600080fd5b5061008e610341565b60408051918252519081900360200190f35b3480156100ac57600080fd5b506100ca600480360360208110156100c357600080fd5b5035610347565b60408051600160a060020a03909316835290151560208301528051918290030190f35b3480156100f957600080fd5b506101026103be565b60408051600160a060020a039092168252519081900360200190f35b34801561012a57600080fd5b506101026004803603602081101561014157600080fd5b810190602081018135602060020a81111561015b57600080fd5b82018360208201111561016d57600080fd5b803590602001918460018302840111602060020a8311171561018e57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506103cd945050505050565b3480156101db57600080fd5b506101e46103f8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561021e578181015183820152602001610206565b50505050905090810190601f16801561024b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026557600080fd5b506101e4610483565b34801561027a57600080fd5b5061032a6004803603604081101561029157600080fd5b810190602081018135602060020a8111156102ab57600080fd5b8201836020820111156102bd57600080fd5b803590602001918460018302840111602060020a831117156102de57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050509035600160a060020a031691506104de9050565b005b34801561033857600080fd5b506101026106e4565b60055490565b6005805460009182916001850181119183918690811061036357fe5b60009182526020808320909101548083526004909152604090912054909150600160a060020a0316156103b157600090815260046020526040902054600160a060020a0316925090506103b9565b506000925090505b915091565b600054600160a060020a031681565b6000806103d9836106f3565b600090815260046020526040902054600160a060020a03169392505050565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152929183018282801561047b5780601f106104505761010080835404028352916020019161047b565b820191906000526020600020905b81548152906001019060200180831161045e57829003601f168201915b505050505081565b6003805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561047b5780601f106104505761010080835404028352916020019161047b565b600154600160a060020a0316321461055b576040805160e560020a62461bcd02815260206004820152602f60248201527f4f6e6c79205369676e617475726974206163636f756e742063616e20706572666044820152608960020a6e37b936903a3434b99030b1ba34b7b702606482015290519081900360840190fd5b6000610566836106f3565b9050806105a76040805190810160405280602081526020017f6365727469666965645f656d61696c2e636f6e74726163742e637265617465648152506106f3565b14156106df576000829050600061068082600160a060020a031663af640d0f6040518163ffffffff1660e060020a02815260040160006040518083038186803b1580156105f357600080fd5b505afa158015610607573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561063057600080fd5b810190808051602060020a81111561064757600080fd5b8201602081018481111561065a57600080fd5b8151602060020a81118282018710171561067357600080fd5b50509291905050506106f3565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00181905560009081526004602052604090208054600160a060020a031916600160a060020a039390931692909217909155505b505050565b600154600160a060020a031681565b6000816040516020018080602001828103825283818151815260200191508051906020019080838360005b8381101561073657818101518382015260200161071e565b50505050905090810190601f1680156107635780820380516001836020036101000a031916815260200191505b509250505060405160208183030381529060405280519060200120905091905056fea165627a7a72305820957d54305d0883707544116a8099ce50c9f5d8c61d767c5192d6f7f3f1fad0730029",
  "sourceMap": "163:1936:3:-;;;457:228;8:9:-1;5:2;;;30:1;27;20:12;5:2;457:228:3;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;457:228:3;436:554:0;;;;;;;;;;;;457:228:3;436:554:0;;;;;;;;;;;;;;;;;;;;;;587:10;:23;;-1:-1:-1;;;;;;587:23:0;600:10;587:23;;;621:33;;457:228:3;;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;;;457:228:3;163:1936;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;163:1936:3;;;-1:-1:-1;163:1936:3;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "163:1936:3:-;;;;;;;;;-1:-1:-1;;;163:1936:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1456:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1456:120:3;;;;;;;;;;;;;;;;;;;;924:526;;8:9:-1;5:2;;;30:1;27;20:12;5:2;924:526:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;924:526:3;;;;;;;-1:-1:-1;;;;;924:526:3;;;;;;;;;;;;;;;;;;;;;108:43:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;108:43:0;;;;;;;;-1:-1:-1;;;;;108:43:0;;;;;;;;;;;;;;691:227:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;691:227:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;691:227:3;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;691:227:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;691:227:3;;;;;;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;691:227:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;691:227:3;;-1:-1:-1;691:227:3;;-1:-1:-1;;;;;691:227:3;190:28:0;;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;;;;1582:515:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1582:515:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1582:515:3;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;1582:515:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1582:515:3;;;;;;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;1582:515:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1582:515:3;;-1:-1:-1;;;1582:515:3;;-1:-1:-1;;;;;1582:515:3;;-1:-1:-1;1582:515:3;;-1:-1:-1;1582:515:3;;;158:25:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;158:25:0;;;;1456:120:3;1545:17;:24;1456:120;:::o;924:526::-;1086:17;:24;;1022:12;;;;1082:1;1074:9;;:36;-1:-1:-1;1074:36:3;1022:12;;1074:5;;1147:24;;;;;;;;;;;;;;;;;;1194:33;;;:15;:33;;;;;;;;1147:24;;-1:-1:-1;;;;;;1194:33:3;1186:56;1182:191;;1291:33;;;;:15;:33;;;;;;-1:-1:-1;;;;;1291:33:3;;-1:-1:-1;1343:5:3;-1:-1:-1;1258:104:3;;1182:191;-1:-1:-1;1412:1:3;;-1:-1:-1;1428:5:3;-1:-1:-1;924:526:3;;;;:::o;108:43:0:-;;;-1:-1:-1;;;;;108:43:0;;:::o;691:227:3:-;799:7;822:17;842:16;855:2;842:12;:16::i;:::-;884:26;;;;:15;:26;;;;;;-1:-1:-1;;;;;884:26:3;;691:227;-1:-1:-1;;;691:227:3:o;190:28:0:-;;;;;;;;;;;;;;-1:-1:-1;;190:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;224:26::-;;;;;;;;;;;;;;;-1:-1:-1;;224:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1582:515:3;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;;;;;;;;;;;;;;;1711:24:3;1738:23;1751:9;1738:12;:23::i;:::-;1711:50;;1823:16;1776:43;1789:29;;;;;;;;;;;;;;;;;;1776:12;:43::i;:::-;:63;1772:319;;;1855:29;1902:4;1855:52;;1922:17;1942:33;1955:14;-1:-1:-1;;;;;1955:17:3;;:19;;;;;-1:-1:-1;;;1955:19:3;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1955:19:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1955:19:3;;;;;;39:16:-1;36:1;17:17;2:54;101:4;1955:19:3;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;1955:19:3;;;;;;-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;;1955:19:3;;;;;;1942:12;:33::i;:::-;1990:17;27:10:-1;;39:1;23:18;;45:23;;;1990:33:3;;;;;-1:-1:-1;2037:26:3;;;:15;1990:33;2037:26;;;;:43;;-1:-1:-1;;;;;;2037:43:3;-1:-1:-1;;;;;2037:43:3;;;;;;;;;;;-1:-1:-1;1772:319:3;422:1:0;1582:515:3;;:::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: 785.507\n*/\n\nimport \"./interfaces/NotifierInterface.sol\";\nimport \"./BaseAggregator.sol\";\nimport \"./CertifiedEmail.sol\";\n\ncontract CertifiedEmailAggregator is\n    NotifierInterface,\n    BaseAggregator\n{\n    string constant private CERTIFIED_EMAIL_CREATED_EVENT = \"certified_email.contract.created\";\n\n    mapping (bytes32 => CertifiedEmail) private certifiedEmails;\n    \n    bytes32[] private certifiedEmailIds;\n\n    constructor (\n        address _userContractAddress\n    )\n        public\n        BaseAggregator(\n            _userContractAddress,\n            \"certified-email-aggregator\",\n            \"certified-email-notifiers\"\n        )\n    {}\n\n    function getCertifiedEmailById(\n        string memory id\n    )\n        public\n        view\n        returns (address)\n    {\n        bytes32 bytes32id = Utils.keccak(id);\n\n        return address(certifiedEmails[bytes32id]);\n    }\n\n    function getCertifiedEmail(\n        uint index\n    )\n        public\n        view\n        returns (address addr, bool more)\n    {\n        bool _more = index + 1 < certifiedEmailIds.length;\n        bytes32 certifiedEmailId = certifiedEmailIds[index];\n\n        if (address(certifiedEmails[certifiedEmailId]) != address(0)) {\n            return (\n                address(certifiedEmails[certifiedEmailId]),\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 certifiedEmailIds.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(CERTIFIED_EMAIL_CREATED_EVENT) == bytes32eventType) {\n            CertifiedEmail certifiedEmail = CertifiedEmail(addr);\n\n            bytes32 bytes32id = Utils.keccak(certifiedEmail.id());\n\n            certifiedEmailIds.push(bytes32id);\n            certifiedEmails[bytes32id] = certifiedEmail;\n        }\n    }\n}",
  "sourcePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/CertifiedEmailAggregator.sol",
  "ast": {
    "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/CertifiedEmailAggregator.sol",
    "exportedSymbols": {
      "CertifiedEmailAggregator": [
        1037
      ]
    },
    "id": 1038,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 876,
        "literals": [
          "solidity",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:3"
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/NotifierInterface.sol",
        "file": "./interfaces/NotifierInterface.sol",
        "id": 877,
        "nodeType": "ImportDirective",
        "scope": 1038,
        "sourceUnit": 6928,
        "src": "55:44:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/BaseAggregator.sol",
        "file": "./BaseAggregator.sol",
        "id": 878,
        "nodeType": "ImportDirective",
        "scope": 1038,
        "sourceUnit": 71,
        "src": "100:30:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/CertifiedEmail.sol",
        "file": "./CertifiedEmail.sol",
        "id": 879,
        "nodeType": "ImportDirective",
        "scope": 1038,
        "sourceUnit": 875,
        "src": "131:30:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 880,
              "name": "NotifierInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6927,
              "src": "204:17:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NotifierInterface_$6927",
                "typeString": "contract NotifierInterface"
              }
            },
            "id": 881,
            "nodeType": "InheritanceSpecifier",
            "src": "204:17:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 882,
              "name": "BaseAggregator",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 70,
              "src": "227:14:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BaseAggregator_$70",
                "typeString": "contract BaseAggregator"
              }
            },
            "id": 883,
            "nodeType": "InheritanceSpecifier",
            "src": "227:14:3"
          }
        ],
        "contractDependencies": [
          70,
          6927
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1037,
        "linearizedBaseContracts": [
          1037,
          70,
          6927
        ],
        "name": "CertifiedEmailAggregator",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 886,
            "name": "CERTIFIED_EMAIL_CREATED_EVENT",
            "nodeType": "VariableDeclaration",
            "scope": 1037,
            "src": "248:90:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 884,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "248:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "6365727469666965645f656d61696c2e636f6e74726163742e63726561746564",
              "id": 885,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "304:34:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_ae5b77f70831a789b8fd4a912091a91a55780b1a05636a18add16c7002080c26",
                "typeString": "literal_string \"certified_email.contract.created\""
              },
              "value": "certified_email.contract.created"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 890,
            "name": "certifiedEmails",
            "nodeType": "VariableDeclaration",
            "scope": 1037,
            "src": "345:59:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CertifiedEmail_$874_$",
              "typeString": "mapping(bytes32 => contract CertifiedEmail)"
            },
            "typeName": {
              "id": 889,
              "keyType": {
                "id": 887,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "354:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "345:35:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CertifiedEmail_$874_$",
                "typeString": "mapping(bytes32 => contract CertifiedEmail)"
              },
              "valueType": {
                "contractScope": null,
                "id": 888,
                "name": "CertifiedEmail",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 874,
                "src": "365:14:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                  "typeString": "contract CertifiedEmail"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 893,
            "name": "certifiedEmailIds",
            "nodeType": "VariableDeclaration",
            "scope": 1037,
            "src": "415:35:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
              "typeString": "bytes32[]"
            },
            "typeName": {
              "baseType": {
                "id": 891,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "415:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "id": 892,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "415:9:3",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                "typeString": "bytes32[]"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 903,
              "nodeType": "Block",
              "src": "683:2:3",
              "statements": []
            },
            "documentation": null,
            "id": 904,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 898,
                    "name": "_userContractAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 895,
                    "src": "565:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "6365727469666965642d656d61696c2d61676772656761746f72",
                    "id": 899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "599:28:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_e286d9c032d847274899ba618f917d2ca974669dc7f2784f1439103a8edbe760",
                      "typeString": "literal_string \"certified-email-aggregator\""
                    },
                    "value": "certified-email-aggregator"
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "6365727469666965642d656d61696c2d6e6f74696669657273",
                    "id": 900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "641:27:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_34af7359cfbe393aa940dd768d8b69e9f608525971e6ac17a87116d8bbdb6179",
                      "typeString": "literal_string \"certified-email-notifiers\""
                    },
                    "value": "certified-email-notifiers"
                  }
                ],
                "id": 901,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 897,
                  "name": "BaseAggregator",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 70,
                  "src": "537:14:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_BaseAggregator_$70_$",
                    "typeString": "type(contract BaseAggregator)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "537:141:3"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 895,
                  "name": "_userContractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 904,
                  "src": "479:28:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 894,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "479:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "469:44:3"
            },
            "returnParameters": {
              "id": 902,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "683:0:3"
            },
            "scope": 1037,
            "src": "457:228:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 924,
              "nodeType": "Block",
              "src": "812:106:3",
              "statements": [
                {
                  "assignments": [
                    912
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 912,
                      "name": "bytes32id",
                      "nodeType": "VariableDeclaration",
                      "scope": 924,
                      "src": "822:17:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 911,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "822:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 917,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 915,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 906,
                        "src": "855:2:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 913,
                        "name": "Utils",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7289,
                        "src": "842:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                          "typeString": "type(library Utils)"
                        }
                      },
                      "id": 914,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7288,
                      "src": "842:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (string memory) pure returns (bytes32)"
                      }
                    },
                    "id": 916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "842:16:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "822:36:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 919,
                          "name": "certifiedEmails",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 890,
                          "src": "884:15:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CertifiedEmail_$874_$",
                            "typeString": "mapping(bytes32 => contract CertifiedEmail)"
                          }
                        },
                        "id": 921,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 920,
                          "name": "bytes32id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 912,
                          "src": "900:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "884:26:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                          "typeString": "contract CertifiedEmail"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                          "typeString": "contract CertifiedEmail"
                        }
                      ],
                      "id": 918,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "876:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 922,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "876:35:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 910,
                  "id": 923,
                  "nodeType": "Return",
                  "src": "869:42:3"
                }
              ]
            },
            "documentation": null,
            "id": 925,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCertifiedEmailById",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 907,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 906,
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 925,
                  "src": "731:16:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 905,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "731:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "721:32:3"
            },
            "returnParameters": {
              "id": 910,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 909,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 925,
                  "src": "799:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 908,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "799:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "798:9:3"
            },
            "scope": 1037,
            "src": "691:227:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 974,
              "nodeType": "Block",
              "src": "1051:399:3",
              "statements": [
                {
                  "assignments": [
                    935
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 935,
                      "name": "_more",
                      "nodeType": "VariableDeclaration",
                      "scope": 974,
                      "src": "1061:10:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 934,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1061:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 942,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 941,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 938,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 936,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 927,
                        "src": "1074:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 937,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1082:1:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "1074:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 939,
                        "name": "certifiedEmailIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 893,
                        "src": "1086:17:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 940,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1086:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1074:36:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1061:49:3"
                },
                {
                  "assignments": [
                    944
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 944,
                      "name": "certifiedEmailId",
                      "nodeType": "VariableDeclaration",
                      "scope": 974,
                      "src": "1120:24:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 943,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1120:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 948,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 945,
                      "name": "certifiedEmailIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 893,
                      "src": "1147:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                        "typeString": "bytes32[] storage ref"
                      }
                    },
                    "id": 947,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 946,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 927,
                      "src": "1165:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1147:24:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1120:51:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 957,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 950,
                            "name": "certifiedEmails",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 890,
                            "src": "1194:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CertifiedEmail_$874_$",
                              "typeString": "mapping(bytes32 => contract CertifiedEmail)"
                            }
                          },
                          "id": 952,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 951,
                            "name": "certifiedEmailId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 944,
                            "src": "1210:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1194:33:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                            "typeString": "contract CertifiedEmail"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                            "typeString": "contract CertifiedEmail"
                          }
                        ],
                        "id": 949,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1186:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 953,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1186:42:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 955,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1240:1:3",
                          "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": 954,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1232:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1232:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1186:56:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 967,
                  "nodeType": "IfStatement",
                  "src": "1182:191:3",
                  "trueBody": {
                    "id": 966,
                    "nodeType": "Block",
                    "src": "1244:129:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 959,
                                    "name": "certifiedEmails",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 890,
                                    "src": "1291:15:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CertifiedEmail_$874_$",
                                      "typeString": "mapping(bytes32 => contract CertifiedEmail)"
                                    }
                                  },
                                  "id": 961,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 960,
                                    "name": "certifiedEmailId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 944,
                                    "src": "1307:16:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1291:33:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                                    "typeString": "contract CertifiedEmail"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                                    "typeString": "contract CertifiedEmail"
                                  }
                                ],
                                "id": 958,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1283:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 962,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1283:42:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 963,
                              "name": "_more",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 935,
                              "src": "1343:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 964,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1265:97:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_bool_$",
                            "typeString": "tuple(address,bool)"
                          }
                        },
                        "functionReturnParameters": 933,
                        "id": 965,
                        "nodeType": "Return",
                        "src": "1258:104:3"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1412:1:3",
                            "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": 968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1404:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1404:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 971,
                        "name": "_more",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 935,
                        "src": "1428:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 972,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1390:53:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_payable_$_t_bool_$",
                      "typeString": "tuple(address payable,bool)"
                    }
                  },
                  "functionReturnParameters": 933,
                  "id": 973,
                  "nodeType": "Return",
                  "src": "1383:60:3"
                }
              ]
            },
            "documentation": null,
            "id": 975,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCertifiedEmail",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 928,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 927,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 975,
                  "src": "960:10:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 926,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "960:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "950:26:3"
            },
            "returnParameters": {
              "id": 933,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 930,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 975,
                  "src": "1022:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 929,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1022:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 932,
                  "name": "more",
                  "nodeType": "VariableDeclaration",
                  "scope": 975,
                  "src": "1036:9:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 931,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1036:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1021:25:3"
            },
            "scope": 1037,
            "src": "924:526:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 983,
              "nodeType": "Block",
              "src": "1528:48:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 980,
                      "name": "certifiedEmailIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 893,
                      "src": "1545:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                        "typeString": "bytes32[] storage ref"
                      }
                    },
                    "id": 981,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1545:24:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 979,
                  "id": 982,
                  "nodeType": "Return",
                  "src": "1538:31:3"
                }
              ]
            },
            "documentation": null,
            "id": 984,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "count",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 976,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1470:2:3"
            },
            "returnParameters": {
              "id": 979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 978,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 984,
                  "src": "1518:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 977,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1518:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1517:6:3"
            },
            "scope": 1037,
            "src": "1456:120:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1035,
              "nodeType": "Block",
              "src": "1701:396:3",
              "statements": [
                {
                  "assignments": [
                    994
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 994,
                      "name": "bytes32eventType",
                      "nodeType": "VariableDeclaration",
                      "scope": 1035,
                      "src": "1711:24:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 993,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1711:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 999,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 997,
                        "name": "eventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 986,
                        "src": "1751:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 995,
                        "name": "Utils",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7289,
                        "src": "1738:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                          "typeString": "type(library Utils)"
                        }
                      },
                      "id": 996,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7288,
                      "src": "1738:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (string memory) pure returns (bytes32)"
                      }
                    },
                    "id": 998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1738:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1711:50:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1005,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1002,
                          "name": "CERTIFIED_EMAIL_CREATED_EVENT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 886,
                          "src": "1789:29:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1000,
                          "name": "Utils",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7289,
                          "src": "1776:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                            "typeString": "type(library Utils)"
                          }
                        },
                        "id": 1001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "keccak",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7288,
                        "src": "1776:12:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (string memory) pure returns (bytes32)"
                        }
                      },
                      "id": 1003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1776:43:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1004,
                      "name": "bytes32eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 994,
                      "src": "1823:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1776:63:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1034,
                  "nodeType": "IfStatement",
                  "src": "1772:319:3",
                  "trueBody": {
                    "id": 1033,
                    "nodeType": "Block",
                    "src": "1841:250:3",
                    "statements": [
                      {
                        "assignments": [
                          1007
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1007,
                            "name": "certifiedEmail",
                            "nodeType": "VariableDeclaration",
                            "scope": 1033,
                            "src": "1855:29:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                              "typeString": "contract CertifiedEmail"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 1006,
                              "name": "CertifiedEmail",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 874,
                              "src": "1855:14:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                                "typeString": "contract CertifiedEmail"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1011,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1009,
                              "name": "addr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 988,
                              "src": "1902:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1008,
                            "name": "CertifiedEmail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 874,
                            "src": "1887:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_CertifiedEmail_$874_$",
                              "typeString": "type(contract CertifiedEmail)"
                            }
                          },
                          "id": 1010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1887:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                            "typeString": "contract CertifiedEmail"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1855:52:3"
                      },
                      {
                        "assignments": [
                          1013
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1013,
                            "name": "bytes32id",
                            "nodeType": "VariableDeclaration",
                            "scope": 1033,
                            "src": "1922:17:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 1012,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1922:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1020,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1016,
                                  "name": "certifiedEmail",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1007,
                                  "src": "1955:14:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                                    "typeString": "contract CertifiedEmail"
                                  }
                                },
                                "id": 1017,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "id",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 345,
                                "src": "1955:17:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_$",
                                  "typeString": "function () view external returns (string memory)"
                                }
                              },
                              "id": 1018,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1955:19:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1014,
                              "name": "Utils",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7289,
                              "src": "1942:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                                "typeString": "type(library Utils)"
                              }
                            },
                            "id": 1015,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "keccak",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7288,
                            "src": "1942:12:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (string memory) pure returns (bytes32)"
                            }
                          },
                          "id": 1019,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1942:33:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1922:53:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1024,
                              "name": "bytes32id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1013,
                              "src": "2013:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1021,
                              "name": "certifiedEmailIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 893,
                              "src": "1990:17:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                "typeString": "bytes32[] storage ref"
                              }
                            },
                            "id": 1023,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1990:22:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_bytes32_$returns$_t_uint256_$",
                              "typeString": "function (bytes32) returns (uint256)"
                            }
                          },
                          "id": 1025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1990:33:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1026,
                        "nodeType": "ExpressionStatement",
                        "src": "1990:33:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1027,
                              "name": "certifiedEmails",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 890,
                              "src": "2037:15:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CertifiedEmail_$874_$",
                                "typeString": "mapping(bytes32 => contract CertifiedEmail)"
                              }
                            },
                            "id": 1029,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1028,
                              "name": "bytes32id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1013,
                              "src": "2053:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2037:26:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                              "typeString": "contract CertifiedEmail"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1030,
                            "name": "certifiedEmail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1007,
                            "src": "2066:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                              "typeString": "contract CertifiedEmail"
                            }
                          },
                          "src": "2037:43:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                            "typeString": "contract CertifiedEmail"
                          }
                        },
                        "id": 1032,
                        "nodeType": "ExpressionStatement",
                        "src": "2037:43:3"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 1036,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 991,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 990,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22,
                  "src": "1682:14:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1682:14:3"
              }
            ],
            "name": "notify",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 986,
                  "name": "eventType",
                  "nodeType": "VariableDeclaration",
                  "scope": 1036,
                  "src": "1607:23:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 985,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1607:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 988,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1036,
                  "src": "1640:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 987,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1640:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1597:61:3"
            },
            "returnParameters": {
              "id": 992,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1701:0:3"
            },
            "scope": 1037,
            "src": "1582:515:3",
            "stateMutability": "nonpayable",
            "superFunction": 6926,
            "visibility": "public"
          }
        ],
        "scope": 1038,
        "src": "163:1936:3"
      }
    ],
    "src": "0:2099:3"
  },
  "legacyAST": {
    "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/CertifiedEmailAggregator.sol",
    "exportedSymbols": {
      "CertifiedEmailAggregator": [
        1037
      ]
    },
    "id": 1038,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 876,
        "literals": [
          "solidity",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:3"
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/NotifierInterface.sol",
        "file": "./interfaces/NotifierInterface.sol",
        "id": 877,
        "nodeType": "ImportDirective",
        "scope": 1038,
        "sourceUnit": 6928,
        "src": "55:44:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/BaseAggregator.sol",
        "file": "./BaseAggregator.sol",
        "id": 878,
        "nodeType": "ImportDirective",
        "scope": 1038,
        "sourceUnit": 71,
        "src": "100:30:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/CertifiedEmail.sol",
        "file": "./CertifiedEmail.sol",
        "id": 879,
        "nodeType": "ImportDirective",
        "scope": 1038,
        "sourceUnit": 875,
        "src": "131:30:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 880,
              "name": "NotifierInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6927,
              "src": "204:17:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NotifierInterface_$6927",
                "typeString": "contract NotifierInterface"
              }
            },
            "id": 881,
            "nodeType": "InheritanceSpecifier",
            "src": "204:17:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 882,
              "name": "BaseAggregator",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 70,
              "src": "227:14:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BaseAggregator_$70",
                "typeString": "contract BaseAggregator"
              }
            },
            "id": 883,
            "nodeType": "InheritanceSpecifier",
            "src": "227:14:3"
          }
        ],
        "contractDependencies": [
          70,
          6927
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1037,
        "linearizedBaseContracts": [
          1037,
          70,
          6927
        ],
        "name": "CertifiedEmailAggregator",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 886,
            "name": "CERTIFIED_EMAIL_CREATED_EVENT",
            "nodeType": "VariableDeclaration",
            "scope": 1037,
            "src": "248:90:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 884,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "248:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "6365727469666965645f656d61696c2e636f6e74726163742e63726561746564",
              "id": 885,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "304:34:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_ae5b77f70831a789b8fd4a912091a91a55780b1a05636a18add16c7002080c26",
                "typeString": "literal_string \"certified_email.contract.created\""
              },
              "value": "certified_email.contract.created"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 890,
            "name": "certifiedEmails",
            "nodeType": "VariableDeclaration",
            "scope": 1037,
            "src": "345:59:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CertifiedEmail_$874_$",
              "typeString": "mapping(bytes32 => contract CertifiedEmail)"
            },
            "typeName": {
              "id": 889,
              "keyType": {
                "id": 887,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "354:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "345:35:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CertifiedEmail_$874_$",
                "typeString": "mapping(bytes32 => contract CertifiedEmail)"
              },
              "valueType": {
                "contractScope": null,
                "id": 888,
                "name": "CertifiedEmail",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 874,
                "src": "365:14:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                  "typeString": "contract CertifiedEmail"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 893,
            "name": "certifiedEmailIds",
            "nodeType": "VariableDeclaration",
            "scope": 1037,
            "src": "415:35:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
              "typeString": "bytes32[]"
            },
            "typeName": {
              "baseType": {
                "id": 891,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "415:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "id": 892,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "415:9:3",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                "typeString": "bytes32[]"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 903,
              "nodeType": "Block",
              "src": "683:2:3",
              "statements": []
            },
            "documentation": null,
            "id": 904,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 898,
                    "name": "_userContractAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 895,
                    "src": "565:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "6365727469666965642d656d61696c2d61676772656761746f72",
                    "id": 899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "599:28:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_e286d9c032d847274899ba618f917d2ca974669dc7f2784f1439103a8edbe760",
                      "typeString": "literal_string \"certified-email-aggregator\""
                    },
                    "value": "certified-email-aggregator"
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "6365727469666965642d656d61696c2d6e6f74696669657273",
                    "id": 900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "641:27:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_34af7359cfbe393aa940dd768d8b69e9f608525971e6ac17a87116d8bbdb6179",
                      "typeString": "literal_string \"certified-email-notifiers\""
                    },
                    "value": "certified-email-notifiers"
                  }
                ],
                "id": 901,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 897,
                  "name": "BaseAggregator",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 70,
                  "src": "537:14:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_BaseAggregator_$70_$",
                    "typeString": "type(contract BaseAggregator)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "537:141:3"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 895,
                  "name": "_userContractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 904,
                  "src": "479:28:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 894,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "479:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "469:44:3"
            },
            "returnParameters": {
              "id": 902,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "683:0:3"
            },
            "scope": 1037,
            "src": "457:228:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 924,
              "nodeType": "Block",
              "src": "812:106:3",
              "statements": [
                {
                  "assignments": [
                    912
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 912,
                      "name": "bytes32id",
                      "nodeType": "VariableDeclaration",
                      "scope": 924,
                      "src": "822:17:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 911,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "822:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 917,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 915,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 906,
                        "src": "855:2:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 913,
                        "name": "Utils",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7289,
                        "src": "842:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                          "typeString": "type(library Utils)"
                        }
                      },
                      "id": 914,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7288,
                      "src": "842:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (string memory) pure returns (bytes32)"
                      }
                    },
                    "id": 916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "842:16:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "822:36:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 919,
                          "name": "certifiedEmails",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 890,
                          "src": "884:15:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CertifiedEmail_$874_$",
                            "typeString": "mapping(bytes32 => contract CertifiedEmail)"
                          }
                        },
                        "id": 921,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 920,
                          "name": "bytes32id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 912,
                          "src": "900:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "884:26:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                          "typeString": "contract CertifiedEmail"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                          "typeString": "contract CertifiedEmail"
                        }
                      ],
                      "id": 918,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "876:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 922,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "876:35:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 910,
                  "id": 923,
                  "nodeType": "Return",
                  "src": "869:42:3"
                }
              ]
            },
            "documentation": null,
            "id": 925,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCertifiedEmailById",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 907,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 906,
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 925,
                  "src": "731:16:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 905,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "731:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "721:32:3"
            },
            "returnParameters": {
              "id": 910,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 909,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 925,
                  "src": "799:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 908,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "799:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "798:9:3"
            },
            "scope": 1037,
            "src": "691:227:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 974,
              "nodeType": "Block",
              "src": "1051:399:3",
              "statements": [
                {
                  "assignments": [
                    935
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 935,
                      "name": "_more",
                      "nodeType": "VariableDeclaration",
                      "scope": 974,
                      "src": "1061:10:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 934,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1061:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 942,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 941,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 938,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 936,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 927,
                        "src": "1074:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 937,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1082:1:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "1074:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 939,
                        "name": "certifiedEmailIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 893,
                        "src": "1086:17:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 940,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1086:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1074:36:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1061:49:3"
                },
                {
                  "assignments": [
                    944
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 944,
                      "name": "certifiedEmailId",
                      "nodeType": "VariableDeclaration",
                      "scope": 974,
                      "src": "1120:24:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 943,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1120:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 948,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 945,
                      "name": "certifiedEmailIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 893,
                      "src": "1147:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                        "typeString": "bytes32[] storage ref"
                      }
                    },
                    "id": 947,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 946,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 927,
                      "src": "1165:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1147:24:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1120:51:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 957,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 950,
                            "name": "certifiedEmails",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 890,
                            "src": "1194:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CertifiedEmail_$874_$",
                              "typeString": "mapping(bytes32 => contract CertifiedEmail)"
                            }
                          },
                          "id": 952,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 951,
                            "name": "certifiedEmailId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 944,
                            "src": "1210:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1194:33:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                            "typeString": "contract CertifiedEmail"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                            "typeString": "contract CertifiedEmail"
                          }
                        ],
                        "id": 949,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1186:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 953,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1186:42:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 955,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1240:1:3",
                          "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": 954,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1232:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1232:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1186:56:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 967,
                  "nodeType": "IfStatement",
                  "src": "1182:191:3",
                  "trueBody": {
                    "id": 966,
                    "nodeType": "Block",
                    "src": "1244:129:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 959,
                                    "name": "certifiedEmails",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 890,
                                    "src": "1291:15:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CertifiedEmail_$874_$",
                                      "typeString": "mapping(bytes32 => contract CertifiedEmail)"
                                    }
                                  },
                                  "id": 961,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 960,
                                    "name": "certifiedEmailId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 944,
                                    "src": "1307:16:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1291:33:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                                    "typeString": "contract CertifiedEmail"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                                    "typeString": "contract CertifiedEmail"
                                  }
                                ],
                                "id": 958,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1283:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 962,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1283:42:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 963,
                              "name": "_more",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 935,
                              "src": "1343:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 964,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1265:97:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_bool_$",
                            "typeString": "tuple(address,bool)"
                          }
                        },
                        "functionReturnParameters": 933,
                        "id": 965,
                        "nodeType": "Return",
                        "src": "1258:104:3"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1412:1:3",
                            "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": 968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1404:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1404:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 971,
                        "name": "_more",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 935,
                        "src": "1428:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 972,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1390:53:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_payable_$_t_bool_$",
                      "typeString": "tuple(address payable,bool)"
                    }
                  },
                  "functionReturnParameters": 933,
                  "id": 973,
                  "nodeType": "Return",
                  "src": "1383:60:3"
                }
              ]
            },
            "documentation": null,
            "id": 975,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCertifiedEmail",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 928,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 927,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 975,
                  "src": "960:10:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 926,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "960:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "950:26:3"
            },
            "returnParameters": {
              "id": 933,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 930,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 975,
                  "src": "1022:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 929,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1022:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 932,
                  "name": "more",
                  "nodeType": "VariableDeclaration",
                  "scope": 975,
                  "src": "1036:9:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 931,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1036:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1021:25:3"
            },
            "scope": 1037,
            "src": "924:526:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 983,
              "nodeType": "Block",
              "src": "1528:48:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 980,
                      "name": "certifiedEmailIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 893,
                      "src": "1545:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                        "typeString": "bytes32[] storage ref"
                      }
                    },
                    "id": 981,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1545:24:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 979,
                  "id": 982,
                  "nodeType": "Return",
                  "src": "1538:31:3"
                }
              ]
            },
            "documentation": null,
            "id": 984,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "count",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 976,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1470:2:3"
            },
            "returnParameters": {
              "id": 979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 978,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 984,
                  "src": "1518:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 977,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1518:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1517:6:3"
            },
            "scope": 1037,
            "src": "1456:120:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1035,
              "nodeType": "Block",
              "src": "1701:396:3",
              "statements": [
                {
                  "assignments": [
                    994
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 994,
                      "name": "bytes32eventType",
                      "nodeType": "VariableDeclaration",
                      "scope": 1035,
                      "src": "1711:24:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 993,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1711:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 999,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 997,
                        "name": "eventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 986,
                        "src": "1751:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 995,
                        "name": "Utils",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7289,
                        "src": "1738:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                          "typeString": "type(library Utils)"
                        }
                      },
                      "id": 996,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7288,
                      "src": "1738:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (string memory) pure returns (bytes32)"
                      }
                    },
                    "id": 998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1738:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1711:50:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1005,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1002,
                          "name": "CERTIFIED_EMAIL_CREATED_EVENT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 886,
                          "src": "1789:29:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1000,
                          "name": "Utils",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7289,
                          "src": "1776:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                            "typeString": "type(library Utils)"
                          }
                        },
                        "id": 1001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "keccak",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7288,
                        "src": "1776:12:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (string memory) pure returns (bytes32)"
                        }
                      },
                      "id": 1003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1776:43:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1004,
                      "name": "bytes32eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 994,
                      "src": "1823:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1776:63:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1034,
                  "nodeType": "IfStatement",
                  "src": "1772:319:3",
                  "trueBody": {
                    "id": 1033,
                    "nodeType": "Block",
                    "src": "1841:250:3",
                    "statements": [
                      {
                        "assignments": [
                          1007
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1007,
                            "name": "certifiedEmail",
                            "nodeType": "VariableDeclaration",
                            "scope": 1033,
                            "src": "1855:29:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                              "typeString": "contract CertifiedEmail"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 1006,
                              "name": "CertifiedEmail",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 874,
                              "src": "1855:14:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                                "typeString": "contract CertifiedEmail"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1011,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1009,
                              "name": "addr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 988,
                              "src": "1902:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1008,
                            "name": "CertifiedEmail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 874,
                            "src": "1887:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_CertifiedEmail_$874_$",
                              "typeString": "type(contract CertifiedEmail)"
                            }
                          },
                          "id": 1010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1887:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                            "typeString": "contract CertifiedEmail"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1855:52:3"
                      },
                      {
                        "assignments": [
                          1013
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1013,
                            "name": "bytes32id",
                            "nodeType": "VariableDeclaration",
                            "scope": 1033,
                            "src": "1922:17:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 1012,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1922:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1020,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1016,
                                  "name": "certifiedEmail",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1007,
                                  "src": "1955:14:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                                    "typeString": "contract CertifiedEmail"
                                  }
                                },
                                "id": 1017,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "id",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 345,
                                "src": "1955:17:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_$",
                                  "typeString": "function () view external returns (string memory)"
                                }
                              },
                              "id": 1018,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1955:19:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1014,
                              "name": "Utils",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7289,
                              "src": "1942:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                                "typeString": "type(library Utils)"
                              }
                            },
                            "id": 1015,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "keccak",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7288,
                            "src": "1942:12:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (string memory) pure returns (bytes32)"
                            }
                          },
                          "id": 1019,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1942:33:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1922:53:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1024,
                              "name": "bytes32id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1013,
                              "src": "2013:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1021,
                              "name": "certifiedEmailIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 893,
                              "src": "1990:17:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                "typeString": "bytes32[] storage ref"
                              }
                            },
                            "id": 1023,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1990:22:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_bytes32_$returns$_t_uint256_$",
                              "typeString": "function (bytes32) returns (uint256)"
                            }
                          },
                          "id": 1025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1990:33:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1026,
                        "nodeType": "ExpressionStatement",
                        "src": "1990:33:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1027,
                              "name": "certifiedEmails",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 890,
                              "src": "2037:15:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CertifiedEmail_$874_$",
                                "typeString": "mapping(bytes32 => contract CertifiedEmail)"
                              }
                            },
                            "id": 1029,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1028,
                              "name": "bytes32id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1013,
                              "src": "2053:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2037:26:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                              "typeString": "contract CertifiedEmail"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1030,
                            "name": "certifiedEmail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1007,
                            "src": "2066:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                              "typeString": "contract CertifiedEmail"
                            }
                          },
                          "src": "2037:43:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                            "typeString": "contract CertifiedEmail"
                          }
                        },
                        "id": 1032,
                        "nodeType": "ExpressionStatement",
                        "src": "2037:43:3"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 1036,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 991,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 990,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22,
                  "src": "1682:14:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1682:14:3"
              }
            ],
            "name": "notify",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 986,
                  "name": "eventType",
                  "nodeType": "VariableDeclaration",
                  "scope": 1036,
                  "src": "1607:23:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 985,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1607:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 988,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1036,
                  "src": "1640:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 987,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1640:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1597:61:3"
            },
            "returnParameters": {
              "id": 992,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1701:0:3"
            },
            "scope": 1037,
            "src": "1582:515:3",
            "stateMutability": "nonpayable",
            "superFunction": 6926,
            "visibility": "public"
          }
        ],
        "scope": 1038,
        "src": "163:1936:3"
      }
    ],
    "src": "0:2099:3"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.0+commit.1d4f565a.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.3",
  "updatedAt": "2020-01-15T10:55:50.241Z"
}