@fleupold/dex-contracts
Version:
Contracts for dFusion multi-token batch auction exchange
663 lines • 1.71 MB
JSON
{
"contractName": "BatchExchangeViewer",
"abi": [
{
"constant": true,
"inputs": [],
"name": "INDEXED_AUCTION_ELEMENT_WIDTH",
"outputs": [
{
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "ADDRESS_WIDTH",
"outputs": [
{
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "LARGE_PAGE_SIZE",
"outputs": [
{
"name": "",
"type": "uint16"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "AUCTION_ELEMENT_WIDTH",
"outputs": [
{
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "uint256"
}
],
"name": "ALL_TOKEN_FILTER",
"outputs": [
{
"name": "",
"type": "uint16"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"name": "exchange",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"constant": true,
"inputs": [
{
"name": "tokenFilter",
"type": "address[]"
}
],
"name": "getOpenOrderBook",
"outputs": [
{
"name": "",
"type": "bytes"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "tokenFilter",
"type": "address[]"
},
{
"name": "previousPageUser",
"type": "address"
},
{
"name": "previousPageUserOffset",
"type": "uint16"
},
{
"name": "maxPageSize",
"type": "uint16"
}
],
"name": "getOpenOrderBookPaginated",
"outputs": [
{
"name": "elements",
"type": "bytes"
},
{
"name": "hasNextPage",
"type": "bool"
},
{
"name": "nextPageUser",
"type": "address"
},
{
"name": "nextPageUserOffset",
"type": "uint16"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "tokenFilter",
"type": "address[]"
}
],
"name": "getFinalizedOrderBook",
"outputs": [
{
"name": "",
"type": "bytes"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "tokenFilter",
"type": "address[]"
},
{
"name": "previousPageUser",
"type": "address"
},
{
"name": "previousPageUserOffset",
"type": "uint16"
},
{
"name": "maxPageSize",
"type": "uint16"
}
],
"name": "getFinalizedOrderBookPaginated",
"outputs": [
{
"name": "elements",
"type": "bytes"
},
{
"name": "hasNextPage",
"type": "bool"
},
{
"name": "nextPageUser",
"type": "address"
},
{
"name": "nextPageUserOffset",
"type": "uint16"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "batchIds",
"type": "uint32[3]"
},
{
"name": "tokenFilter",
"type": "uint16[]"
},
{
"name": "previousPageUser",
"type": "address"
},
{
"name": "previousPageUserOffset",
"type": "uint16"
},
{
"name": "maxPageSize",
"type": "uint16"
}
],
"name": "getFilteredOrdersPaginated",
"outputs": [
{
"name": "elements",
"type": "bytes"
},
{
"name": "hasNextPage",
"type": "bool"
},
{
"name": "nextPageUser",
"type": "address"
},
{
"name": "nextPageUserOffset",
"type": "uint16"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "previousPageUser",
"type": "address"
},
{
"name": "previousPageUserOffset",
"type": "uint16"
},
{
"name": "pageSize",
"type": "uint256"
}
],
"name": "getEncodedOrdersPaginated",
"outputs": [
{
"name": "",
"type": "bytes"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "tokenFilter",
"type": "uint16[]"
},
{
"name": "previousPageUser",
"type": "address"
},
{
"name": "previousPageUserOffset",
"type": "uint16"
},
{
"name": "pageSize",
"type": "uint256"
}
],
"name": "getEncodedOrdersPaginatedWithTokenFilter",
"outputs": [
{
"name": "",
"type": "bytes"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "tokenFilter",
"type": "uint16[]"
},
{
"name": "previousPageUser",
"type": "address"
},
{
"name": "previousPageUserOffset",
"type": "uint16"
},
{
"name": "elements",
"type": "bytes"
}
],
"name": "writeEncodedOrdersPaginatedWithTokenFilter",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "buyToken",
"type": "uint16"
},
{
"name": "sellToken",
"type": "uint16"
},
{
"name": "filter",
"type": "uint16[]"
}
],
"name": "matchesTokenFilter",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "element",
"type": "bytes"
}
],
"name": "getUser",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "element",
"type": "bytes"
}
],
"name": "getSellTokenBalance",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "element",
"type": "bytes"
},
{
"name": "amount",
"type": "uint256"
}
],
"name": "updateSellTokenBalance",
"outputs": [
{
"name": "",
"type": "bytes"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "element",
"type": "bytes"
}
],
"name": "getBuyToken",
"outputs": [
{
"name": "",
"type": "uint16"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "element",
"type": "bytes"
}
],
"name": "getSellToken",
"outputs": [
{
"name": "",
"type": "uint16"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "element",
"type": "bytes"
}
],
"name": "getValidFrom",
"outputs": [
{
"name": "",
"type": "uint32"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "element",
"type": "bytes"
}
],
"name": "getValidUntil",
"outputs": [
{
"name": "",
"type": "uint32"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "tokenIds",
"type": "address[]"
}
],
"name": "getTokenIdsFromAdresses",
"outputs": [
{
"name": "",
"type": "uint16[]"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "element",
"type": "bytes"
},
{
"name": "targetBatchIndex",
"type": "uint32"
}
],
"name": "updateSellTokenBalanceForBatchId",
"outputs": [
{
"name": "",
"type": "bytes"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "tokenId",
"type": "uint16"
}
],
"name": "getTokenInfo",
"outputs": [
{
"name": "",
"type": "address"
},
{
"name": "symbol",
"type": "string"
},
{
"name": "decimals",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "token",
"type": "address"
}
],
"name": "getTokenSymbolString",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "token",
"type": "address"
}
],
"name": "getTokenSymbolBytes",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "buffer",
"type": "bytes"
},
{
"name": "length",
"type": "uint256"
}
],
"name": "setLength",
"outputs": [],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "source",
"type": "bytes"
},
{
"name": "destination",
"type": "bytes"
},
{
"name": "offset",
"type": "uint256"
}
],
"name": "copyInPlace",
"outputs": [],
"payable": false,
"stateMutability": "pure",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"buyToken\",\"type\":\"uint16\"},{\"name\":\"sellToken\",\"type\":\"uint16\"},{\"name\":\"filter\",\"type\":\"uint16[]\"}],\"name\":\"matchesTokenFilter\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint16\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"symbol\",\"type\":\"string\"},{\"name\":\"decimals\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenFilter\",\"type\":\"uint16[]\"},{\"name\":\"previousPageUser\",\"type\":\"address\"},{\"name\":\"previousPageUserOffset\",\"type\":\"uint16\"},{\"name\":\"elements\",\"type\":\"bytes\"}],\"name\":\"writeEncodedOrdersPaginatedWithTokenFilter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenFilter\",\"type\":\"address[]\"}],\"name\":\"getFinalizedOrderBook\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenIds\",\"type\":\"address[]\"}],\"name\":\"getTokenIdsFromAdresses\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"element\",\"type\":\"bytes\"}],\"name\":\"getSellToken\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"buffer\",\"type\":\"bytes\"},{\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"setLength\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"element\",\"type\":\"bytes\"}],\"name\":\"getSellTokenBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"element\",\"type\":\"bytes\"}],\"name\":\"getValidUntil\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"source\",\"type\":\"bytes\"},{\"name\":\"destination\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"uint256\"}],\"name\":\"copyInPlace\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenFilter\",\"type\":\"address[]\"}],\"name\":\"getOpenOrderBook\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"element\",\"type\":\"bytes\"},{\"name\":\"targetBatchIndex\",\"type\":\"uint32\"}],\"name\":\"updateSellTokenBalanceForBatchId\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenSymbolBytes\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"batchIds\",\"type\":\"uint32[3]\"},{\"name\":\"tokenFilter\",\"type\":\"uint16[]\"},{\"name\":\"previousPageUser\",\"type\":\"address\"},{\"name\":\"previousPageUserOffset\",\"type\":\"uint16\"},{\"name\":\"maxPageSize\",\"type\":\"uint16\"}],\"name\":\"getFilteredOrdersPaginated\",\"outputs\":[{\"name\":\"elements\",\"type\":\"bytes\"},{\"name\":\"hasNextPage\",\"type\":\"bool\"},{\"name\":\"nextPageUser\",\"type\":\"address\"},{\"name\":\"nextPageUserOffset\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"element\",\"type\":\"bytes\"}],\"name\":\"getUser\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenFilter\",\"type\":\"uint16[]\"},{\"name\":\"previousPageUser\",\"type\":\"address\"},{\"name\":\"previousPageUserOffset\",\"type\":\"uint16\"},{\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getEncodedOrdersPaginatedWithTokenFilter\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"INDEXED_AUCTION_ELEMENT_WIDTH\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenFilter\",\"type\":\"address[]\"},{\"name\":\"previousPageUser\",\"type\":\"address\"},{\"name\":\"previousPageUserOffset\",\"type\":\"uint16\"},{\"name\":\"maxPageSize\",\"type\":\"uint16\"}],\"name\":\"getFinalizedOrderBookPaginated\",\"outputs\":[{\"name\":\"elements\",\"type\":\"bytes\"},{\"name\":\"hasNextPage\",\"type\":\"bool\"},{\"name\":\"nextPageUser\",\"type\":\"address\"},{\"name\":\"nextPageUserOffset\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"previousPageUser\",\"type\":\"address\"},{\"name\":\"previousPageUserOffset\",\"type\":\"uint16\"},{\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getEncodedOrdersPaginated\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"element\",\"type\":\"bytes\"}],\"name\":\"getBuyToken\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenSymbolString\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ADDRESS_WIDTH\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"LARGE_PAGE_SIZE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"AUCTION_ELEMENT_WIDTH\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"ALL_TOKEN_FILTER\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenFilter\",\"type\":\"address[]\"},{\"name\":\"previousPageUser\",\"type\":\"address\"},{\"name\":\"previousPageUserOffset\",\"type\":\"uint16\"},{\"name\":\"maxPageSize\",\"type\":\"uint16\"}],\"name\":\"getOpenOrderBookPaginated\",\"outputs\":[{\"name\":\"elements\",\"type\":\"bytes\"},{\"name\":\"hasNextPage\",\"type\":\"bool\"},{\"name\":\"nextPageUser\",\"type\":\"address\"},{\"name\":\"nextPageUserOffset\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"element\",\"type\":\"bytes\"}],\"name\":\"getValidFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"element\",\"type\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"updateSellTokenBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"exchange\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"methods\":{\"getEncodedOrdersPaginated(address,uint16,uint256)\":{\"details\":\"View returning byte-encoded sell orders in paginated form. It has the same behavior as BatchExchange.getEncodedUsersPaginated but uses less memory and thus is more gas efficient.\",\"params\":{\"pageSize\":\"uint determining the count of orders to be returned per page\",\"previousPageUser\":\"address of last user received in the previous page (address(0) for first page)\",\"previousPageUserOffset\":\"the number of orders received for the last user on the previous page (0 for first page).\"},\"return\":\"encoded bytes representing a page of orders ordered by (user, index)\"},\"getFilteredOrdersPaginated(uint32[3],uint16[],address,uint16,uint16)\":{\"details\":\"Queries a page in the list of all orders\",\"params\":{\"batchIds\":\"Triple with the following values [maxValidFrom, minValidUntil, sellBalanceTargetBatchIndex] Batched together as we are running out of local variables (Solidity does not compile with Stack too deep error) - maxValidFrom: all returned orders will have a validFrom <= this value (they were placed at or before that batch) - minValidUntil all returned orders will have a validUntil >= this value (validity ends at or after that batch) - sellBalanceTargetBatchIndex the batchIndex at which we are expecting the sellTokenBalance to be valid (e.g. in the current live orderbook we want to include sellBalances that are valid in currentBatch + 1).\",\"maxPageSize\":\"maximum count of elements to be returned per page (same value is used for subqueries on the exchange)\",\"previousPageUser\":\"address taken from nextPageUser return value from last page (address(0) for first page)\",\"previousPageUserOffset\":\"offset taken nextPageUserOffset return value from last page (0 for first page)\",\"tokenFilter\":\"all returned order will have buy *and* sell token from this list (leave empty for \\\"no filter\\\")\"},\"return\":\"encoded bytes representing orders and page information for next page. Result can contain less elements than maxPageSize if remaining gas is low.\"},\"getFinalizedOrderBook(address[])\":{\"details\":\"Queries the orderbook for the auction that is currently being solved\",\"params\":{\"tokenFilter\":\"all returned order will have buy *and* sell token from this list (leave empty for \\\"no filter\\\")\"},\"return\":\"encoded bytes representing orders, maxed at 5000 elements\"},\"getFinalizedOrderBookPaginated(address[],address,uint16,uint16)\":{\"details\":\"Queries a page of the orderbook for the auction that is currently being solved\",\"params\":{\"maxPageSize\":\"count of elements to be returned per page (same value is used for subqueries on the exchange)\",\"previousPageUser\":\"address taken from nextPageUser return value from last page (address(0) for first page)\",\"previousPageUserOffset\":\"offset taken nextPageUserOffset return value from last page (0 for first page)\",\"tokenFilter\":\"all returned order will have buy *and* sell token from this list (leave empty for \\\"no filter\\\")\"},\"return\":\"encoded bytes representing orders and page information for next page\"},\"getOpenOrderBook(address[])\":{\"details\":\"Queries the orderbook for the auction that is still accepting orders\",\"params\":{\"tokenFilter\":\"all returned order will have buy *and* sell token from this list (leave empty for \\\"no filter\\\")\"},\"return\":\"encoded bytes representing orders, maxed at 5000 elements\"},\"getOpenOrderBookPaginated(address[],address,uint16,uint16)\":{\"details\":\"Queries a page of the orderbook for the auction that is still accepting orders\",\"params\":{\"maxPageSize\":\"count of elements to be returned per page (same value is used for subqueries on the exchange)\",\"previousPageUser\":\"address taken from nextPageUser return value from last page (address(0) for first page)\",\"previousPageUserOffset\":\"offset taken nextPageUserOffset return value from last page (0 for first page)\",\"tokenFilter\":\"all returned order will have buy *and* sell token from this list (leave empty for \\\"no filter\\\")\"},\"return\":\"encoded bytes representing orders and page information for next page\"},\"getTokenInfo(uint16)\":{\"details\":\"Queries the token information for the given tokenId. Can handle symbols of type string and bytes (e.g. MKR). Returns \\\"Unknown\\\" as symbol value if it cannot be retrieved and reverts if decimals can not be fetched (to avoid ambiguity with a \\\"valid\\\" value).\",\"params\":{\"tokenId\":\"the ID of a token listed on BatchExchange\"},\"return\":\"the address, symbol and decimals of the token contract\"},\"getTokenSymbolBytes(address)\":{\"details\":\"returns the symbol() of the given address assuming it is returned as a bytes. Reverts if method does not exist or returns data that cannot be casted into a string.\",\"params\":{\"token\":\"the token address from which to receive the symbol\"},\"return\":\"the token's symbol converted into a trimmed (trailing 0 bytes remove) string.\"},\"getTokenSymbolString(address)\":{\"details\":\"returns the symbol() of the given address assuming it is returned as a string. Reverts if method does not exist or returns data that is not a valid string.\",\"params\":{\"token\":\"the token address from which to receive the symbol\"},\"return\":\"the token's symbol\"},\"setLength(bytes,uint256)\":{\"details\":\"Sets the length of the given buffer (truncating any items exceeding the length). Note, that this can lead to memory leakage or undefined behavior if length is larger than the size that was originally allocated by the buffer.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/felixleupold/Gnosis/dex-contracts/contracts/BatchExchangeViewer.sol\":\"BatchExchangeViewer\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/felixleupold/Gnosis/dex-contracts/contracts/BatchExchange.sol\":{\"keccak256\":\"0x568ae2e96fec035e0be33bc8d79ab961849fe35bcf067b30459bb1c8798df74a\",\"urls\":[\"bzzr://0177e5a5dac570a177dbb7b4379d609292f01f3b1da1c626becae751d3dc54d9\",\"dweb:/ipfs/QmSATs9QyuvTXCj23ihapUQEkbzrRZvXEupvuv3QZhttce\"]},\"/Users/felixleupold/Gnosis/dex-contracts/contracts/BatchExchangeViewer.sol\":{\"keccak256\":\"0x25bedf77faca6cb2eee3fea4a3597d0284e4cfda9aa3cb152618569b1521c166\",\"urls\":[\"bzzr://e65a64548422bea6533354d36d2d69ed8295b160651fa268ce055562dda19989\",\"dweb:/ipfs/QmXuNwZfRBJbRDH8NqhAvZPoakK1LjuLgdCgGi5LvQQJ4w\"]},\"/Users/felixleupold/Gnosis/dex-contracts/contracts/EpochTokenLocker.sol\":{\"keccak256\":\"0x6a0e16a44b858c3af0e4e0113af93bf23160f175f36c524f9e753085d8de9978\",\"urls\":[\"bzzr://d6178f1d3533ed733e7eba91d12ce1597711e5b74ad1a4492aed9dc28a8d5c97\",\"dweb:/ipfs/QmeVeD8xeZUfwRi4BCBhrBWCHUDF3tdzwwYDgSNr5T4xPo\"]},\"/Users/felixleupold/Gnosis/dex-contracts/contracts/libraries/TokenConservation.sol\":{\"keccak256\":\"0x674557850e56ef6a716bb1dc528479e290238c592d0764bc7144cc1e811cedea\",\"urls\":[\"bzzr://f6a943472678132ef59cf3b2f131daf28952c1b72cd0e28bda46050dd577a29b\",\"dweb:/ipfs/QmbQsAgu7Fd6i84A98DxXemSnW3UkgccXxNnZLKvtuzHdE\"]},\"@gnosis.pm/owl-token/contracts/TokenOWL.sol\":{\"keccak256\":\"0x79dd31b4211c98b57c6c4b85c4902a786c0a1f2549b0481496a322955880c6e4\",\"urls\":[\"bzzr://9004a7707bca62b408542476343c3bd6ca17be5509a3f17e7495ff011495d3c6\",\"dweb:/ipfs/QmNaoSa5P6Py6ZhuqXZeeW6eyG8Hx7FYJFygXPNVBeXSJV\"]},\"@gnosis.pm/solidity-data-structures/contracts/libraries/IdToAddressBiMap.sol\":{\"keccak256\":\"0xde850dc49a037a4acbd792d295afed2222f2d6cd3780240317db2d1ca8ccebc0\",\"urls\":[\"bzzr://900a7be0f54054d59ccb3225f788d77dbf44ea22e6b8d7bd7d295f079c8932f0\",\"dweb:/ipfs/QmNQTeooqchHdMjQfRUmCjwyTUg5PJ4z6he3ym5YUsm8Lm\"]},\"@gnosis.pm/solidity-data-structures/contracts/libraries/IterableAppendOnlySet.sol\":{\"keccak256\":\"0x1447fbecc010c778476e135325a5c8fec70d02d71f736fae8cfccd85ae481241\",\"urls\":[\"bzzr://eea3ac90e8b9e299179c21134dfbf8be2d5ae1276816f2f95f63b836e11e285e\",\"dweb:/ipfs/QmZMn8wVzmr49CXjaix5BMWSNybkDv6BeSQpAFr3btaxuu\"]},\"@gnosis.pm/util-contracts/contracts/GnosisStandardToken.sol\":{\"keccak256\":\"0xdec5028208406e811c449a04e2932f7efeae629388cb6124550b8b048a645556\",\"urls\":[\"bzzr://f3d13a708f543b3ce72745cab321e6daf25d935fd12ba55a4152f1113eb6d5e4\",\"dweb:/ipfs/QmRPMmVo88kdtvo2Yo9xDJrQkpYSUENwK1xSEhZnHhViZ7\"]},\"@gnosis.pm/util-contracts/contracts/Math.sol\":{\"keccak256\":\"0x857768cd0d460e33778dcde29e997b539640bbf37ea23832213b2e5039147ea5\",\"urls\":[\"bzzr://628f7e63a0d6a092aad389b70cc55d6d9c10cd9753f3644d5ea9dc75a3314a8e\",\"dweb:/ipfs/QmP4NxUFWoJjGi8NoZgmzre3MHfRXLtDniwLojH5TVc9LD\"]},\"@gnosis.pm/util-contracts/contracts/Proxy.sol\":{\"keccak256\":\"0x2ff8795110cceafcab1010f157a4dd33e46378bb88fbdc3c313a6f0d62e3444f\",\"urls\":[\"bzzr://66d77feaf648ca17dd620f3e27463b4b6e6031fec7ccd64dfffc4c30bd57b467\",\"dweb:/ipfs/QmQTKFQxUoP37Up8JPeWh47Ta46qAMtWTZ7VnQrGypR67i\"]},\"@gnosis.pm/util-contracts/contracts/Token.sol\":{\"keccak256\":\"0x364778f634c900ed83553e17ef1284bd33fa68a738e668f664b4a0fa675bb586\",\"urls\":[\"bzzr://cb31caaf3364dbf5d688adb10de074284845b142c26d23a47b09ee510dd4a432\",\"dweb:/ipfs/QmVE5i2jcg6aCSjY8asvUwPbrZWtpLyA4uWukQXBbFvqpc\"]},\"@openzeppelin/contracts/drafts/SignedSafeMath.sol\":{\"keccak256\":\"0xf1587a6daea33c93e85fff4e205967183de459159aafcb01b7397fb7ec1f9f77\",\"urls\":[\"bzzr://3fa5ad67118819b61448882baec9ca9964dde65630f574ab3c38841110082923\",\"dweb:/ipfs/QmTaR64X6RsWzXvVGxPCaAoW7ZZ8Fhiii4ddRo7QpQGBrx\"]},\"@openzeppelin/contracts/math/Math.sol\":{\"keccak256\":\"0x4b5aa451e4e8801478708f94b118a7821c0500d676255eaf89fc78c14856ce4e\",\"urls\":[\"bzzr://200d5728b32858918810d8d7a8db1406ee9b157ad5026f050e6d864a696b9080\",\"dweb:/ipfs/QmS6tW81u8E4tvzVfVuqEuMCkdwAozQ6pKJPRBR4JEVmQp\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzzr://292843005e754e752644f767477ec5ad7a1ffc91ddb18c38b8079c62f3993cad\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0x4a3a810b7ebe742e897e1fd428b3eeed2196d3acea58eaf9c566ed10d545d2ed\",\"urls\":[\"bzzr://729aefb3f89f616c954a0735f8b4dd8804bdd0351e96f8e904fdb3e78a109b6c\",\"dweb:/ipfs/Qmb9iW7yNuYehB2NfhRMs9TakqbLVQhBhmGMkaDZ5g1Eb4\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzzr://cf2d583b8dce38d0617fdcd65f2fd9f126fe17b7f683b5a515ea9d2762d8b062\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x6f2c9955d65c522b80f4b8792f076512d2df947d2112cbc4d98a4781ed42ede2\",\"urls\":[\"bzzr://d2ff5aadcb697bc27ca3b0f6c40b4998e8cf0a1bd0f761d1df6d5981777841ae\",\"dweb:/ipfs/QmTDkFzKnrpiV1UKnSoiZAHPuguWzokrr4pFbSPvyaSo56\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x1a8e5072509c5ea7365eb1d48030b9be865140c8fb779968da0a459a0e174a11\",\"urls\":[\"bzzr://4e1d23731da27602b8c552e54fb9976dadf8cf46a8f90a3c8c1b85fe044618b9\",\"dweb:/ipfs/Qmebp4nzPja645c9yXSdJkGq96oU3am3LUnG2K3R7XxyKf\"]},\"@openzeppelin/contracts/utils/SafeCast.sol\":{\"keccak256\":\"0xb7353a57c9e371c85983df8997caf9bb6fa60c3744b34b2bfcf4faa52d06eaec\",\"urls\":[\"bzzr://ca1f1bd047ccacf8ea1b40270c12baab9f1bf9359bbd1cc305e3209e5a812eaa\",\"dweb:/ipfs/QmPaVZM2QRb5JQ5HSRUzrUt6VsknmZE5c4MqH6wuFyxYoA\"]},\"solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0x78f1f176e46ef3dc633e33b227ee98486015e7266a0ceeb6b3d1167de3095cf7\",\"urls\":[\"bzzr://058ea4a6da8fcd068b198c5aebd71228edbb0f95c7ddcd288282d6916c4ccefb\",\"dweb:/ipfs/QmdUxeCqWsiPpgnSVKFQkf6R9Q16jQqeWFNPc6int7tHgH\"]}},\"version\":1}",
"bytecode": "0x608060405234801561001057600080fd5b50604051612cdf380380612cdf8339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612c7c806100636000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063970957bb116100f9578063d08f722811610097578063e9469eb111610071578063e9469eb114611105578063e9d98f0914611122578063f469c116146111de578063fa55171614611282576101c4565b8063d08f7228146110ed578063d615388a146110f5578063d9d80082146110fd576101c4565b8063a94a3df9116100d3578063a94a3df914610f31578063b0c1926514610fed578063b54810fd14611023578063b900dc02146110c7576101c4565b8063970957bb14610d9a5780639e47107514610e5a578063a8ef264214610f13576101c4565b80636d7e99d1116101665780637c40a1b3116101405780637c40a1b314610a8d5780637c66b49314610b2e5780639101074c14610bda578063951b13f114610c00576101c4565b80636d7e99d1146108015780636df5a662146108a557806376137caa14610962576101c4565b8063348ae418116101a2578063348ae4181461049757806334e59fa6146105ad5780633b4c5f1b1461069e57806352b8dfc514610759576101c4565b80630ce0f677146101c95780631c58e7931461029257806329258dee14610346575b600080fd5b61027e600480360360608110156101df57600080fd5b61ffff8235811692602081013590911691810190606081016040820135600160201b81111561020d57600080fd5b82018360208201111561021f57600080fd5b803590602001918460208302840111600160201b8311171561024057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611328945050505050565b604080519115158252519081900360200190f35b6102b3600480360360208110156102a857600080fd5b503561ffff166113b9565b604080516001600160a01b038516815260ff831691810191909152606060208083018281528551928401929092528451608084019186019080838360005b838110156103095781810151838201526020016102f1565b50505050905090810190601f1680156103365780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b6104856004803603608081101561035c57600080fd5b810190602081018135600160201b81111561037657600080fd5b82018360208201111561038857600080fd5b803590602001918460208302840111600160201b831117156103a957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092956001600160a01b038535169561ffff60208701351695919450925060608101915060400135600160201b81111561041157600080fd5b82018360208201111561042357600080fd5b803590602001918460018302840111600160201b8311171561044457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506116a5945050505050565b60408051918252519081900360200190f35b610538600480360360208110156104ad57600080fd5b810190602081018135600160201b8111156104c757600080fd5b8201836020820111156104d957600080fd5b803590602001918460208302840111600160201b831117156104fa57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611924945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561057257818101518382015260200161055a565b50505050905090810190601f16801561059f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61064e600480360360208110156105c357600080fd5b810190602081018135600160201b8111156105dd57600080fd5b8201836020820111156105ef57600080fd5b803590602001918460208302840111600160201b8311171561061057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611984945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561068a578181015183820152602001610672565b505050509050019250505060405180910390f35b610742600480360360208110156106b457600080fd5b810190602081018135600160201b8111156106ce57600080fd5b8201836020820111156106e057600080fd5b803590602001918460018302840111600160201b8311171561070157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a8e945050505050565b6040805161ffff9092168252519081900360200190f35b6107ff6004803603604081101561076f57600080fd5b810190602081018135600160201b81111561078957600080fd5b82018360208201111561079b57600080fd5b803590602001918460018302840111600160201b831117156107bc57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250611ab8915050565b005b6104856004803603602081101561081757600080fd5b810190602081018135600160201b81111561083157600080fd5b82018360208201111561084357600080fd5b803590602001918460018302840111600160201b8311171561086457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611abc945050505050565b610949600480360360208110156108bb57600080fd5b810190602081018135600160201b8111156108d557600080fd5b8201836020820111156108e757600080fd5b803590602001918460018302840111600160201b8311171561090857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ae6945050505050565b6040805163ffffffff9092168252519081900360200190f35b6107ff6004803603606081101561097857600080fd5b810190602081018135600160201b81111561099257600080fd5b8201836020820111156109a457600080fd5b803590602001918460018302840111600160201b831117156109c557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610a1757600080fd5b820183602082011115610a2957600080fd5b803590602001918460018302840111600160201b83111715610a4a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250611b10915050565b61053860048036036020811015610aa357600080fd5b810190602081018135600160201b811115610abd57600080fd5b820183602082011115610acf57600080fd5b803590602001918460208302840111600160201b83111715610af057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611b66945050505050565b61053860048036036040811015610b4457600080fd5b810190602081018135600160201b811115610b5e57600080fd5b820183602082011115610b7057600080fd5b803590602001918460018302840111600160201b83111715610b9157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903563ffffffff169150611b789050565b61053860048036036020811015610bf057600080fd5b50356001600160a01b0316611ead565b610cef600480360360e0811015610c1657600080fd5b810190808060600190600380602002604051908101604052809291908260036020028082843760009201919091525091949392602081019250359050600160201b811115610c6357600080fd5b820183602082011115610c7557600080fd5b803590602001918460208302840111600160201b83111715610c9657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b0383351693505061ffff602083013581169260400135169050612010565b604051808060200185151515158152602001846001600160a01b03166001600160a01b031681526020018361ffff1661ffff168152602001828103825286818151815260200191508051906020019080838360005b83811015610d5c578181015183820152602001610d44565b50505050905090810190601f168015610d895780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b610e3e60048036036020811015610db057600080fd5b810190602081018135600160201b811115610dca57600080fd5b820183602082011115610ddc57600080fd5b803590602001918460018302840111600160201b83111715610dfd57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061222f945050505050565b604080516001600160a01b039092168252519081900360200190f35b61053860048036036080811015610e7057600080fd5b810190602081018135600160201b811115610e8a57600080fd5b820183602082011115610e9c57600080fd5b803590602001918460208302840111600160201b83111715610ebd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505081356001600160a01b0316925050602081013561ffff169060400135612258565b610f1b6122b6565b6040805160ff9092168252519081900360200190f35b610cef60048036036080811015610f4757600080fd5b810190602081018135600160201b811115610f6157600080fd5b820183602082011115610f7357600080fd5b803590602001918460208302840111600160201b83111715610f9457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b0383351693505061ffff6020830135811692604001351690506122bb565b6105386004803603606081101561100357600080fd5b506001600160a01b038135169061ffff602082013516906040013561238f565b6107426004803603602081101561103957600080fd5b810190602081018135600160201b81111561105357600080fd5b82018360208201111561106557600080fd5b803590602001918460018302840111600160201b8311171561108657600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061241d945050505050565b610538600480360360208110156110dd57600080fd5b50356001600160a01b0316612434565b610f1b6124fb565b610742612500565b610f1b612506565b6107426004803603602081101561111b57600080fd5b503561250b565b610cef6004803603608081101561113857600080fd5b810190602081018135600160201b81111561115257600080fd5b82018360208201111561116457600080fd5b803590602001918460208302840111600160201b8311171561118557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b0383351693505061ffff602083013581169260400135169050612540565b610949600480360360208110156111f457600080fd5b810190602081018135600160201b81111561120e57600080fd5b82018360208201111561122057600080fd5b803590602001918460018302840111600160201b8311171561124157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506125f8945050505050565b6105386004803603604081101561129857600080fd5b810190602081018135600160201b8111156112b257600080fd5b8201836020820111156112c457600080fd5b803590602001918460018302840111600160201b831117156112e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061260f915050565b600081516000141561133c575060016113b2565b600080805b84518110156113a2578661ffff1685828151811061135b57fe5b602002602001015161ffff16141561137257600192505b8561ffff1685828151811061138357fe5b602002602001015161ffff16141561139a57600191505b600101611341565b508180156113ad5750805b925050505b9392505050565b60015460408051631788684160e11b815261ffff841660048201529051600092606092849283926001600160a01b031691632f10d082916024808301926020929190829003018186803b15801561140f57600080fd5b505afa158015611423573d6000803e3d6000fd5b505050506040513d602081101561143957600080fd5b50516040805160208181018352600080835283516001600160a01b038616602480830191909152855180830390910181526044909101855291820180516001600160e01b0316635c806e0160e11b178152935182519398509495509330939192909182918083835b602083106114c05780518252601f1990920191602091820191016114a1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114611520576040519150601f19603f3d011682016040523d82523d6000602084013e611525565b606091505b50509050801561153f5761153882612434565b935061162f565b604080516001600160a01b03841660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663244041d360e21b17815291518151600093309392918291908083835b602083106115b25780518252601f199092019160209182019101611593565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114611612576040519150601f19603f3d011682016040523d82523d6000602084013e611617565b606091505b50509050801561162d5761162a83611ead565b94505b505b8184836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561166a57600080fd5b505afa15801561167e573d6000803e3d6000fd5b505050506040513d602081101561169457600080fd5b505191989097509095509350505050565b600080607060ff168351816116b657fe5b600154604080516343383ac360e01b81526001600160a01b038a811660048301529490930461ffff811660248501529051909450606093909116916343383ac3916044808301926000929190829003018186803b15801561171657600080fd5b505afa15801561172a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561175357600080fd5b810190808051600160201b81111561176a57600080fd5b8201602081018481111561177d57600080fd5b8151600160201b81118282018710171561179657600080fd5b50909450889350899250600091508190505b8582101561191657600154604080516001600160a01b03868116602483015261ffff881660448084019190915283518084039091018152606490920183526020820180516001600160e01b031663793b8c6d60e01b17815292518251600095606095931693611388939092918291908083835b6020831061183a5780518252601f19909201916020918201910161181b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303818686fa925050503d806000811461189b576040519150601f19603f3d011682016040523d82523d6000602084013e6118a0565b606091505b509150915081156118cd57600195909501946118c28d86838d60708902612664565b60018401935061190f565b86516000965060148481020111611908576118fb6118f68860148681029063ffffffff61295916565b61222f565b945060018301925061190f565b5050611916565b50506117a8565b509998505050505050505050565b606080611936836000806113886122bb565b50508151919250506208b2901161197e5760405162461bcd60e51b8152600401808060200182810382526031815260200180612c176031913960400191505060405180910390fd5b92915050565b60608082516040519080825280602002602001820160405280156119b2578160200160208202803883390190505b50905060005b8351811015611a875760015484516001600160a01b039091169063ef574d23908690849081106119e457fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a3257600080fd5b505afa158015611a46573d6000803e3d6000fd5b505050506040513d6020811015611a5c57600080fd5b50518251839083908110611a6c57fe5b61ffff909216602092830291909101909101526001016119b8565b5092915050565b60006060611aa5836036600263ffffffff61295916565b90506113b281600063ffffffff6129d916565b9052565b60006060611ad3836014603463ffffffff61295916565b90506113b281600063ffffffff6129f516565b60006060611afd83603c600463ffffffff61295916565b90506113b281600063ffffffff612a1116565b60005b8351811015611b6057838181518110611b2857fe5b602001015160f81c60f81b8382840181518110611b4157fe5b60200101906001600160f81b031916908160001a905350600101611b13565b50505050565b60608061193683600080611388612540565b60606000611b858461222f565b90506000611b9285611a8e565b60015460408051631788684160e11b815261ffff8416600482015290519293506000926001600160a01b0390921691632f10d08291602480820192602092909190829003018186803b158015611be757600080fd5b505afa158015611bfb573d6000803e3d6000fd5b505050506040513d6020811015611c1157600080fd5b505190506000611c2087611abc565b6001546040805163b3c0afa160e01b81526001600160a01b038881166004830152868116602483015282519495506000948594919091169263b3c0afa19260448082019391829003018186803b158015611c7957600080fd5b505afa158015611c8d573d6000803e3d6000fd5b505050506040513d6040811015611ca357600080fd5b50805160209182015160015460408051637390564760e11b815290519396509194506001600160a01b03169263e720ac8e92600480840193829003018186803b158015611cef57600080fd5b505afa158015611d03573d6000803e3d6000fd5b505050506040513d6020811015611d1957600080fd5b505163ffffffff90811690821610801590611d3f57508763ffffffff168163ffffffff16105b15611d5757611d54838363ffffffff612a2d16565b92505b6001546040805163619f5cfb60e11b81526001600160a01b03898116600483015287811660248301528251600094859492169263c33eb9f6926044808301939192829003018186803b158015611dac57600080fd5b505afa158015611dc0573d6000803e3d6000fd5b505050506040513d6040811015611dd657600080fd5b50805160209182015160015460408051637390564760e11b815290519396509194506001600160a01b03169263e720ac8e92600480840193829003018186803b158015611e2257600080fd5b505afa158015611e36573d6000803e3d6000fd5b505050506040513d6020811015611e4c57600080fd5b505163ffffffff90811690821610801590611e7257508963ffffffff168163ffffffff16105b15611e9457611e91611e848684612a87565b869063ffffffff612a9d16565b94505b611e9e8b8661260f565b9b9a5050505050505050505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b1781529151815160609360009385936001600160a01b03881693919290918291908083835b60208310611f165780518252601f199092019160209182019101611ef7565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114611f76576040519150601f19603f3d011682016040523d82523d6000602084013e611f7b565b606091505b509150915081611fc6576040805162461bcd60e51b815260206004820152601160248201527010d85b9b9bdd0819d95d081cde5b589bdb607a1b604482015290519081900360640190fd5b60005b815181101561200857818181518110611fde57fe5b01602001516001600160f81b03191661200057611ffb8282611ab8565b612008565b600101611fc9565b509392505050565b60606000806000607060020160ff168561ffff16026040519080825280601f01601f19166020018201604052801561204f576020820181803883390190505b50935061205d846000611ab8565b6040805161ffff8716607002808252601f19601f82011682016020019092526060918015612092576020820181803883390190505b5090508792508691506001935060005a90505b8480156120b75750806003025a600502115b15612220575a905060006120cd8b8686866116a5565b61ffff891681149650905060