{
    "contractName": "AccountProxy",
    "abi": [
      {
        "constant": false,
        "inputs": [
          {
            "name": "_authKey",
            "type": "address"
          },
          {
            "name": "_isOwner",
            "type": "bool"
          }
        ],
        "name": "addAuthKey",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
      },
      {
        "constant": true,
        "inputs": [
          {
            "name": "_login",
            "type": "address"
          }
        ],
        "name": "authorizations",
        "outputs": [
          {
            "name": "",
            "type": "bool"
          },
          {
            "name": "",
            "type": "bool"
          },
          {
            "name": "",
            "type": "bool"
          }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
      },
      {
        "constant": false,
        "inputs": [
          {
            "name": "_recipient",
            "type": "address"
          },
          {
            "name": "_value",
            "type": "uint256"
          },
          {
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "executeTransaction",
        "outputs": [
          {
            "name": "",
            "type": "bytes"
          }
        ],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
      },
      {
        "constant": true,
        "inputs": [
          {
            "name": "",
            "type": "address"
          }
        ],
        "name": "authKeys",
        "outputs": [
          {
            "name": "isOwner",
            "type": "bool"
          },
          {
            "name": "exists",
            "type": "bool"
          },
          {
            "name": "existed",
            "type": "bool"
          }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
      },
      {
        "constant": true,
        "inputs": [
          {
            "name": "",
            "type": "address"
          }
        ],
        "name": "authKeyNonce",
        "outputs": [
          {
            "name": "",
            "type": "uint256"
          }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
      },
      {
        "constant": false,
        "inputs": [
          {
            "name": "_authKey",
            "type": "address"
          }
        ],
        "name": "removeAuthKey",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
      },
      {
        "payable": true,
        "stateMutability": "payable",
        "type": "fallback"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "name": "loginKey",
            "type": "address"
          },
          {
            "indexed": true,
            "name": "nonce",
            "type": "uint256"
          },
          {
            "indexed": true,
            "name": "success",
            "type": "bool"
          }
        ],
        "name": "CompletedTransaction",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "name": "authKey",
            "type": "address"
          },
          {
            "indexed": true,
            "name": "isOwner",
            "type": "bool"
          }
        ],
        "name": "AuthKeyAdded",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "name": "authKey",
            "type": "address"
          }
        ],
        "name": "AuthKeyRemoved",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "name": "recipient",
            "type": "address"
          },
          {
            "indexed": true,
            "name": "value",
            "type": "uint256"
          },
          {
            "indexed": true,
            "name": "data",
            "type": "bytes"
          },
          {
            "indexed": false,
            "name": "response",
            "type": "bytes"
          },
          {
            "indexed": false,
            "name": "succeeded",
            "type": "bool"
          }
        ],
        "name": "TransactionExecuted",
        "type": "event"
      },
      {
        "constant": false,
        "inputs": [
          {
            "name": "_data",
            "type": "bytes"
          },
          {
            "name": "_msgHashSig",
            "type": "bytes"
          },
          {
            "name": "_loginKeyHashSig",
            "type": "bytes"
          },
          {
            "name": "_contractBasedAccount",
            "type": "address"
          },
          {
            "name": "_nonce",
            "type": "uint256"
          },
          {
            "name": "_fixedGas",
            "type": "uint256"
          }
        ],
        "name": "executeRelayedTransaction",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
      }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.5.2+commit.1df8f40c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"_authKey\",\"type\":\"address\"},{\"name\":\"_isOwner\",\"type\":\"bool\"}],\"name\":\"addAuthKey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_login\",\"type\":\"address\"}],\"name\":\"authorizations\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"authKeys\",\"outputs\":[{\"name\":\"isOwner\",\"type\":\"bool\"},{\"name\":\"exists\",\"type\":\"bool\"},{\"name\":\"existed\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"authKeyNonce\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_authKey\",\"type\":\"address\"}],\"name\":\"removeAuthKey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_data\",\"type\":\"bytes\"},{\"name\":\"_msgHashSig\",\"type\":\"bytes\"},{\"name\":\"_loginKeyHashSig\",\"type\":\"bytes\"},{\"name\":\"_contractBasedAccount\",\"type\":\"address\"},{\"name\":\"_nonce\",\"type\":\"uint256\"},{\"name\":\"_fixedGas\",\"type\":\"uint256\"}],\"name\":\"executeRelayedTransaction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"loginKey\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"CompletedTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"authKey\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"isOwner\",\"type\":\"bool\"}],\"name\":\"AuthKeyAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"authKey\",\"type\":\"address\"}],\"name\":\"AuthKeyRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"response\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"succeeded\",\"type\":\"bool\"}],\"name\":\"TransactionExecuted\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"addAuthKey(address,bool)\":{\"details\":\"Add an auth key to the list of auth keys\",\"params\":{\"_authKey\":\"Address of the auth key to add\",\"_isOwner\":\"Set to true if the auth key is an authkey\"}},\"executeRelayedTransaction(bytes,bytes,bytes,address,uint256,uint256)\":{\"details\":\"Veryify and sign a transaction_data Data sent to be used in the creation of the transaction_msgHashSig Signed message data of the transaction being sent by the login key (signed by login key)_loginKeyHashSig Signed login key (and loginKeyTimeout) (signed by auth key)_contractBasedAccount Address of the contract based account_nonce Nonce of the contract_fixedGas Amount of gas to send to be used in the transaction\"},\"executeTransaction(address,uint256,bytes)\":{\"details\":\"Execute a transaction\",\"params\":{\"_data\":\"Data to be included in the transaction to the realyer\",\"_recipient\":\"Recipient of the gas payment\",\"_value\":\"Value of the gas payment\"}},\"removeAuthKey(address)\":{\"details\":\"Remove an auth key from the list of auth keys\",\"params\":{\"_authKey\":\"Address of the auth key to remove\"}}},\"title\":\"Account Proxy\"},\"userdoc\":{\"methods\":{\"executeRelayedTransaction(bytes,bytes,bytes,address,uint256,uint256)\":{\"notice\":\"This is meant to be a transaction sent by the relayer\"},\"executeTransaction(address,uint256,bytes)\":{\"notice\":\"This is called at the end of verifyAndSignTransaction to send a refund to the relayer\"}}}},\"settings\":{\"compilationTarget\":{\"/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AccountProxy.sol\":\"AccountProxy\"},\"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/Account.sol\":{\"keccak256\":\"0xa73c10bb63a42d943ed2537aa39a1ca848156814812aad44edc661d50563079c\",\"urls\":[\"bzzr://1228e618dfe482b5e8bbd5160c4ce1fc2718ebe24acef46c481285bc6eab086a\"]},\"/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AccountLibrary.sol\":{\"keccak256\":\"0xb50749197c58c22113e505823154a952d1d3f771c0b8371f29c2b2c155fe99ec\",\"urls\":[\"bzzr://dd1ec914fc48bcec09bb78b6d75702bf71f37b2cfd66d2022af9565c9afa7517\"]},\"/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AccountProxy.sol\":{\"keccak256\":\"0xeb63817691df4ceac59a27b12c89e378ad5729918191a472449414acf73a9641\",\"urls\":[\"bzzr://8e9cb124f6e84832b67892fd70b4df0c2c99d4fb4b409e1553a832077d5c10b6\"]},\"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": "0x608060405260016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff02191690831515021790555060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160026101000a81548160ff02191690831515021790555060016000803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555060016000803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff02191690831515021790555060016000803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160026101000a81548160ff0219169083151502179055506119918061022f6000396000f3fe6080604052600436106100705760003560e01c80635175ca5e1161004e5780635175ca5e146102b95780637e07fe95146103385780639565389e1461039d578063ddb72c68146103ee57610070565b80630473a90f146100725780633a13e1af146100cf5780633f579f421461014e575b005b34801561007e57600080fd5b506100cd6004803603604081101561009557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050610618565b005b3480156100db57600080fd5b5061011e600480360360208110156100f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061097e565b60405180841515151581526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561015a57600080fd5b5061023e6004803603606081101561017157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156101b857600080fd5b8201836020820111156101ca57600080fd5b803590602001918460018302840111640100000000831117156101ec57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610995565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027e578082015181840152602081019050610263565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c557600080fd5b50610308600480360360208110156102dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d27565b60405180841515151581526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561034457600080fd5b506103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d78565b6040518082815260200191505060405180910390f35b3480156103a957600080fd5b506103ec600480360360208110156103c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d90565b005b3480156103fa57600080fd5b50610616600480360360c081101561041157600080fd5b810190808035906020019064010000000081111561042e57600080fd5b82018360208201111561044057600080fd5b8035906020019184600183028401116401000000008311171561046257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104c557600080fd5b8201836020820111156104d757600080fd5b803590602001918460018302840111640100000000831117156104f957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561055c57600080fd5b82018360208201111561056e57600080fd5b8035906020019184600183028401116401000000008311171561059057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610ff3565b005b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1615156106be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806119406026913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f417574684b65792063616e6e6f742062652061203020616464726573732e000081525060200191505060405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16151515610827576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f417574684b657920616c7265616479206578697374732e00000000000000000081525060200191505060405180910390fd5b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555060016000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff02191690831515021790555060016000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160026101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f7cb7e4bd2b896c777e6743f1eb2e2373a14ca93e872221d0ef52228d5dbee65f60405160405180910390a35050565b600080600060018060019250925092509193909250565b60606000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515610a3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806119406026913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515610ac5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061191e6022913960400191505060405180910390fd5b600060608573ffffffffffffffffffffffffffffffffffffffff1685856040518082805190602001908083835b602083101515610b175780518252602082019150602081019050602083039250610af2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610b79576040519150601f19603f3d011682016040523d82523d6000602084013e610b7e565b606091505b5091509150811515610bf8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5472616e73616374696f6e206661696c65642e0000000000000000000000000081525060200191505060405180910390fd5b836040518082805190602001908083835b602083101515610c2e5780518252602082019150602081019050602083039250610c09565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020858773ffffffffffffffffffffffffffffffffffffffff167f4e28897b61a8a8cceb30655f41f99b9a7db6a091ac00d3a185cfd6a691dfd26c8486604051808060200183151515158152602001828103825284818151815260200191508051906020019080838360005b83811015610ce0578082015181840152602081019050610cc5565b50505050905090810190601f168015610d0d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a480925050509392505050565b60006020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16905083565b60016020528060005260406000206000915090505481565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515610e36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806119406026913960400191505060405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff161515610ef9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f417574684b657920646f6573206e6f742065786973742e00000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555060008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fbe55f9add9abe657e689a4a84a31854310f260c7e2610bcd22440e3ec3a836a460405160405180910390a250565b60005a90506000611166306000357fffffffff000000000000000000000000000000000000000000000000000000001687878c883a604051602001808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140185815260200184805190602001908083835b60208310151561111457805182526020820191506020810190506020830392506110ef565b6001836020036101000a038019825116818451168082178552505050505050905001838152602001828152602001975050505050505050604051602081830303815290604052805190602001206115ff565b905083600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151561121e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496e636f727265637420636f6e7472616374206e6f6e63652e0000000000000081525060200191505060405180910390fd5b60018060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506000611280888361165790919063ffffffff16565b905060006112e282604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001206115ff565b905060006112f9898361165790919063ffffffff16565b905060008873ffffffffffffffffffffffffffffffffffffffff168c6040518082805190602001908083835b60208310151561134a5780518252602082019150602081019050602083039250611325565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146113ac576040519150601f19603f3d011682016040523d82523d6000602084013e6113b1565b606091505b5050905060006113dc5a6113ce898b61175d90919063ffffffff16565b6117e790919063ffffffff16565b90508973ffffffffffffffffffffffffffffffffffffffff16633f579f423361140e3a8561187290919063ffffffff16565b60006040519080825280601f01601f1916602001820160405280156114425781602001600182028038833980820191505090505b506040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156114ca5780820151818401526020810190506114af565b50505050905090810190601f1680156114f75780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561151857600080fd5b505af115801561152c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561155657600080fd5b81019080805164010000000081111561156e57600080fd5b8281019050602081018481111561158457600080fd5b81518560018202830111640100000000821117156115a157600080fd5b505092919050505050811515898673ffffffffffffffffffffffffffffffffffffffff167e730b1f1516ae157c3757e4f9c4c5205c4fbcef591842eba235899df09b0f0160405160405180910390a450505050505050505050505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b60006041825114151561166d5760009050611757565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c11156116c15760009350505050611757565b601b8160ff16141580156116d95750601c8160ff1614155b156116ea5760009350505050611757565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611747573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60008082840190508381101515156117dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000828211151515611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b60008083141561188557600090506118f6565b6000828402905082848281151561189857fe5b041415156118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806118fd6021913960400191505060405180910390fd5b809150505b9291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775f726563697069656e742063616e206e6f742062652061203020616464726573732e417574684b6579206973206e6f7420616e206f776e6572206f6620746865206163636f756e74a165627a7a72305820e7c42f13f62811c50dafe7ac730ae7697c3148ce67c2126f8a8e92dddc1c61fc0029",
    "deployedBytecode": "0x6080604052600436106100705760003560e01c80635175ca5e1161004e5780635175ca5e146102b95780637e07fe95146103385780639565389e1461039d578063ddb72c68146103ee57610070565b80630473a90f146100725780633a13e1af146100cf5780633f579f421461014e575b005b34801561007e57600080fd5b506100cd6004803603604081101561009557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050610618565b005b3480156100db57600080fd5b5061011e600480360360208110156100f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061097e565b60405180841515151581526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561015a57600080fd5b5061023e6004803603606081101561017157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156101b857600080fd5b8201836020820111156101ca57600080fd5b803590602001918460018302840111640100000000831117156101ec57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610995565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027e578082015181840152602081019050610263565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c557600080fd5b50610308600480360360208110156102dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d27565b60405180841515151581526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561034457600080fd5b506103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d78565b6040518082815260200191505060405180910390f35b3480156103a957600080fd5b506103ec600480360360208110156103c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d90565b005b3480156103fa57600080fd5b50610616600480360360c081101561041157600080fd5b810190808035906020019064010000000081111561042e57600080fd5b82018360208201111561044057600080fd5b8035906020019184600183028401116401000000008311171561046257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104c557600080fd5b8201836020820111156104d757600080fd5b803590602001918460018302840111640100000000831117156104f957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561055c57600080fd5b82018360208201111561056e57600080fd5b8035906020019184600183028401116401000000008311171561059057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610ff3565b005b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1615156106be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806119406026913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f417574684b65792063616e6e6f742062652061203020616464726573732e000081525060200191505060405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16151515610827576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f417574684b657920616c7265616479206578697374732e00000000000000000081525060200191505060405180910390fd5b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555060016000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff02191690831515021790555060016000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160026101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f7cb7e4bd2b896c777e6743f1eb2e2373a14ca93e872221d0ef52228d5dbee65f60405160405180910390a35050565b600080600060018060019250925092509193909250565b60606000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515610a3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806119406026913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515610ac5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061191e6022913960400191505060405180910390fd5b600060608573ffffffffffffffffffffffffffffffffffffffff1685856040518082805190602001908083835b602083101515610b175780518252602082019150602081019050602083039250610af2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610b79576040519150601f19603f3d011682016040523d82523d6000602084013e610b7e565b606091505b5091509150811515610bf8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5472616e73616374696f6e206661696c65642e0000000000000000000000000081525060200191505060405180910390fd5b836040518082805190602001908083835b602083101515610c2e5780518252602082019150602081019050602083039250610c09565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020858773ffffffffffffffffffffffffffffffffffffffff167f4e28897b61a8a8cceb30655f41f99b9a7db6a091ac00d3a185cfd6a691dfd26c8486604051808060200183151515158152602001828103825284818151815260200191508051906020019080838360005b83811015610ce0578082015181840152602081019050610cc5565b50505050905090810190601f168015610d0d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a480925050509392505050565b60006020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16905083565b60016020528060005260406000206000915090505481565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515610e36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806119406026913960400191505060405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff161515610ef9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f417574684b657920646f6573206e6f742065786973742e00000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555060008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fbe55f9add9abe657e689a4a84a31854310f260c7e2610bcd22440e3ec3a836a460405160405180910390a250565b60005a90506000611166306000357fffffffff000000000000000000000000000000000000000000000000000000001687878c883a604051602001808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140185815260200184805190602001908083835b60208310151561111457805182526020820191506020810190506020830392506110ef565b6001836020036101000a038019825116818451168082178552505050505050905001838152602001828152602001975050505050505050604051602081830303815290604052805190602001206115ff565b905083600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151561121e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496e636f727265637420636f6e7472616374206e6f6e63652e0000000000000081525060200191505060405180910390fd5b60018060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506000611280888361165790919063ffffffff16565b905060006112e282604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001206115ff565b905060006112f9898361165790919063ffffffff16565b905060008873ffffffffffffffffffffffffffffffffffffffff168c6040518082805190602001908083835b60208310151561134a5780518252602082019150602081019050602083039250611325565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146113ac576040519150601f19603f3d011682016040523d82523d6000602084013e6113b1565b606091505b5050905060006113dc5a6113ce898b61175d90919063ffffffff16565b6117e790919063ffffffff16565b90508973ffffffffffffffffffffffffffffffffffffffff16633f579f423361140e3a8561187290919063ffffffff16565b60006040519080825280601f01601f1916602001820160405280156114425781602001600182028038833980820191505090505b506040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156114ca5780820151818401526020810190506114af565b50505050905090810190601f1680156114f75780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561151857600080fd5b505af115801561152c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561155657600080fd5b81019080805164010000000081111561156e57600080fd5b8281019050602081018481111561158457600080fd5b81518560018202830111640100000000821117156115a157600080fd5b505092919050505050811515898673ffffffffffffffffffffffffffffffffffffffff167e730b1f1516ae157c3757e4f9c4c5205c4fbcef591842eba235899df09b0f0160405160405180910390a450505050505050505050505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b60006041825114151561166d5760009050611757565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c11156116c15760009350505050611757565b601b8160ff16141580156116d95750601c8160ff1614155b156116ea5760009350505050611757565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611747573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60008082840190508381101515156117dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000828211151515611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b60008083141561188557600090506118f6565b6000828402905082848281151561189857fe5b041415156118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806118fd6021913960400191505060405180910390fd5b809150505b9291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775f726563697069656e742063616e206e6f742062652061203020616464726573732e417574684b6579206973206e6f7420616e206f776e6572206f6620746865206163636f756e74a165627a7a72305820e7c42f13f62811c50dafe7ac730ae7697c3148ce67c2126f8a8e92dddc1c61fc0029",
    "sourceMap": "270:2662:5:-;;;356:4:2;325:8;:20;334:10;325:20;;;;;;;;;;;;;;;:28;;;:35;;;;;;;;;;;;;;;;;;396:4;366:8;:20;375:10;366:20;;;;;;;;;;;;;;;:27;;;:34;;;;;;;;;;;;;;;;;;437:4;406:8;:20;415:10;406:20;;;;;;;;;;;;;;;:28;;;:35;;;;;;;;;;;;;;;;;;514:4;480:8;:23;497:4;480:23;;;;;;;;;;;;;;;:31;;;:38;;;;;;;;;;;;;;;;;;557:4;524:8;:23;541:4;524:23;;;;;;;;;;;;;;;:30;;;:37;;;;;;;;;;;;;;;;;;603:4;567:8;:25;585:4;567:25;;;;;;;;;;;;;;;:33;;;:40;;;;;;;;;;;;;;;;;;270:2662:5;;;;;;",
    "deployedSourceMap": "270:2662:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;829:379:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;829:379:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;829:379:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2335:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2335:124:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2335:124:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1879:452;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1879:452:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1879:452:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1879:452:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1879:452:2;;;;;;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;1879:452:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1879:452:2;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1879:452:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;417:43:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;417:43:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;417:43:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;409:47:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;409:47:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;409:47:5;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1325:246:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1325:246:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1325:246:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;1150:1780:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1150:1780:5;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1150:1780:5;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1150:1780:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1150:1780:5;;;;;;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;1150:1780:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1150:1780:5;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1150:1780:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1150:1780:5;;;;;;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;1150:1780:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1150:1780:5;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1150:1780:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1150:1780:5;;;;;;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;1150:1780:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1150:1780:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;829:379:2;166:8;:20;175:10;166:20;;;;;;;;;;;;;;;:28;;;;;;;;;;;;151:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;933:1;913:22;;:8;:22;;;;905:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;985:8;:18;994:8;985:18;;;;;;;;;;;;;;;:25;;;;;;;;;;;;984:26;976:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1074:8;1045;:18;1054:8;1045:18;;;;;;;;;;;;;;;:26;;;:37;;;;;;;;;;;;;;;;;;1116:4;1088:8;:18;1097:8;1088:18;;;;;;;;;;;;;;;:25;;;:32;;;;;;;;;;;;;;;;;;1155:4;1126:8;:18;1135:8;1126:18;;;;;;;;;;;;;;;:26;;;:33;;;;;;;;;;;;;;;;;;1194:8;1171:32;;1184:8;1171:32;;;;;;;;;;;;829:379;;:::o;2335:124::-;2395:4;2400;2405;2437;2443;2449;2429:25;;;;;;2335:124;;;;;:::o;1879:452::-;1997:12;166:8;:20;175:10;166:20;;;;;;;;;;;;;;;:28;;;;;;;;;;;;151:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2047:1;2025:24;;:10;:24;;;;2017:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2095:15;2112:22;2138:10;:15;;2160:6;2168:5;2138:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2138:36:2;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2094:80:2;;;;2189:10;2181:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2275:5;2235:69;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2235:69:2;;;;;;;;;;;;;;;;2267:6;2255:10;2235:69;;;2282:9;2293:10;2235:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;2235:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2317:9;2310:16;;;;1879:452;;;;;:::o;417:43:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;409:47:5:-;;;;;;;;;;;;;;;;;:::o;1325:246:2:-;166:8;:20;175:10;166:20;;;;;;;;;;;;;;;:28;;;;;;;;;;;;151:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1397:8;:18;1406:8;1397:18;;;;;;;;;;;;;;;:25;;;;;;;;;;;;1389:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1486:5;1457:8;:18;1466:8;1457:18;;;;;;;;;;;;;;;:26;;;:34;;;;;;;;;;;;;;;;;;1525:5;1497:8;:18;1506:8;1497:18;;;;;;;;;;;;;;;:25;;;:33;;;;;;;;;;;;;;;;;;1557:8;1542:24;;;;;;;;;;;;1325:246;:::o;1150:1780:5:-;1439:17;1459:9;1439:29;;1500:16;1519:214;1570:4;1585:7;;;;1602:21;1633:6;1649:5;1664:9;1683:11;1536:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1536:166:5;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1536:166:5;;;1519:189;;;;;;:212;:214::i;:::-;1500:233;;1842:6;1803:12;:35;1816:21;1803:35;;;;;;;;;;;;;;;;:45;1795:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1923:1;1884:12;:35;1897:21;1884:35;;;;;;;;;;;;;;;;:40;;;;;;;;;;;2002:24;2029:29;2046:11;2029:8;:16;;:29;;;;:::i;:::-;2002:56;;2143:21;2167:70;2194:16;2177:34;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2177:34:5;;;2167:45;;;;;;:68;:70::i;:::-;2143:94;;2244:23;2270:39;2292:16;2270:13;:21;;:39;;;;:::i;:::-;2244:65;;2562:15;2582:21;:26;;2609:5;2582:33;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2582:33:5;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2561:54:5;;;2655:17;2675:39;2704:9;2675:24;2689:9;2675;:13;;:24;;;;:::i;:::-;:28;;:39;;;;:::i;:::-;2655:59;;2736:21;2720:57;;;2785:10;2803:26;2817:11;2803:9;:13;;:26;;;;:::i;:::-;2847:1;2837: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;2837:12:5;;;;2720:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;2720:135:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2720:135:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2720:135:5;;;;;;39:16:-1;36:1;17:17;2:54;2720:135:5;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;2720:135:5;;;;;;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;;2720:135:5;;;;;;;2914:10;2867:58;;2906:6;2888:16;2867:58;;;;;;;;;;;;1150:1780;;;;;;;;;;;;;:::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;834:176:13:-;892:7;911:9;927:1;923;:5;911:17;;951:1;946;:6;;938:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;995:8;;;834:176;;;;:::o;1274:179::-;1332:7;1364:1;1359;:6;;1351:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1410:9;1426:1;1422;:5;1410:17;;1445:1;1438:8;;;1274:179;;;;:::o;1693:458::-;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",
    "source": "pragma solidity ^0.5.2;\n\nimport \"./Account.sol\";\nimport \"./AbstractAccount.sol\";\nimport \"./AccountLibrary.sol\";\nimport 'openzeppelin-solidity/contracts/cryptography/ECDSA.sol';\nimport 'openzeppelin-solidity/contracts/math/SafeMath.sol';\n\n/**\n * @title Account Proxy\n */\ncontract AccountProxy is Account {\n  using AccountLibrary for AbstractAccount;\n  using ECDSA for bytes32;\n  using SafeMath for uint256;\n\n  mapping(address => uint256) public authKeyNonce;  // authKey -> nonce\n  event CompletedTransaction(address indexed loginKey, uint256 indexed nonce, bool indexed success);\n\n  /// @dev Veryify and sign a transaction\n  /// @notice This is meant to be a transaction sent by the relayer\n  /// @dev _data Data sent to be used in the creation of the transaction\n  /// @dev _msgHashSig Signed message data of the transaction being sent by the login key (signed by login key)\n  /// @dev _loginKeyHashSig Signed login key (and loginKeyTimeout) (signed by auth key)\n  /// @dev _contractBasedAccount Address of the contract based account\n  /// @dev _nonce Nonce of the contract\n  /// @dev _fixedGas Amount of gas to send to be used in the transaction\n  function executeRelayedTransaction(\n    bytes memory _data,\n    bytes memory _msgHashSig,\n    bytes memory _loginKeyHashSig,\n    address _contractBasedAccount,\n    uint256 _nonce,\n    uint256 _fixedGas\n  )\n    public\n  {\n    // Get starting gas calculation and confirm/increment nonce\n    uint256 _startGas = gasleft();\n\n    // Calculate TX hash\n    bytes32 _msgHash = keccak256(\n      abi.encodePacked(\n        address(this),\n        msg.sig,\n        _contractBasedAccount,\n        _nonce,\n        _data,\n        _fixedGas,\n        tx.gasprice\n      )\n    ).toEthSignedMessageHash();\n\n    // Increment the nonce of the contractBasedAccount\n    require(authKeyNonce[_contractBasedAccount] == _nonce, \"Incorrect contract nonce.\");\n    authKeyNonce[_contractBasedAccount] += 1;\n\n    // Get the public login key and confirm it is not on the blacklist\n    address _loginKeyAddress = _msgHash.recover(_msgHashSig);\n\n    // Get the public auth key and confirm that the login key is mapped to it\n    bytes32 _loginKeyHash = keccak256(abi.encodePacked(_loginKeyAddress)).toEthSignedMessageHash();\n\n    address _authKeyAddress = _loginKeyHash.recover(_loginKeyHashSig);\n\n    // TODO: Rethink this. This isn't checking the relationship between the authkey and the login key\n    //require(authKeys[_authKeyAddress].isOwner == true, \"Auth key is not an owner of the account\");\n\n    // Executes the expected transaction\n    (bool _succeeded,) = _contractBasedAccount.call(_data);\n\n    // Refunds gas to msg.sender\n    uint256 _gasTotal = _fixedGas.add(_startGas).sub(gasleft());\n    AbstractAccount(_contractBasedAccount).executeTransaction(\n      msg.sender,\n      _gasTotal.mul(tx.gasprice),\n      new bytes(0)\n    );\n\n    emit CompletedTransaction(_loginKeyAddress, _nonce, _succeeded);\n  }\n}\n",
    "sourcePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AccountProxy.sol",
    "ast": {
      "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AccountProxy.sol",
      "exportedSymbols": {
        "AccountProxy": [
          901
        ]
      },
      "id": 902,
      "nodeType": "SourceUnit",
      "nodes": [
        {
          "id": 749,
          "literals": [
            "solidity",
            "^",
            "0.5",
            ".2"
          ],
          "nodeType": "PragmaDirective",
          "src": "0:23:5"
        },
        {
          "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/Account.sol",
          "file": "./Account.sol",
          "id": 750,
          "nodeType": "ImportDirective",
          "scope": 902,
          "sourceUnit": 361,
          "src": "25:23:5",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AbstractAccount.sol",
          "file": "./AbstractAccount.sol",
          "id": 751,
          "nodeType": "ImportDirective",
          "scope": 902,
          "sourceUnit": 127,
          "src": "49:31:5",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AccountLibrary.sol",
          "file": "./AccountLibrary.sol",
          "id": 752,
          "nodeType": "ImportDirective",
          "scope": 902,
          "sourceUnit": 748,
          "src": "81:30:5",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
          "file": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
          "id": 753,
          "nodeType": "ImportDirective",
          "scope": 902,
          "sourceUnit": 1674,
          "src": "112:64:5",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
          "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
          "id": 754,
          "nodeType": "ImportDirective",
          "scope": 902,
          "sourceUnit": 1807,
          "src": "177:59:5",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "baseContracts": [
            {
              "arguments": null,
              "baseName": {
                "contractScope": null,
                "id": 755,
                "name": "Account",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 360,
                "src": "295:7:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_Account_$360",
                  "typeString": "contract Account"
                }
              },
              "id": 756,
              "nodeType": "InheritanceSpecifier",
              "src": "295:7:5"
            }
          ],
          "contractDependencies": [
            126,
            360
          ],
          "contractKind": "contract",
          "documentation": "@title Account Proxy",
          "fullyImplemented": true,
          "id": 901,
          "linearizedBaseContracts": [
            901,
            360,
            126
          ],
          "name": "AccountProxy",
          "nodeType": "ContractDefinition",
          "nodes": [
            {
              "id": 759,
              "libraryName": {
                "contractScope": null,
                "id": 757,
                "name": "AccountLibrary",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 747,
                "src": "313:14:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_AccountLibrary_$747",
                  "typeString": "library AccountLibrary"
                }
              },
              "nodeType": "UsingForDirective",
              "src": "307:41:5",
              "typeName": {
                "contractScope": null,
                "id": 758,
                "name": "AbstractAccount",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 126,
                "src": "332:15:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_AbstractAccount_$126",
                  "typeString": "contract AbstractAccount"
                }
              }
            },
            {
              "id": 762,
              "libraryName": {
                "contractScope": null,
                "id": 760,
                "name": "ECDSA",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1673,
                "src": "357:5:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ECDSA_$1673",
                  "typeString": "library ECDSA"
                }
              },
              "nodeType": "UsingForDirective",
              "src": "351:24:5",
              "typeName": {
                "id": 761,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "367:7:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            {
              "id": 765,
              "libraryName": {
                "contractScope": null,
                "id": 763,
                "name": "SafeMath",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1806,
                "src": "384:8:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_SafeMath_$1806",
                  "typeString": "library SafeMath"
                }
              },
              "nodeType": "UsingForDirective",
              "src": "378:27:5",
              "typeName": {
                "id": 764,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "397:7:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            {
              "constant": false,
              "id": 769,
              "name": "authKeyNonce",
              "nodeType": "VariableDeclaration",
              "scope": 901,
              "src": "409:47:5",
              "stateVariable": true,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "typeName": {
                "id": 768,
                "keyType": {
                  "id": 766,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "417:7:5",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "409:27:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 767,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "428:7:5",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              },
              "value": null,
              "visibility": "public"
            },
            {
              "anonymous": false,
              "documentation": null,
              "id": 777,
              "name": "CompletedTransaction",
              "nodeType": "EventDefinition",
              "parameters": {
                "id": 776,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 771,
                    "indexed": true,
                    "name": "loginKey",
                    "nodeType": "VariableDeclaration",
                    "scope": 777,
                    "src": "508:24:5",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 770,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "508:7:5",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 773,
                    "indexed": true,
                    "name": "nonce",
                    "nodeType": "VariableDeclaration",
                    "scope": 777,
                    "src": "534:21:5",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 772,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "534:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 775,
                    "indexed": true,
                    "name": "success",
                    "nodeType": "VariableDeclaration",
                    "scope": 777,
                    "src": "557:20:5",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "typeName": {
                      "id": 774,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "557:4:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "507:71:5"
              },
              "src": "481:98:5"
            },
            {
              "body": {
                "id": 899,
                "nodeType": "Block",
                "src": "1369:1561:5",
                "statements": [
                  {
                    "assignments": [
                      793
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 793,
                        "name": "_startGas",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "1439:17:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 792,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1439:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 796,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 794,
                        "name": "gasleft",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1814,
                        "src": "1459:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 795,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1459:9:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1439:29:5"
                  },
                  {
                    "assignments": [
                      798
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 798,
                        "name": "_msgHash",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "1500:16:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 797,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1500:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 817,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 803,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1856,
                                      "src": "1570:4:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_AccountProxy_$901",
                                        "typeString": "contract AccountProxy"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_AccountProxy_$901",
                                        "typeString": "contract AccountProxy"
                                      }
                                    ],
                                    "id": 802,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1562:7:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 804,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1562:13:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 805,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1821,
                                    "src": "1585:3:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 806,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sig",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "1585:7:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 807,
                                  "name": "_contractBasedAccount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 785,
                                  "src": "1602:21:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 808,
                                  "name": "_nonce",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 787,
                                  "src": "1633:6:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 809,
                                  "name": "_data",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 779,
                                  "src": "1649:5:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 810,
                                  "name": "_fixedGas",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 789,
                                  "src": "1664:9:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 811,
                                    "name": "tx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1833,
                                    "src": "1683:2:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_transaction",
                                      "typeString": "tx"
                                    }
                                  },
                                  "id": 812,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "gasprice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "1683:11:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 800,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1808,
                                  "src": "1536:3:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 801,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1536:16:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 813,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1536:166:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 799,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1815,
                            "src": "1519:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1519:189:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 815,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toEthSignedMessageHash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1672,
                        "src": "1519:212:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                          "typeString": "function (bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 816,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1519:214:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1500:233:5"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 819,
                              "name": "authKeyNonce",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 769,
                              "src": "1803:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 821,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 820,
                              "name": "_contractBasedAccount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 785,
                              "src": "1816:21:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1803:35:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 822,
                            "name": "_nonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 787,
                            "src": "1842:6:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1803:45:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "496e636f727265637420636f6e7472616374206e6f6e63652e",
                          "id": 824,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1850:27:5",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_c4672cb1edbf9d5d2ae025627e7e9d3569cb20dd38094aeef9a6f88380642cce",
                            "typeString": "literal_string \"Incorrect contract nonce.\""
                          },
                          "value": "Incorrect contract nonce."
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_c4672cb1edbf9d5d2ae025627e7e9d3569cb20dd38094aeef9a6f88380642cce",
                            "typeString": "literal_string \"Incorrect contract nonce.\""
                          }
                        ],
                        "id": 818,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          1824,
                          1825
                        ],
                        "referencedDeclaration": 1825,
                        "src": "1795:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 825,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1795:83:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 826,
                    "nodeType": "ExpressionStatement",
                    "src": "1795:83:5"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "id": 831,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 827,
                          "name": "authKeyNonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 769,
                          "src": "1884:12:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 829,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 828,
                          "name": "_contractBasedAccount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 785,
                          "src": "1897:21:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "IndexAccess",
                        "src": "1884:35:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 830,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1923:1:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "1884:40:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 832,
                    "nodeType": "ExpressionStatement",
                    "src": "1884:40:5"
                  },
                  {
                    "assignments": [
                      834
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 834,
                        "name": "_loginKeyAddress",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "2002:24:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 833,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2002:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 839,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 837,
                          "name": "_msgHashSig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 781,
                          "src": "2046:11:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 835,
                          "name": "_msgHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 798,
                          "src": "2029:8:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 836,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recover",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1656,
                        "src": "2029:16:5",
                        "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": 838,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2029:29:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2002:56:5"
                  },
                  {
                    "assignments": [
                      841
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 841,
                        "name": "_loginKeyHash",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "2143:21:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 840,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2143:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 850,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 845,
                                  "name": "_loginKeyAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 834,
                                  "src": "2194:16:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 843,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1808,
                                  "src": "2177:3:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 844,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "2177:16:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2177:34:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 842,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1815,
                            "src": "2167:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2167:45:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 848,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toEthSignedMessageHash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1672,
                        "src": "2167:68:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                          "typeString": "function (bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 849,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2167:70:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2143:94:5"
                  },
                  {
                    "assignments": [
                      852
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 852,
                        "name": "_authKeyAddress",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "2244:23:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 851,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2244:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 857,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 855,
                          "name": "_loginKeyHashSig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 783,
                          "src": "2292:16:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 853,
                          "name": "_loginKeyHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 841,
                          "src": "2270:13:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 854,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recover",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1656,
                        "src": "2270:21:5",
                        "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": 856,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2270:39:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2244:65:5"
                  },
                  {
                    "assignments": [
                      859,
                      null
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 859,
                        "name": "_succeeded",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "2562:15:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 858,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2562:4:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      null
                    ],
                    "id": 864,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 862,
                          "name": "_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 779,
                          "src": "2609:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 860,
                          "name": "_contractBasedAccount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 785,
                          "src": "2582:21:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 861,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "call",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2582:26:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                        }
                      },
                      "id": 863,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2582:33:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2561:54:5"
                  },
                  {
                    "assignments": [
                      866
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 866,
                        "name": "_gasTotal",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "2655:17:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 865,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2655:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 875,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 872,
                            "name": "gasleft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1814,
                            "src": "2704:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 873,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2704:9:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 869,
                              "name": "_startGas",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 793,
                              "src": "2689:9:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 867,
                              "name": "_fixedGas",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 789,
                              "src": "2675:9:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 868,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1700,
                            "src": "2675:13:5",
                            "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": 870,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2675:24:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 871,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1725,
                        "src": "2675:28:5",
                        "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": 874,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2675:39:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2655:59:5"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 880,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1821,
                            "src": "2785:3:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2785:10:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 884,
                                "name": "tx",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1833,
                                "src": "2817:2:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_transaction",
                                  "typeString": "tx"
                                }
                              },
                              "id": 885,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "gasprice",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2817:11:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 882,
                              "name": "_gasTotal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 866,
                              "src": "2803:9:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 883,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1759,
                            "src": "2803:13:5",
                            "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": 886,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2803:26:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 889,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2847:1:5",
                              "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": 888,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "2837:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 887,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2841:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2837:12:5",
                          "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,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 877,
                              "name": "_contractBasedAccount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 785,
                              "src": "2736:21:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 876,
                            "name": "AbstractAccount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 126,
                            "src": "2720:15:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_AbstractAccount_$126_$",
                              "typeString": "type(contract AbstractAccount)"
                            }
                          },
                          "id": 878,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2720:38:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_AbstractAccount_$126",
                            "typeString": "contract AbstractAccount"
                          }
                        },
                        "id": 879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "executeTransaction",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 125,
                        "src": "2720:57:5",
                        "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": 891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2720:135:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 892,
                    "nodeType": "ExpressionStatement",
                    "src": "2720:135:5"
                  },
                  {
                    "eventCall": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 894,
                          "name": "_loginKeyAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 834,
                          "src": "2888:16:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 895,
                          "name": "_nonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 787,
                          "src": "2906:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 896,
                          "name": "_succeeded",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 859,
                          "src": "2914:10:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "id": 893,
                        "name": "CompletedTransaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 777,
                        "src": "2867:20:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                          "typeString": "function (address,uint256,bool)"
                        }
                      },
                      "id": 897,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2867:58:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 898,
                    "nodeType": "EmitStatement",
                    "src": "2862:63:5"
                  }
                ]
              },
              "documentation": "@dev Veryify and sign a transaction\n @notice This is meant to be a transaction sent by the relayer\n @dev _data Data sent to be used in the creation of the transaction\n @dev _msgHashSig Signed message data of the transaction being sent by the login key (signed by login key)\n @dev _loginKeyHashSig Signed login key (and loginKeyTimeout) (signed by auth key)\n @dev _contractBasedAccount Address of the contract based account\n @dev _nonce Nonce of the contract\n @dev _fixedGas Amount of gas to send to be used in the transaction",
              "id": 900,
              "implemented": true,
              "kind": "function",
              "modifiers": [],
              "name": "executeRelayedTransaction",
              "nodeType": "FunctionDefinition",
              "parameters": {
                "id": 790,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 779,
                    "name": "_data",
                    "nodeType": "VariableDeclaration",
                    "scope": 900,
                    "src": "1190:18:5",
                    "stateVariable": false,
                    "storageLocation": "memory",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes"
                    },
                    "typeName": {
                      "id": 778,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "1190:5:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 781,
                    "name": "_msgHashSig",
                    "nodeType": "VariableDeclaration",
                    "scope": 900,
                    "src": "1214:24:5",
                    "stateVariable": false,
                    "storageLocation": "memory",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes"
                    },
                    "typeName": {
                      "id": 780,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "1214:5:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 783,
                    "name": "_loginKeyHashSig",
                    "nodeType": "VariableDeclaration",
                    "scope": 900,
                    "src": "1244:29:5",
                    "stateVariable": false,
                    "storageLocation": "memory",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes"
                    },
                    "typeName": {
                      "id": 782,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "1244:5:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 785,
                    "name": "_contractBasedAccount",
                    "nodeType": "VariableDeclaration",
                    "scope": 900,
                    "src": "1279:29:5",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 784,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1279:7:5",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 787,
                    "name": "_nonce",
                    "nodeType": "VariableDeclaration",
                    "scope": 900,
                    "src": "1314:14:5",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 786,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1314:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 789,
                    "name": "_fixedGas",
                    "nodeType": "VariableDeclaration",
                    "scope": 900,
                    "src": "1334:17:5",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 788,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1334:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "1184:171:5"
              },
              "returnParameters": {
                "id": 791,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "1369:0:5"
              },
              "scope": 901,
              "src": "1150:1780:5",
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            }
          ],
          "scope": 902,
          "src": "270:2662:5"
        }
      ],
      "src": "0:2933:5"
    },
    "legacyAST": {
      "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AccountProxy.sol",
      "exportedSymbols": {
        "AccountProxy": [
          901
        ]
      },
      "id": 902,
      "nodeType": "SourceUnit",
      "nodes": [
        {
          "id": 749,
          "literals": [
            "solidity",
            "^",
            "0.5",
            ".2"
          ],
          "nodeType": "PragmaDirective",
          "src": "0:23:5"
        },
        {
          "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/Account.sol",
          "file": "./Account.sol",
          "id": 750,
          "nodeType": "ImportDirective",
          "scope": 902,
          "sourceUnit": 361,
          "src": "25:23:5",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AbstractAccount.sol",
          "file": "./AbstractAccount.sol",
          "id": 751,
          "nodeType": "ImportDirective",
          "scope": 902,
          "sourceUnit": 127,
          "src": "49:31:5",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "/Volumes/hd2/Sandbox/authereum/packages/authereum-contracts/contracts/account/AccountLibrary.sol",
          "file": "./AccountLibrary.sol",
          "id": 752,
          "nodeType": "ImportDirective",
          "scope": 902,
          "sourceUnit": 748,
          "src": "81:30:5",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
          "file": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
          "id": 753,
          "nodeType": "ImportDirective",
          "scope": 902,
          "sourceUnit": 1674,
          "src": "112:64:5",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
          "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
          "id": 754,
          "nodeType": "ImportDirective",
          "scope": 902,
          "sourceUnit": 1807,
          "src": "177:59:5",
          "symbolAliases": [],
          "unitAlias": ""
        },
        {
          "baseContracts": [
            {
              "arguments": null,
              "baseName": {
                "contractScope": null,
                "id": 755,
                "name": "Account",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 360,
                "src": "295:7:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_Account_$360",
                  "typeString": "contract Account"
                }
              },
              "id": 756,
              "nodeType": "InheritanceSpecifier",
              "src": "295:7:5"
            }
          ],
          "contractDependencies": [
            126,
            360
          ],
          "contractKind": "contract",
          "documentation": "@title Account Proxy",
          "fullyImplemented": true,
          "id": 901,
          "linearizedBaseContracts": [
            901,
            360,
            126
          ],
          "name": "AccountProxy",
          "nodeType": "ContractDefinition",
          "nodes": [
            {
              "id": 759,
              "libraryName": {
                "contractScope": null,
                "id": 757,
                "name": "AccountLibrary",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 747,
                "src": "313:14:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_AccountLibrary_$747",
                  "typeString": "library AccountLibrary"
                }
              },
              "nodeType": "UsingForDirective",
              "src": "307:41:5",
              "typeName": {
                "contractScope": null,
                "id": 758,
                "name": "AbstractAccount",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 126,
                "src": "332:15:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_AbstractAccount_$126",
                  "typeString": "contract AbstractAccount"
                }
              }
            },
            {
              "id": 762,
              "libraryName": {
                "contractScope": null,
                "id": 760,
                "name": "ECDSA",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1673,
                "src": "357:5:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ECDSA_$1673",
                  "typeString": "library ECDSA"
                }
              },
              "nodeType": "UsingForDirective",
              "src": "351:24:5",
              "typeName": {
                "id": 761,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "367:7:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            {
              "id": 765,
              "libraryName": {
                "contractScope": null,
                "id": 763,
                "name": "SafeMath",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1806,
                "src": "384:8:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_SafeMath_$1806",
                  "typeString": "library SafeMath"
                }
              },
              "nodeType": "UsingForDirective",
              "src": "378:27:5",
              "typeName": {
                "id": 764,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "397:7:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            {
              "constant": false,
              "id": 769,
              "name": "authKeyNonce",
              "nodeType": "VariableDeclaration",
              "scope": 901,
              "src": "409:47:5",
              "stateVariable": true,
              "storageLocation": "default",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "typeName": {
                "id": 768,
                "keyType": {
                  "id": 766,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "417:7:5",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "409:27:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 767,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "428:7:5",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              },
              "value": null,
              "visibility": "public"
            },
            {
              "anonymous": false,
              "documentation": null,
              "id": 777,
              "name": "CompletedTransaction",
              "nodeType": "EventDefinition",
              "parameters": {
                "id": 776,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 771,
                    "indexed": true,
                    "name": "loginKey",
                    "nodeType": "VariableDeclaration",
                    "scope": 777,
                    "src": "508:24:5",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 770,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "508:7:5",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 773,
                    "indexed": true,
                    "name": "nonce",
                    "nodeType": "VariableDeclaration",
                    "scope": 777,
                    "src": "534:21:5",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 772,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "534:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 775,
                    "indexed": true,
                    "name": "success",
                    "nodeType": "VariableDeclaration",
                    "scope": 777,
                    "src": "557:20:5",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "typeName": {
                      "id": 774,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "557:4:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "507:71:5"
              },
              "src": "481:98:5"
            },
            {
              "body": {
                "id": 899,
                "nodeType": "Block",
                "src": "1369:1561:5",
                "statements": [
                  {
                    "assignments": [
                      793
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 793,
                        "name": "_startGas",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "1439:17:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 792,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1439:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 796,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 794,
                        "name": "gasleft",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1814,
                        "src": "1459:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 795,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1459:9:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1439:29:5"
                  },
                  {
                    "assignments": [
                      798
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 798,
                        "name": "_msgHash",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "1500:16:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 797,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1500:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 817,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 803,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1856,
                                      "src": "1570:4:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_AccountProxy_$901",
                                        "typeString": "contract AccountProxy"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_AccountProxy_$901",
                                        "typeString": "contract AccountProxy"
                                      }
                                    ],
                                    "id": 802,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1562:7:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 804,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1562:13:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 805,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1821,
                                    "src": "1585:3:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 806,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sig",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "1585:7:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 807,
                                  "name": "_contractBasedAccount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 785,
                                  "src": "1602:21:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 808,
                                  "name": "_nonce",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 787,
                                  "src": "1633:6:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 809,
                                  "name": "_data",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 779,
                                  "src": "1649:5:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 810,
                                  "name": "_fixedGas",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 789,
                                  "src": "1664:9:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 811,
                                    "name": "tx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1833,
                                    "src": "1683:2:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_transaction",
                                      "typeString": "tx"
                                    }
                                  },
                                  "id": 812,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "gasprice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "1683:11:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 800,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1808,
                                  "src": "1536:3:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 801,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1536:16:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 813,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1536:166:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 799,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1815,
                            "src": "1519:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1519:189:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 815,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toEthSignedMessageHash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1672,
                        "src": "1519:212:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                          "typeString": "function (bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 816,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1519:214:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1500:233:5"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 819,
                              "name": "authKeyNonce",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 769,
                              "src": "1803:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 821,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 820,
                              "name": "_contractBasedAccount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 785,
                              "src": "1816:21:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1803:35:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 822,
                            "name": "_nonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 787,
                            "src": "1842:6:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1803:45:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "496e636f727265637420636f6e7472616374206e6f6e63652e",
                          "id": 824,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1850:27:5",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_c4672cb1edbf9d5d2ae025627e7e9d3569cb20dd38094aeef9a6f88380642cce",
                            "typeString": "literal_string \"Incorrect contract nonce.\""
                          },
                          "value": "Incorrect contract nonce."
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_c4672cb1edbf9d5d2ae025627e7e9d3569cb20dd38094aeef9a6f88380642cce",
                            "typeString": "literal_string \"Incorrect contract nonce.\""
                          }
                        ],
                        "id": 818,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          1824,
                          1825
                        ],
                        "referencedDeclaration": 1825,
                        "src": "1795:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 825,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1795:83:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 826,
                    "nodeType": "ExpressionStatement",
                    "src": "1795:83:5"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "id": 831,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 827,
                          "name": "authKeyNonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 769,
                          "src": "1884:12:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 829,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 828,
                          "name": "_contractBasedAccount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 785,
                          "src": "1897:21:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "IndexAccess",
                        "src": "1884:35:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 830,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1923:1:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "1884:40:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 832,
                    "nodeType": "ExpressionStatement",
                    "src": "1884:40:5"
                  },
                  {
                    "assignments": [
                      834
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 834,
                        "name": "_loginKeyAddress",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "2002:24:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 833,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2002:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 839,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 837,
                          "name": "_msgHashSig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 781,
                          "src": "2046:11:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 835,
                          "name": "_msgHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 798,
                          "src": "2029:8:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 836,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recover",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1656,
                        "src": "2029:16:5",
                        "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": 838,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2029:29:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2002:56:5"
                  },
                  {
                    "assignments": [
                      841
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 841,
                        "name": "_loginKeyHash",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "2143:21:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 840,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2143:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 850,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 845,
                                  "name": "_loginKeyAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 834,
                                  "src": "2194:16:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 843,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1808,
                                  "src": "2177:3:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 844,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "2177:16:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2177:34:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 842,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1815,
                            "src": "2167:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2167:45:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 848,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toEthSignedMessageHash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1672,
                        "src": "2167:68:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                          "typeString": "function (bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 849,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2167:70:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2143:94:5"
                  },
                  {
                    "assignments": [
                      852
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 852,
                        "name": "_authKeyAddress",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "2244:23:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 851,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2244:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 857,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 855,
                          "name": "_loginKeyHashSig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 783,
                          "src": "2292:16:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 853,
                          "name": "_loginKeyHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 841,
                          "src": "2270:13:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 854,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recover",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1656,
                        "src": "2270:21:5",
                        "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": 856,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2270:39:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2244:65:5"
                  },
                  {
                    "assignments": [
                      859,
                      null
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 859,
                        "name": "_succeeded",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "2562:15:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 858,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2562:4:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      null
                    ],
                    "id": 864,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 862,
                          "name": "_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 779,
                          "src": "2609:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 860,
                          "name": "_contractBasedAccount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 785,
                          "src": "2582:21:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 861,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "call",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2582:26:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                        }
                      },
                      "id": 863,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2582:33:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2561:54:5"
                  },
                  {
                    "assignments": [
                      866
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 866,
                        "name": "_gasTotal",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "2655:17:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 865,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2655:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 875,
                    "initialValue": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 872,
                            "name": "gasleft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1814,
                            "src": "2704:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 873,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2704:9:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 869,
                              "name": "_startGas",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 793,
                              "src": "2689:9:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 867,
                              "name": "_fixedGas",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 789,
                              "src": "2675:9:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 868,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1700,
                            "src": "2675:13:5",
                            "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": 870,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2675:24:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 871,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1725,
                        "src": "2675:28:5",
                        "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": 874,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2675:39:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2655:59:5"
                  },
                  {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 880,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1821,
                            "src": "2785:3:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2785:10:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 884,
                                "name": "tx",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1833,
                                "src": "2817:2:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_transaction",
                                  "typeString": "tx"
                                }
                              },
                              "id": 885,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "gasprice",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2817:11:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 882,
                              "name": "_gasTotal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 866,
                              "src": "2803:9:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 883,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1759,
                            "src": "2803:13:5",
                            "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": 886,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2803:26:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 889,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2847:1:5",
                              "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": 888,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "2837:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 887,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2841:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2837:12:5",
                          "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,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 877,
                              "name": "_contractBasedAccount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 785,
                              "src": "2736:21:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 876,
                            "name": "AbstractAccount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 126,
                            "src": "2720:15:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_AbstractAccount_$126_$",
                              "typeString": "type(contract AbstractAccount)"
                            }
                          },
                          "id": 878,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2720:38:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_AbstractAccount_$126",
                            "typeString": "contract AbstractAccount"
                          }
                        },
                        "id": 879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "executeTransaction",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 125,
                        "src": "2720:57:5",
                        "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": 891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2720:135:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 892,
                    "nodeType": "ExpressionStatement",
                    "src": "2720:135:5"
                  },
                  {
                    "eventCall": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 894,
                          "name": "_loginKeyAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 834,
                          "src": "2888:16:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 895,
                          "name": "_nonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 787,
                          "src": "2906:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 896,
                          "name": "_succeeded",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 859,
                          "src": "2914:10:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "id": 893,
                        "name": "CompletedTransaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 777,
                        "src": "2867:20:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                          "typeString": "function (address,uint256,bool)"
                        }
                      },
                      "id": 897,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2867:58:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 898,
                    "nodeType": "EmitStatement",
                    "src": "2862:63:5"
                  }
                ]
              },
              "documentation": "@dev Veryify and sign a transaction\n @notice This is meant to be a transaction sent by the relayer\n @dev _data Data sent to be used in the creation of the transaction\n @dev _msgHashSig Signed message data of the transaction being sent by the login key (signed by login key)\n @dev _loginKeyHashSig Signed login key (and loginKeyTimeout) (signed by auth key)\n @dev _contractBasedAccount Address of the contract based account\n @dev _nonce Nonce of the contract\n @dev _fixedGas Amount of gas to send to be used in the transaction",
              "id": 900,
              "implemented": true,
              "kind": "function",
              "modifiers": [],
              "name": "executeRelayedTransaction",
              "nodeType": "FunctionDefinition",
              "parameters": {
                "id": 790,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 779,
                    "name": "_data",
                    "nodeType": "VariableDeclaration",
                    "scope": 900,
                    "src": "1190:18:5",
                    "stateVariable": false,
                    "storageLocation": "memory",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes"
                    },
                    "typeName": {
                      "id": 778,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "1190:5:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 781,
                    "name": "_msgHashSig",
                    "nodeType": "VariableDeclaration",
                    "scope": 900,
                    "src": "1214:24:5",
                    "stateVariable": false,
                    "storageLocation": "memory",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes"
                    },
                    "typeName": {
                      "id": 780,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "1214:5:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 783,
                    "name": "_loginKeyHashSig",
                    "nodeType": "VariableDeclaration",
                    "scope": 900,
                    "src": "1244:29:5",
                    "stateVariable": false,
                    "storageLocation": "memory",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes"
                    },
                    "typeName": {
                      "id": 782,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "1244:5:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 785,
                    "name": "_contractBasedAccount",
                    "nodeType": "VariableDeclaration",
                    "scope": 900,
                    "src": "1279:29:5",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 784,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1279:7:5",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 787,
                    "name": "_nonce",
                    "nodeType": "VariableDeclaration",
                    "scope": 900,
                    "src": "1314:14:5",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 786,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1314:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 789,
                    "name": "_fixedGas",
                    "nodeType": "VariableDeclaration",
                    "scope": 900,
                    "src": "1334:17:5",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 788,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1334:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "src": "1184:171:5"
              },
              "returnParameters": {
                "id": 791,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "1369:0:5"
              },
              "scope": 901,
              "src": "1150:1780:5",
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            }
          ],
          "scope": 902,
          "src": "270:2662:5"
        }
      ],
      "src": "0:2933:5"
    },
    "compiler": {
      "name": "solc",
      "version": "0.5.2+commit.1df8f40c.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.0.10",
    "updatedAt": "2019-06-04T00:56:17.892Z",
    "devdoc": {
      "methods": {
        "addAuthKey(address,bool)": {
          "details": "Add an auth key to the list of auth keys",
          "params": {
            "_authKey": "Address of the auth key to add",
            "_isOwner": "Set to true if the auth key is an authkey"
          }
        },
        "executeRelayedTransaction(bytes,bytes,bytes,address,uint256,uint256)": {
          "details": "Veryify and sign a transaction_data Data sent to be used in the creation of the transaction_msgHashSig Signed message data of the transaction being sent by the login key (signed by login key)_loginKeyHashSig Signed login key (and loginKeyTimeout) (signed by auth key)_contractBasedAccount Address of the contract based account_nonce Nonce of the contract_fixedGas Amount of gas to send to be used in the transaction"
        },
        "executeTransaction(address,uint256,bytes)": {
          "details": "Execute a transaction",
          "params": {
            "_data": "Data to be included in the transaction to the realyer",
            "_recipient": "Recipient of the gas payment",
            "_value": "Value of the gas payment"
          }
        },
        "removeAuthKey(address)": {
          "details": "Remove an auth key from the list of auth keys",
          "params": {
            "_authKey": "Address of the auth key to remove"
          }
        }
      },
      "title": "Account Proxy"
    },
    "userdoc": {
      "methods": {
        "executeRelayedTransaction(bytes,bytes,bytes,address,uint256,uint256)": {
          "notice": "This is meant to be a transaction sent by the relayer"
        },
        "executeTransaction(address,uint256,bytes)": {
          "notice": "This is called at the end of verifyAndSignTransaction to send a refund to the relayer"
        }
      }
    }
  }