{
    "contractName": "AccountFactory",
    "abi": [
      {
        "constant": false,
        "inputs": [
          {
            "name": "_rootNode",
            "type": "bytes32"
          }
        ],
        "name": "verifyEnsRootNode",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
      },
      {
        "constant": true,
        "inputs": [
          {
            "name": "_node",
            "type": "bytes32"
          }
        ],
        "name": "addr",
        "outputs": [
          {
            "name": "",
            "type": "address"
          }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
      },
      {
        "constant": false,
        "inputs": [
          {
            "name": "_rootNode",
            "type": "bytes32"
          }
        ],
        "name": "addEnsRootNode",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
      },
      {
        "constant": true,
        "inputs": [
          {
            "name": "",
            "type": "bytes32"
          }
        ],
        "name": "ensRootNodes",
        "outputs": [
          {
            "name": "owner",
            "type": "address"
          },
          {
            "name": "verified",
            "type": "bool"
          }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
      },
      {
        "constant": false,
        "inputs": [
          {
            "name": "_rootNode",
            "type": "bytes32"
          }
        ],
        "name": "releaseEnsRootNode",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
      },
      {
        "constant": false,
        "inputs": [
          {
            "name": "_node",
            "type": "bytes32"
          },
          {
            "name": "_addr",
            "type": "address"
          }
        ],
        "name": "setAddr",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
      },
      {
        "inputs": [
          {
            "name": "_accountContractCode",
            "type": "bytes"
          },
          {
            "name": "_accountProxy",
            "type": "address"
          },
          {
            "name": "_ens",
            "type": "address"
          }
        ],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "constructor"
      },
      {
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "fallback"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "name": "account",
            "type": "address"
          }
        ],
        "name": "AccountCreated",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "name": "value",
            "type": "bytes32"
          }
        ],
        "name": "DebugBytes32",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "name": "value",
            "type": "address"
          }
        ],
        "name": "DebugAddress",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "name": "value",
            "type": "string"
          }
        ],
        "name": "DebugString",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": false,
            "name": "rootNode",
            "type": "bytes32"
          },
          {
            "indexed": false,
            "name": "owner",
            "type": "address"
          }
        ],
        "name": "EnsRootNodeAdded",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": false,
            "name": "rootNode",
            "type": "bytes32"
          }
        ],
        "name": "EnsRootNodeVerified",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": false,
            "name": "rootNode",
            "type": "bytes32"
          }
        ],
        "name": "EnsRootNodeReleased",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "name": "node",
            "type": "bytes32"
          },
          {
            "indexed": false,
            "name": "addr",
            "type": "address"
          }
        ],
        "name": "AddrChanged",
        "type": "event"
      },
      {
        "constant": false,
        "inputs": [
          {
            "name": "_ensLabel",
            "type": "bytes32"
          },
          {
            "name": "_ensNode",
            "type": "bytes32"
          },
          {
            "name": "_refundGas",
            "type": "uint256"
          },
          {
            "name": "_signature",
            "type": "bytes"
          }
        ],
        "name": "createAccount",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
      },
      {
        "constant": false,
        "inputs": [
          {
            "name": "_accountId",
            "type": "uint256"
          },
          {
            "name": "_authKey",
            "type": "address"
          },
          {
            "name": "_ensLabel",
            "type": "bytes32"
          },
          {
            "name": "_ensNode",
            "type": "bytes32"
          },
          {
            "name": "_refundGas",
            "type": "uint256"
          }
        ],
        "name": "unsafeCreateAccount",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
      }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.5.2+commit.1df8f40c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"_rootNode\",\"type\":\"bytes32\"}],\"name\":\"verifyEnsRootNode\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_accountId\",\"type\":\"uint256\"},{\"name\":\"_authKey\",\"type\":\"address\"},{\"name\":\"_ensLabel\",\"type\":\"bytes32\"},{\"name\":\"_ensNode\",\"type\":\"bytes32\"},{\"name\":\"_refundGas\",\"type\":\"uint256\"}],\"name\":\"unsafeCreateAccount\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_node\",\"type\":\"bytes32\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_rootNode\",\"type\":\"bytes32\"}],\"name\":\"addEnsRootNode\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"ensRootNodes\",\"outputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"verified\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_rootNode\",\"type\":\"bytes32\"}],\"name\":\"releaseEnsRootNode\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_ensLabel\",\"type\":\"bytes32\"},{\"name\":\"_ensNode\",\"type\":\"bytes32\"},{\"name\":\"_refundGas\",\"type\":\"uint256\"},{\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"createAccount\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_node\",\"type\":\"bytes32\"},{\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_accountContractCode\",\"type\":\"bytes\"},{\"name\":\"_accountProxy\",\"type\":\"address\"},{\"name\":\"_ens\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AccountCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"DebugBytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"value\",\"type\":\"address\"}],\"name\":\"DebugAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"value\",\"type\":\"string\"}],\"name\":\"DebugString\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"rootNode\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"EnsRootNodeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"rootNode\",\"type\":\"bytes32\"}],\"name\":\"EnsRootNodeVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"rootNode\",\"type\":\"bytes32\"}],\"name\":\"EnsRootNodeReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"AddrChanged\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{},\"title\":\"Account Factory\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AccountFactory.sol\":\"AccountFactory\"},\"evmVersion\":\"constantinople\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AbstractAccount.sol\":{\"keccak256\":\"0xee122fc26e2e7cfb05ae10ee8d39a21acda129aa0c79b6f2f75d95b3debc6394\",\"urls\":[\"bzzr://c0ff596225e71717d055a666abef25307b01f5a8c81fe7545cbdf879bcc8d358\"]},\"/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AccountFactory.sol\":{\"keccak256\":\"0x1704df09c59566b802b5aa58b527f19d9200bb456aada267fc46cad7b4f2e140\",\"urls\":[\"bzzr://66fc2e42cae79fae73cfd09cb8b4069310dd645375ee38e86a18bd1d51e32169\"]},\"/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/contractCreator/ContractCreator.sol\":{\"keccak256\":\"0xe511516ecc5a66a1f0136ac33b84bd9499995170271c94a568fcb5b0a09f1962\",\"urls\":[\"bzzr://5cae282cfbffeafa2443631c847c1523864edba67540d2f9361b3570b59dc1ea\"]},\"/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/ens/AbstractENSAddrResolver.sol\":{\"keccak256\":\"0x24912e30ed126783e08bd32a6cab4dda23dbbf55bb7184374e2fcb26a73b51a4\",\"urls\":[\"bzzr://2936aea43cd8c0739bd75df62906ea65425f2f8f1ed86778c9aa6fca900988e2\"]},\"/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/ens/ENS.sol\":{\"keccak256\":\"0x86fe0fc55f457dafa83933a0325bc31a4a1120af4976d45f1c5e61bfa7689ef2\",\"urls\":[\"bzzr://4dd8701b27c60c98a6184a53c0898732a98f2241dcc0f1fa5239be400ef6de9b\"]},\"/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/ens/ENSMultiManager.sol\":{\"keccak256\":\"0x3a9b8621eb2e2fa8b24217bfa64ffca3abb7dae32f1448f68a238795c7ba79ad\",\"urls\":[\"bzzr://8ce0d0c494e41e20b8fcff3ec6865fd42af0cb4b92e923aae59c24b7ffc97be2\"]},\"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0xc19027309407a962d4d5f68ad3e5c31eab6ffb6b134dd4811fd0f3d93ffd618a\",\"urls\":[\"bzzr://0fd21475ca178757005990869d51729368cbebd5f0222656141b4fbe5e12a363\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\"]}},\"version\":1}",
    "bytecode": "0x60806040523480156200001157600080fd5b506040516200202c3803806200202c833981018060405260608110156200003757600080fd5b8101908080516401000000008111156200005057600080fd5b828101905060208101848111156200006757600080fd5b81518560018202830111640100000000821117156200008557600080fd5b5050929190602001805190602001909291908051906020019092919050505080838060009080519060200190620000be9291906200015a565b5080805190602001206001819055505080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000209565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200019d57805160ff1916838001178555620001ce565b82800160010185558215620001ce579182015b82811115620001cd578251825591602001919060010190620001b0565b5b509050620001dd9190620001e1565b5090565b6200020691905b8082111562000202576000816000905550600101620001e8565b5090565b90565b611e1380620002196000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80637ff4dfd01161005b5780637ff4dfd01461022c578063bb223ce4146102a5578063c6147fc8146102d3578063d5fa2b00146103ac57610088565b806304aa74cb146100f6578063188b954f146101245780633b3b57de14610190578063416ae7ff146101fe575b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f66616c6c6261636b20747269676765726564000000000000000000000000000081525060200191505060405180910390fd5b6101226004803603602081101561010c57600080fd5b81019080803590602001909291905050506103fa565b005b61018e600480360360a081101561013a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061061e565b005b6101bc600480360360208110156101a657600080fd5b81019080803590602001909291905050506106ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61022a6004803603602081101561021457600080fd5b81019080803590602001909291905050506106eb565b005b6102586004803603602081101561024257600080fd5b8101908080359060200190929190505050610969565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390f35b6102d1600480360360208110156102bb57600080fd5b81019080803590602001909291905050506109ba565b005b6103aa600480360360808110156102e957600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561032457600080fd5b82018360208201111561033657600080fd5b8035906020019184600183028401116401000000008311171561035857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610c74565b005b6103f8600480360360408110156103c257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e57565b005b3073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561048457600080fd5b505afa158015610498573d6000803e3d6000fd5b505050506040513d60208110156104ae57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601a81526020017f454e5320726f6f74206e6f6465206e6f742076657269666965640000000000008152509015156105b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561057957808201518184015260208101905061055e565b50505050905090810190601f1680156105a65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060016002600083815260200190815260200160002060000160146101000a81548160ff0219169083151502179055507f3c1e12021a68eb78df268e4fed874721bb38a7b278d9029db9a7b2056592baf2816040518082815260200191505060405180910390a150565b6000600260f81b8660405160200180837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101828152602001925050506040516020818303038152906040528051906020012090506106a68186868686611052565b505050505050565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561077557600080fd5b505afa158015610789573d6000803e3d6000fd5b505050506040513d602081101561079f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601c81526020017f53656e646572206973206e6f7420454e53206e6f6465206f776e6572000000008152509015156108a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561086a57808201518184015260208101905061084f565b50505050905090810190601f1680156108975780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50336002600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f44a96c3928a5c6ba670970f10868d09235a6b7a5770c2ebbf244e2228e546f5c8133604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16905082565b3373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601c81526020017f53656e646572206973206e6f7420454e53206e6f6465206f776e657200000000815250901515610afd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ac2578082015181840152602081019050610aa7565b50505050905090810190601f168015610aef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506002600082815260200190815260200160002060000160149054906101000a900460ff1615610be957600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635b0fc9c382336040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610bd057600080fd5b505af1158015610be4573d6000803e3d6000fd5b505050505b60026000828152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff021916905550507fc98be4d6a6f25550c39fb4e66d7ecd9ed01b3a569eff063b00e6608270d31f3d816040518082815260200191505060405180910390a150565b6000610d7082610d62306000357fffffffff00000000000000000000000000000000000000000000000000000000168989893a604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018581526020018481526020018381526020018281526020019650505050505050604051602081830303815290604052805190602001206114b9565b61151190919063ffffffff16565b90506000600160f81b82604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019150506040516020818303038152906040528051906020012060405160200180837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260010182815260200192505050604051602081830303815290604052805190602001209050610e4f8183888888611052565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601c81526020017f53656e646572206973206e6f7420454e53206e6f6465206f776e657200000000815250901515610f97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f5c578082015181840152602081019050610f41565b50505050905090810190601f168015610f895780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50806003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550817f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd282604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25050565b847f110cb96fe6c668b63c7e7dabd2d19d22d1965292a36646de1584ccf2d1d9341960405160405180910390a2600061108a86611617565b90506000821115611262578073ffffffffffffffffffffffffffffffffffffffff16633f579f42336110c53a866116db90919063ffffffff16565b60006040519080825280601f01601f1916602001820160405280156110f95781602001600182028038833980820191505090505b506040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611181578082015181840152602081019050611166565b50505050905090810190601f1680156111ae5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156111cf57600080fd5b505af11580156111e3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561120d57600080fd5b81019080805164010000000081111561122557600080fd5b8281019050602081018481111561123b57600080fd5b815185600182028301116401000000008211171561125857600080fd5b5050929190505050505b8073ffffffffffffffffffffffffffffffffffffffff16630473a90f8660016040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018215151515815260200192505050600060405180830381600087803b1580156112ee57600080fd5b505af1158015611302573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630473a90f600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018215151515815260200192505050600060405180830381600087803b1580156113b457600080fd5b505af11580156113c8573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16639565389e306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561144b57600080fd5b505af115801561145f573d6000803e3d6000fd5b5050505061146e848483611765565b8073ffffffffffffffffffffffffffffffffffffffff167f805996f252884581e2f74cf3d2b03564d5ec26ccc90850ae12653dc1b72d1fa260405160405180910390a2505050505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b6000604182511415156115275760009050611611565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561157b5760009350505050611611565b601b8160ff16141580156115935750601c8160ff1614155b156115a45760009350505050611611565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611601573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b6000606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116b15780601f10611686576101008083540402835291602001916116b1565b820191906000526020600020905b81548152906001019060200180831161169457829003601f168201915b505050505090506020810181518481836000f59350833b15156116d357600080fd5b505050919050565b6000808314156116ee576000905061175f565b6000828402905082848281151561170157fe5b0414151561175a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611dc76021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040805190810160405280601b81526020017f454e5320726f6f74206e6f646520646f65736e277420657869737400000000008152509015156118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561186f578082015181840152602081019050611854565b50505050905090810190601f16801561189c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506002600083815260200190815260200160002060000160149054906101000a900460ff166040805190810160405280601a81526020017f454e5320726f6f74206e6f6465206e6f742076657269666965640000000000008152509015156119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611972578082015181840152602081019050611957565b50505050905090810190601f16801561199f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600082846040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601781526020017f454e53206c6162656c20616c72656164792074616b656e000000000000000000815250901515611b22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ae7578082015181840152602081019050611acc565b50505050905090810190601f168015611b145780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59238486306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015611c2657600080fd5b505af1158015611c3a573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a82306040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015611ce757600080fd5b505af1158015611cfb573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635b0fc9c382846040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015611da857600080fd5b505af1158015611dbc573d6000803e3d6000fd5b505050505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a165627a7a723058206b10028be0ac2cb033120c5256e90b8c7d3dc15aacb57772d8d23b93dd05c6710029",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80637ff4dfd01161005b5780637ff4dfd01461022c578063bb223ce4146102a5578063c6147fc8146102d3578063d5fa2b00146103ac57610088565b806304aa74cb146100f6578063188b954f146101245780633b3b57de14610190578063416ae7ff146101fe575b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f66616c6c6261636b20747269676765726564000000000000000000000000000081525060200191505060405180910390fd5b6101226004803603602081101561010c57600080fd5b81019080803590602001909291905050506103fa565b005b61018e600480360360a081101561013a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061061e565b005b6101bc600480360360208110156101a657600080fd5b81019080803590602001909291905050506106ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61022a6004803603602081101561021457600080fd5b81019080803590602001909291905050506106eb565b005b6102586004803603602081101561024257600080fd5b8101908080359060200190929190505050610969565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390f35b6102d1600480360360208110156102bb57600080fd5b81019080803590602001909291905050506109ba565b005b6103aa600480360360808110156102e957600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561032457600080fd5b82018360208201111561033657600080fd5b8035906020019184600183028401116401000000008311171561035857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610c74565b005b6103f8600480360360408110156103c257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e57565b005b3073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561048457600080fd5b505afa158015610498573d6000803e3d6000fd5b505050506040513d60208110156104ae57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601a81526020017f454e5320726f6f74206e6f6465206e6f742076657269666965640000000000008152509015156105b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561057957808201518184015260208101905061055e565b50505050905090810190601f1680156105a65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060016002600083815260200190815260200160002060000160146101000a81548160ff0219169083151502179055507f3c1e12021a68eb78df268e4fed874721bb38a7b278d9029db9a7b2056592baf2816040518082815260200191505060405180910390a150565b6000600260f81b8660405160200180837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101828152602001925050506040516020818303038152906040528051906020012090506106a68186868686611052565b505050505050565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561077557600080fd5b505afa158015610789573d6000803e3d6000fd5b505050506040513d602081101561079f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601c81526020017f53656e646572206973206e6f7420454e53206e6f6465206f776e6572000000008152509015156108a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561086a57808201518184015260208101905061084f565b50505050905090810190601f1680156108975780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50336002600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f44a96c3928a5c6ba670970f10868d09235a6b7a5770c2ebbf244e2228e546f5c8133604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16905082565b3373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601c81526020017f53656e646572206973206e6f7420454e53206e6f6465206f776e657200000000815250901515610afd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ac2578082015181840152602081019050610aa7565b50505050905090810190601f168015610aef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506002600082815260200190815260200160002060000160149054906101000a900460ff1615610be957600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635b0fc9c382336040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610bd057600080fd5b505af1158015610be4573d6000803e3d6000fd5b505050505b60026000828152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff021916905550507fc98be4d6a6f25550c39fb4e66d7ecd9ed01b3a569eff063b00e6608270d31f3d816040518082815260200191505060405180910390a150565b6000610d7082610d62306000357fffffffff00000000000000000000000000000000000000000000000000000000168989893a604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018581526020018481526020018381526020018281526020019650505050505050604051602081830303815290604052805190602001206114b9565b61151190919063ffffffff16565b90506000600160f81b82604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019150506040516020818303038152906040528051906020012060405160200180837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260010182815260200192505050604051602081830303815290604052805190602001209050610e4f8183888888611052565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601c81526020017f53656e646572206973206e6f7420454e53206e6f6465206f776e657200000000815250901515610f97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f5c578082015181840152602081019050610f41565b50505050905090810190601f168015610f895780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50806003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550817f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd282604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25050565b847f110cb96fe6c668b63c7e7dabd2d19d22d1965292a36646de1584ccf2d1d9341960405160405180910390a2600061108a86611617565b90506000821115611262578073ffffffffffffffffffffffffffffffffffffffff16633f579f42336110c53a866116db90919063ffffffff16565b60006040519080825280601f01601f1916602001820160405280156110f95781602001600182028038833980820191505090505b506040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611181578082015181840152602081019050611166565b50505050905090810190601f1680156111ae5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156111cf57600080fd5b505af11580156111e3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561120d57600080fd5b81019080805164010000000081111561122557600080fd5b8281019050602081018481111561123b57600080fd5b815185600182028301116401000000008211171561125857600080fd5b5050929190505050505b8073ffffffffffffffffffffffffffffffffffffffff16630473a90f8660016040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018215151515815260200192505050600060405180830381600087803b1580156112ee57600080fd5b505af1158015611302573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630473a90f600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018215151515815260200192505050600060405180830381600087803b1580156113b457600080fd5b505af11580156113c8573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16639565389e306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561144b57600080fd5b505af115801561145f573d6000803e3d6000fd5b5050505061146e848483611765565b8073ffffffffffffffffffffffffffffffffffffffff167f805996f252884581e2f74cf3d2b03564d5ec26ccc90850ae12653dc1b72d1fa260405160405180910390a2505050505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b6000604182511415156115275760009050611611565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561157b5760009350505050611611565b601b8160ff16141580156115935750601c8160ff1614155b156115a45760009350505050611611565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611601573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b6000606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116b15780601f10611686576101008083540402835291602001916116b1565b820191906000526020600020905b81548152906001019060200180831161169457829003601f168201915b505050505090506020810181518481836000f59350833b15156116d357600080fd5b505050919050565b6000808314156116ee576000905061175f565b6000828402905082848281151561170157fe5b0414151561175a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611dc76021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040805190810160405280601b81526020017f454e5320726f6f74206e6f646520646f65736e277420657869737400000000008152509015156118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561186f578082015181840152602081019050611854565b50505050905090810190601f16801561189c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506002600083815260200190815260200160002060000160149054906101000a900460ff166040805190810160405280601a81526020017f454e5320726f6f74206e6f6465206e6f742076657269666965640000000000008152509015156119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611972578082015181840152602081019050611957565b50505050905090810190601f16801561199f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600082846040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601781526020017f454e53206c6162656c20616c72656164792074616b656e000000000000000000815250901515611b22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ae7578082015181840152602081019050611acc565b50505050905090810190601f168015611b145780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59238486306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015611c2657600080fd5b505af1158015611c3a573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a82306040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015611ce757600080fd5b505af1158015611cfb573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635b0fc9c382846040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015611da857600080fd5b505af1158015611dbc573d6000803e3d6000fd5b505050505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a165627a7a723058206b10028be0ac2cb033120c5256e90b8c7d3dc15aacb57772d8d23b93dd05c6710029",
    "sourceMap": "312:2461:3:-;;;626:216;8:9:-1;5:2;;;30:1;27;20:12;5:2;626:216:3;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;626:216:3;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;626:216:3;;;;;;;;;;;;;;;;;;;;;;;;;;788:4;746:20;227:13:6;212:12;:28;;;;;;;;;;;;:::i;:::-;;275:13;265:24;;;;;;246:16;:43;;;;157:137;882:4:9;872:3;;:15;;;;;;;;;;;;;;;;;;831:61;824:13:3;809:12;;:28;;;;;;;;;;;;;;;;;;626:216;;;312:2461;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
    "deployedSourceMap": "312:2461:3:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;312:2461:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2738:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1476:244:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1476:244:9;;;;;;;;;;;;;;;;;:::i;:::-;;1607:402:3;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1607:402:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;896:100:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;896:100:9;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1229:243;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1229:243:9;;;;;;;;;;;;;;;;;:::i;:::-;;699:51;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;699:51:9;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1724:329;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1724:329:9;;;;;;;;;;;;;;;;;:::i;:::-;;980:623:3;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;980:623:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;980:623:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;980:623:3;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;980:623:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;980:623:3;;;;;;;;;;;;;;;:::i;:::-;;1000:225:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1000:225:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1476:244;1582:4;1550:37;;:3;;;;;;;;;;;:9;;;1560;1550:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1550:20:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1550:20:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1550:20:9;;;;;;;;;;;;;;;;:37;;;1595:26;;;;;;;;;;;;;;;;;;1535:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1535:92:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1669:4;1634:12;:23;1647:9;1634:23;;;;;;;;;;;:32;;;:39;;;;;;;;;;;;;;;;;;1685:30;1705:9;1685:30;;;;;;;;;;;;;;;;;;1476:244;:::o;1607:402:3:-;1774:13;584:4;1833:30;;1873:10;1807:84;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1807:84:3;;;1790:107;;;;;;1774:123;;1904:100;1926:5;1939:8;1955:9;1972:8;1988:10;1904:14;:100::i;:::-;1607:402;;;;;;:::o;896:100:9:-;946:7;968:16;:23;985:5;968:23;;;;;;;;;;;;;;;;;;;;;961:30;;896:100;;;:::o;1229:243::-;1324:10;1300:34;;:3;;;;;;;;;;;:9;;;1310;1300:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1300:20:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1300:20:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1300:20:9;;;;;;;;;;;;;;;;:34;;;1342:19;;;;;;;;;;;;;;;;;;1285:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1285:82:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1406:10;1374:12;:23;1387:9;1374:23;;;;;;;;;;;:29;;;:42;;;;;;;;;;;;;;;;;;1428:39;1445:9;1456:10;1428:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;1229:243;:::o;699:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1724:329::-;1832:10;1799:43;;:12;:23;1812:9;1799:23;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;1850:19;;;;;;;;;;;;;;;;;;1784:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1784:91:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1886:12;:23;1899:9;1886:23;;;;;;;;;;;:32;;;;;;;;;;;;1882:88;;;1928:3;;;;;;;;;;;:12;;;1941:9;1952:10;1928:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1928:35:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1928:35:9;;;;1882:88;1983:12;:23;1996:9;1983:23;;;;;;;;;;;;1976:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2018;2038:9;2018:30;;;;;;;;;;;;;;;;;;1724:329;:::o;980:623:3:-;1124:16;1143:210;1342:10;1143:190;1194:4;1209:7;;;;1226:9;1245:8;1263:10;1283:11;1160:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1160:142:3;;;1143:165;;;;;;:188;:190::i;:::-;:198;;:210;;;;:::i;:::-;1124:229;;1360:13;527:4;1412:23;;1472:8;1455:26;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1455:26:3;;;1445:37;;;;;;1386:104;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1386:104:3;;;1376:115;;;;;;1360:131;;1498:100;1520:5;1533:8;1549:9;1566:8;1582:10;1498:14;:100::i;:::-;980:623;;;;;;:::o;1000:225:9:-;1102:10;1075:37;;:16;:23;1092:5;1075:23;;;;;;;;;;;;;;;;;;;;;:37;;;1120:19;;;;;;;;;;;;;;;;;;1060:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1060:85:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1178:5;1152:16;:23;1169:5;1152:23;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;1207:5;1195:25;1214:5;1195:25;;;;;;;;;;;;;;;;;;;;;;1000:225;;:::o;2013:695:3:-;2189:5;2176:19;;;;;;;;;;2227:24;2270:22;2286:5;2270:15;:22::i;:::-;2227:66;;2317:1;2304:10;:14;2300:149;;;2328:8;:27;;;2365:10;2385:27;2400:11;2385:10;:14;;:27;;;;:::i;:::-;2432:1;2422:12;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;2422:12:3;;;;2328:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2328:114:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2328:114:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2328:114:3;;;;;;39:16:-1;36:1;17:17;2:54;2328:114:3;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2328:114:3;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;2328:114:3;;;;;;;2300:149;2455:8;:19;;;2475:8;2485:4;2455:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2455:35:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2455:35:3;;;;2496:8;:19;;;2516:12;;;;;;;;;;;2530:4;2496:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2496:39:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2496:39:3;;;;2541:8;:22;;;2572:4;2541:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2541:37:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2541:37:3;;;;2585:73;2602:9;2619:8;2643;2585:9;:73::i;:::-;2693:8;2670:33;;;;;;;;;;;;2013:695;;;;;;:::o;3386:265:12:-;3455:7;3638:4;3585:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3585:58:12;;;3575:69;;;;;;3568:76;;3386:265;;;:::o;1229:1891::-;1307:7;1388:2;1368:9;:16;:22;;1364:72;;;1422:1;1406:19;;;;1364:72;1502:9;1521;1540:7;1786:4;1775:9;1771:20;1765:27;1760:32;;1831:4;1820:9;1816:20;1810:27;1805:32;;1884:4;1873:9;1869:20;1863:27;1860:1;1855:36;1850:41;;2802:66;2797:1;2789:10;;:79;2785:127;;;2899:1;2884:17;;;;;;;2785:127;2931:2;2926:1;:7;;;;:18;;;;;2942:2;2937:1;:7;;;;2926:18;2922:66;;;2975:1;2960:17;;;;;;;2922:66;3089:24;3099:4;3105:1;3108;3111;3089:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3089:24:12;;;;;;;;3082:31;;;;;1229:1891;;;;;:::o;298:325:6:-;356:17;381:26;410:12;381:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;474:4;459:13;455:24;501:13;495:20;552:5;549:1;546;543;535:23;522:36;;587:9;575:22;568:30;565:2;;;610:1;607;600:12;565:2;438:181;;;;;;:::o;1693:458:13:-;1751:7;1996:1;1991;:6;1987:45;;;2020:1;2013:8;;;;1987:45;2042:9;2058:1;2054;:5;2042:17;;2086:1;2081;2077;:5;;;;;;;;:10;2069:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2143:1;2136:8;;;1693:458;;;;;:::o;2057:618:9:-;2197:1;2156:43;;:12;:23;2169:9;2156:23;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;;2207:26;;;;;;;;;;;;;;;;;;2141:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2141:98:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2260:12;:23;2273:9;2260:23;;;;;;;;;;;:32;;;;;;;;;;;;2300:26;;;;;;;;;;;;;;;;;;2245:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2245:87:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2339:13;2382:9;2393:6;2365:35;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2365:35:9;;;2355:46;;;;;;2339:62;;2458:1;2423:37;;:16;:23;2440:5;2423:23;;;;;;;;;;;;;;;;;;;;;:37;;;2468:23;;;;;;;;;;;;;;;;;;2408:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2408:89:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2530:5;2504:16;:23;2521:5;2504:23;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;2542:3;;;;;;;;;;;:19;;;2562:9;2573:6;2589:4;2542:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2542:53:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2542:53:9;;;;2601:3;;;;;;;;;;;:15;;;2617:5;2632:4;2601:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2601:37:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2601:37:9;;;;2644:3;;;;;;;;;;;:12;;;2657:5;2664;2644:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2644:26:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2644:26:9;;;;2057:618;;;;:::o",
    "source": "pragma solidity ^0.5.0;\n\nimport 'openzeppelin-solidity/contracts/cryptography/ECDSA.sol';\nimport 'openzeppelin-solidity/contracts/math/SafeMath.sol';\nimport \"../contractCreator/ContractCreator.sol\";\nimport \"../ens/ENSMultiManager.sol\";\nimport \"../account/AbstractAccount.sol\";\n\n/**\n * @title Account Factory\n */\ncontract AccountFactory is ContractCreator, ENSMultiManager {\n\n  using ECDSA for bytes32;\n  using SafeMath for uint256;\n\n  event AccountCreated(address indexed account);\n\n  bytes1 constant ACCOUNT_SALT_MSG_PREFIX = 0x01;\n  bytes1 constant ACCOUNT_SALT_MSG_PREFIX_UNSAFE = 0x02;\n\n  address private accountProxy;\n\n  constructor(\n    bytes memory _accountContractCode,\n    address _accountProxy,\n    address _ens\n  )\n    ContractCreator(_accountContractCode)\n    ENSMultiManager(_ens) public\n  {\n    accountProxy = _accountProxy;\n  }\n\n  event DebugBytes32(bytes32 indexed value);\n  event DebugAddress(address indexed value);\n  event DebugString(string indexed value);\n\n  function createAccount(\n    bytes32 _ensLabel,\n    bytes32 _ensNode,\n    uint256 _refundGas,\n    bytes memory _signature\n  )\n    public\n  {\n    address _authKey = keccak256(\n      abi.encodePacked(\n        address(this),\n        msg.sig,\n        _ensLabel,\n        _ensNode,\n        _refundGas,\n        tx.gasprice\n      )\n    ).toEthSignedMessageHash().recover(_signature);\n\n    bytes32 _salt = keccak256(abi.encodePacked(\n        ACCOUNT_SALT_MSG_PREFIX,\n        keccak256(abi.encodePacked(_authKey))\n      ));\n\n    _createAccount(\n      _salt,\n      _authKey,\n      _ensLabel,\n      _ensNode,\n      _refundGas\n    );\n  }\n\n  function unsafeCreateAccount(\n    uint256 _accountId,\n    address _authKey,\n    bytes32 _ensLabel,\n    bytes32 _ensNode,\n    uint256 _refundGas\n  )\n    public\n  {\n    bytes32 _salt = keccak256(\n      abi.encodePacked(\n        ACCOUNT_SALT_MSG_PREFIX_UNSAFE,\n        _accountId\n      )\n    );\n\n    _createAccount(\n      _salt,\n      _authKey,\n      _ensLabel,\n      _ensNode,\n      _refundGas\n    );\n  }\n\n  function _createAccount(\n    bytes32 _salt,\n    address _authKey,\n    bytes32 _ensLabel,\n    bytes32 _ensNode,\n    uint256 _refundGas\n  )\n    private\n  {\n    emit DebugBytes32(_salt);\n    // initialize account\n    AbstractAccount _account = AbstractAccount(_createContract(_salt));\n\n    if (_refundGas > 0) {\n      _account.executeTransaction(\n        msg.sender,\n        _refundGas.mul(tx.gasprice),\n        new bytes(0)\n      );\n    }\n\n    _account.addAuthKey(_authKey, true);\n    _account.addAuthKey(accountProxy, true);\n    _account.removeAuthKey(address(this));\n\n    _register(\n      _ensLabel,\n      _ensNode,\n      address(_account)\n    );\n\n    emit AccountCreated(address(_account));\n  }\n\n  function() external {\n    revert(\"fallback triggered\");\n  }\n}\n",
    "sourcePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AccountFactory.sol",
    "ast": {
      "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AccountFactory.sol",
      "exportedSymbols": {
        "AccountFactory": [
          603
        ]
      },
      "id": 604,
      "nodeType": "SourceUnit",
      "nodes": [
        {
          "id": 362,
          "literals": [
            "solidity",
            "^",
            "0.5",
            ".0"
          ],
          "nodeType": "PragmaDirective",
          "src": "0:23:3"
        },
        {
          "absolutePath": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
          "file": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
          "id": 363,
          "nodeType": "ImportDirective",
          "scope": 604,
          "sourceUnit": 1692,
          "src": "25:64:3",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
          "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
          "id": 364,
          "nodeType": "ImportDirective",
          "scope": 604,
          "sourceUnit": 1825,
          "src": "90:59:3",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/contractCreator/ContractCreator.sol",
          "file": "../contractCreator/ContractCreator.sol",
          "id": 365,
          "nodeType": "ImportDirective",
          "scope": 604,
          "sourceUnit": 990,
          "src": "150:48:3",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/ens/ENSMultiManager.sol",
          "file": "../ens/ENSMultiManager.sol",
          "id": 366,
          "nodeType": "ImportDirective",
          "scope": 604,
          "sourceUnit": 1377,
          "src": "199:36:3",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AbstractAccount.sol",
          "file": "../account/AbstractAccount.sol",
          "id": 367,
          "nodeType": "ImportDirective",
          "scope": 604,
          "sourceUnit": 127,
          "src": "236:40:3",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "baseContracts": [
            {
              "arguments": null,
              "baseName": {
                "contractScope": null,
                "id": 368,
                "name": "ContractCreator",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 989,
                "src": "339:15:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ContractCreator_$989",
                  "typeString": "contract ContractCreator"
                }
              },
              "id": 369,
              "nodeType": "InheritanceSpecifier",
              "src": "339:15:3"
            },
            {
              "arguments": null,
              "baseName": {
                "contractScope": null,
                "id": 370,
                "name": "ENSMultiManager",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1376,
                "src": "356:15:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ENSMultiManager_$1376",
                  "typeString": "contract ENSMultiManager"
                }
              },
              "id": 371,
              "nodeType": "InheritanceSpecifier",
              "src": "356:15:3"
            }
          ],
          "contractDependencies": [
            989,
            1012,
            1376
          ],
          "contractKind": "contract",
          "documentation": "@title Account Factory",
          "fullyImplemented": true,
          "id": 603,
          "linearizedBaseContracts": [
            603,
            1376,
            1012,
            989
          ],
          "name": "AccountFactory",
          "nodeType": "ContractDefinition",
          "nodes": [
            {
              "id": 374,
              "libraryName": {
                "contractScope": null,
                "id": 372,
                "name": "ECDSA",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1691,
                "src": "383:5:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ECDSA_$1691",
                  "typeString": "library ECDSA"
                }
              },
              "nodeType": "UsingForDirective",
              "src": "377:24:3",
              "typeName": {
                "id": 373,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "393:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            {
              "id": 377,
              "libraryName": {
                "contractScope": null,
                "id": 375,
                "name": "SafeMath",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1824,
                "src": "410:8:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_SafeMath_$1824",
                  "typeString": "library SafeMath"
                }
              },
              "nodeType": "UsingForDirective",
              "src": "404:27:3",
              "typeName": {
                "id": 376,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "423:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            {
              "anonymous": false,
              "documentation": null,
              "id": 381,
              "name": "AccountCreated",
              "nodeType": "EventDefinition",
              "parameters": {
                "id": 380,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 379,
                    "indexed": true,
                    "name": "account",
                    "nodeType": "VariableDeclaration",
                    "scope": 381,
                    "src": "456:23:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 378,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "456:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "455:25:3"
              },
              "src": "435:46:3"
            },
            {
              "constant": true,
              "id": 384,
              "name": "ACCOUNT_SALT_MSG_PREFIX",
              "nodeType": "VariableDeclaration",
              "scope": 603,
              "src": "485:46:3",
              "stateVariable": true,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes1",
                "typeString": "bytes1"
              },
              "typeName": {
                "id": 382,
                "name": "bytes1",
                "nodeType": "ElementaryTypeName",
                "src": "485:6:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes1",
                  "typeString": "bytes1"
                }
              },
              "value": {
                "argumentTypes": null,
                "hexValue": "30783031",
                "id": 383,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "527:4:3",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1_by_1",
                  "typeString": "int_const 1"
                },
                "value": "0x01"
              },
              "visibility": "internal"
            },
            {
              "constant": true,
              "id": 387,
              "name": "ACCOUNT_SALT_MSG_PREFIX_UNSAFE",
              "nodeType": "VariableDeclaration",
              "scope": 603,
              "src": "535:53:3",
              "stateVariable": true,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes1",
                "typeString": "bytes1"
              },
              "typeName": {
                "id": 385,
                "name": "bytes1",
                "nodeType": "ElementaryTypeName",
                "src": "535:6:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes1",
                  "typeString": "bytes1"
                }
              },
              "value": {
                "argumentTypes": null,
                "hexValue": "30783032",
                "id": 386,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "584:4:3",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_2_by_1",
                  "typeString": "int_const 2"
                },
                "value": "0x02"
              },
              "visibility": "internal"
            },
            {
              "constant": false,
              "id": 389,
              "name": "accountProxy",
              "nodeType": "VariableDeclaration",
              "scope": 603,
              "src": "593:28:3",
              "stateVariable": true,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              },
              "typeName": {
                "id": 388,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "593:7:3",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "value": null,
              "visibility": "private"
            },
            {
              "body": {
                "id": 408,
                "nodeType": "Block",
                "src": "803:39:3",
                "statements": [
                  {
                    "expression": {
                      "argumentTypes": null,
                      "id": 406,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 404,
                        "name": "accountProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 389,
                        "src": "809:12:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "id": 405,
                        "name": "_accountProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 393,
                        "src": "824:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "809:28:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 407,
                    "nodeType": "ExpressionStatement",
                    "src": "809:28:3"
                  }
                ]
              },
              "documentation": null,
              "id": 409,
              "implemented": true,
              "kind": "constructor",
              "modifiers": [
                {
                  "arguments": [
                    {
                      "argumentTypes": null,
                      "id": 398,
                      "name": "_accountContractCode",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 391,
                      "src": "746:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    }
                  ],
                  "id": 399,
                  "modifierName": {
                    "argumentTypes": null,
                    "id": 397,
                    "name": "ContractCreator",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 989,
                    "src": "730:15:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_contract$_ContractCreator_$989_$",
                      "typeString": "type(contract ContractCreator)"
                    }
                  },
                  "nodeType": "ModifierInvocation",
                  "src": "730:37:3"
                },
                {
                  "arguments": [
                    {
                      "argumentTypes": null,
                      "id": 401,
                      "name": "_ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 395,
                      "src": "788:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  ],
                  "id": 402,
                  "modifierName": {
                    "argumentTypes": null,
                    "id": 400,
                    "name": "ENSMultiManager",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1376,
                    "src": "772:15:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_contract$_ENSMultiManager_$1376_$",
                      "typeString": "type(contract ENSMultiManager)"
                    }
                  },
                  "nodeType": "ModifierInvocation",
                  "src": "772:21:3"
                }
              ],
              "name": "",
              "nodeType": "FunctionDefinition",
              "parameters": {
                "id": 396,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 391,
                    "name": "_accountContractCode",
                    "nodeType": "VariableDeclaration",
                    "scope": 409,
                    "src": "643:33:3",
                    "stateVariable": false,
                    "storageLocation": "memory",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes"
                    },
                    "typeName": {
                      "id": 390,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "643:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 393,
                    "name": "_accountProxy",
                    "nodeType": "VariableDeclaration",
                    "scope": 409,
                    "src": "682:21:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 392,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "682:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 395,
                    "name": "_ens",
                    "nodeType": "VariableDeclaration",
                    "scope": 409,
                    "src": "709:12:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 394,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "709:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "637:88:3"
              },
              "returnParameters": {
                "id": 403,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "803:0:3"
              },
              "scope": 603,
              "src": "626:216:3",
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            {
              "anonymous": false,
              "documentation": null,
              "id": 413,
              "name": "DebugBytes32",
              "nodeType": "EventDefinition",
              "parameters": {
                "id": 412,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 411,
                    "indexed": true,
                    "name": "value",
                    "nodeType": "VariableDeclaration",
                    "scope": 413,
                    "src": "865:21:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 410,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "865:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "864:23:3"
              },
              "src": "846:42:3"
            },
            {
              "anonymous": false,
              "documentation": null,
              "id": 417,
              "name": "DebugAddress",
              "nodeType": "EventDefinition",
              "parameters": {
                "id": 416,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 415,
                    "indexed": true,
                    "name": "value",
                    "nodeType": "VariableDeclaration",
                    "scope": 417,
                    "src": "910:21:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 414,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "910:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "909:23:3"
              },
              "src": "891:42:3"
            },
            {
              "anonymous": false,
              "documentation": null,
              "id": 421,
              "name": "DebugString",
              "nodeType": "EventDefinition",
              "parameters": {
                "id": 420,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 419,
                    "indexed": true,
                    "name": "value",
                    "nodeType": "VariableDeclaration",
                    "scope": 421,
                    "src": "954:20:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string"
                    },
                    "typeName": {
                      "id": 418,
                      "name": "string",
                      "nodeType": "ElementaryTypeName",
                      "src": "954:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "953:22:3"
              },
              "src": "936:40:3"
            },
            {
              "body": {
                "id": 478,
                "nodeType": "Block",
                "src": "1118:485:3",
                "statements": [
                  {
                    "assignments": [
                      433
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 433,
                        "name": "_authKey",
                        "nodeType": "VariableDeclaration",
                        "scope": 478,
                        "src": "1124:16:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 432,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1124:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 454,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 452,
                          "name": "_signature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 429,
                          "src": "1342:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 438,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1870,
                                          "src": "1194:4:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_AccountFactory_$603",
                                            "typeString": "contract AccountFactory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_AccountFactory_$603",
                                            "typeString": "contract AccountFactory"
                                          }
                                        ],
                                        "id": 437,
                                        "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": 439,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1186:13:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 440,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1839,
                                        "src": "1209:3:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 441,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sig",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "1209:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 442,
                                      "name": "_ensLabel",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 423,
                                      "src": "1226:9:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 443,
                                      "name": "_ensNode",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 425,
                                      "src": "1245:8:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 444,
                                      "name": "_refundGas",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 427,
                                      "src": "1263:10:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 445,
                                        "name": "tx",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1851,
                                        "src": "1283:2:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_transaction",
                                          "typeString": "tx"
                                        }
                                      },
                                      "id": 446,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "gasprice",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "1283:11:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 435,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1826,
                                      "src": "1160:3:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 436,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "encodePacked",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "1160:16:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 447,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1160:142:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 434,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1833,
                                "src": "1143:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 448,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1143:165:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "id": 449,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toEthSignedMessageHash",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1690,
                            "src": "1143:188:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                              "typeString": "function (bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1143:190:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 451,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recover",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1674,
                        "src": "1143:198:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes memory) pure returns (address)"
                        }
                      },
                      "id": 453,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1143:210:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1124:229:3"
                  },
                  {
                    "assignments": [
                      456
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 456,
                        "name": "_salt",
                        "nodeType": "VariableDeclaration",
                        "scope": 478,
                        "src": "1360:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 455,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1360:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 469,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 460,
                              "name": "ACCOUNT_SALT_MSG_PREFIX",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 384,
                              "src": "1412:23:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 464,
                                      "name": "_authKey",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 433,
                                      "src": "1472:8:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 462,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1826,
                                      "src": "1455:3:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 463,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "encodePacked",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "1455:16:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 465,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1455:26:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 461,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1833,
                                "src": "1445:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 466,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1445:37:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 458,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1826,
                              "src": "1386:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 459,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1386:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 467,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1386:104:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 457,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1833,
                        "src": "1376:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 468,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1376:115:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1360:131:3"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 471,
                          "name": "_salt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 456,
                          "src": "1520:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 472,
                          "name": "_authKey",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 433,
                          "src": "1533:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 473,
                          "name": "_ensLabel",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 423,
                          "src": "1549:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 474,
                          "name": "_ensNode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 425,
                          "src": "1566:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 475,
                          "name": "_refundGas",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 427,
                          "src": "1582:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 470,
                        "name": "_createAccount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 594,
                        "src": "1498:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$",
                          "typeString": "function (bytes32,address,bytes32,bytes32,uint256)"
                        }
                      },
                      "id": 476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1498:100:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 477,
                    "nodeType": "ExpressionStatement",
                    "src": "1498:100:3"
                  }
                ]
              },
              "documentation": null,
              "id": 479,
              "implemented": true,
              "kind": "function",
              "modifiers": [],
              "name": "createAccount",
              "nodeType": "FunctionDefinition",
              "parameters": {
                "id": 430,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 423,
                    "name": "_ensLabel",
                    "nodeType": "VariableDeclaration",
                    "scope": 479,
                    "src": "1008:17:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 422,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1008:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 425,
                    "name": "_ensNode",
                    "nodeType": "VariableDeclaration",
                    "scope": 479,
                    "src": "1031:16:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 424,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1031:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 427,
                    "name": "_refundGas",
                    "nodeType": "VariableDeclaration",
                    "scope": 479,
                    "src": "1053:18:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 426,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1053:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 429,
                    "name": "_signature",
                    "nodeType": "VariableDeclaration",
                    "scope": 479,
                    "src": "1077:23:3",
                    "stateVariable": false,
                    "storageLocation": "memory",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes"
                    },
                    "typeName": {
                      "id": 428,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "1077:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "1002:102:3"
              },
              "returnParameters": {
                "id": 431,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "1118:0:3"
              },
              "scope": 603,
              "src": "980:623:3",
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            {
              "body": {
                "id": 510,
                "nodeType": "Block",
                "src": "1768:241:3",
                "statements": [
                  {
                    "assignments": [
                      493
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 493,
                        "name": "_salt",
                        "nodeType": "VariableDeclaration",
                        "scope": 510,
                        "src": "1774:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 492,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1774:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 501,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 497,
                              "name": "ACCOUNT_SALT_MSG_PREFIX_UNSAFE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 387,
                              "src": "1833:30:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 498,
                              "name": "_accountId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 481,
                              "src": "1873:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 495,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1826,
                              "src": "1807:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 496,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1807:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1807:84:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 494,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1833,
                        "src": "1790:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1790:107:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1774:123:3"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 503,
                          "name": "_salt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 493,
                          "src": "1926:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 504,
                          "name": "_authKey",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 483,
                          "src": "1939:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 505,
                          "name": "_ensLabel",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 485,
                          "src": "1955:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 506,
                          "name": "_ensNode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 487,
                          "src": "1972:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 507,
                          "name": "_refundGas",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 489,
                          "src": "1988:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 502,
                        "name": "_createAccount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 594,
                        "src": "1904:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$",
                          "typeString": "function (bytes32,address,bytes32,bytes32,uint256)"
                        }
                      },
                      "id": 508,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1904:100:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 509,
                    "nodeType": "ExpressionStatement",
                    "src": "1904:100:3"
                  }
                ]
              },
              "documentation": null,
              "id": 511,
              "implemented": true,
              "kind": "function",
              "modifiers": [],
              "name": "unsafeCreateAccount",
              "nodeType": "FunctionDefinition",
              "parameters": {
                "id": 490,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 481,
                    "name": "_accountId",
                    "nodeType": "VariableDeclaration",
                    "scope": 511,
                    "src": "1641:18:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 480,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1641:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 483,
                    "name": "_authKey",
                    "nodeType": "VariableDeclaration",
                    "scope": 511,
                    "src": "1665:16:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 482,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1665:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 485,
                    "name": "_ensLabel",
                    "nodeType": "VariableDeclaration",
                    "scope": 511,
                    "src": "1687:17:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 484,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1687:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 487,
                    "name": "_ensNode",
                    "nodeType": "VariableDeclaration",
                    "scope": 511,
                    "src": "1710:16:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 486,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1710:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 489,
                    "name": "_refundGas",
                    "nodeType": "VariableDeclaration",
                    "scope": 511,
                    "src": "1732:18:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 488,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1732:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "1635:119:3"
              },
              "returnParameters": {
                "id": 491,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "1768:0:3"
              },
              "scope": 603,
              "src": "1607:402:3",
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            {
              "body": {
                "id": 593,
                "nodeType": "Block",
                "src": "2165:543:3",
                "statements": [
                  {
                    "eventCall": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 525,
                          "name": "_salt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 513,
                          "src": "2189:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 524,
                        "name": "DebugBytes32",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 413,
                        "src": "2176:12:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                          "typeString": "function (bytes32)"
                        }
                      },
                      "id": 526,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2176:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 527,
                    "nodeType": "EmitStatement",
                    "src": "2171:24:3"
                  },
                  {
                    "assignments": [
                      529
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 529,
                        "name": "_account",
                        "nodeType": "VariableDeclaration",
                        "scope": 593,
                        "src": "2227:24:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AbstractAccount_$126",
                          "typeString": "contract AbstractAccount"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 528,
                          "name": "AbstractAccount",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 126,
                          "src": "2227:15:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_AbstractAccount_$126",
                            "typeString": "contract AbstractAccount"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 535,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 532,
                              "name": "_salt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 513,
                              "src": "2286:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 531,
                            "name": "_createContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 954,
                            "src": "2270:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) returns (address)"
                            }
                          },
                          "id": 533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2270:22:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 530,
                        "name": "AbstractAccount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 126,
                        "src": "2254:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_AbstractAccount_$126_$",
                          "typeString": "type(contract AbstractAccount)"
                        }
                      },
                      "id": 534,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2254:39:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_AbstractAccount_$126",
                        "typeString": "contract AbstractAccount"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2227:66:3"
                  },
                  {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 538,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 536,
                        "name": "_refundGas",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 521,
                        "src": "2304:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 537,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2317:1:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2304:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": null,
                    "id": 556,
                    "nodeType": "IfStatement",
                    "src": "2300:149:3",
                    "trueBody": {
                      "id": 555,
                      "nodeType": "Block",
                      "src": "2320:129:3",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 542,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1839,
                                  "src": "2365:3:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 543,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "2365:10:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 546,
                                      "name": "tx",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1851,
                                      "src": "2400:2:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_transaction",
                                        "typeString": "tx"
                                      }
                                    },
                                    "id": 547,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "gasprice",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "2400:11:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 544,
                                    "name": "_refundGas",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 521,
                                    "src": "2385:10:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 545,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1777,
                                  "src": "2385:14:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 548,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2385:27:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 551,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2432: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": 550,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "NewExpression",
                                  "src": "2422:9:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                                    "typeString": "function (uint256) pure returns (bytes memory)"
                                  },
                                  "typeName": {
                                    "id": 549,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2426:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  }
                                },
                                "id": 552,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2422:12:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 539,
                                "name": "_account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 529,
                                "src": "2328:8:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_AbstractAccount_$126",
                                  "typeString": "contract AbstractAccount"
                                }
                              },
                              "id": 541,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "executeTransaction",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 125,
                              "src": "2328:27:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_address_payable_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (address payable,uint256,bytes memory) external returns (bytes memory)"
                              }
                            },
                            "id": 553,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2328:114:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 554,
                          "nodeType": "ExpressionStatement",
                          "src": "2328:114:3"
                        }
                      ]
                    }
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 560,
                          "name": "_authKey",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 515,
                          "src": "2475:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 561,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2485:4:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 557,
                          "name": "_account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 529,
                          "src": "2455:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_AbstractAccount_$126",
                            "typeString": "contract AbstractAccount"
                          }
                        },
                        "id": 559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "addAuthKey",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 109,
                        "src": "2455:19:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$returns$__$",
                          "typeString": "function (address,bool) external"
                        }
                      },
                      "id": 562,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2455:35:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 563,
                    "nodeType": "ExpressionStatement",
                    "src": "2455:35:3"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 567,
                          "name": "accountProxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 389,
                          "src": "2516:12:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2530:4:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 564,
                          "name": "_account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 529,
                          "src": "2496:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_AbstractAccount_$126",
                            "typeString": "contract AbstractAccount"
                          }
                        },
                        "id": 566,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "addAuthKey",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 109,
                        "src": "2496:19:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$returns$__$",
                          "typeString": "function (address,bool) external"
                        }
                      },
                      "id": 569,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2496:39:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 570,
                    "nodeType": "ExpressionStatement",
                    "src": "2496:39:3"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 575,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1870,
                              "src": "2572:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_AccountFactory_$603",
                                "typeString": "contract AccountFactory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_AccountFactory_$603",
                                "typeString": "contract AccountFactory"
                              }
                            ],
                            "id": 574,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2564:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2564:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 571,
                          "name": "_account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 529,
                          "src": "2541:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_AbstractAccount_$126",
                            "typeString": "contract AbstractAccount"
                          }
                        },
                        "id": 573,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "removeAuthKey",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 114,
                        "src": "2541:22:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                          "typeString": "function (address) external"
                        }
                      },
                      "id": 577,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2541:37:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 578,
                    "nodeType": "ExpressionStatement",
                    "src": "2541:37:3"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 580,
                          "name": "_ensLabel",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 517,
                          "src": "2602:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 581,
                          "name": "_ensNode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 519,
                          "src": "2619:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 583,
                              "name": "_account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 529,
                              "src": "2643:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_AbstractAccount_$126",
                                "typeString": "contract AbstractAccount"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_AbstractAccount_$126",
                                "typeString": "contract AbstractAccount"
                              }
                            ],
                            "id": 582,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2635:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2635:17:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 579,
                        "name": "_register",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1375,
                        "src": "2585:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                          "typeString": "function (bytes32,bytes32,address)"
                        }
                      },
                      "id": 585,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2585:73:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 586,
                    "nodeType": "ExpressionStatement",
                    "src": "2585:73:3"
                  },
                  {
                    "eventCall": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 589,
                              "name": "_account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 529,
                              "src": "2693:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_AbstractAccount_$126",
                                "typeString": "contract AbstractAccount"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_AbstractAccount_$126",
                                "typeString": "contract AbstractAccount"
                              }
                            ],
                            "id": 588,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2685:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2685:17:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 587,
                        "name": "AccountCreated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 381,
                        "src": "2670:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                          "typeString": "function (address)"
                        }
                      },
                      "id": 591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2670:33:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 592,
                    "nodeType": "EmitStatement",
                    "src": "2665:38:3"
                  }
                ]
              },
              "documentation": null,
              "id": 594,
              "implemented": true,
              "kind": "function",
              "modifiers": [],
              "name": "_createAccount",
              "nodeType": "FunctionDefinition",
              "parameters": {
                "id": 522,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 513,
                    "name": "_salt",
                    "nodeType": "VariableDeclaration",
                    "scope": 594,
                    "src": "2042:13:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 512,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2042:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 515,
                    "name": "_authKey",
                    "nodeType": "VariableDeclaration",
                    "scope": 594,
                    "src": "2061:16:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 514,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2061:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 517,
                    "name": "_ensLabel",
                    "nodeType": "VariableDeclaration",
                    "scope": 594,
                    "src": "2083:17:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 516,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2083:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 519,
                    "name": "_ensNode",
                    "nodeType": "VariableDeclaration",
                    "scope": 594,
                    "src": "2106:16:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 518,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2106:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 521,
                    "name": "_refundGas",
                    "nodeType": "VariableDeclaration",
                    "scope": 594,
                    "src": "2128:18:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 520,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "2128:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "2036:114:3"
              },
              "returnParameters": {
                "id": 523,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "2165:0:3"
              },
              "scope": 603,
              "src": "2013:695:3",
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "private"
            },
            {
              "body": {
                "id": 601,
                "nodeType": "Block",
                "src": "2732:39:3",
                "statements": [
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "66616c6c6261636b20747269676765726564",
                          "id": 598,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2745:20:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_0d1b22bcf42b82afad07c24784f9a0e277dfccd5788f43657b40ef751b44bbf6",
                            "typeString": "literal_string \"fallback triggered\""
                          },
                          "value": "fallback triggered"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_stringliteral_0d1b22bcf42b82afad07c24784f9a0e277dfccd5788f43657b40ef751b44bbf6",
                            "typeString": "literal_string \"fallback triggered\""
                          }
                        ],
                        "id": 597,
                        "name": "revert",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          1844,
                          1845
                        ],
                        "referencedDeclaration": 1845,
                        "src": "2738:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (string memory) pure"
                        }
                      },
                      "id": 599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2738:28:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 600,
                    "nodeType": "ExpressionStatement",
                    "src": "2738:28:3"
                  }
                ]
              },
              "documentation": null,
              "id": 602,
              "implemented": true,
              "kind": "fallback",
              "modifiers": [],
              "name": "",
              "nodeType": "FunctionDefinition",
              "parameters": {
                "id": 595,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "2720:2:3"
              },
              "returnParameters": {
                "id": 596,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "2732:0:3"
              },
              "scope": 603,
              "src": "2712:59:3",
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            }
          ],
          "scope": 604,
          "src": "312:2461:3"
        }
      ],
      "src": "0:2774:3"
    },
    "legacyAST": {
      "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AccountFactory.sol",
      "exportedSymbols": {
        "AccountFactory": [
          603
        ]
      },
      "id": 604,
      "nodeType": "SourceUnit",
      "nodes": [
        {
          "id": 362,
          "literals": [
            "solidity",
            "^",
            "0.5",
            ".0"
          ],
          "nodeType": "PragmaDirective",
          "src": "0:23:3"
        },
        {
          "absolutePath": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
          "file": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
          "id": 363,
          "nodeType": "ImportDirective",
          "scope": 604,
          "sourceUnit": 1692,
          "src": "25:64:3",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
          "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
          "id": 364,
          "nodeType": "ImportDirective",
          "scope": 604,
          "sourceUnit": 1825,
          "src": "90:59:3",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/contractCreator/ContractCreator.sol",
          "file": "../contractCreator/ContractCreator.sol",
          "id": 365,
          "nodeType": "ImportDirective",
          "scope": 604,
          "sourceUnit": 990,
          "src": "150:48:3",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/ens/ENSMultiManager.sol",
          "file": "../ens/ENSMultiManager.sol",
          "id": 366,
          "nodeType": "ImportDirective",
          "scope": 604,
          "sourceUnit": 1377,
          "src": "199:36:3",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AbstractAccount.sol",
          "file": "../account/AbstractAccount.sol",
          "id": 367,
          "nodeType": "ImportDirective",
          "scope": 604,
          "sourceUnit": 127,
          "src": "236:40:3",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "baseContracts": [
            {
              "arguments": null,
              "baseName": {
                "contractScope": null,
                "id": 368,
                "name": "ContractCreator",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 989,
                "src": "339:15:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ContractCreator_$989",
                  "typeString": "contract ContractCreator"
                }
              },
              "id": 369,
              "nodeType": "InheritanceSpecifier",
              "src": "339:15:3"
            },
            {
              "arguments": null,
              "baseName": {
                "contractScope": null,
                "id": 370,
                "name": "ENSMultiManager",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1376,
                "src": "356:15:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ENSMultiManager_$1376",
                  "typeString": "contract ENSMultiManager"
                }
              },
              "id": 371,
              "nodeType": "InheritanceSpecifier",
              "src": "356:15:3"
            }
          ],
          "contractDependencies": [
            989,
            1012,
            1376
          ],
          "contractKind": "contract",
          "documentation": "@title Account Factory",
          "fullyImplemented": true,
          "id": 603,
          "linearizedBaseContracts": [
            603,
            1376,
            1012,
            989
          ],
          "name": "AccountFactory",
          "nodeType": "ContractDefinition",
          "nodes": [
            {
              "id": 374,
              "libraryName": {
                "contractScope": null,
                "id": 372,
                "name": "ECDSA",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1691,
                "src": "383:5:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ECDSA_$1691",
                  "typeString": "library ECDSA"
                }
              },
              "nodeType": "UsingForDirective",
              "src": "377:24:3",
              "typeName": {
                "id": 373,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "393:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            {
              "id": 377,
              "libraryName": {
                "contractScope": null,
                "id": 375,
                "name": "SafeMath",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1824,
                "src": "410:8:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_SafeMath_$1824",
                  "typeString": "library SafeMath"
                }
              },
              "nodeType": "UsingForDirective",
              "src": "404:27:3",
              "typeName": {
                "id": 376,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "423:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            {
              "anonymous": false,
              "documentation": null,
              "id": 381,
              "name": "AccountCreated",
              "nodeType": "EventDefinition",
              "parameters": {
                "id": 380,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 379,
                    "indexed": true,
                    "name": "account",
                    "nodeType": "VariableDeclaration",
                    "scope": 381,
                    "src": "456:23:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 378,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "456:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "455:25:3"
              },
              "src": "435:46:3"
            },
            {
              "constant": true,
              "id": 384,
              "name": "ACCOUNT_SALT_MSG_PREFIX",
              "nodeType": "VariableDeclaration",
              "scope": 603,
              "src": "485:46:3",
              "stateVariable": true,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes1",
                "typeString": "bytes1"
              },
              "typeName": {
                "id": 382,
                "name": "bytes1",
                "nodeType": "ElementaryTypeName",
                "src": "485:6:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes1",
                  "typeString": "bytes1"
                }
              },
              "value": {
                "argumentTypes": null,
                "hexValue": "30783031",
                "id": 383,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "527:4:3",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1_by_1",
                  "typeString": "int_const 1"
                },
                "value": "0x01"
              },
              "visibility": "internal"
            },
            {
              "constant": true,
              "id": 387,
              "name": "ACCOUNT_SALT_MSG_PREFIX_UNSAFE",
              "nodeType": "VariableDeclaration",
              "scope": 603,
              "src": "535:53:3",
              "stateVariable": true,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes1",
                "typeString": "bytes1"
              },
              "typeName": {
                "id": 385,
                "name": "bytes1",
                "nodeType": "ElementaryTypeName",
                "src": "535:6:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes1",
                  "typeString": "bytes1"
                }
              },
              "value": {
                "argumentTypes": null,
                "hexValue": "30783032",
                "id": 386,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "584:4:3",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_2_by_1",
                  "typeString": "int_const 2"
                },
                "value": "0x02"
              },
              "visibility": "internal"
            },
            {
              "constant": false,
              "id": 389,
              "name": "accountProxy",
              "nodeType": "VariableDeclaration",
              "scope": 603,
              "src": "593:28:3",
              "stateVariable": true,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              },
              "typeName": {
                "id": 388,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "593:7:3",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "value": null,
              "visibility": "private"
            },
            {
              "body": {
                "id": 408,
                "nodeType": "Block",
                "src": "803:39:3",
                "statements": [
                  {
                    "expression": {
                      "argumentTypes": null,
                      "id": 406,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 404,
                        "name": "accountProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 389,
                        "src": "809:12:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "id": 405,
                        "name": "_accountProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 393,
                        "src": "824:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "809:28:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 407,
                    "nodeType": "ExpressionStatement",
                    "src": "809:28:3"
                  }
                ]
              },
              "documentation": null,
              "id": 409,
              "implemented": true,
              "kind": "constructor",
              "modifiers": [
                {
                  "arguments": [
                    {
                      "argumentTypes": null,
                      "id": 398,
                      "name": "_accountContractCode",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 391,
                      "src": "746:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    }
                  ],
                  "id": 399,
                  "modifierName": {
                    "argumentTypes": null,
                    "id": 397,
                    "name": "ContractCreator",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 989,
                    "src": "730:15:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_contract$_ContractCreator_$989_$",
                      "typeString": "type(contract ContractCreator)"
                    }
                  },
                  "nodeType": "ModifierInvocation",
                  "src": "730:37:3"
                },
                {
                  "arguments": [
                    {
                      "argumentTypes": null,
                      "id": 401,
                      "name": "_ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 395,
                      "src": "788:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  ],
                  "id": 402,
                  "modifierName": {
                    "argumentTypes": null,
                    "id": 400,
                    "name": "ENSMultiManager",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1376,
                    "src": "772:15:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_contract$_ENSMultiManager_$1376_$",
                      "typeString": "type(contract ENSMultiManager)"
                    }
                  },
                  "nodeType": "ModifierInvocation",
                  "src": "772:21:3"
                }
              ],
              "name": "",
              "nodeType": "FunctionDefinition",
              "parameters": {
                "id": 396,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 391,
                    "name": "_accountContractCode",
                    "nodeType": "VariableDeclaration",
                    "scope": 409,
                    "src": "643:33:3",
                    "stateVariable": false,
                    "storageLocation": "memory",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes"
                    },
                    "typeName": {
                      "id": 390,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "643:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 393,
                    "name": "_accountProxy",
                    "nodeType": "VariableDeclaration",
                    "scope": 409,
                    "src": "682:21:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 392,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "682:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 395,
                    "name": "_ens",
                    "nodeType": "VariableDeclaration",
                    "scope": 409,
                    "src": "709:12:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 394,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "709:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "637:88:3"
              },
              "returnParameters": {
                "id": 403,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "803:0:3"
              },
              "scope": 603,
              "src": "626:216:3",
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            {
              "anonymous": false,
              "documentation": null,
              "id": 413,
              "name": "DebugBytes32",
              "nodeType": "EventDefinition",
              "parameters": {
                "id": 412,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 411,
                    "indexed": true,
                    "name": "value",
                    "nodeType": "VariableDeclaration",
                    "scope": 413,
                    "src": "865:21:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 410,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "865:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "864:23:3"
              },
              "src": "846:42:3"
            },
            {
              "anonymous": false,
              "documentation": null,
              "id": 417,
              "name": "DebugAddress",
              "nodeType": "EventDefinition",
              "parameters": {
                "id": 416,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 415,
                    "indexed": true,
                    "name": "value",
                    "nodeType": "VariableDeclaration",
                    "scope": 417,
                    "src": "910:21:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 414,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "910:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "909:23:3"
              },
              "src": "891:42:3"
            },
            {
              "anonymous": false,
              "documentation": null,
              "id": 421,
              "name": "DebugString",
              "nodeType": "EventDefinition",
              "parameters": {
                "id": 420,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 419,
                    "indexed": true,
                    "name": "value",
                    "nodeType": "VariableDeclaration",
                    "scope": 421,
                    "src": "954:20:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string"
                    },
                    "typeName": {
                      "id": 418,
                      "name": "string",
                      "nodeType": "ElementaryTypeName",
                      "src": "954:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "953:22:3"
              },
              "src": "936:40:3"
            },
            {
              "body": {
                "id": 478,
                "nodeType": "Block",
                "src": "1118:485:3",
                "statements": [
                  {
                    "assignments": [
                      433
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 433,
                        "name": "_authKey",
                        "nodeType": "VariableDeclaration",
                        "scope": 478,
                        "src": "1124:16:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 432,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1124:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 454,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 452,
                          "name": "_signature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 429,
                          "src": "1342:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 438,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1870,
                                          "src": "1194:4:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_AccountFactory_$603",
                                            "typeString": "contract AccountFactory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_AccountFactory_$603",
                                            "typeString": "contract AccountFactory"
                                          }
                                        ],
                                        "id": 437,
                                        "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": 439,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1186:13:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 440,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1839,
                                        "src": "1209:3:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 441,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sig",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "1209:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 442,
                                      "name": "_ensLabel",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 423,
                                      "src": "1226:9:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 443,
                                      "name": "_ensNode",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 425,
                                      "src": "1245:8:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 444,
                                      "name": "_refundGas",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 427,
                                      "src": "1263:10:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 445,
                                        "name": "tx",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1851,
                                        "src": "1283:2:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_transaction",
                                          "typeString": "tx"
                                        }
                                      },
                                      "id": 446,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "gasprice",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "1283:11:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 435,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1826,
                                      "src": "1160:3:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 436,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "encodePacked",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "1160:16:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 447,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1160:142:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 434,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1833,
                                "src": "1143:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 448,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1143:165:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "id": 449,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toEthSignedMessageHash",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1690,
                            "src": "1143:188:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                              "typeString": "function (bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1143:190:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 451,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recover",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1674,
                        "src": "1143:198:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes memory) pure returns (address)"
                        }
                      },
                      "id": 453,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1143:210:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1124:229:3"
                  },
                  {
                    "assignments": [
                      456
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 456,
                        "name": "_salt",
                        "nodeType": "VariableDeclaration",
                        "scope": 478,
                        "src": "1360:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 455,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1360:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 469,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 460,
                              "name": "ACCOUNT_SALT_MSG_PREFIX",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 384,
                              "src": "1412:23:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 464,
                                      "name": "_authKey",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 433,
                                      "src": "1472:8:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 462,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1826,
                                      "src": "1455:3:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 463,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "encodePacked",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "1455:16:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 465,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1455:26:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 461,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1833,
                                "src": "1445:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 466,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1445:37:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 458,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1826,
                              "src": "1386:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 459,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1386:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 467,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1386:104:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 457,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1833,
                        "src": "1376:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 468,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1376:115:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1360:131:3"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 471,
                          "name": "_salt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 456,
                          "src": "1520:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 472,
                          "name": "_authKey",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 433,
                          "src": "1533:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 473,
                          "name": "_ensLabel",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 423,
                          "src": "1549:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 474,
                          "name": "_ensNode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 425,
                          "src": "1566:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 475,
                          "name": "_refundGas",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 427,
                          "src": "1582:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 470,
                        "name": "_createAccount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 594,
                        "src": "1498:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$",
                          "typeString": "function (bytes32,address,bytes32,bytes32,uint256)"
                        }
                      },
                      "id": 476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1498:100:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 477,
                    "nodeType": "ExpressionStatement",
                    "src": "1498:100:3"
                  }
                ]
              },
              "documentation": null,
              "id": 479,
              "implemented": true,
              "kind": "function",
              "modifiers": [],
              "name": "createAccount",
              "nodeType": "FunctionDefinition",
              "parameters": {
                "id": 430,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 423,
                    "name": "_ensLabel",
                    "nodeType": "VariableDeclaration",
                    "scope": 479,
                    "src": "1008:17:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 422,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1008:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 425,
                    "name": "_ensNode",
                    "nodeType": "VariableDeclaration",
                    "scope": 479,
                    "src": "1031:16:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 424,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1031:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 427,
                    "name": "_refundGas",
                    "nodeType": "VariableDeclaration",
                    "scope": 479,
                    "src": "1053:18:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 426,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1053:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 429,
                    "name": "_signature",
                    "nodeType": "VariableDeclaration",
                    "scope": 479,
                    "src": "1077:23:3",
                    "stateVariable": false,
                    "storageLocation": "memory",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes"
                    },
                    "typeName": {
                      "id": 428,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "1077:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "1002:102:3"
              },
              "returnParameters": {
                "id": 431,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "1118:0:3"
              },
              "scope": 603,
              "src": "980:623:3",
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            {
              "body": {
                "id": 510,
                "nodeType": "Block",
                "src": "1768:241:3",
                "statements": [
                  {
                    "assignments": [
                      493
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 493,
                        "name": "_salt",
                        "nodeType": "VariableDeclaration",
                        "scope": 510,
                        "src": "1774:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 492,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1774:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 501,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 497,
                              "name": "ACCOUNT_SALT_MSG_PREFIX_UNSAFE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 387,
                              "src": "1833:30:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 498,
                              "name": "_accountId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 481,
                              "src": "1873:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 495,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1826,
                              "src": "1807:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 496,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1807:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1807:84:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 494,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1833,
                        "src": "1790:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1790:107:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1774:123:3"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 503,
                          "name": "_salt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 493,
                          "src": "1926:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 504,
                          "name": "_authKey",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 483,
                          "src": "1939:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 505,
                          "name": "_ensLabel",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 485,
                          "src": "1955:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 506,
                          "name": "_ensNode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 487,
                          "src": "1972:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 507,
                          "name": "_refundGas",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 489,
                          "src": "1988:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 502,
                        "name": "_createAccount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 594,
                        "src": "1904:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$",
                          "typeString": "function (bytes32,address,bytes32,bytes32,uint256)"
                        }
                      },
                      "id": 508,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1904:100:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 509,
                    "nodeType": "ExpressionStatement",
                    "src": "1904:100:3"
                  }
                ]
              },
              "documentation": null,
              "id": 511,
              "implemented": true,
              "kind": "function",
              "modifiers": [],
              "name": "unsafeCreateAccount",
              "nodeType": "FunctionDefinition",
              "parameters": {
                "id": 490,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 481,
                    "name": "_accountId",
                    "nodeType": "VariableDeclaration",
                    "scope": 511,
                    "src": "1641:18:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 480,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1641:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 483,
                    "name": "_authKey",
                    "nodeType": "VariableDeclaration",
                    "scope": 511,
                    "src": "1665:16:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 482,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1665:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 485,
                    "name": "_ensLabel",
                    "nodeType": "VariableDeclaration",
                    "scope": 511,
                    "src": "1687:17:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 484,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1687:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 487,
                    "name": "_ensNode",
                    "nodeType": "VariableDeclaration",
                    "scope": 511,
                    "src": "1710:16:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 486,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1710:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 489,
                    "name": "_refundGas",
                    "nodeType": "VariableDeclaration",
                    "scope": 511,
                    "src": "1732:18:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 488,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1732:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "1635:119:3"
              },
              "returnParameters": {
                "id": 491,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "1768:0:3"
              },
              "scope": 603,
              "src": "1607:402:3",
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            {
              "body": {
                "id": 593,
                "nodeType": "Block",
                "src": "2165:543:3",
                "statements": [
                  {
                    "eventCall": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 525,
                          "name": "_salt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 513,
                          "src": "2189:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 524,
                        "name": "DebugBytes32",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 413,
                        "src": "2176:12:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                          "typeString": "function (bytes32)"
                        }
                      },
                      "id": 526,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2176:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 527,
                    "nodeType": "EmitStatement",
                    "src": "2171:24:3"
                  },
                  {
                    "assignments": [
                      529
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 529,
                        "name": "_account",
                        "nodeType": "VariableDeclaration",
                        "scope": 593,
                        "src": "2227:24:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AbstractAccount_$126",
                          "typeString": "contract AbstractAccount"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 528,
                          "name": "AbstractAccount",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 126,
                          "src": "2227:15:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_AbstractAccount_$126",
                            "typeString": "contract AbstractAccount"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 535,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 532,
                              "name": "_salt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 513,
                              "src": "2286:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 531,
                            "name": "_createContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 954,
                            "src": "2270:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) returns (address)"
                            }
                          },
                          "id": 533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2270:22:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 530,
                        "name": "AbstractAccount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 126,
                        "src": "2254:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_AbstractAccount_$126_$",
                          "typeString": "type(contract AbstractAccount)"
                        }
                      },
                      "id": 534,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2254:39:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_AbstractAccount_$126",
                        "typeString": "contract AbstractAccount"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2227:66:3"
                  },
                  {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 538,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 536,
                        "name": "_refundGas",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 521,
                        "src": "2304:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 537,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2317:1:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2304:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": null,
                    "id": 556,
                    "nodeType": "IfStatement",
                    "src": "2300:149:3",
                    "trueBody": {
                      "id": 555,
                      "nodeType": "Block",
                      "src": "2320:129:3",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 542,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1839,
                                  "src": "2365:3:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 543,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "2365:10:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 546,
                                      "name": "tx",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1851,
                                      "src": "2400:2:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_transaction",
                                        "typeString": "tx"
                                      }
                                    },
                                    "id": 547,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "gasprice",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "2400:11:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 544,
                                    "name": "_refundGas",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 521,
                                    "src": "2385:10:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 545,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1777,
                                  "src": "2385:14:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 548,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2385:27:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 551,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2432: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": 550,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "NewExpression",
                                  "src": "2422:9:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                                    "typeString": "function (uint256) pure returns (bytes memory)"
                                  },
                                  "typeName": {
                                    "id": 549,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2426:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  }
                                },
                                "id": 552,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2422:12:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 539,
                                "name": "_account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 529,
                                "src": "2328:8:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_AbstractAccount_$126",
                                  "typeString": "contract AbstractAccount"
                                }
                              },
                              "id": 541,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "executeTransaction",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 125,
                              "src": "2328:27:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_address_payable_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (address payable,uint256,bytes memory) external returns (bytes memory)"
                              }
                            },
                            "id": 553,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2328:114:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 554,
                          "nodeType": "ExpressionStatement",
                          "src": "2328:114:3"
                        }
                      ]
                    }
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 560,
                          "name": "_authKey",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 515,
                          "src": "2475:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 561,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2485:4:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 557,
                          "name": "_account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 529,
                          "src": "2455:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_AbstractAccount_$126",
                            "typeString": "contract AbstractAccount"
                          }
                        },
                        "id": 559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "addAuthKey",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 109,
                        "src": "2455:19:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$returns$__$",
                          "typeString": "function (address,bool) external"
                        }
                      },
                      "id": 562,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2455:35:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 563,
                    "nodeType": "ExpressionStatement",
                    "src": "2455:35:3"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 567,
                          "name": "accountProxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 389,
                          "src": "2516:12:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2530:4:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 564,
                          "name": "_account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 529,
                          "src": "2496:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_AbstractAccount_$126",
                            "typeString": "contract AbstractAccount"
                          }
                        },
                        "id": 566,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "addAuthKey",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 109,
                        "src": "2496:19:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$returns$__$",
                          "typeString": "function (address,bool) external"
                        }
                      },
                      "id": 569,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2496:39:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 570,
                    "nodeType": "ExpressionStatement",
                    "src": "2496:39:3"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 575,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1870,
                              "src": "2572:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_AccountFactory_$603",
                                "typeString": "contract AccountFactory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_AccountFactory_$603",
                                "typeString": "contract AccountFactory"
                              }
                            ],
                            "id": 574,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2564:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2564:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 571,
                          "name": "_account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 529,
                          "src": "2541:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_AbstractAccount_$126",
                            "typeString": "contract AbstractAccount"
                          }
                        },
                        "id": 573,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "removeAuthKey",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 114,
                        "src": "2541:22:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                          "typeString": "function (address) external"
                        }
                      },
                      "id": 577,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2541:37:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 578,
                    "nodeType": "ExpressionStatement",
                    "src": "2541:37:3"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 580,
                          "name": "_ensLabel",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 517,
                          "src": "2602:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 581,
                          "name": "_ensNode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 519,
                          "src": "2619:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 583,
                              "name": "_account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 529,
                              "src": "2643:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_AbstractAccount_$126",
                                "typeString": "contract AbstractAccount"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_AbstractAccount_$126",
                                "typeString": "contract AbstractAccount"
                              }
                            ],
                            "id": 582,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2635:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2635:17:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 579,
                        "name": "_register",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1375,
                        "src": "2585:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                          "typeString": "function (bytes32,bytes32,address)"
                        }
                      },
                      "id": 585,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2585:73:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 586,
                    "nodeType": "ExpressionStatement",
                    "src": "2585:73:3"
                  },
                  {
                    "eventCall": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 589,
                              "name": "_account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 529,
                              "src": "2693:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_AbstractAccount_$126",
                                "typeString": "contract AbstractAccount"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_AbstractAccount_$126",
                                "typeString": "contract AbstractAccount"
                              }
                            ],
                            "id": 588,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2685:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2685:17:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 587,
                        "name": "AccountCreated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 381,
                        "src": "2670:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                          "typeString": "function (address)"
                        }
                      },
                      "id": 591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2670:33:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 592,
                    "nodeType": "EmitStatement",
                    "src": "2665:38:3"
                  }
                ]
              },
              "documentation": null,
              "id": 594,
              "implemented": true,
              "kind": "function",
              "modifiers": [],
              "name": "_createAccount",
              "nodeType": "FunctionDefinition",
              "parameters": {
                "id": 522,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 513,
                    "name": "_salt",
                    "nodeType": "VariableDeclaration",
                    "scope": 594,
                    "src": "2042:13:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 512,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2042:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 515,
                    "name": "_authKey",
                    "nodeType": "VariableDeclaration",
                    "scope": 594,
                    "src": "2061:16:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 514,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2061:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 517,
                    "name": "_ensLabel",
                    "nodeType": "VariableDeclaration",
                    "scope": 594,
                    "src": "2083:17:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 516,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2083:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 519,
                    "name": "_ensNode",
                    "nodeType": "VariableDeclaration",
                    "scope": 594,
                    "src": "2106:16:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 518,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2106:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 521,
                    "name": "_refundGas",
                    "nodeType": "VariableDeclaration",
                    "scope": 594,
                    "src": "2128:18:3",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 520,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "2128:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "2036:114:3"
              },
              "returnParameters": {
                "id": 523,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "2165:0:3"
              },
              "scope": 603,
              "src": "2013:695:3",
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "private"
            },
            {
              "body": {
                "id": 601,
                "nodeType": "Block",
                "src": "2732:39:3",
                "statements": [
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "66616c6c6261636b20747269676765726564",
                          "id": 598,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2745:20:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_0d1b22bcf42b82afad07c24784f9a0e277dfccd5788f43657b40ef751b44bbf6",
                            "typeString": "literal_string \"fallback triggered\""
                          },
                          "value": "fallback triggered"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_stringliteral_0d1b22bcf42b82afad07c24784f9a0e277dfccd5788f43657b40ef751b44bbf6",
                            "typeString": "literal_string \"fallback triggered\""
                          }
                        ],
                        "id": 597,
                        "name": "revert",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          1844,
                          1845
                        ],
                        "referencedDeclaration": 1845,
                        "src": "2738:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (string memory) pure"
                        }
                      },
                      "id": 599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2738:28:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 600,
                    "nodeType": "ExpressionStatement",
                    "src": "2738:28:3"
                  }
                ]
              },
              "documentation": null,
              "id": 602,
              "implemented": true,
              "kind": "fallback",
              "modifiers": [],
              "name": "",
              "nodeType": "FunctionDefinition",
              "parameters": {
                "id": 595,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "2720:2:3"
              },
              "returnParameters": {
                "id": 596,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "2732:0:3"
              },
              "scope": 603,
              "src": "2712:59:3",
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            }
          ],
          "scope": 604,
          "src": "312:2461:3"
        }
      ],
      "src": "0:2774:3"
    },
    "compiler": {
      "name": "solc",
      "version": "0.5.2+commit.1df8f40c.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.0.10",
    "updatedAt": "2019-06-04T00:50:23.122Z",
    "devdoc": {
      "methods": {},
      "title": "Account Factory"
    },
    "userdoc": {
      "methods": {}
    }
  }