{
  "contractName": "AuthereumAccount",
  "abi": [
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authKey",
          "type": "address"
        }
      ],
      "name": "addAuthKey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_msgHash",
          "type": "bytes32"
        },
        {
          "name": "_signatures",
          "type": "bytes"
        }
      ],
      "name": "isValidSignature",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authKeys",
          "type": "address[]"
        }
      ],
      "name": "removeMultipleAuthKeys",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_label",
          "type": "string"
        },
        {
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "register",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_msgHash",
          "type": "bytes32"
        },
        {
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "_isValidAuthKeySignature",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentDay",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_txDataMessageHash",
          "type": "bytes32"
        },
        {
          "name": "_transactionDataSignature",
          "type": "bytes"
        },
        {
          "name": "_loginKeyAuthorizationSignature",
          "type": "bytes"
        }
      ],
      "name": "validateLoginKeyMetaTxSigs",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "authKeys",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_oldAuthKeys",
          "type": "address[]"
        },
        {
          "name": "_newAuthKeys",
          "type": "address[]"
        }
      ],
      "name": "swapMultipleAuthKeys",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "dailyLimit",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CHAIN_ID",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_destination",
          "type": "address"
        },
        {
          "name": "_data",
          "type": "bytes"
        },
        {
          "name": "_value",
          "type": "uint256"
        },
        {
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "name": "_gasLimit",
          "type": "uint256"
        },
        {
          "name": "_transactionDataSignature",
          "type": "bytes"
        },
        {
          "name": "_loginKeyAuthorizationSignature",
          "type": "bytes"
        }
      ],
      "name": "executeLoginKeyMetaTx",
      "outputs": [
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authKey",
          "type": "address"
        }
      ],
      "name": "removeAuthKey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "dailyLimitTracker",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nonce",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_oldAuthKey",
          "type": "address"
        },
        {
          "name": "_newAuthKey",
          "type": "address"
        }
      ],
      "name": "swapAuthKeys",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "authKeysArray",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getAuthKeysArrayLength",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newDailyLimit",
          "type": "uint256"
        }
      ],
      "name": "changeDailyLimit",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "name": "_destination",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        },
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "executeTransaction",
      "outputs": [
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_destination",
          "type": "address"
        },
        {
          "name": "_data",
          "type": "bytes"
        },
        {
          "name": "_value",
          "type": "uint256"
        },
        {
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "name": "_gasLimit",
          "type": "uint256"
        },
        {
          "name": "_transactionDataSignature",
          "type": "bytes"
        }
      ],
      "name": "executeAuthKeyMetaTx",
      "outputs": [
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "authKeysArrayIndex",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authKeys",
          "type": "address[]"
        }
      ],
      "name": "addMultipleAuthKeys",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "transactionDataSigner",
          "type": "address"
        },
        {
          "name": "_loginKeyAuthorizationSignature",
          "type": "bytes"
        }
      ],
      "name": "isValidLoginKey",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "authKey",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newDailyLimit",
          "type": "uint256"
        }
      ],
      "name": "DailyLimitChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "FundsReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "authKey",
          "type": "address"
        }
      ],
      "name": "AddedAuthKey",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "authKey",
          "type": "address"
        }
      ],
      "name": "RemovedAuthKey",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "oldAuthKey",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newAuthKey",
          "type": "address"
        }
      ],
      "name": "SwappedAuthKeys",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "encodedData",
          "type": "bytes32"
        }
      ],
      "name": "CallFailed",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authKey",
          "type": "address"
        },
        {
          "name": "_authereumENSManager",
          "type": "address"
        },
        {
          "name": "_label",
          "type": "string"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.8+commit.23d335f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"_authKey\",\"type\":\"address\"}],\"name\":\"addAuthKey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_msgHash\",\"type\":\"bytes32\"},{\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_authKeys\",\"type\":\"address[]\"}],\"name\":\"removeMultipleAuthKeys\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_label\",\"type\":\"string\"},{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"register\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_msgHash\",\"type\":\"bytes32\"},{\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"_isValidAuthKeySignature\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentDay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_authKey\",\"type\":\"address\"},{\"name\":\"_authereumENSManager\",\"type\":\"address\"},{\"name\":\"_label\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_txDataMessageHash\",\"type\":\"bytes32\"},{\"name\":\"_transactionDataSignature\",\"type\":\"bytes\"},{\"name\":\"_loginKeyAuthorizationSignature\",\"type\":\"bytes\"}],\"name\":\"validateLoginKeyMetaTxSigs\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"authKeys\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_oldAuthKeys\",\"type\":\"address[]\"},{\"name\":\"_newAuthKeys\",\"type\":\"address[]\"}],\"name\":\"swapMultipleAuthKeys\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"dailyLimit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CHAIN_ID\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_destination\",\"type\":\"address\"},{\"name\":\"_data\",\"type\":\"bytes\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_nonce\",\"type\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"name\":\"_transactionDataSignature\",\"type\":\"bytes\"},{\"name\":\"_loginKeyAuthorizationSignature\",\"type\":\"bytes\"}],\"name\":\"executeLoginKeyMetaTx\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_authKey\",\"type\":\"address\"}],\"name\":\"removeAuthKey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"dailyLimitTracker\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_oldAuthKey\",\"type\":\"address\"},{\"name\":\"_newAuthKey\",\"type\":\"address\"}],\"name\":\"swapAuthKeys\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"authKeysArray\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAuthKeysArrayLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newDailyLimit\",\"type\":\"uint256\"}],\"name\":\"changeDailyLimit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\"},{\"name\":\"_destination\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_destination\",\"type\":\"address\"},{\"name\":\"_data\",\"type\":\"bytes\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_nonce\",\"type\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"name\":\"_transactionDataSignature\",\"type\":\"bytes\"}],\"name\":\"executeAuthKeyMetaTx\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"authKeysArrayIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_authKeys\",\"type\":\"address[]\"}],\"name\":\"addMultipleAuthKeys\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionDataSigner\",\"type\":\"address\"},{\"name\":\"_loginKeyAuthorizationSignature\",\"type\":\"bytes\"}],\"name\":\"isValidLoginKey\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"authKey\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newDailyLimit\",\"type\":\"uint256\"}],\"name\":\"DailyLimitChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"FundsReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"authKey\",\"type\":\"address\"}],\"name\":\"AddedAuthKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"authKey\",\"type\":\"address\"}],\"name\":\"RemovedAuthKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"oldAuthKey\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newAuthKey\",\"type\":\"address\"}],\"name\":\"SwappedAuthKeys\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"encodedData\",\"type\":\"bytes32\"}],\"name\":\"CallFailed\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"addAuthKey(address)\":{\"details\":\"Add an auth key to the list of auth keys\",\"params\":{\"_authKey\":\"Address of the auth key to add\"}},\"addMultipleAuthKeys(address[])\":{\"details\":\"Add multiple auth keys to the list of auth keys\",\"params\":{\"_authKeys\":\"Array of addresses to add to the auth keys list\"}},\"changeDailyLimit(uint256)\":{\"details\":\"Change the daily limit for a user_newDailyLimit New daily limit to set\"},\"executeAuthKeyMetaTx(address,bytes,uint256,uint256,uint256,bytes)\":{\"details\":\"Execute an authKey meta transaction\",\"params\":{\"_data\":\"Data of the transaction\",\"_destination\":\"Destination of the transaction\",\"_gasLimit\":\"Gas limit of the transaction\",\"_nonce\":\"Nonce of the transaction\",\"_transactionDataSignature\":\"Signed tx data\",\"_value\":\"Value of the transaction\"}},\"executeLoginKeyMetaTx(address,bytes,uint256,uint256,uint256,bytes,bytes)\":{\"details\":\"Execute an loginKey meta transaction\",\"params\":{\"_data\":\"Data of the transaction\",\"_destination\":\"Destination of the transaction\",\"_gasLimit\":\"Gas limit of the transaction\",\"_loginKeyAuthorizationSignature\":\"Signed loginKey\",\"_nonce\":\"Nonce of the transaction\",\"_transactionDataSignature\":\"Signed tx data\",\"_value\":\"Value of the transaction\"}},\"executeTransaction(uint256,address,uint256,bytes)\":{\"details\":\"Execute a transaction\",\"params\":{\"_data\":\"Data of the transaction\",\"_destination\":\"Destination of the transaction\",\"_nonce\":\"Nonce of the transaction\",\"_value\":\"Value of the transaction\"}},\"getAuthKeysArrayLength()\":{\"details\":\"Return the length of the authKeysArray\"},\"getCurrentDay()\":{\"details\":\"Sets the current day for the contract\"},\"initialize(address,address,string)\":{\"details\":\"Initialize the Authereum Account\",\"params\":{\"_authKey\":\"authKey that will own this account\",\"_authereumENSManager\":\"Address of the Authereum ENS Manager\",\"_label\":\"Label of the ENS name\"}},\"isValidLoginKey(address,bytes)\":{\"details\":\"Check if a loginKey is valid\",\"params\":{\"_loginKeyAuthorizationSignature\":\"Signed loginKey\",\"transactionDataSigner\":\"loginKey that signed the tx data\"}},\"removeAuthKey(address)\":{\"details\":\"Remove an auth key from the list of auth keys\",\"params\":{\"_authKey\":\"Address of the auth key to remove\"}},\"removeMultipleAuthKeys(address[])\":{\"details\":\"Remove multiple auth keys to the list of auth keys\",\"params\":{\"_authKeys\":\"Array of addresses to remove to the auth keys list\"}},\"swapAuthKeys(address,address)\":{\"details\":\"Swap one authKey for a non-authKey\",\"params\":{\"_newAuthKey\":\"A non-existing authKey\",\"_oldAuthKey\":\"An existing authKey\"}},\"swapMultipleAuthKeys(address[],address[])\":{\"details\":\"Swap multiple auth keys to the list of auth keys\",\"params\":{\"_newAuthKeys\":\"Array of addresses to add to the auth keys list\",\"_oldAuthKeys\":\"Array of addresses to remove to the auth keys list\"}},\"validateLoginKeyMetaTxSigs(bytes32,bytes,bytes)\":{\"details\":\"Validate signatures from an AuthKeyMetaTx\",\"params\":{\"_loginKeyAuthorizationSignature\":\"Signed loginKey\",\"_transactionDataSignature\":\"Signed tx data\",\"_txDataMessageHash\":\"Ethereum signed message of the transaction\"}}}},\"userdoc\":{\"methods\":{\"executeTransaction(uint256,address,uint256,bytes)\":{\"notice\":\"This is to be called directly by an AuthKey\"},\"initialize()\":{\"notice\":\"Public functions\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/AuthereumAccount.sol\":\"AuthereumAccount\"},\"evmVersion\":\"constantinople\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/Account.sol\":{\"keccak256\":\"0x5e2492fe50205a6fb3abe4e5f38ec4707b10694cc3a5a6fa89e3582b0634df09\",\"urls\":[\"bzzr://a8fce51e92840cce08b52ca7c6c9facf875d71ddcb3389c4de8d74d70e8590ce\"]},\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/AuthKeyMetaTxAccount.sol\":{\"keccak256\":\"0xae8d146676663b395f5baaf2251b3c273a02424a97aa4f9d2f29042ef21f773e\",\"urls\":[\"bzzr://498abe79ae3f2af93c959c74fc6894af7f66ccb68e65d762e5cb54fed7e4e702\"]},\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/AuthereumAccount.sol\":{\"keccak256\":\"0x244f7e4ebb9c828297388c41473547b055c389af4b681b7eed4308c82e1c1986\",\"urls\":[\"bzzr://a3fd61ce1844b6d1b880c9bda22bd1f1130d058476be7c34d370f6954d566ba6\"]},\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/LoginKeyMetaTxAccount.sol\":{\"keccak256\":\"0x9615bc834b3b3b1091a2aeebd0593049c1188a30728198b9906bd2d883ee3b28\",\"urls\":[\"bzzr://0a32526eadd541f615b16f5e8d2774e948ce84cd6e31db185998e2f289629b83\"]},\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/firewall/TransactionLimit.sol\":{\"keccak256\":\"0xc249c743cb81b2fdcb528b736215ed6b34d64a5b675628b07738698265c41f1d\",\"urls\":[\"bzzr://ee1ec6c9c4848aabb0bd1dd387948b2c5b07f0845c8ef86e1a3eae59797ebd10\"]},\"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0xc19027309407a962d4d5f68ad3e5c31eab6ffb6b134dd4811fd0f3d93ffd618a\",\"urls\":[\"bzzr://0fd21475ca178757005990869d51729368cbebd5f0222656141b4fbe5e12a363\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\"]},\"solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xde793835499803e9a2b59683de8bca5b77e2c4dc63748cf8b72973193e65e656\",\"urls\":[\"bzzr://d3ab468bc9bcc85b245abea04a7dbe404db1f70d2f63e3b9b70ed1fde8138ee9\"]},\"zos-lib/contracts/Initializable.sol\":{\"keccak256\":\"0xf79d9851c085aa8412e87d7a26d3485488fe12538ecb4e317ce41fc1f2c3a16a\",\"urls\":[\"bzzr://e45c5a995f57637b2300a376647ee345cc9cb30ee1984735091fcd4b10ff3500\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506135a3806100206000396000f3fe6080604052600436106101815760003560e01c80638dd17572116100d1578063cd11331e1161008a578063e3e077fb11610064578063e3e077fb14611115578063ed8fc6b81461132b578063f399f1dd14611390578063fd54c1221461145557610181565b8063cd11331e14610f3a578063cea0862114610f65578063e0eae14d14610fa057610181565b80638dd1757214610ad65780639565389e14610d835780639657b80914610dd4578063affed0e014610e23578063b4c2716414610e4e578063bd1a84ab14610ebf57610181565b80634571e3a61161013e5780635b79818f116101185780635b79818f1461091057806367eeba0c14610a695780638129fc1c14610a9457806385e1f4d014610aab57610181565b80634571e3a6146105f65780634c477daf146106fe5780635175ca5e146108a757610181565b806313f8c578146101c75780631626ba7e146102185780631704db301461033c5780631e59c5291461040157806320433e26146104a75780633e6968b6146105cb575b343373ffffffffffffffffffffffffffffffffffffffff167f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f60405160405180910390a3005b3480156101d357600080fd5b50610216600480360360208110156101ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611555565b005b34801561022457600080fd5b506102e86004803603604081101561023b57600080fd5b81019080803590602001909291908035906020019064010000000081111561026257600080fd5b82018360208201111561027457600080fd5b8035906020019184600183028401116401000000008311171561029657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061176e565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b34801561034857600080fd5b506103ff6004803603602081101561035f57600080fd5b810190808035906020019064010000000081111561037c57600080fd5b82018360208201111561038e57600080fd5b803590602001918460208302840111640100000000831117156103b057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061181a565b005b34801561040d57600080fd5b506104a56004803603604081101561042457600080fd5b810190808035906020019064010000000081111561044157600080fd5b82018360208201111561045357600080fd5b8035906020019184600183028401116401000000008311171561047557600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185f565b005b3480156104b357600080fd5b50610577600480360360408110156104ca57600080fd5b8101908080359060200190929190803590602001906401000000008111156104f157600080fd5b82018360208201111561050357600080fd5b8035906020019184600183028401116401000000008311171561052557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611864565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156105d757600080fd5b506105e06118f0565b6040518082815260200191505060405180910390f35b34801561060257600080fd5b506106fc6004803603606081101561061957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561067657600080fd5b82018360208201111561068857600080fd5b803590602001918460018302840111640100000000831117156106aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611904565b005b34801561070a57600080fd5b506108656004803603606081101561072157600080fd5b81019080803590602001909291908035906020019064010000000081111561074857600080fd5b82018360208201111561075a57600080fd5b8035906020019184600183028401116401000000008311171561077c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107df57600080fd5b8201836020820111156107f157600080fd5b8035906020019184600183028401116401000000008311171561081357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c67565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108b357600080fd5b506108f6600480360360208110156108ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d0e565b604051808215151515815260200191505060405180910390f35b34801561091c57600080fd5b50610a676004803603604081101561093357600080fd5b810190808035906020019064010000000081111561095057600080fd5b82018360208201111561096257600080fd5b8035906020019184602083028401116401000000008311171561098457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156109e457600080fd5b8201836020820111156109f657600080fd5b80359060200191846020830284011164010000000083111715610a1857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611d2e565b005b348015610a7557600080fd5b50610a7e611dff565b6040518082815260200191505060405180910390f35b348015610aa057600080fd5b50610aa9611e05565b005b348015610ab757600080fd5b50610ac0611f13565b6040518082815260200191505060405180910390f35b348015610ae257600080fd5b50610d08600480360360e0811015610af957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610b3657600080fd5b820183602082011115610b4857600080fd5b80359060200191846001830284011164010000000083111715610b6a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610beb57600080fd5b820183602082011115610bfd57600080fd5b80359060200191846001830284011164010000000083111715610c1f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c8257600080fd5b820183602082011115610c9457600080fd5b80359060200191846001830284011164010000000083111715610cb657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611f19565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d48578082015181840152602081019050610d2d565b50505050905090810190601f168015610d755780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d8f57600080fd5b50610dd260048036036020811015610da657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120dd565b005b348015610de057600080fd5b50610e0d60048036036020811015610df757600080fd5b810190808035906020019092919050505061230e565b6040518082815260200191505060405180910390f35b348015610e2f57600080fd5b50610e38612326565b6040518082815260200191505060405180910390f35b348015610e5a57600080fd5b50610ebd60048036036040811015610e7157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061232c565b005b348015610ecb57600080fd5b50610ef860048036036020811015610ee257600080fd5b810190808035906020019092919050505061251b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f4657600080fd5b50610f4f612557565b6040518082815260200191505060405180910390f35b348015610f7157600080fd5b50610f9e60048036036020811015610f8857600080fd5b8101908080359060200190929190505050612564565b005b348015610fac57600080fd5b5061109a60048036036080811015610fc357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561101457600080fd5b82018360208201111561102657600080fd5b8035906020019184600183028401116401000000008311171561104857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506125bd565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156110da5780820151818401526020810190506110bf565b50505050905090810190601f1680156111075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561112157600080fd5b506112b0600480360360c081101561113857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561117557600080fd5b82018360208201111561118757600080fd5b803590602001918460018302840111640100000000831117156111a957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561122a57600080fd5b82018360208201111561123c57600080fd5b8035906020019184600183028401116401000000008311171561125e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506125de565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156112f05780820151818401526020810190506112d5565b50505050905090810190601f16801561131d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561133757600080fd5b5061137a6004803603602081101561134e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612797565b6040518082815260200191505060405180910390f35b34801561139c57600080fd5b50611453600480360360208110156113b357600080fd5b81019080803590602001906401000000008111156113d057600080fd5b8201836020820111156113e257600080fd5b8035906020019184602083028401116401000000008311171561140457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506127af565b005b34801561146157600080fd5b5061153b6004803603604081101561147857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156114b557600080fd5b8201836020820111156114c757600080fd5b803590602001918460018302840111640100000000831117156114e957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506127f4565b604051808215151515815260200191505060405180910390f35b61155e336128c5565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561161e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b657920616c72656164792061646465640000000000000000000081525060200191505060405180910390fd5b6001603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060338190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600160338054905003603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f9e46251f3febb4bf40cf64591f0efc1d6ac8a9f0b8900b2adaeb83227757058860405160405180910390a250565b600060418251141561178b576117848383611864565b9050611814565b6082825114156117a65761179f83836129c4565b9050611814565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c6964205f7369676e617475726573206c656e67746800000000000081525060200191505060405180910390fd5b92915050565b611823336128c5565b60008090505b815181101561185b5761184e82828151811061184157fe5b60200260200101516120dd565b8080600101915050611829565b5050565b505050565b60008061187a8385612b0790919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118de576320c13b0b60e01b9150506118ea565b63ffffffff60e01b9150505b92915050565b60006201518042816118fe57fe5b06905090565b600060019054906101000a900460ff16806119235750611922612c0b565b5b8061193a57506000809054906101000a900460ff16155b61198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061354a602e913960400191505060405180910390fd5b60008060019054906101000a900460ff1615905080156119df576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6119e7612c1c565b6119ef611e05565b6001603560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060338490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600160338054905003603460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff167f9e46251f3febb4bf40cf64591f0efc1d6ac8a9f0b8900b2adaeb83227757058860405160405180910390a28273ffffffffffffffffffffffffffffffffffffffff16631e59c52983306040518363ffffffff1660e01b815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611bdb578082015181840152602081019050611bc0565b50505050905090810190601f168015611c085780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b505050508015611c615760008060016101000a81548160ff0219169083151502179055505b50505050565b600080611c7d8486612b0790919063ffffffff16565b90506000611cdf82604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120612d23565b90506000611cf68583612b0790919063ffffffff16565b9050611d01816128c5565b8293505050509392505050565b60356020528060005260406000206000915054906101000a900460ff1681565b611d37336128c5565b8051825114611dae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e70757420617272617973206e6f7420657175616c206c656e67746800000081525060200191505060405180910390fd5b60008090505b8251811015611dfa57611ded838281518110611dcc57fe5b6020026020010151838381518110611de057fe5b602002602001015161232c565b8080600101915050611db4565b505050565b60385481565b600060019054906101000a900460ff1680611e245750611e23612c0b565b5b80611e3b57506000809054906101000a900460ff16155b611e90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061354a602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611ee0576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b678ac7230489e800006038819055508015611f105760008060016101000a81548160ff0219169083151502179055505b50565b60375481565b606060005a9050611f2987612d7b565b60006120a7306000357fffffffff00000000000000000000000000000000000000000000000000000000166037548d8d8d8d3a8e604051602001808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401897bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140186805190602001908083835b602083106120475780518252602082019150602081019050602083039250612024565b6001836020036101000a038019825116818451168082178552505050505050905001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120612d23565b905060006120b6828787611c67565b905060606120c9898d8c8e3a8d8a612e3f565b905080945050505050979650505050505050565b6120e6336128c5565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b6579206e6f74207965742061646465640000000000000000000081525060200191505060405180910390fd5b60016121af612557565b11612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616e6e6f742072656d6f7665206c6173742061757468206b6579000000000081525060200191505060405180910390fd5b6000603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061228381612e82565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f24a1d50afe4670e7a657fa10322b233e347dc26799afb2d72147a679e693f31f60405160405180910390a250565b60396020528060005260406000206000915090505481565b60365481565b603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4f6c642061757468206b657920646f6573206e6f74206578697374000000000081525060200191505060405180910390fd5b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e65772061757468206b657920616c726561647920657869737473000000000081525060200191505060405180910390fd5b6124b481611555565b6124bd826120dd565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f084d1bb6d163e102e9e0ca9dcb761e37f325346ac27c1d8bbfb23c105ffba70660405160405180910390a35050565b6033818154811061252857fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603380549050905090565b61256d336128c5565b806038819055506038543373ffffffffffffffffffffffffffffffffffffffff167fca0b3dabefdbd8c72c0a9cf4a6e9d107da897abf036ef3f3f3b010cdd259415960405160405180910390a350565b60606125c8336128c5565b6125d485858585612fd6565b9050949350505050565b606060005a90506000612763306000357fffffffff00000000000000000000000000000000000000000000000000000000166037548c8c8c8c3a8d604051602001808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401897bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140186805190602001908083835b6020831061270357805182526020820191506020810190506020830392506126e0565b6001836020036101000a038019825116818451168082178552505050505050905001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120612d23565b905060006127718286613178565b90506060612784888c8b8d3a8c8a612e3f565b9050809450505050509695505050505050565b60346020528060005260406000206000915090505481565b6127b8336128c5565b60008090505b81518110156127f0576127e38282815181106127d657fe5b6020026020010151611555565b80806001019150506127be565b5050565b60008061285584604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120612d23565b9050600061286c8483612b0790919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250505092915050565b60011515603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148061294f57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6129c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f41757468206b657920697320696e76616c69640000000000000000000000000081525060200191505060405180910390fd5b50565b600060606129df60006041856131a39092919063ffffffff16565b905060606129f9604180866131a39092919063ffffffff16565b90506000612a108387612b0790919063ffffffff16565b90506000612a7282604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120612d23565b90506000612a898483612b0790919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612af1576320c13b0b60e01b95505050505050612b01565b63ffffffff60e01b955050505050505b92915050565b60006041825114612b1b5760009050612c05565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115612b6f5760009350505050612c05565b601b8160ff1614158015612b875750601c8160ff1614155b15612b985760009350505050612c05565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612bf5573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080303b90506000811491505090565b600060019054906101000a900460ff1680612c3b5750612c3a612c0b565b5b80612c5257506000809054906101000a900460ff16155b612ca7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061354a602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015612cf7576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b60016037819055508015612d205760008060016101000a81548160ff0219169083151502179055505b50565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b6000612d856118f0565b90506000826039600084815260200190815260200160002054019050603854811115612e19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4461696c79206c696d697420726561636865640000000000000000000000000081525060200191505060405180910390fd5b826039600084815260200190815260200160002060008282540192505081905550505050565b606080612e4e89898989612fd6565b90506000612e655a8561322f90919063ffffffff16565b9050612e728187876132b8565b8192505050979650505050505050565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008190505b600160338054905003811015612f795760336001820181548110612eec57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660338281548110612f2457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050612ecc565b50603360016033805490500381548110612f8f57fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556033805480919060019003612fd191906134d7565b505050565b6060603654851461304f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e636f7272656374206e6f6e6365000000000000000000000000000000000081525060200191505060405180910390fd5b603660008154809291906001019190505550600060608573ffffffffffffffffffffffffffffffffffffffff1685856040518082805190602001908083835b602083106130b1578051825260208201915060208101905060208303925061308e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613113576040519150601f19603f3d011682016040523d82523d6000602084013e613118565b606091505b50915091508161316b5760006131308888888861338c565b90507fe22e3683fe845a34c5adea424d0beb84895f513ea06745002d9d65f90100591a816040518082815260200191505060405180910390a1505b8092505050949350505050565b60008061318e8385612b0790919063ffffffff16565b9050613199816128c5565b8091505092915050565b6060818301845110156131b557600080fd5b60608215600081146131d257604051915060208201604052613223565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561321057805183526020830192506020810190506131f3565b50868552601f19601f8301166040525050505b50809150509392505050565b6000828211156132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b8083111561332e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e742067617320666f7220726566756e64000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc61335b848661345190919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613386573d6000803e3d6000fd5b50505050565b600084848484604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b6020831061340957805182526020820191506020810190506020830392506133e6565b6001836020036101000a038019825116818451168082178552505050505050905001945050505050604051602081830303815290604052805190602001209050949350505050565b60008083141561346457600090506134d1565b600082840290508284828161347557fe5b04146134cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806135296021913960400191505060405180910390fd5b809150505b92915050565b8154818355818111156134fe578183600052602060002091820191016134fd9190613503565b5b505050565b61352591905b80821115613521576000816000905550600101613509565b5090565b9056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a165627a7a72305820521de0528f30ba87758faa0973c1bfedf9f67a7fd249db7962558d4e8651cd980029",
  "deployedBytecode": "0x6080604052600436106101815760003560e01c80638dd17572116100d1578063cd11331e1161008a578063e3e077fb11610064578063e3e077fb14611115578063ed8fc6b81461132b578063f399f1dd14611390578063fd54c1221461145557610181565b8063cd11331e14610f3a578063cea0862114610f65578063e0eae14d14610fa057610181565b80638dd1757214610ad65780639565389e14610d835780639657b80914610dd4578063affed0e014610e23578063b4c2716414610e4e578063bd1a84ab14610ebf57610181565b80634571e3a61161013e5780635b79818f116101185780635b79818f1461091057806367eeba0c14610a695780638129fc1c14610a9457806385e1f4d014610aab57610181565b80634571e3a6146105f65780634c477daf146106fe5780635175ca5e146108a757610181565b806313f8c578146101c75780631626ba7e146102185780631704db301461033c5780631e59c5291461040157806320433e26146104a75780633e6968b6146105cb575b343373ffffffffffffffffffffffffffffffffffffffff167f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f60405160405180910390a3005b3480156101d357600080fd5b50610216600480360360208110156101ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611555565b005b34801561022457600080fd5b506102e86004803603604081101561023b57600080fd5b81019080803590602001909291908035906020019064010000000081111561026257600080fd5b82018360208201111561027457600080fd5b8035906020019184600183028401116401000000008311171561029657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061176e565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b34801561034857600080fd5b506103ff6004803603602081101561035f57600080fd5b810190808035906020019064010000000081111561037c57600080fd5b82018360208201111561038e57600080fd5b803590602001918460208302840111640100000000831117156103b057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061181a565b005b34801561040d57600080fd5b506104a56004803603604081101561042457600080fd5b810190808035906020019064010000000081111561044157600080fd5b82018360208201111561045357600080fd5b8035906020019184600183028401116401000000008311171561047557600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185f565b005b3480156104b357600080fd5b50610577600480360360408110156104ca57600080fd5b8101908080359060200190929190803590602001906401000000008111156104f157600080fd5b82018360208201111561050357600080fd5b8035906020019184600183028401116401000000008311171561052557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611864565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156105d757600080fd5b506105e06118f0565b6040518082815260200191505060405180910390f35b34801561060257600080fd5b506106fc6004803603606081101561061957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561067657600080fd5b82018360208201111561068857600080fd5b803590602001918460018302840111640100000000831117156106aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611904565b005b34801561070a57600080fd5b506108656004803603606081101561072157600080fd5b81019080803590602001909291908035906020019064010000000081111561074857600080fd5b82018360208201111561075a57600080fd5b8035906020019184600183028401116401000000008311171561077c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107df57600080fd5b8201836020820111156107f157600080fd5b8035906020019184600183028401116401000000008311171561081357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c67565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108b357600080fd5b506108f6600480360360208110156108ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d0e565b604051808215151515815260200191505060405180910390f35b34801561091c57600080fd5b50610a676004803603604081101561093357600080fd5b810190808035906020019064010000000081111561095057600080fd5b82018360208201111561096257600080fd5b8035906020019184602083028401116401000000008311171561098457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156109e457600080fd5b8201836020820111156109f657600080fd5b80359060200191846020830284011164010000000083111715610a1857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611d2e565b005b348015610a7557600080fd5b50610a7e611dff565b6040518082815260200191505060405180910390f35b348015610aa057600080fd5b50610aa9611e05565b005b348015610ab757600080fd5b50610ac0611f13565b6040518082815260200191505060405180910390f35b348015610ae257600080fd5b50610d08600480360360e0811015610af957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610b3657600080fd5b820183602082011115610b4857600080fd5b80359060200191846001830284011164010000000083111715610b6a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610beb57600080fd5b820183602082011115610bfd57600080fd5b80359060200191846001830284011164010000000083111715610c1f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c8257600080fd5b820183602082011115610c9457600080fd5b80359060200191846001830284011164010000000083111715610cb657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611f19565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d48578082015181840152602081019050610d2d565b50505050905090810190601f168015610d755780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d8f57600080fd5b50610dd260048036036020811015610da657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120dd565b005b348015610de057600080fd5b50610e0d60048036036020811015610df757600080fd5b810190808035906020019092919050505061230e565b6040518082815260200191505060405180910390f35b348015610e2f57600080fd5b50610e38612326565b6040518082815260200191505060405180910390f35b348015610e5a57600080fd5b50610ebd60048036036040811015610e7157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061232c565b005b348015610ecb57600080fd5b50610ef860048036036020811015610ee257600080fd5b810190808035906020019092919050505061251b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f4657600080fd5b50610f4f612557565b6040518082815260200191505060405180910390f35b348015610f7157600080fd5b50610f9e60048036036020811015610f8857600080fd5b8101908080359060200190929190505050612564565b005b348015610fac57600080fd5b5061109a60048036036080811015610fc357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561101457600080fd5b82018360208201111561102657600080fd5b8035906020019184600183028401116401000000008311171561104857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506125bd565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156110da5780820151818401526020810190506110bf565b50505050905090810190601f1680156111075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561112157600080fd5b506112b0600480360360c081101561113857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561117557600080fd5b82018360208201111561118757600080fd5b803590602001918460018302840111640100000000831117156111a957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561122a57600080fd5b82018360208201111561123c57600080fd5b8035906020019184600183028401116401000000008311171561125e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506125de565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156112f05780820151818401526020810190506112d5565b50505050905090810190601f16801561131d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561133757600080fd5b5061137a6004803603602081101561134e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612797565b6040518082815260200191505060405180910390f35b34801561139c57600080fd5b50611453600480360360208110156113b357600080fd5b81019080803590602001906401000000008111156113d057600080fd5b8201836020820111156113e257600080fd5b8035906020019184602083028401116401000000008311171561140457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506127af565b005b34801561146157600080fd5b5061153b6004803603604081101561147857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156114b557600080fd5b8201836020820111156114c757600080fd5b803590602001918460018302840111640100000000831117156114e957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506127f4565b604051808215151515815260200191505060405180910390f35b61155e336128c5565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561161e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b657920616c72656164792061646465640000000000000000000081525060200191505060405180910390fd5b6001603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060338190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600160338054905003603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f9e46251f3febb4bf40cf64591f0efc1d6ac8a9f0b8900b2adaeb83227757058860405160405180910390a250565b600060418251141561178b576117848383611864565b9050611814565b6082825114156117a65761179f83836129c4565b9050611814565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c6964205f7369676e617475726573206c656e67746800000000000081525060200191505060405180910390fd5b92915050565b611823336128c5565b60008090505b815181101561185b5761184e82828151811061184157fe5b60200260200101516120dd565b8080600101915050611829565b5050565b505050565b60008061187a8385612b0790919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118de576320c13b0b60e01b9150506118ea565b63ffffffff60e01b9150505b92915050565b60006201518042816118fe57fe5b06905090565b600060019054906101000a900460ff16806119235750611922612c0b565b5b8061193a57506000809054906101000a900460ff16155b61198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061354a602e913960400191505060405180910390fd5b60008060019054906101000a900460ff1615905080156119df576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6119e7612c1c565b6119ef611e05565b6001603560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060338490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600160338054905003603460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff167f9e46251f3febb4bf40cf64591f0efc1d6ac8a9f0b8900b2adaeb83227757058860405160405180910390a28273ffffffffffffffffffffffffffffffffffffffff16631e59c52983306040518363ffffffff1660e01b815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611bdb578082015181840152602081019050611bc0565b50505050905090810190601f168015611c085780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b505050508015611c615760008060016101000a81548160ff0219169083151502179055505b50505050565b600080611c7d8486612b0790919063ffffffff16565b90506000611cdf82604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120612d23565b90506000611cf68583612b0790919063ffffffff16565b9050611d01816128c5565b8293505050509392505050565b60356020528060005260406000206000915054906101000a900460ff1681565b611d37336128c5565b8051825114611dae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e70757420617272617973206e6f7420657175616c206c656e67746800000081525060200191505060405180910390fd5b60008090505b8251811015611dfa57611ded838281518110611dcc57fe5b6020026020010151838381518110611de057fe5b602002602001015161232c565b8080600101915050611db4565b505050565b60385481565b600060019054906101000a900460ff1680611e245750611e23612c0b565b5b80611e3b57506000809054906101000a900460ff16155b611e90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061354a602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611ee0576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b678ac7230489e800006038819055508015611f105760008060016101000a81548160ff0219169083151502179055505b50565b60375481565b606060005a9050611f2987612d7b565b60006120a7306000357fffffffff00000000000000000000000000000000000000000000000000000000166037548d8d8d8d3a8e604051602001808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401897bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140186805190602001908083835b602083106120475780518252602082019150602081019050602083039250612024565b6001836020036101000a038019825116818451168082178552505050505050905001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120612d23565b905060006120b6828787611c67565b905060606120c9898d8c8e3a8d8a612e3f565b905080945050505050979650505050505050565b6120e6336128c5565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b6579206e6f74207965742061646465640000000000000000000081525060200191505060405180910390fd5b60016121af612557565b11612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616e6e6f742072656d6f7665206c6173742061757468206b6579000000000081525060200191505060405180910390fd5b6000603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061228381612e82565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f24a1d50afe4670e7a657fa10322b233e347dc26799afb2d72147a679e693f31f60405160405180910390a250565b60396020528060005260406000206000915090505481565b60365481565b603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4f6c642061757468206b657920646f6573206e6f74206578697374000000000081525060200191505060405180910390fd5b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e65772061757468206b657920616c726561647920657869737473000000000081525060200191505060405180910390fd5b6124b481611555565b6124bd826120dd565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f084d1bb6d163e102e9e0ca9dcb761e37f325346ac27c1d8bbfb23c105ffba70660405160405180910390a35050565b6033818154811061252857fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603380549050905090565b61256d336128c5565b806038819055506038543373ffffffffffffffffffffffffffffffffffffffff167fca0b3dabefdbd8c72c0a9cf4a6e9d107da897abf036ef3f3f3b010cdd259415960405160405180910390a350565b60606125c8336128c5565b6125d485858585612fd6565b9050949350505050565b606060005a90506000612763306000357fffffffff00000000000000000000000000000000000000000000000000000000166037548c8c8c8c3a8d604051602001808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401897bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140186805190602001908083835b6020831061270357805182526020820191506020810190506020830392506126e0565b6001836020036101000a038019825116818451168082178552505050505050905001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120612d23565b905060006127718286613178565b90506060612784888c8b8d3a8c8a612e3f565b9050809450505050509695505050505050565b60346020528060005260406000206000915090505481565b6127b8336128c5565b60008090505b81518110156127f0576127e38282815181106127d657fe5b6020026020010151611555565b80806001019150506127be565b5050565b60008061285584604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120612d23565b9050600061286c8483612b0790919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250505092915050565b60011515603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148061294f57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6129c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f41757468206b657920697320696e76616c69640000000000000000000000000081525060200191505060405180910390fd5b50565b600060606129df60006041856131a39092919063ffffffff16565b905060606129f9604180866131a39092919063ffffffff16565b90506000612a108387612b0790919063ffffffff16565b90506000612a7282604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120612d23565b90506000612a898483612b0790919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612af1576320c13b0b60e01b95505050505050612b01565b63ffffffff60e01b955050505050505b92915050565b60006041825114612b1b5760009050612c05565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115612b6f5760009350505050612c05565b601b8160ff1614158015612b875750601c8160ff1614155b15612b985760009350505050612c05565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612bf5573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080303b90506000811491505090565b600060019054906101000a900460ff1680612c3b5750612c3a612c0b565b5b80612c5257506000809054906101000a900460ff16155b612ca7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061354a602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015612cf7576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b60016037819055508015612d205760008060016101000a81548160ff0219169083151502179055505b50565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b6000612d856118f0565b90506000826039600084815260200190815260200160002054019050603854811115612e19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4461696c79206c696d697420726561636865640000000000000000000000000081525060200191505060405180910390fd5b826039600084815260200190815260200160002060008282540192505081905550505050565b606080612e4e89898989612fd6565b90506000612e655a8561322f90919063ffffffff16565b9050612e728187876132b8565b8192505050979650505050505050565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008190505b600160338054905003811015612f795760336001820181548110612eec57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660338281548110612f2457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050612ecc565b50603360016033805490500381548110612f8f57fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556033805480919060019003612fd191906134d7565b505050565b6060603654851461304f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e636f7272656374206e6f6e6365000000000000000000000000000000000081525060200191505060405180910390fd5b603660008154809291906001019190505550600060608573ffffffffffffffffffffffffffffffffffffffff1685856040518082805190602001908083835b602083106130b1578051825260208201915060208101905060208303925061308e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613113576040519150601f19603f3d011682016040523d82523d6000602084013e613118565b606091505b50915091508161316b5760006131308888888861338c565b90507fe22e3683fe845a34c5adea424d0beb84895f513ea06745002d9d65f90100591a816040518082815260200191505060405180910390a1505b8092505050949350505050565b60008061318e8385612b0790919063ffffffff16565b9050613199816128c5565b8091505092915050565b6060818301845110156131b557600080fd5b60608215600081146131d257604051915060208201604052613223565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561321057805183526020830192506020810190506131f3565b50868552601f19601f8301166040525050505b50809150509392505050565b6000828211156132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b8083111561332e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e742067617320666f7220726566756e64000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc61335b848661345190919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613386573d6000803e3d6000fd5b50505050565b600084848484604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b6020831061340957805182526020820191506020810190506020830392506133e6565b6001836020036101000a038019825116818451168082178552505050505050905001945050505050604051602081830303815290604052805190602001209050949350505050565b60008083141561346457600090506134d1565b600082840290508284828161347557fe5b04146134cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806135296021913960400191505060405180910390fd5b809150505b92915050565b8154818355818111156134fe578183600052602060002091820191016134fd9190613503565b5b505050565b61352591905b80821115613521576000816000905550600101613509565b5090565b9056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a165627a7a72305820521de0528f30ba87758faa0973c1bfedf9f67a7fd249db7962558d4e8651cd980029",
  "sourceMap": "275:923:3:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;275:923:3;;;;;;;",
  "deployedSourceMap": "275:923:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1286:9:1;1274:10;1260:36;;;;;;;;;;;;275:923:3;2225:314:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2225:314:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2225:314:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;4886:458;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4886:458:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4886:458:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4886:458:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4886:458:1;;;;;;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;4886:458:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;4886:458:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;3526:205;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3526:205:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3526:205:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3526:205:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3526:205:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;3526:205:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;3526:205:1;;;;;;;;;;;;;;;:::i;:::-;;202:69:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;202:69:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;202:69:3;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;202:69:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;202:69:3;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;202:69:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5350:377:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5350:377:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5350:377:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;5350:377:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5350:377:1;;;;;;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;5350:377:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;5350:377:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;745:102:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;745:102:9;;;:::i;:::-;;;;;;;;;;;;;;;;;;;607:589:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;607:589:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;607:589:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;607:589:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;607:589:3;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;607:589:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;607:589:3;;;;;;;;;;;;;;;:::i;:::-;;8128:735:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8128:735:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8128:735:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;8128:735:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8128:735:1;;;;;;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;8128:735:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;8128:735:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;8128:735:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8128:735:1;;;;;;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;8128:735:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;8128:735:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;478:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;478:40:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;478:40:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4485:395;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4485:395:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4485:395:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4485:395:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4485:395:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;4485:395:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;4485:395:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4485:395:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4485:395:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;4485:395:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;4485:395:1;;;;;;;;;;;;;;;:::i;:::-;;103:25:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;103:25:9;;;:::i;:::-;;;;;;;;;;;;;;;;;;;321:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;321:79:9;;;:::i;:::-;;550:23:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;550:23:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1281:1070:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1281:1070:4;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1281:1070:4;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1281:1070:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1281:1070:4;;;;;;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;1281:1070:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1281:1070:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1281:1070:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1281:1070:4;;;;;;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;1281:1070:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1281:1070:4;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1281:1070:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1281:1070:4;;;;;;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;1281:1070:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1281:1070:4;;;;;;;;;;;;;;;:::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;1281:1070:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3001:379:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3001:379:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3001:379:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;134:52:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;134:52:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;134:52:9;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;524:20:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;524:20:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3882:380;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3882:380:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3882:380:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;383:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;383:30:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;383:30:1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1403:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1403:108:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;504:184:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;504:184:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;504:184:9;;;;;;;;;;;;;;;;;:::i;:::-;;1810:301:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1810:301:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1810:301:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1810:301:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1810:301:1;;;;;;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;1810:301:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1810:301:1;;;;;;;;;;;;;;;:::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;1810:301:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;455:938:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;455:938:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;455:938:2;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;455:938:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;455:938: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;455:938: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;;455:938:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;455:938:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;455:938: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;455:938: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;;455:938: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;455:938:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;419:53:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;419:53:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;419:53:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2679:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2679:199:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2679:199:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2679:199:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2679:199:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;2679:199:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;2679:199:1;;;;;;;;;;;;;;;:::i;:::-;;335:519:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;335:519:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;335:519:4;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;335:519:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;335:519:4;;;;;;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;335:519:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;335:519:4;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2225:314:1;1088:28;1105:10;1088:16;:28::i;:::-;2312:8;:18;2321:8;2312:18;;;;;;;;;;;;;;;;;;;;;;;;;2311:19;2303:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2388:4;2367:8;:18;2376:8;2367:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;2402:13;2421:8;2402:28;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;2402:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2494:1;2471:13;:20;;;;:24;2440:18;:28;2459:8;2440:28;;;;;;;;;;;;;;;:55;;;;2523:8;2510:22;;;;;;;;;;;;2225:314;:::o;4886:458::-;5023:6;5071:2;5049:11;:18;:24;5045:293;;;5096:47;5121:8;5131:11;5096:24;:47::i;:::-;5089:54;;;;5045:293;5186:3;5164:11;:18;:25;5160:178;;;5212:48;5238:8;5248:11;5212:25;:48::i;:::-;5205:55;;;;5160:178;5291:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4886:458;;;;;:::o;3526:205::-;1088:28;1105:10;1088:16;:28::i;:::-;3631:9;3643:1;3631:13;;3626:99;3650:9;:16;3646:1;:20;3626:99;;;3687:27;3701:9;3711:1;3701:12;;;;;;;;;;;;;;3687:13;:27::i;:::-;3668:3;;;;;;;3626:99;;;;3526:205;:::o;202:69:3:-;;;;:::o;5350:377:1:-;5494:6;5516:22;5541:50;5571:10;5541:8;:16;;:50;;;;:::i;:::-;5516:75;;5605:8;:24;5614:14;5605:24;;;;;;;;;;;;;;;;;;;;;;;;;5602:119;;;674:10;5652:9;;5645:16;;;;;5602:119;729:10;5699:11;;5692:18;;;5350:377;;;;;:::o;745:102:9:-;791:7;835:5;817:15;:23;;;;;;810:30;;745:102;:::o;607:589:3:-;1024:12:17;;;;;;;;;;;:31;;;;1040:15;:13;:15::i;:::-;1024:31;:47;;;;1060:11;;;;;;;;;;;1059:12;1024:47;1016:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;;;;;;1151:13;1129:35;;1174:14;1170:80;;;1213:4;1198:12;;:19;;;;;;;;;;;;;;;;;;1239:4;1225:11;;:18;;;;;;;;;;;;;;;;;;1170:80;804:20:3;:18;:20::i;:::-;834:29;:27;:29::i;:::-;929:4;908:8;:18;917:8;908:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;943:13;962:8;943:28;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;943:28:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1035:1;1012:13;:20;;;;:24;981:18;:28;1000:8;981:28;;;;;;;;;;;;;;;:55;;;;1064:8;1051:22;;;;;;;;;;;;1136:20;1116:50;;;1167:6;1183:4;1116:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1116:73:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1116:73:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1116:73:3;;;;1268:14:17;1264:55;;;1307:5;1292:12;;:20;;;;;;;;;;;;;;;;;;1264:55;607:589:3;;;;:::o;8128:735:1:-;8353:7;8376:29;8408:75;8448:25;8408:18;:26;;:75;;;;:::i;:::-;8376:107;;8494:40;8537:97;8577:21;8547:61;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;8547:61:1;;;8537:72;;;;;;:95;:97::i;:::-;8494:140;;8645:27;8675:95;8729:31;8675:32;:40;;:95;;;;:::i;:::-;8645:125;;8780:37;8797:19;8780:16;:37::i;:::-;8835:21;8828:28;;;;;8128:735;;;;;:::o;478:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;4485:395::-;1088:28;1105:10;1088:16;:28::i;:::-;4690:12;:19;4667:12;:19;:42;4659:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4758:9;4770:1;4758:13;;4753:121;4777:12;:19;4773:1;:23;4753:121;;;4817:46;4830:12;4843:1;4830:15;;;;;;;;;;;;;;4847:12;4860:1;4847:15;;;;;;;;;;;;;;4817:12;:46::i;:::-;4798:3;;;;;;;4753:121;;;;4485:395;;:::o;103:25:9:-;;;;:::o;321:79::-;1024:12:17;;;;;;;;;;;:31;;;;1040:15;:13;:15::i;:::-;1024:31;:47;;;;1060:11;;;;;;;;;;;1059:12;1024:47;1016:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;;;;;;1151:13;1129:35;;1174:14;1170:80;;;1213:4;1198:12;;:19;;;;;;;;;;;;;;;;;;1239:4;1225:11;;:18;;;;;;;;;;;;;;;;;;1170:80;385:8:9;372:10;:21;;;;1268:14:17;1264:55;;;1307:5;1292:12;;:20;;;;;;;;;;;;;;;;;;1264:55;321:79:9;:::o;550:23:1:-;;;;:::o;1281:1070:4:-;1585:12;1613:16;1632:9;1613:28;;1651:34;1678:6;1651:26;:34::i;:::-;1696:26;1725:265;1773:4;1792:7;;;;1813:8;;1835:12;1861:5;1880:6;1900;1920:11;1945:9;1735:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;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;;;1735:229:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1735:229:4;;;1725:240;;;;;;:263;:265::i;:::-;1696:294;;2001:29;2033:128;2073:18;2093:25;2120:31;2033:26;:128::i;:::-;2001:160;;2172:21;2196:122;2239:6;2247:12;2261:6;2269:5;2276:11;2289:9;2300:8;2196:29;:122::i;:::-;2172:146;;2336:8;2329:15;;;;;;1281:1070;;;;;;;;;:::o;3001:379:1:-;1088:28;1105:10;1088:16;:28::i;:::-;3090:8;:18;3099:8;3090:18;;;;;;;;;;;;;;;;;;;;;;;;;3082:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3180:1;3153:24;:22;:24::i;:::-;:28;3145:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3244:5;3223:8;:18;3232:8;3223:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3259:33;3283:8;3259:23;:33::i;:::-;3333:1;3302:18;:28;3321:8;3302:28;;;;;;;;;;;;;;;:32;;;;3364:8;3349:24;;;;;;;;;;;;3001:379;:::o;134:52:9:-;;;;;;;;;;;;;;;;;:::o;524:20:1:-;;;;:::o;3882:380::-;4005:8;:21;4014:11;4005:21;;;;;;;;;;;;;;;;;;;;;;;;;3997:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4077:8;:21;4086:11;4077:21;;;;;;;;;;;;;;;;;;;;;;;;;4076:22;4068:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4140:23;4151:11;4140:10;:23::i;:::-;4173:26;4187:11;4173:13;:26::i;:::-;4243:11;4214:41;;4230:11;4214:41;;;;;;;;;;;;3882:380;;:::o;383:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1403:108::-;1458:7;1484:13;:20;;;;1477:27;;1403:108;:::o;504:184:9:-;1088:28:1;1105:10;1088:16;:28::i;:::-;611:14:9;598:10;:27;;;;670:10;;658;640:41;;;;;;;;;;;;504:184;:::o;1810:301:1:-;2013:12;1088:28;1105:10;1088:16;:28::i;:::-;2048:56;2068:6;2076:12;2090:6;2098:5;2048:19;:56::i;:::-;2041:63;;1810:301;;;;;;:::o;455:938:2:-;704:12;732:16;751:9;732:28;;771:26;800:265;848:4;867:7;;;;888:8;;910:12;936:5;955:6;975;995:11;1020:9;810:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;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;;;810:229:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;810:229:2;;;800:240;;;;;;:263;:265::i;:::-;771:294;;1076:29;1108:95;1148:18;1168:25;1108:26;:95::i;:::-;1076:127;;1214:21;1238:122;1281:6;1289:12;1303:6;1311:5;1318:11;1331:9;1342:8;1238:29;:122::i;:::-;1214:146;;1378:8;1371:15;;;;;;455:938;;;;;;;;:::o;419:53:1:-;;;;;;;;;;;;;;;;;:::o;2679:199::-;1088:28;1105:10;1088:16;:28::i;:::-;2781:9;2793:1;2781:13;;2776:96;2800:9;:16;2796:1;:20;2776:96;;;2837:24;2848:9;2858:1;2848:12;;;;;;;;;;;;;;2837:10;:24::i;:::-;2818:3;;;;;;;2776:96;;;;2679:199;:::o;335:519:4:-;504:4;524:40;567:97;607:21;577:61;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;577:61:4;;;567:72;;;;;;:95;:97::i;:::-;524:140;;675:27;705:95;759:31;705:32;:40;;:95;;;;:::i;:::-;675:125;;818:8;:29;827:19;818:29;;;;;;;;;;;;;;;;;;;;;;;;;811:36;;;;335:519;;;;:::o;7138:164:1:-;7236:4;7214:26;;:8;:18;7223:8;7214:18;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;:57;;;;7266:4;7244:27;;:10;:27;;;7214:57;7206:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7138:164;:::o;5733:821::-;5881:6;5903:29;5935:24;5953:1;5956:2;5935:11;:17;;:24;;;;;:::i;:::-;5903:56;;5969:43;6015:25;6033:2;6037;6015:11;:17;;:25;;;;;:::i;:::-;5969:71;;6051:23;6077:56;6107:16;6077:8;:16;;:56;;;;:::i;:::-;6051:82;;6144:40;6187:91;6227:15;6197:55;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6197:55:1;;;6187:66;;;;;;:89;:91::i;:::-;6144:134;;6289:27;6319:94;6373:30;6319:32;:40;;:94;;;;:::i;:::-;6289:124;;6427:8;:29;6436:19;6427:29;;;;;;;;;;;;;;;;;;;;;;;;;6424:124;;;674:10;6479:9;;6472:16;;;;;;;;;6424:124;729:10;6526:11;;6519:18;;;;;;;5733:821;;;;;:::o;1229:1891:13:-;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:13;;;;;;;;3082:31;;;;;1229:1891;;;;;:::o;1409:467:17:-;1456:4;1797:10;1842:7;1830:20;1824:26;;1870:1;1864:2;:7;1857:14;;;1409:467;:::o;1140:70:1:-;1024:12:17;;;;;;;;;;;:31;;;;1040:15;:13;:15::i;:::-;1024:31;:47;;;;1060:11;;;;;;;;;;;1059:12;1024:47;1016:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;;;;;;1151:13;1129:35;;1174:14;1170:80;;;1213:4;1198:12;;:19;;;;;;;;;;;;;;;;;;1239:4;1225:11;;:18;;;;;;;;;;;;;;;;;;1170:80;1202:1:1;1191:8;:12;;;;1268:14:17;1264:55;;;1307:5;1292:12;;:20;;;;;;;;;;;;;;;;;;1264:55;1140:70:1;:::o;3386:265:13:-;3455:7;3638:4;3585:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3585:58:13;;;3575:69;;;;;;3568:76;;3386:265;;;:::o;1011:298:9:-;1082:18;1103:15;:13;:15::i;:::-;1082:36;;1128:18;1181:6;1149:17;:29;1167:10;1149:29;;;;;;;;;;;;:38;1128:59;;1219:10;;1205;:24;;1197:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1296:6;1263:17;:29;1281:10;1263:29;;;;;;;;;;;;:39;;;;;;;;;;;1011:298;;;:::o;10271:511:1:-;10537:12;10565:21;10589:56;10609:6;10617:12;10631:6;10639:5;10589:19;:56::i;:::-;10565:80;;10655:15;10673:24;10687:9;10673;:13;;:24;;;;:::i;:::-;10655:42;;10707:43;10720:7;10729:9;10740;10707:12;:43::i;:::-;10767:8;10760:15;;;;10271:511;;;;;;;;;:::o;6696:343::-;6766:13;6782:18;:28;6801:8;6782:28;;;;;;;;;;;;;;;;6766:44;;6826:9;6838:5;6826:17;;6821:123;6872:1;6849:13;:20;;;;:24;6845:1;:28;6821:123;;;6913:13;6931:1;6927;:5;6913:20;;;;;;;;;;;;;;;;;;;;;;;;;6894:13;6908:1;6894:16;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;6875:3;;;;;;;6821:123;;;;6961:13;6998:1;6975:13;:20;;;;:24;6961:39;;;;;;;;;;;;;;;;6954:46;;;;;;;;;;;7010:13;:22;;;;;;;;;;;;:::i;:::-;;6696:343;;:::o;9177:544::-;9352:12;9398:5;;9388:6;:15;9380:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9433:5;;:7;;;;;;;;;;;;;9451:12;9465:21;9490:12;:17;;9514:6;9522:5;9490:38;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;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;;;9490:38:1;;;;;;;;;;;;;;;;;;;;;;;;;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;;9450:78:1;;;;9544:7;9539:151;;9567:19;9589:48;9601:6;9609:12;9623:6;9631:5;9589:11;:48::i;:::-;9567:70;;9656:23;9667:11;9656:23;;;;;;;;;;;;;;;;;;9539:151;;9706:8;9699:15;;;;9177:544;;;;;;:::o;7496:375::-;7669:7;7692:29;7724:53;7751:25;7724:18;:26;;:53;;;;:::i;:::-;7692:85;;7787:39;7804:21;7787:16;:39::i;:::-;7843:21;7836:28;;;7496:375;;;;:::o;9430:2536:16:-;9570:12;9633:7;9624:6;:16;9606:6;:13;:35;;9598:44;;;;;;9653:22;9723:7;9716:15;9749:1;9744:1967;;;;11852:4;11846:11;11833:24;;11903:4;11892:9;11888:20;11882:4;11875:34;9709:2214;;9744:1967;9926:4;9920:11;9907:24;;10585:2;10576:7;10572:16;10967:9;10960:17;10954:4;10950:28;10938:9;10927;10923:25;10919:60;11015:7;11011:2;11007:16;11267:6;11253:9;11246:17;11240:4;11236:28;11224:9;11216:6;11212:22;11208:57;11204:70;11041:425;11300:3;11296:2;11293:11;11041:425;;;11444:2;11438:9;11434:2;11427:21;11341:4;11337:2;11333:13;11327:19;;11381:4;11377:2;11373:13;11367:19;;11041:425;;;11045:247;11502:7;11491:9;11484:26;11692:2;11688:7;11683:2;11679;11675:11;11671:25;11665:4;11658:39;9751:1960;;;9709:2214;;11950:9;11943:16;;;9430:2536;;;;;:::o;1274:179:14:-;1332:7;1364:1;1359;:6;;1351:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1410:9;1426:1;1422;:5;1410:17;;1445:1;1438:8;;;1274:179;;;;:::o;11019:260:1:-;11177:9;11165:8;:21;;11157:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11228:10;:19;;:44;11248:23;11261:9;11248:8;:12;;:23;;;;:::i;:::-;11228:44;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11228:44:1;11019:260;;;:::o;11533:339::-;11713:7;11783:6;11803:12;11829:6;11849:5;11753:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;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;;;11753:111:1;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11753:111:1;;;11743:122;;;;;;11736:129;;11533:339;;;;;;:::o;1693:458:14:-;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;275:923:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.5.8;\n\nimport \"./Account.sol\";\nimport \"./LoginKeyMetaTxAccount.sol\";\nimport \"./AuthKeyMetaTxAccount.sol\";\n\n/**\n * AuthereumENSManager interface.\n */\ncontract AuthereumENSManager {\n    function register(string calldata _label, address _owner) external {}\n}\n\ncontract AuthereumAccount is Account, AuthKeyMetaTxAccount, LoginKeyMetaTxAccount, AuthereumENSManager {\n\n    /// @dev Initialize the Authereum Account\n    /// @param _authKey authKey that will own this account\n    /// @param _authereumENSManager Address of the Authereum ENS Manager\n    /// @param _label Label of the ENS name\n    function initialize(\n        address _authKey,\n        address _authereumENSManager,\n        string memory _label\n    )\n        public\n        initializer\n    {\n        // Set the CHAIN_ID\n        Account.initialize();\n        TransactionLimit.initialize();\n\n        // Add self as an authKey\n        authKeys[_authKey] = true;\n        authKeysArray.push(_authKey);\n        authKeysArrayIndex[_authKey] = authKeysArray.length - 1;\n        emit AddedAuthKey(_authKey);\n\n        // Register user in ENS\n        AuthereumENSManager(_authereumENSManager).register(_label, address(this));\n    }\n}\n",
  "sourcePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/AuthereumAccount.sol",
  "ast": {
    "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/AuthereumAccount.sol",
    "exportedSymbols": {
      "AuthereumAccount": [
        969
      ],
      "AuthereumENSManager": [
        903
      ]
    },
    "id": 970,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 891,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:3"
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/Account.sol",
        "file": "./Account.sol",
        "id": 892,
        "nodeType": "ImportDirective",
        "scope": 970,
        "sourceUnit": 816,
        "src": "25:23:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/LoginKeyMetaTxAccount.sol",
        "file": "./LoginKeyMetaTxAccount.sol",
        "id": 893,
        "nodeType": "ImportDirective",
        "scope": 970,
        "sourceUnit": 1086,
        "src": "49:37:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/AuthKeyMetaTxAccount.sol",
        "file": "./AuthKeyMetaTxAccount.sol",
        "id": 894,
        "nodeType": "ImportDirective",
        "scope": 970,
        "sourceUnit": 890,
        "src": "87:36:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "AuthereumENSManager interface.",
        "fullyImplemented": true,
        "id": 903,
        "linearizedBaseContracts": [
          903
        ],
        "name": "AuthereumENSManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 901,
              "nodeType": "Block",
              "src": "269:2:3",
              "statements": []
            },
            "documentation": null,
            "id": 902,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "register",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 899,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 896,
                  "name": "_label",
                  "nodeType": "VariableDeclaration",
                  "scope": 902,
                  "src": "220:22:3",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 895,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "220:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 898,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 902,
                  "src": "244:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 897,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "244:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "219:40:3"
            },
            "returnParameters": {
              "id": 900,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "269:0:3"
            },
            "scope": 903,
            "src": "202:69:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 970,
        "src": "167:106:3"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 904,
              "name": "Account",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 815,
              "src": "304:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Account_$815",
                "typeString": "contract Account"
              }
            },
            "id": 905,
            "nodeType": "InheritanceSpecifier",
            "src": "304:7:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 906,
              "name": "AuthKeyMetaTxAccount",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 889,
              "src": "313:20:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AuthKeyMetaTxAccount_$889",
                "typeString": "contract AuthKeyMetaTxAccount"
              }
            },
            "id": 907,
            "nodeType": "InheritanceSpecifier",
            "src": "313:20:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 908,
              "name": "LoginKeyMetaTxAccount",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1085,
              "src": "335:21:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_LoginKeyMetaTxAccount_$1085",
                "typeString": "contract LoginKeyMetaTxAccount"
              }
            },
            "id": 909,
            "nodeType": "InheritanceSpecifier",
            "src": "335:21:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 910,
              "name": "AuthereumENSManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 903,
              "src": "358:19:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AuthereumENSManager_$903",
                "typeString": "contract AuthereumENSManager"
              }
            },
            "id": 911,
            "nodeType": "InheritanceSpecifier",
            "src": "358:19:3"
          }
        ],
        "contractDependencies": [
          815,
          889,
          903,
          1085,
          2024,
          4673
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 969,
        "linearizedBaseContracts": [
          969,
          903,
          1085,
          2024,
          889,
          815,
          4673
        ],
        "name": "AuthereumAccount",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 967,
              "nodeType": "Block",
              "src": "766:430:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 922,
                        "name": "Account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 815,
                        "src": "804:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Account_$815_$",
                          "typeString": "type(contract Account)"
                        }
                      },
                      "id": 924,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 137,
                      "src": "804:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "804:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 926,
                  "nodeType": "ExpressionStatement",
                  "src": "804:20:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 927,
                        "name": "TransactionLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2024,
                        "src": "834:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TransactionLimit_$2024_$",
                          "typeString": "type(contract TransactionLimit)"
                        }
                      },
                      "id": 929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1962,
                      "src": "834:27:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "834:29:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 931,
                  "nodeType": "ExpressionStatement",
                  "src": "834:29:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 932,
                        "name": "authKeys",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 84,
                        "src": "908:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 934,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 933,
                        "name": "_authKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 913,
                        "src": "917:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "908:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 935,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "929:4:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "908:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 937,
                  "nodeType": "ExpressionStatement",
                  "src": "908:25:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 941,
                        "name": "_authKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 913,
                        "src": "962:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 938,
                        "name": "authKeysArray",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "943:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 940,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "943:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) returns (uint256)"
                      }
                    },
                    "id": 942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "943:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 943,
                  "nodeType": "ExpressionStatement",
                  "src": "943:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 944,
                        "name": "authKeysArrayIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 80,
                        "src": "981:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 946,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 945,
                        "name": "_authKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 913,
                        "src": "1000:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "981:28:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 950,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 947,
                          "name": "authKeysArray",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 76,
                          "src": "1012:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                            "typeString": "address[] storage ref"
                          }
                        },
                        "id": 948,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1012:20:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 949,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1035:1:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "1012:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "981:55:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 952,
                  "nodeType": "ExpressionStatement",
                  "src": "981:55:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 954,
                        "name": "_authKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 913,
                        "src": "1064:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 953,
                      "name": "AddedAuthKey",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 104,
                      "src": "1051:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 955,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1051:22:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 956,
                  "nodeType": "EmitStatement",
                  "src": "1046:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 961,
                        "name": "_label",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 917,
                        "src": "1167:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 963,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4722,
                            "src": "1183:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AuthereumAccount_$969",
                              "typeString": "contract AuthereumAccount"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AuthereumAccount_$969",
                              "typeString": "contract AuthereumAccount"
                            }
                          ],
                          "id": 962,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1175:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 964,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1175:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 958,
                            "name": "_authereumENSManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 915,
                            "src": "1136:20:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 957,
                          "name": "AuthereumENSManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 903,
                          "src": "1116:19:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_AuthereumENSManager_$903_$",
                            "typeString": "type(contract AuthereumENSManager)"
                          }
                        },
                        "id": 959,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1116:41:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AuthereumENSManager_$903",
                          "typeString": "contract AuthereumENSManager"
                        }
                      },
                      "id": 960,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "register",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 902,
                      "src": "1116:50:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,address) external"
                      }
                    },
                    "id": 965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1116:73:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 966,
                  "nodeType": "ExpressionStatement",
                  "src": "1116:73:3"
                }
              ]
            },
            "documentation": "@dev Initialize the Authereum Account\n @param _authKey authKey that will own this account\n @param _authereumENSManager Address of the Authereum ENS Manager\n @param _label Label of the ENS name",
            "id": 968,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 920,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 919,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4654,
                  "src": "750:11:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "750:11:3"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 918,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 913,
                  "name": "_authKey",
                  "nodeType": "VariableDeclaration",
                  "scope": 968,
                  "src": "636:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 912,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "636:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 915,
                  "name": "_authereumENSManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 968,
                  "src": "662:28:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 914,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "662:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 917,
                  "name": "_label",
                  "nodeType": "VariableDeclaration",
                  "scope": 968,
                  "src": "700:20:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 916,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "700:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "626:100:3"
            },
            "returnParameters": {
              "id": 921,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "766:0:3"
            },
            "scope": 969,
            "src": "607:589:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 970,
        "src": "275:923:3"
      }
    ],
    "src": "0:1199:3"
  },
  "legacyAST": {
    "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/AuthereumAccount.sol",
    "exportedSymbols": {
      "AuthereumAccount": [
        969
      ],
      "AuthereumENSManager": [
        903
      ]
    },
    "id": 970,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 891,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:3"
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/Account.sol",
        "file": "./Account.sol",
        "id": 892,
        "nodeType": "ImportDirective",
        "scope": 970,
        "sourceUnit": 816,
        "src": "25:23:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/LoginKeyMetaTxAccount.sol",
        "file": "./LoginKeyMetaTxAccount.sol",
        "id": 893,
        "nodeType": "ImportDirective",
        "scope": 970,
        "sourceUnit": 1086,
        "src": "49:37:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/AuthKeyMetaTxAccount.sol",
        "file": "./AuthKeyMetaTxAccount.sol",
        "id": 894,
        "nodeType": "ImportDirective",
        "scope": 970,
        "sourceUnit": 890,
        "src": "87:36:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "AuthereumENSManager interface.",
        "fullyImplemented": true,
        "id": 903,
        "linearizedBaseContracts": [
          903
        ],
        "name": "AuthereumENSManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 901,
              "nodeType": "Block",
              "src": "269:2:3",
              "statements": []
            },
            "documentation": null,
            "id": 902,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "register",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 899,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 896,
                  "name": "_label",
                  "nodeType": "VariableDeclaration",
                  "scope": 902,
                  "src": "220:22:3",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 895,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "220:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 898,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 902,
                  "src": "244:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 897,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "244:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "219:40:3"
            },
            "returnParameters": {
              "id": 900,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "269:0:3"
            },
            "scope": 903,
            "src": "202:69:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 970,
        "src": "167:106:3"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 904,
              "name": "Account",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 815,
              "src": "304:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Account_$815",
                "typeString": "contract Account"
              }
            },
            "id": 905,
            "nodeType": "InheritanceSpecifier",
            "src": "304:7:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 906,
              "name": "AuthKeyMetaTxAccount",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 889,
              "src": "313:20:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AuthKeyMetaTxAccount_$889",
                "typeString": "contract AuthKeyMetaTxAccount"
              }
            },
            "id": 907,
            "nodeType": "InheritanceSpecifier",
            "src": "313:20:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 908,
              "name": "LoginKeyMetaTxAccount",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1085,
              "src": "335:21:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_LoginKeyMetaTxAccount_$1085",
                "typeString": "contract LoginKeyMetaTxAccount"
              }
            },
            "id": 909,
            "nodeType": "InheritanceSpecifier",
            "src": "335:21:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 910,
              "name": "AuthereumENSManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 903,
              "src": "358:19:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AuthereumENSManager_$903",
                "typeString": "contract AuthereumENSManager"
              }
            },
            "id": 911,
            "nodeType": "InheritanceSpecifier",
            "src": "358:19:3"
          }
        ],
        "contractDependencies": [
          815,
          889,
          903,
          1085,
          2024,
          4673
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 969,
        "linearizedBaseContracts": [
          969,
          903,
          1085,
          2024,
          889,
          815,
          4673
        ],
        "name": "AuthereumAccount",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 967,
              "nodeType": "Block",
              "src": "766:430:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 922,
                        "name": "Account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 815,
                        "src": "804:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Account_$815_$",
                          "typeString": "type(contract Account)"
                        }
                      },
                      "id": 924,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 137,
                      "src": "804:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "804:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 926,
                  "nodeType": "ExpressionStatement",
                  "src": "804:20:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 927,
                        "name": "TransactionLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2024,
                        "src": "834:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TransactionLimit_$2024_$",
                          "typeString": "type(contract TransactionLimit)"
                        }
                      },
                      "id": 929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1962,
                      "src": "834:27:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "834:29:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 931,
                  "nodeType": "ExpressionStatement",
                  "src": "834:29:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 932,
                        "name": "authKeys",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 84,
                        "src": "908:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 934,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 933,
                        "name": "_authKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 913,
                        "src": "917:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "908:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 935,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "929:4:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "908:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 937,
                  "nodeType": "ExpressionStatement",
                  "src": "908:25:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 941,
                        "name": "_authKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 913,
                        "src": "962:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 938,
                        "name": "authKeysArray",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "943:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 940,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "943:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) returns (uint256)"
                      }
                    },
                    "id": 942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "943:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 943,
                  "nodeType": "ExpressionStatement",
                  "src": "943:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 944,
                        "name": "authKeysArrayIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 80,
                        "src": "981:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 946,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 945,
                        "name": "_authKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 913,
                        "src": "1000:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "981:28:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 950,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 947,
                          "name": "authKeysArray",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 76,
                          "src": "1012:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                            "typeString": "address[] storage ref"
                          }
                        },
                        "id": 948,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1012:20:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 949,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1035:1:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "1012:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "981:55:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 952,
                  "nodeType": "ExpressionStatement",
                  "src": "981:55:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 954,
                        "name": "_authKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 913,
                        "src": "1064:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 953,
                      "name": "AddedAuthKey",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 104,
                      "src": "1051:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 955,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1051:22:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 956,
                  "nodeType": "EmitStatement",
                  "src": "1046:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 961,
                        "name": "_label",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 917,
                        "src": "1167:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 963,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4722,
                            "src": "1183:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AuthereumAccount_$969",
                              "typeString": "contract AuthereumAccount"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AuthereumAccount_$969",
                              "typeString": "contract AuthereumAccount"
                            }
                          ],
                          "id": 962,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1175:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 964,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1175:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 958,
                            "name": "_authereumENSManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 915,
                            "src": "1136:20:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 957,
                          "name": "AuthereumENSManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 903,
                          "src": "1116:19:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_AuthereumENSManager_$903_$",
                            "typeString": "type(contract AuthereumENSManager)"
                          }
                        },
                        "id": 959,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1116:41:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AuthereumENSManager_$903",
                          "typeString": "contract AuthereumENSManager"
                        }
                      },
                      "id": 960,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "register",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 902,
                      "src": "1116:50:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,address) external"
                      }
                    },
                    "id": 965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1116:73:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 966,
                  "nodeType": "ExpressionStatement",
                  "src": "1116:73:3"
                }
              ]
            },
            "documentation": "@dev Initialize the Authereum Account\n @param _authKey authKey that will own this account\n @param _authereumENSManager Address of the Authereum ENS Manager\n @param _label Label of the ENS name",
            "id": 968,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 920,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 919,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4654,
                  "src": "750:11:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "750:11:3"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 918,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 913,
                  "name": "_authKey",
                  "nodeType": "VariableDeclaration",
                  "scope": 968,
                  "src": "636:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 912,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "636:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 915,
                  "name": "_authereumENSManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 968,
                  "src": "662:28:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 914,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "662:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 917,
                  "name": "_label",
                  "nodeType": "VariableDeclaration",
                  "scope": 968,
                  "src": "700:20:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 916,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "700:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "626:100:3"
            },
            "returnParameters": {
              "id": 921,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "766:0:3"
            },
            "scope": 969,
            "src": "607:589:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 970,
        "src": "275:923:3"
      }
    ],
    "src": "0:1199:3"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.8+commit.23d335f2.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.11",
  "updatedAt": "2019-07-12T19:22:56.363Z",
  "devdoc": {
    "methods": {
      "addAuthKey(address)": {
        "details": "Add an auth key to the list of auth keys",
        "params": {
          "_authKey": "Address of the auth key to add"
        }
      },
      "addMultipleAuthKeys(address[])": {
        "details": "Add multiple auth keys to the list of auth keys",
        "params": {
          "_authKeys": "Array of addresses to add to the auth keys list"
        }
      },
      "changeDailyLimit(uint256)": {
        "details": "Change the daily limit for a user_newDailyLimit New daily limit to set"
      },
      "executeAuthKeyMetaTx(address,bytes,uint256,uint256,uint256,bytes)": {
        "details": "Execute an authKey meta transaction",
        "params": {
          "_data": "Data of the transaction",
          "_destination": "Destination of the transaction",
          "_gasLimit": "Gas limit of the transaction",
          "_nonce": "Nonce of the transaction",
          "_transactionDataSignature": "Signed tx data",
          "_value": "Value of the transaction"
        }
      },
      "executeLoginKeyMetaTx(address,bytes,uint256,uint256,uint256,bytes,bytes)": {
        "details": "Execute an loginKey meta transaction",
        "params": {
          "_data": "Data of the transaction",
          "_destination": "Destination of the transaction",
          "_gasLimit": "Gas limit of the transaction",
          "_loginKeyAuthorizationSignature": "Signed loginKey",
          "_nonce": "Nonce of the transaction",
          "_transactionDataSignature": "Signed tx data",
          "_value": "Value of the transaction"
        }
      },
      "executeTransaction(uint256,address,uint256,bytes)": {
        "details": "Execute a transaction",
        "params": {
          "_data": "Data of the transaction",
          "_destination": "Destination of the transaction",
          "_nonce": "Nonce of the transaction",
          "_value": "Value of the transaction"
        }
      },
      "getAuthKeysArrayLength()": {
        "details": "Return the length of the authKeysArray"
      },
      "getCurrentDay()": {
        "details": "Sets the current day for the contract"
      },
      "initialize(address,address,string)": {
        "details": "Initialize the Authereum Account",
        "params": {
          "_authKey": "authKey that will own this account",
          "_authereumENSManager": "Address of the Authereum ENS Manager",
          "_label": "Label of the ENS name"
        }
      },
      "isValidLoginKey(address,bytes)": {
        "details": "Check if a loginKey is valid",
        "params": {
          "_loginKeyAuthorizationSignature": "Signed loginKey",
          "transactionDataSigner": "loginKey that signed the tx data"
        }
      },
      "removeAuthKey(address)": {
        "details": "Remove an auth key from the list of auth keys",
        "params": {
          "_authKey": "Address of the auth key to remove"
        }
      },
      "removeMultipleAuthKeys(address[])": {
        "details": "Remove multiple auth keys to the list of auth keys",
        "params": {
          "_authKeys": "Array of addresses to remove to the auth keys list"
        }
      },
      "swapAuthKeys(address,address)": {
        "details": "Swap one authKey for a non-authKey",
        "params": {
          "_newAuthKey": "A non-existing authKey",
          "_oldAuthKey": "An existing authKey"
        }
      },
      "swapMultipleAuthKeys(address[],address[])": {
        "details": "Swap multiple auth keys to the list of auth keys",
        "params": {
          "_newAuthKeys": "Array of addresses to add to the auth keys list",
          "_oldAuthKeys": "Array of addresses to remove to the auth keys list"
        }
      },
      "validateLoginKeyMetaTxSigs(bytes32,bytes,bytes)": {
        "details": "Validate signatures from an AuthKeyMetaTx",
        "params": {
          "_loginKeyAuthorizationSignature": "Signed loginKey",
          "_transactionDataSignature": "Signed tx data",
          "_txDataMessageHash": "Ethereum signed message of the transaction"
        }
      }
    }
  },
  "userdoc": {
    "methods": {
      "executeTransaction(uint256,address,uint256,bytes)": {
        "notice": "This is to be called directly by an AuthKey"
      },
      "initialize()": {
        "notice": "Public functions"
      }
    }
  }
}