Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 648 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Multihop Batch S... | 12718854 | 1280 days ago | IN | 0 ETH | 0.00271516 | ||||
Multihop Batch S... | 12187920 | 1362 days ago | IN | 0.0204 ETH | 0.05089998 | ||||
Multihop Batch S... | 12103017 | 1375 days ago | IN | 0.15 ETH | 0.08785856 | ||||
Multihop Batch S... | 12031789 | 1386 days ago | IN | 0.64269836 ETH | 0.04284509 | ||||
Multihop Batch S... | 12030340 | 1387 days ago | IN | 0.32736942 ETH | 0.03211275 | ||||
Multihop Batch S... | 12030307 | 1387 days ago | IN | 0 ETH | 0.06804906 | ||||
Multihop Batch S... | 12030279 | 1387 days ago | IN | 0 ETH | 0.02614838 | ||||
Multihop Batch S... | 12030221 | 1387 days ago | IN | 0 ETH | 0.02996565 | ||||
Multihop Batch S... | 12029200 | 1387 days ago | IN | 0.35626882 ETH | 0.02120265 | ||||
Multihop Batch S... | 12028041 | 1387 days ago | IN | 0.66286501 ETH | 0.09174192 | ||||
Multihop Batch S... | 12028009 | 1387 days ago | IN | 0 ETH | 0.07210623 | ||||
Multihop Batch S... | 12027625 | 1387 days ago | IN | 0 ETH | 0.02451087 | ||||
Multihop Batch S... | 12027605 | 1387 days ago | IN | 0 ETH | 0.05224332 | ||||
Multihop Batch S... | 12027580 | 1387 days ago | IN | 0 ETH | 0.02404874 | ||||
Multihop Batch S... | 12026786 | 1387 days ago | IN | 0 ETH | 0.0895466 | ||||
Multihop Batch S... | 12026620 | 1387 days ago | IN | 1.27726053 ETH | 0.03842562 | ||||
Multihop Batch S... | 12026491 | 1387 days ago | IN | 2 ETH | 0.07793819 | ||||
Multihop Batch S... | 12026362 | 1387 days ago | IN | 0 ETH | 0.07526004 | ||||
Multihop Batch S... | 12026177 | 1387 days ago | IN | 0.5 ETH | 0.03492888 | ||||
Multihop Batch S... | 12025818 | 1387 days ago | IN | 1 ETH | 0.10308 | ||||
Multihop Batch S... | 12025818 | 1387 days ago | IN | 1 ETH | 0.11181673 | ||||
Multihop Batch S... | 12024748 | 1387 days ago | IN | 0 ETH | 0.11711296 | ||||
Multihop Batch S... | 12024734 | 1387 days ago | IN | 0 ETH | 0.18093295 | ||||
Multihop Batch S... | 12024711 | 1387 days ago | IN | 1.84071477 ETH | 0.12744424 | ||||
Multihop Batch S... | 12024699 | 1387 days ago | IN | 0 ETH | 0.10361638 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12718854 | 1280 days ago | 0.03196872 ETH | ||||
12718854 | 1280 days ago | 0.03196872 ETH | ||||
12187920 | 1362 days ago | 0.0204 ETH | ||||
12103017 | 1375 days ago | 0.15 ETH | ||||
12031789 | 1386 days ago | 0.00353392 ETH | ||||
12031789 | 1386 days ago | 0.00353392 ETH | ||||
12031789 | 1386 days ago | 0.64269836 ETH | ||||
12030340 | 1387 days ago | 0.06605822 ETH | ||||
12030340 | 1387 days ago | 0.06605822 ETH | ||||
12030340 | 1387 days ago | 0.32736942 ETH | ||||
12030279 | 1387 days ago | 0.90905408 ETH | ||||
12030279 | 1387 days ago | 0.90905408 ETH | ||||
12030221 | 1387 days ago | 0.4708906 ETH | ||||
12030221 | 1387 days ago | 0.4708906 ETH | ||||
12029200 | 1387 days ago | 0.00139681 ETH | ||||
12029200 | 1387 days ago | 0.00139681 ETH | ||||
12029200 | 1387 days ago | 0.35626882 ETH | ||||
12028041 | 1387 days ago | 0.66286501 ETH | ||||
12028009 | 1387 days ago | 1.13873232 ETH | ||||
12028009 | 1387 days ago | 1.13873232 ETH | ||||
12027625 | 1387 days ago | 0.4734919 ETH | ||||
12027625 | 1387 days ago | 0.4734919 ETH | ||||
12027605 | 1387 days ago | 2.39177215 ETH | ||||
12027605 | 1387 days ago | 2.39177215 ETH | ||||
12027580 | 1387 days ago | 0.51580872 ETH |
Loading...
Loading
Contract Name:
ExchangeProxy
Compiler Version
v0.5.12+commit.7709ece9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-20 */ pragma solidity 0.5.12; pragma experimental ABIEncoderV2; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address _payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface PoolInterface { function swapExactAmountIn(address, address, uint, address, uint, uint) external returns (uint, uint); function swapExactAmountOut(address, address, uint, address, uint, uint) external returns (uint, uint); function calcInGivenOut(uint, uint, uint, uint, uint, uint) external pure returns (uint); function calcOutGivenIn(uint, uint, uint, uint, uint, uint) external pure returns (uint); function getDenormalizedWeight(address) external view returns (uint); function getBalance(address) external view returns (uint); function getSwapFee() external view returns (uint); function gulp(address) external; } interface TokenInterface { function balanceOf(address) external view returns (uint); function allowance(address, address) external view returns (uint); function approve(address, uint) external returns (bool); function transfer(address, uint) external returns (bool); function transferFrom(address, address, uint) external returns (bool); function deposit() external payable; function withdraw(uint) external; } interface RegistryInterface { function getBestPoolsWithLimit(address, address, uint) external view returns (address[] memory); } contract ExchangeProxy is Ownable { using SafeMath for uint256; struct Pool { address pool; uint tokenBalanceIn; uint tokenWeightIn; uint tokenBalanceOut; uint tokenWeightOut; uint swapFee; uint effectiveLiquidity; } struct Swap { address pool; address tokenIn; address tokenOut; uint swapAmount; // tokenInAmount / tokenOutAmount uint limitReturnAmount; // minAmountOut / maxAmountIn uint maxPrice; } TokenInterface weth; RegistryInterface registry; address private constant ETH_ADDRESS = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); uint private constant BONE = 10**18; constructor(address _weth) public { weth = TokenInterface(_weth); } function setRegistry(address _registry) external onlyOwner { registry = RegistryInterface(_registry); } function batchSwapExactIn( Swap[] memory swaps, TokenInterface tokenIn, TokenInterface tokenOut, uint totalAmountIn, uint minTotalAmountOut ) public payable returns (uint totalAmountOut) { transferFromAll(tokenIn, totalAmountIn); for (uint i = 0; i < swaps.length; i++) { Swap memory swap = swaps[i]; TokenInterface SwapTokenIn = TokenInterface(swap.tokenIn); PoolInterface pool = PoolInterface(swap.pool); if (SwapTokenIn.allowance(address(this), swap.pool) > 0) { safeApprove(SwapTokenIn, swap.pool, 0); } safeApprove(SwapTokenIn, swap.pool, swap.swapAmount); (uint tokenAmountOut,) = pool.swapExactAmountIn( msg.sender, swap.tokenIn, swap.swapAmount, swap.tokenOut, swap.limitReturnAmount, swap.maxPrice ); totalAmountOut = tokenAmountOut.add(totalAmountOut); } require(totalAmountOut >= minTotalAmountOut, "ERR_LIMIT_OUT"); transferAll(tokenOut, totalAmountOut); transferAll(tokenIn, getBalance(tokenIn)); } function batchSwapExactOut( Swap[] memory swaps, TokenInterface tokenIn, TokenInterface tokenOut, uint maxTotalAmountIn ) public payable returns (uint totalAmountIn) { transferFromAll(tokenIn, maxTotalAmountIn); for (uint i = 0; i < swaps.length; i++) { Swap memory swap = swaps[i]; TokenInterface SwapTokenIn = TokenInterface(swap.tokenIn); PoolInterface pool = PoolInterface(swap.pool); if (SwapTokenIn.allowance(address(this), swap.pool) > 0) { safeApprove(SwapTokenIn, swap.pool, 0); } safeApprove(SwapTokenIn, swap.pool, swap.limitReturnAmount); (uint tokenAmountIn,) = pool.swapExactAmountOut( msg.sender, swap.tokenIn, swap.limitReturnAmount, swap.tokenOut, swap.swapAmount, swap.maxPrice ); totalAmountIn = tokenAmountIn.add(totalAmountIn); pool.gulp(swap.tokenIn); } require(totalAmountIn <= maxTotalAmountIn, "ERR_LIMIT_IN"); transferAll(tokenOut, getBalance(tokenOut)); transferAll(tokenIn, getBalance(tokenIn)); } function multihopBatchSwapExactIn( Swap[][] memory swapSequences, TokenInterface tokenIn, TokenInterface tokenOut, uint totalAmountIn, uint minTotalAmountOut ) public payable returns (uint totalAmountOut) { transferFromAll(tokenIn, totalAmountIn); for (uint i = 0; i < swapSequences.length; i++) { uint tokenAmountOut; for (uint k = 0; k < swapSequences[i].length; k++) { Swap memory swap = swapSequences[i][k]; TokenInterface SwapTokenIn = TokenInterface(swap.tokenIn); if (k == 1) { // Makes sure that on the second swap the output of the first was used // so there is not intermediate token leftover swap.swapAmount = tokenAmountOut; } PoolInterface pool = PoolInterface(swap.pool); if (SwapTokenIn.allowance(address(this), swap.pool) > 0) { safeApprove(SwapTokenIn, swap.pool, 0); } safeApprove(SwapTokenIn, swap.pool, swap.swapAmount); (tokenAmountOut,) = pool.swapExactAmountIn( msg.sender, swap.tokenIn, swap.swapAmount, swap.tokenOut, swap.limitReturnAmount, swap.maxPrice ); } // This takes the amountOut of the last swap totalAmountOut = tokenAmountOut.add(totalAmountOut); } require(totalAmountOut >= minTotalAmountOut, "ERR_LIMIT_OUT"); transferAll(tokenOut, totalAmountOut); transferAll(tokenIn, getBalance(tokenIn)); } function multihopBatchSwapExactOut( Swap[][] memory swapSequences, TokenInterface tokenIn, TokenInterface tokenOut, uint maxTotalAmountIn ) public payable returns (uint totalAmountIn) { transferFromAll(tokenIn, maxTotalAmountIn); for (uint i = 0; i < swapSequences.length; i++) { uint tokenAmountInFirstSwap; // Specific code for a simple swap and a multihop (2 swaps in sequence) if (swapSequences[i].length == 1) { Swap memory swap = swapSequences[i][0]; TokenInterface SwapTokenIn = TokenInterface(swap.tokenIn); PoolInterface pool = PoolInterface(swap.pool); if (SwapTokenIn.allowance(address(this), swap.pool) > 0) { safeApprove(SwapTokenIn, swap.pool, 0); } safeApprove(SwapTokenIn, swap.pool, swap.limitReturnAmount); (tokenAmountInFirstSwap,) = pool.swapExactAmountOut( msg.sender, swap.tokenIn, swap.limitReturnAmount, swap.tokenOut, swap.swapAmount, swap.maxPrice ); pool.gulp(swap.tokenIn); } else { // Consider we are swapping A -> B and B -> C. The goal is to buy a given amount // of token C. But first we need to buy B with A so we can then buy C with B // To get the exact amount of C we then first need to calculate how much B we'll need: uint intermediateTokenAmount; // This would be token B as described above Swap memory secondSwap = swapSequences[i][1]; PoolInterface poolSecondSwap = PoolInterface(secondSwap.pool); intermediateTokenAmount = poolSecondSwap.calcInGivenOut( poolSecondSwap.getBalance(secondSwap.tokenIn), poolSecondSwap.getDenormalizedWeight(secondSwap.tokenIn), poolSecondSwap.getBalance(secondSwap.tokenOut), poolSecondSwap.getDenormalizedWeight(secondSwap.tokenOut), secondSwap.swapAmount, poolSecondSwap.getSwapFee() ); //// Buy intermediateTokenAmount of token B with A in the first pool Swap memory firstSwap = swapSequences[i][0]; TokenInterface FirstSwapTokenIn = TokenInterface(firstSwap.tokenIn); PoolInterface poolFirstSwap = PoolInterface(firstSwap.pool); if (FirstSwapTokenIn.allowance(address(this), firstSwap.pool) < uint(-1)) { safeApprove(FirstSwapTokenIn, firstSwap.pool, uint(-1)); } (tokenAmountInFirstSwap,) = poolFirstSwap.swapExactAmountOut( msg.sender, firstSwap.tokenIn, firstSwap.limitReturnAmount, firstSwap.tokenOut, intermediateTokenAmount, // This is the amount of token B we need firstSwap.maxPrice ); poolFirstSwap.gulp(firstSwap.tokenIn); //// Buy the final amount of token C desired TokenInterface SecondSwapTokenIn = TokenInterface(secondSwap.tokenIn); if (SecondSwapTokenIn.allowance(address(this), secondSwap.pool) < uint(-1)) { safeApprove(SecondSwapTokenIn, secondSwap.pool, uint(-1)); } poolSecondSwap.swapExactAmountOut( msg.sender, secondSwap.tokenIn, secondSwap.limitReturnAmount, secondSwap.tokenOut, secondSwap.swapAmount, secondSwap.maxPrice ); poolSecondSwap.gulp(secondSwap.tokenIn); } totalAmountIn = tokenAmountInFirstSwap.add(totalAmountIn); } require(totalAmountIn <= maxTotalAmountIn, "ERR_LIMIT_IN"); transferAll(tokenOut, getBalance(tokenOut)); transferAll(tokenIn, getBalance(tokenIn)); } function transferFromAll(TokenInterface token, uint amount) internal returns(bool) { if (isETH(token)) { weth.deposit.value(msg.value)(); } else { // require(token.transferFrom(msg.sender, address(this), amount), "ERR_TRANSFER_FAILED"); safeTransferFrom(token, msg.sender, address(this), amount); } } function getBalance(TokenInterface token) internal view returns (uint) { if (isETH(token)) { return weth.balanceOf(address(this)); } else { return token.balanceOf(address(this)); } } function transferAll(TokenInterface token, uint amount) internal returns(bool) { if (amount == 0) { return true; } if (isETH(token)) { weth.withdraw(amount); (bool xfer,) = msg.sender.call.value(amount)(""); require(xfer, "ERR_ETH_FAILED"); } else { // require(token.transfer(msg.sender, amount), "ERR_TRANSFER_FAILED"); safeTransfer(token, msg.sender, amount); } } function isETH(TokenInterface token) internal pure returns(bool) { return (address(token) == ETH_ADDRESS); } function safeTransfer(TokenInterface token, address to , uint256 amount) internal { bytes memory data = abi.encodeWithSelector(token.transfer.selector, to, amount); bytes memory returndata = functionCall(address(token), data, "low-level call failed"); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "not succeed"); } } function safeTransferFrom(TokenInterface token, address from, address to , uint256 amount) internal { bytes memory data = abi.encodeWithSelector(token.transferFrom.selector, from, to, amount); bytes memory returndata = functionCall(address(token), data, "low-level call failed"); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "not succeed"); } } function safeApprove(TokenInterface token, address to , uint256 amount) internal { bytes memory data = abi.encodeWithSelector(token.approve.selector, to, amount); bytes memory returndata = functionCall(address(token), data, "low-level call failed"); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "not succeed"); } } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, errorMessage); } function _functionCallWithValue(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.call(data);// value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } function() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_weth","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"swapAmount","type":"uint256"},{"internalType":"uint256","name":"limitReturnAmount","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"}],"internalType":"struct ExchangeProxy.Swap[]","name":"swaps","type":"tuple[]"},{"internalType":"contract TokenInterface","name":"tokenIn","type":"address"},{"internalType":"contract TokenInterface","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"totalAmountIn","type":"uint256"},{"internalType":"uint256","name":"minTotalAmountOut","type":"uint256"}],"name":"batchSwapExactIn","outputs":[{"internalType":"uint256","name":"totalAmountOut","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"swapAmount","type":"uint256"},{"internalType":"uint256","name":"limitReturnAmount","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"}],"internalType":"struct ExchangeProxy.Swap[]","name":"swaps","type":"tuple[]"},{"internalType":"contract TokenInterface","name":"tokenIn","type":"address"},{"internalType":"contract TokenInterface","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"maxTotalAmountIn","type":"uint256"}],"name":"batchSwapExactOut","outputs":[{"internalType":"uint256","name":"totalAmountIn","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"swapAmount","type":"uint256"},{"internalType":"uint256","name":"limitReturnAmount","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"}],"internalType":"struct ExchangeProxy.Swap[][]","name":"swapSequences","type":"tuple[][]"},{"internalType":"contract TokenInterface","name":"tokenIn","type":"address"},{"internalType":"contract TokenInterface","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"totalAmountIn","type":"uint256"},{"internalType":"uint256","name":"minTotalAmountOut","type":"uint256"}],"name":"multihopBatchSwapExactIn","outputs":[{"internalType":"uint256","name":"totalAmountOut","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"swapAmount","type":"uint256"},{"internalType":"uint256","name":"limitReturnAmount","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"}],"internalType":"struct ExchangeProxy.Swap[][]","name":"swapSequences","type":"tuple[][]"},{"internalType":"contract TokenInterface","name":"tokenIn","type":"address"},{"internalType":"contract TokenInterface","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"maxTotalAmountIn","type":"uint256"}],"name":"multihopBatchSwapExactOut","outputs":[{"internalType":"uint256","name":"totalAmountIn","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_registry","type":"address"}],"name":"setRegistry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200221a3803806200221a8339810160408190526200003491620000d0565b6000620000496001600160e01b03620000b916565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b0319166001600160a01b039290921691909117905562000125565b3390565b8051620000ca816200010b565b92915050565b600060208284031215620000e357600080fd5b6000620000f18484620000bd565b949350505050565b60006001600160a01b038216620000ca565b6200011681620000f9565b81146200012257600080fd5b50565b6120e580620001356000396000f3fe6080604052600436106100865760003560e01c80638da5cb5b116100595780638da5cb5b146100ec5780638f32d59b1461010e578063a91ee0dc14610130578063e2b3974614610150578063f2fde38b1461016357610086565b80632db5813414610088578063715018a6146100b157806386b2ecc4146100c65780638743ad58146100d9575b005b61009b610096366004611b0e565b610183565b6040516100a89190611f6c565b60405180910390f35b3480156100bd57600080fd5b506100866103e8565b61009b6100d4366004611a0a565b610456565b61009b6100e7366004611b47565b610d3c565b3480156100f857600080fd5b50610101610f2f565b6040516100a89190611e09565b34801561011a57600080fd5b50610123610f3e565b6040516100a89190611edd565b34801561013c57600080fd5b5061008661014b3660046119ec565b610f62565b61009b61015e366004611a82565b610fa8565b34801561016f57600080fd5b5061008661017e3660046119ec565b6111a0565b600061018f84836111d0565b5060005b8551811015610395576101a461177d565b8682815181106101b057fe5b602090810291909101810151908101518151604051636eb1769f60e11b815292935090916000906001600160a01b0384169063dd62ed3e906101f89030908690600401611e25565b60206040518083038186803b15801561021057600080fd5b505afa158015610224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102489190810190611ba0565b111561025e5761025e8284600001516000611260565b6102718284600001518560800151611260565b6000816001600160a01b0316634d128b773386602001518760800151886040015189606001518a60a001516040518763ffffffff1660e01b81526004016102bd96959493929190611e40565b6040805180830381600087803b1580156102d657600080fd5b505af11580156102ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061030e9190810190611bbe565b509050610321818763ffffffff61132f16565b6020850151604051631185197d60e31b81529197506001600160a01b03841691638c28cbe89161035391600401611e09565b600060405180830381600087803b15801561036d57600080fd5b505af1158015610381573d6000803e3d6000fd5b505060019096019550610193945050505050565b50818111156103bf5760405162461bcd60e51b81526004016103b690611f3c565b60405180910390fd5b6103d1836103cc8561135b565b611423565b506103df846103cc8661135b565b50949350505050565b6103f0610f3e565b61040c5760405162461bcd60e51b81526004016103b690611f4c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600061046284836111d0565b5060005b855181101561039557600086828151811061047d57fe5b6020026020010151516001141561067e5761049661177d565b8783815181106104a257fe5b60200260200101516000815181106104b657fe5b602090810291909101810151908101518151604051636eb1769f60e11b815292935090916000906001600160a01b0384169063dd62ed3e906104fe9030908690600401611e25565b60206040518083038186803b15801561051657600080fd5b505afa15801561052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061054e9190810190611ba0565b1115610564576105648284600001516000611260565b6105778284600001518560800151611260565b60208301516080840151604080860151606087015160a08801519251634d128b7760e01b81526001600160a01b03871695634d128b77956105c095339592949193600401611e40565b6040805180830381600087803b1580156105d957600080fd5b505af11580156105ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106119190810190611bbe565b506020840151604051631185197d60e31b81529195506001600160a01b03831691638c28cbe89161064491600401611e09565b600060405180830381600087803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b50505050505050610d21565b600061068861177d565b88848151811061069457fe5b60200260200101516001815181106106a857fe5b60209081029190910181015180519181015160405163f8b2cb4f60e01b81529193506001600160a01b0383169163f8d6aed491839163f8b2cb4f916106ef91600401611e09565b60206040518083038186803b15801561070757600080fd5b505afa15801561071b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061073f9190810190611ba0565b6020850151604051634a46c67360e11b81526001600160a01b0386169163948d8ce69161076f9190600401611e09565b60206040518083038186803b15801561078757600080fd5b505afa15801561079b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107bf9190810190611ba0565b604080870151905163f8b2cb4f60e01b81526001600160a01b0387169163f8b2cb4f916107ef9190600401611e09565b60206040518083038186803b15801561080757600080fd5b505afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061083f9190810190611ba0565b6040808801519051634a46c67360e11b81526001600160a01b0388169163948d8ce69161086f9190600401611e09565b60206040518083038186803b15801561088757600080fd5b505afa15801561089b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108bf9190810190611ba0565b8760600151876001600160a01b031663d4cadf686040518163ffffffff1660e01b815260040160206040518083038186803b1580156108fd57600080fd5b505afa158015610911573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109359190810190611ba0565b6040518763ffffffff1660e01b815260040161095696959493929190611f7a565b60206040518083038186803b15801561096e57600080fd5b505afa158015610982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109a69190810190611ba0565b92506109b061177d565b8a86815181106109bc57fe5b60200260200101516000815181106109d057fe5b602090810291909101810151908101518151604051636eb1769f60e11b81529293509091600019906001600160a01b0384169063dd62ed3e90610a199030908690600401611e25565b60206040518083038186803b158015610a3157600080fd5b505afa158015610a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a699190810190611ba0565b1015610a8057610a80828460000151600019611260565b806001600160a01b0316634d128b77338560200151866080015187604001518b8960a001516040518763ffffffff1660e01b8152600401610ac696959493929190611e40565b6040805180830381600087803b158015610adf57600080fd5b505af1158015610af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b179190810190611bbe565b506020840151604051631185197d60e31b81529198506001600160a01b03831691638c28cbe891610b4a91600401611e09565b600060405180830381600087803b158015610b6457600080fd5b505af1158015610b78573d6000803e3d6000fd5b5050505060208501518551604051636eb1769f60e11b8152600019916001600160a01b0384169163dd62ed3e91610bb491309190600401611e25565b60206040518083038186803b158015610bcc57600080fd5b505afa158015610be0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c049190810190611ba0565b1015610c1b57610c1b818760000151600019611260565b6020860151608087015160408089015160608a015160a08b01519251634d128b7760e01b81526001600160a01b038b1695634d128b7795610c6495339592949193600401611e40565b6040805180830381600087803b158015610c7d57600080fd5b505af1158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cb59190810190611bbe565b50506020860151604051631185197d60e31b81526001600160a01b03871691638c28cbe891610ce79190600401611e09565b600060405180830381600087803b158015610d0157600080fd5b505af1158015610d15573d6000803e3d6000fd5b50505050505050505050505b610d31818463ffffffff61132f16565b925050600101610466565b6000610d4885846111d0565b5060005b8651811015610eec57610d5d61177d565b878281518110610d6957fe5b602090810291909101810151908101518151604051636eb1769f60e11b815292935090916000906001600160a01b0384169063dd62ed3e90610db19030908690600401611e25565b60206040518083038186803b158015610dc957600080fd5b505afa158015610ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e019190810190611ba0565b1115610e1757610e178284600001516000611260565b610e2a8284600001518560600151611260565b6000816001600160a01b031663255de7bb3386602001518760600151886040015189608001518a60a001516040518763ffffffff1660e01b8152600401610e7696959493929190611e40565b6040805180830381600087803b158015610e8f57600080fd5b505af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ec79190810190611bbe565b509050610eda818763ffffffff61132f16565b95505060019093019250610d4c915050565b5081811015610f0d5760405162461bcd60e51b81526004016103b690611f2c565b610f178482611423565b50610f25856103cc8761135b565b5095945050505050565b6000546001600160a01b031690565b600080546001600160a01b0316610f5361152f565b6001600160a01b031614905090565b610f6a610f3e565b610f865760405162461bcd60e51b81526004016103b690611f4c565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fb485846111d0565b5060005b8651811015610eec576000805b888381518110610fd157fe5b60200260200101515181101561118457610fe961177d565b898481518110610ff557fe5b6020026020010151828151811061100857fe5b60200260200101519050600081602001519050826001141561102c57606082018490525b8151604051636eb1769f60e11b81526000906001600160a01b0384169063dd62ed3e9061105f9030908690600401611e25565b60206040518083038186803b15801561107757600080fd5b505afa15801561108b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110af9190810190611ba0565b11156110c5576110c58284600001516000611260565b6110d88284600001518560600151611260565b60208301516060840151604080860151608087015160a0880151925163255de7bb60e01b81526001600160a01b0387169563255de7bb9561112195339592949193600401611e40565b6040805180830381600087803b15801561113a57600080fd5b505af115801561114e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111729190810190611bbe565b5094505060019092019150610fc59050565b50611195818463ffffffff61132f16565b925050600101610fb8565b6111a8610f3e565b6111c45760405162461bcd60e51b81526004016103b690611f4c565b6111cd81611533565b50565b60006111db836115b4565b1561124e57600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561123057600080fd5b505af1158015611244573d6000803e3d6000fd5b505050505061125a565b61125a833330856115d9565b92915050565b60405160609063095ea7b360e01b9061127f9085908590602401611ec2565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060606112ee8583604051806040016040528060158152602001741b1bddcb5b195d995b0818d85b1b0819985a5b1959605a1b8152506116ab565b805190915015611328578080602001905161130c9190810190611b82565b6113285760405162461bcd60e51b81526004016103b690611f0c565b5050505050565b6000828201838110156113545760405162461bcd60e51b81526004016103b690611f1c565b9392505050565b6000611366826115b4565b156113f2576001546040516370a0823160e01b81526001600160a01b03909116906370a082319061139b903090600401611e17565b60206040518083038186803b1580156113b357600080fd5b505afa1580156113c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113eb9190810190611ba0565b905061141e565b6040516370a0823160e01b81526001600160a01b038316906370a082319061139b903090600401611e17565b919050565b6000816114325750600161125a565b61143b836115b4565b1561152457600154604051632e1a7d4d60e01b81526001600160a01b0390911690632e1a7d4d90611470908590600401611f6c565b600060405180830381600087803b15801561148a57600080fd5b505af115801561149e573d6000803e3d6000fd5b505050506000336001600160a01b0316836040516114bb90611dfe565b60006040518083038185875af1925050503d80600081146114f8576040519150601f19603f3d011682016040523d82523d6000602084013e6114fd565b606091505b505090508061151e5760405162461bcd60e51b81526004016103b690611f5c565b5061125a565b61125a8333846116c0565b3390565b6001600160a01b0381166115595760405162461bcd60e51b81526004016103b690611efc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14919050565b6040516060906323b872dd60e01b906115fa90869086908690602401611e9a565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060606116698683604051806040016040528060158152602001741b1bddcb5b195d995b0818d85b1b0819985a5b1959605a1b8152506116ab565b8051909150156116a357808060200190516116879190810190611b82565b6116a35760405162461bcd60e51b81526004016103b690611f0c565b505050505050565b60606116b88484846116df565b949350505050565b60405160609063a9059cbb60e01b9061127f9085908590602401611ec2565b606060006060856001600160a01b0316856040516116fd9190611df2565b6000604051808303816000865af19150503d806000811461173a576040519150601f19603f3d011682016040523d82523d6000602084013e61173f565b606091505b509150915081156117535791506113549050565b8051156117635780518082602001fd5b8360405162461bcd60e51b81526004016103b69190611eeb565b6040518060c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b803561125a81612073565b600082601f8301126117ea57600080fd5b81356117fd6117f882611fd6565b611faf565b81815260209384019390925082018360005b8381101561183b57813586016118258882611845565b845250602092830192919091019060010161180f565b5050505092915050565b600082601f83011261185657600080fd5b81356118646117f882611fd6565b915081818352602084019350602081019050838560c084028201111561188957600080fd5b60005b8381101561183b578161189f888261193f565b84525060209092019160c0919091019060010161188c565b600082601f8301126118c857600080fd5b81356118d66117f882611fd6565b915081818352602084019350602081019050838560c08402820111156118fb57600080fd5b60005b8381101561183b5781611911888261193f565b84525060209092019160c091909101906001016118fe565b805161125a81612087565b803561125a81612090565b600060c0828403121561195157600080fd5b61195b60c0611faf565b9050600061196984846117ce565b825250602061197a848483016117ce565b602083015250604061198e848285016117ce565b60408301525060606119a2848285016119d6565b60608301525060806119b6848285016119d6565b60808301525060a06119ca848285016119d6565b60a08301525092915050565b803561125a81612099565b805161125a81612099565b6000602082840312156119fe57600080fd5b60006116b884846117ce565b60008060008060808587031215611a2057600080fd5b843567ffffffffffffffff811115611a3757600080fd5b611a43878288016117d9565b9450506020611a5487828801611934565b9350506040611a6587828801611934565b9250506060611a76878288016119d6565b91505092959194509250565b600080600080600060a08688031215611a9a57600080fd5b853567ffffffffffffffff811115611ab157600080fd5b611abd888289016117d9565b9550506020611ace88828901611934565b9450506040611adf88828901611934565b9350506060611af0888289016119d6565b9250506080611b01888289016119d6565b9150509295509295909350565b60008060008060808587031215611b2457600080fd5b843567ffffffffffffffff811115611b3b57600080fd5b611a43878288016118b7565b600080600080600060a08688031215611b5f57600080fd5b853567ffffffffffffffff811115611b7657600080fd5b611abd888289016118b7565b600060208284031215611b9457600080fd5b60006116b88484611929565b600060208284031215611bb257600080fd5b60006116b884846119e1565b60008060408385031215611bd157600080fd5b6000611bdd85856119e1565b9250506020611bee858286016119e1565b9150509250929050565b611c018161202e565b82525050565b611c0181612004565b611c018161200f565b6000611c2482611ff7565b611c2e818561141e565b9350611c3e818560208601612039565b9290920192915050565b6000611c5382611ff7565b611c5d8185611ffb565b9350611c6d818560208601612039565b611c7681612069565b9093019392505050565b6000611c8d602683611ffb565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000611cd5600b83611ffb565b6a1b9bdd081cdd58d8d9595960aa1b815260200192915050565b6000611cfc601b83611ffb565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000611d35600d83611ffb565b6c11549497d31253525517d3d555609a1b815260200192915050565b6000611d5e600c83611ffb565b6b22a9292fa624a6a4aa2fa4a760a11b815260200192915050565b6000611d86602083611ffb565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000611dbf600e83611ffb565b6d11549497d1551217d1905253115160921b815260200192915050565b600061125a60008361141e565b611c018161202b565b60006113548284611c19565b600061125a82611ddc565b6020810161125a8284611c07565b6020810161125a8284611bf8565b60408101611e338285611bf8565b6113546020830184611c07565b60c08101611e4e8289611bf8565b611e5b6020830188611c07565b611e686040830187611de9565b611e756060830186611c07565b611e826080830185611de9565b611e8f60a0830184611de9565b979650505050505050565b60608101611ea88286611c07565b611eb56020830185611c07565b6116b86040830184611de9565b60408101611ed08285611c07565b6113546020830184611de9565b6020810161125a8284611c10565b602080825281016113548184611c48565b6020808252810161125a81611c80565b6020808252810161125a81611cc8565b6020808252810161125a81611cef565b6020808252810161125a81611d28565b6020808252810161125a81611d51565b6020808252810161125a81611d79565b6020808252810161125a81611db2565b6020810161125a8284611de9565b60c08101611f888289611de9565b611f956020830188611de9565b611fa26040830187611de9565b611e756060830186611de9565b60405181810167ffffffffffffffff81118282101715611fce57600080fd5b604052919050565b600067ffffffffffffffff821115611fed57600080fd5b5060209081020190565b5190565b90815260200190565b600061125a8261201f565b151590565b600061125a82612004565b6001600160a01b031690565b90565b600061125a82612014565b60005b8381101561205457818101518382015260200161203c565b83811115612063576000848401525b50505050565b601f01601f191690565b61207c81612004565b81146111cd57600080fd5b61207c8161200f565b61207c81612014565b61207c8161202b56fea365627a7a723158201a8b20dd4a4ab2b5aecf0615ae3a9eac9de34ee2511bb6df5076cc3ac742a0ea6c6578706572696d656e74616cf564736f6c634300050c0040000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x6080604052600436106100865760003560e01c80638da5cb5b116100595780638da5cb5b146100ec5780638f32d59b1461010e578063a91ee0dc14610130578063e2b3974614610150578063f2fde38b1461016357610086565b80632db5813414610088578063715018a6146100b157806386b2ecc4146100c65780638743ad58146100d9575b005b61009b610096366004611b0e565b610183565b6040516100a89190611f6c565b60405180910390f35b3480156100bd57600080fd5b506100866103e8565b61009b6100d4366004611a0a565b610456565b61009b6100e7366004611b47565b610d3c565b3480156100f857600080fd5b50610101610f2f565b6040516100a89190611e09565b34801561011a57600080fd5b50610123610f3e565b6040516100a89190611edd565b34801561013c57600080fd5b5061008661014b3660046119ec565b610f62565b61009b61015e366004611a82565b610fa8565b34801561016f57600080fd5b5061008661017e3660046119ec565b6111a0565b600061018f84836111d0565b5060005b8551811015610395576101a461177d565b8682815181106101b057fe5b602090810291909101810151908101518151604051636eb1769f60e11b815292935090916000906001600160a01b0384169063dd62ed3e906101f89030908690600401611e25565b60206040518083038186803b15801561021057600080fd5b505afa158015610224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102489190810190611ba0565b111561025e5761025e8284600001516000611260565b6102718284600001518560800151611260565b6000816001600160a01b0316634d128b773386602001518760800151886040015189606001518a60a001516040518763ffffffff1660e01b81526004016102bd96959493929190611e40565b6040805180830381600087803b1580156102d657600080fd5b505af11580156102ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061030e9190810190611bbe565b509050610321818763ffffffff61132f16565b6020850151604051631185197d60e31b81529197506001600160a01b03841691638c28cbe89161035391600401611e09565b600060405180830381600087803b15801561036d57600080fd5b505af1158015610381573d6000803e3d6000fd5b505060019096019550610193945050505050565b50818111156103bf5760405162461bcd60e51b81526004016103b690611f3c565b60405180910390fd5b6103d1836103cc8561135b565b611423565b506103df846103cc8661135b565b50949350505050565b6103f0610f3e565b61040c5760405162461bcd60e51b81526004016103b690611f4c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600061046284836111d0565b5060005b855181101561039557600086828151811061047d57fe5b6020026020010151516001141561067e5761049661177d565b8783815181106104a257fe5b60200260200101516000815181106104b657fe5b602090810291909101810151908101518151604051636eb1769f60e11b815292935090916000906001600160a01b0384169063dd62ed3e906104fe9030908690600401611e25565b60206040518083038186803b15801561051657600080fd5b505afa15801561052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061054e9190810190611ba0565b1115610564576105648284600001516000611260565b6105778284600001518560800151611260565b60208301516080840151604080860151606087015160a08801519251634d128b7760e01b81526001600160a01b03871695634d128b77956105c095339592949193600401611e40565b6040805180830381600087803b1580156105d957600080fd5b505af11580156105ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106119190810190611bbe565b506020840151604051631185197d60e31b81529195506001600160a01b03831691638c28cbe89161064491600401611e09565b600060405180830381600087803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b50505050505050610d21565b600061068861177d565b88848151811061069457fe5b60200260200101516001815181106106a857fe5b60209081029190910181015180519181015160405163f8b2cb4f60e01b81529193506001600160a01b0383169163f8d6aed491839163f8b2cb4f916106ef91600401611e09565b60206040518083038186803b15801561070757600080fd5b505afa15801561071b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061073f9190810190611ba0565b6020850151604051634a46c67360e11b81526001600160a01b0386169163948d8ce69161076f9190600401611e09565b60206040518083038186803b15801561078757600080fd5b505afa15801561079b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107bf9190810190611ba0565b604080870151905163f8b2cb4f60e01b81526001600160a01b0387169163f8b2cb4f916107ef9190600401611e09565b60206040518083038186803b15801561080757600080fd5b505afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061083f9190810190611ba0565b6040808801519051634a46c67360e11b81526001600160a01b0388169163948d8ce69161086f9190600401611e09565b60206040518083038186803b15801561088757600080fd5b505afa15801561089b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108bf9190810190611ba0565b8760600151876001600160a01b031663d4cadf686040518163ffffffff1660e01b815260040160206040518083038186803b1580156108fd57600080fd5b505afa158015610911573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109359190810190611ba0565b6040518763ffffffff1660e01b815260040161095696959493929190611f7a565b60206040518083038186803b15801561096e57600080fd5b505afa158015610982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109a69190810190611ba0565b92506109b061177d565b8a86815181106109bc57fe5b60200260200101516000815181106109d057fe5b602090810291909101810151908101518151604051636eb1769f60e11b81529293509091600019906001600160a01b0384169063dd62ed3e90610a199030908690600401611e25565b60206040518083038186803b158015610a3157600080fd5b505afa158015610a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a699190810190611ba0565b1015610a8057610a80828460000151600019611260565b806001600160a01b0316634d128b77338560200151866080015187604001518b8960a001516040518763ffffffff1660e01b8152600401610ac696959493929190611e40565b6040805180830381600087803b158015610adf57600080fd5b505af1158015610af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b179190810190611bbe565b506020840151604051631185197d60e31b81529198506001600160a01b03831691638c28cbe891610b4a91600401611e09565b600060405180830381600087803b158015610b6457600080fd5b505af1158015610b78573d6000803e3d6000fd5b5050505060208501518551604051636eb1769f60e11b8152600019916001600160a01b0384169163dd62ed3e91610bb491309190600401611e25565b60206040518083038186803b158015610bcc57600080fd5b505afa158015610be0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c049190810190611ba0565b1015610c1b57610c1b818760000151600019611260565b6020860151608087015160408089015160608a015160a08b01519251634d128b7760e01b81526001600160a01b038b1695634d128b7795610c6495339592949193600401611e40565b6040805180830381600087803b158015610c7d57600080fd5b505af1158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cb59190810190611bbe565b50506020860151604051631185197d60e31b81526001600160a01b03871691638c28cbe891610ce79190600401611e09565b600060405180830381600087803b158015610d0157600080fd5b505af1158015610d15573d6000803e3d6000fd5b50505050505050505050505b610d31818463ffffffff61132f16565b925050600101610466565b6000610d4885846111d0565b5060005b8651811015610eec57610d5d61177d565b878281518110610d6957fe5b602090810291909101810151908101518151604051636eb1769f60e11b815292935090916000906001600160a01b0384169063dd62ed3e90610db19030908690600401611e25565b60206040518083038186803b158015610dc957600080fd5b505afa158015610ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e019190810190611ba0565b1115610e1757610e178284600001516000611260565b610e2a8284600001518560600151611260565b6000816001600160a01b031663255de7bb3386602001518760600151886040015189608001518a60a001516040518763ffffffff1660e01b8152600401610e7696959493929190611e40565b6040805180830381600087803b158015610e8f57600080fd5b505af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ec79190810190611bbe565b509050610eda818763ffffffff61132f16565b95505060019093019250610d4c915050565b5081811015610f0d5760405162461bcd60e51b81526004016103b690611f2c565b610f178482611423565b50610f25856103cc8761135b565b5095945050505050565b6000546001600160a01b031690565b600080546001600160a01b0316610f5361152f565b6001600160a01b031614905090565b610f6a610f3e565b610f865760405162461bcd60e51b81526004016103b690611f4c565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fb485846111d0565b5060005b8651811015610eec576000805b888381518110610fd157fe5b60200260200101515181101561118457610fe961177d565b898481518110610ff557fe5b6020026020010151828151811061100857fe5b60200260200101519050600081602001519050826001141561102c57606082018490525b8151604051636eb1769f60e11b81526000906001600160a01b0384169063dd62ed3e9061105f9030908690600401611e25565b60206040518083038186803b15801561107757600080fd5b505afa15801561108b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110af9190810190611ba0565b11156110c5576110c58284600001516000611260565b6110d88284600001518560600151611260565b60208301516060840151604080860151608087015160a0880151925163255de7bb60e01b81526001600160a01b0387169563255de7bb9561112195339592949193600401611e40565b6040805180830381600087803b15801561113a57600080fd5b505af115801561114e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111729190810190611bbe565b5094505060019092019150610fc59050565b50611195818463ffffffff61132f16565b925050600101610fb8565b6111a8610f3e565b6111c45760405162461bcd60e51b81526004016103b690611f4c565b6111cd81611533565b50565b60006111db836115b4565b1561124e57600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561123057600080fd5b505af1158015611244573d6000803e3d6000fd5b505050505061125a565b61125a833330856115d9565b92915050565b60405160609063095ea7b360e01b9061127f9085908590602401611ec2565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060606112ee8583604051806040016040528060158152602001741b1bddcb5b195d995b0818d85b1b0819985a5b1959605a1b8152506116ab565b805190915015611328578080602001905161130c9190810190611b82565b6113285760405162461bcd60e51b81526004016103b690611f0c565b5050505050565b6000828201838110156113545760405162461bcd60e51b81526004016103b690611f1c565b9392505050565b6000611366826115b4565b156113f2576001546040516370a0823160e01b81526001600160a01b03909116906370a082319061139b903090600401611e17565b60206040518083038186803b1580156113b357600080fd5b505afa1580156113c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113eb9190810190611ba0565b905061141e565b6040516370a0823160e01b81526001600160a01b038316906370a082319061139b903090600401611e17565b919050565b6000816114325750600161125a565b61143b836115b4565b1561152457600154604051632e1a7d4d60e01b81526001600160a01b0390911690632e1a7d4d90611470908590600401611f6c565b600060405180830381600087803b15801561148a57600080fd5b505af115801561149e573d6000803e3d6000fd5b505050506000336001600160a01b0316836040516114bb90611dfe565b60006040518083038185875af1925050503d80600081146114f8576040519150601f19603f3d011682016040523d82523d6000602084013e6114fd565b606091505b505090508061151e5760405162461bcd60e51b81526004016103b690611f5c565b5061125a565b61125a8333846116c0565b3390565b6001600160a01b0381166115595760405162461bcd60e51b81526004016103b690611efc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14919050565b6040516060906323b872dd60e01b906115fa90869086908690602401611e9a565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060606116698683604051806040016040528060158152602001741b1bddcb5b195d995b0818d85b1b0819985a5b1959605a1b8152506116ab565b8051909150156116a357808060200190516116879190810190611b82565b6116a35760405162461bcd60e51b81526004016103b690611f0c565b505050505050565b60606116b88484846116df565b949350505050565b60405160609063a9059cbb60e01b9061127f9085908590602401611ec2565b606060006060856001600160a01b0316856040516116fd9190611df2565b6000604051808303816000865af19150503d806000811461173a576040519150601f19603f3d011682016040523d82523d6000602084013e61173f565b606091505b509150915081156117535791506113549050565b8051156117635780518082602001fd5b8360405162461bcd60e51b81526004016103b69190611eeb565b6040518060c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b803561125a81612073565b600082601f8301126117ea57600080fd5b81356117fd6117f882611fd6565b611faf565b81815260209384019390925082018360005b8381101561183b57813586016118258882611845565b845250602092830192919091019060010161180f565b5050505092915050565b600082601f83011261185657600080fd5b81356118646117f882611fd6565b915081818352602084019350602081019050838560c084028201111561188957600080fd5b60005b8381101561183b578161189f888261193f565b84525060209092019160c0919091019060010161188c565b600082601f8301126118c857600080fd5b81356118d66117f882611fd6565b915081818352602084019350602081019050838560c08402820111156118fb57600080fd5b60005b8381101561183b5781611911888261193f565b84525060209092019160c091909101906001016118fe565b805161125a81612087565b803561125a81612090565b600060c0828403121561195157600080fd5b61195b60c0611faf565b9050600061196984846117ce565b825250602061197a848483016117ce565b602083015250604061198e848285016117ce565b60408301525060606119a2848285016119d6565b60608301525060806119b6848285016119d6565b60808301525060a06119ca848285016119d6565b60a08301525092915050565b803561125a81612099565b805161125a81612099565b6000602082840312156119fe57600080fd5b60006116b884846117ce565b60008060008060808587031215611a2057600080fd5b843567ffffffffffffffff811115611a3757600080fd5b611a43878288016117d9565b9450506020611a5487828801611934565b9350506040611a6587828801611934565b9250506060611a76878288016119d6565b91505092959194509250565b600080600080600060a08688031215611a9a57600080fd5b853567ffffffffffffffff811115611ab157600080fd5b611abd888289016117d9565b9550506020611ace88828901611934565b9450506040611adf88828901611934565b9350506060611af0888289016119d6565b9250506080611b01888289016119d6565b9150509295509295909350565b60008060008060808587031215611b2457600080fd5b843567ffffffffffffffff811115611b3b57600080fd5b611a43878288016118b7565b600080600080600060a08688031215611b5f57600080fd5b853567ffffffffffffffff811115611b7657600080fd5b611abd888289016118b7565b600060208284031215611b9457600080fd5b60006116b88484611929565b600060208284031215611bb257600080fd5b60006116b884846119e1565b60008060408385031215611bd157600080fd5b6000611bdd85856119e1565b9250506020611bee858286016119e1565b9150509250929050565b611c018161202e565b82525050565b611c0181612004565b611c018161200f565b6000611c2482611ff7565b611c2e818561141e565b9350611c3e818560208601612039565b9290920192915050565b6000611c5382611ff7565b611c5d8185611ffb565b9350611c6d818560208601612039565b611c7681612069565b9093019392505050565b6000611c8d602683611ffb565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000611cd5600b83611ffb565b6a1b9bdd081cdd58d8d9595960aa1b815260200192915050565b6000611cfc601b83611ffb565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000611d35600d83611ffb565b6c11549497d31253525517d3d555609a1b815260200192915050565b6000611d5e600c83611ffb565b6b22a9292fa624a6a4aa2fa4a760a11b815260200192915050565b6000611d86602083611ffb565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000611dbf600e83611ffb565b6d11549497d1551217d1905253115160921b815260200192915050565b600061125a60008361141e565b611c018161202b565b60006113548284611c19565b600061125a82611ddc565b6020810161125a8284611c07565b6020810161125a8284611bf8565b60408101611e338285611bf8565b6113546020830184611c07565b60c08101611e4e8289611bf8565b611e5b6020830188611c07565b611e686040830187611de9565b611e756060830186611c07565b611e826080830185611de9565b611e8f60a0830184611de9565b979650505050505050565b60608101611ea88286611c07565b611eb56020830185611c07565b6116b86040830184611de9565b60408101611ed08285611c07565b6113546020830184611de9565b6020810161125a8284611c10565b602080825281016113548184611c48565b6020808252810161125a81611c80565b6020808252810161125a81611cc8565b6020808252810161125a81611cef565b6020808252810161125a81611d28565b6020808252810161125a81611d51565b6020808252810161125a81611d79565b6020808252810161125a81611db2565b6020810161125a8284611de9565b60c08101611f888289611de9565b611f956020830188611de9565b611fa26040830187611de9565b611e756060830186611de9565b60405181810167ffffffffffffffff81118282101715611fce57600080fd5b604052919050565b600067ffffffffffffffff821115611fed57600080fd5b5060209081020190565b5190565b90815260200190565b600061125a8261201f565b151590565b600061125a82612004565b6001600160a01b031690565b90565b600061125a82612014565b60005b8381101561205457818101518382015260200161203c565b83811115612063576000848401525b50505050565b601f01601f191690565b61207c81612004565b81146111cd57600080fd5b61207c8161200f565b61207c81612014565b61207c8161202b56fea365627a7a723158201a8b20dd4a4ab2b5aecf0615ae3a9eac9de34ee2511bb6df5076cc3ac742a0ea6c6578706572696d656e74616cf564736f6c634300050c0040
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode Sourcemap
10300:13345:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12587:1299;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8293:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8293:140:0;;;:::i;15717:4325::-;;;;;;;;;:::i;11298:1281::-;;;;;;;;;:::i;7482:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7482:79:0;;;:::i;:::-;;;;;;;;7848:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7848:94:0;;;:::i;:::-;;;;;;;;11173:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11173:117:0;;;;;;;;:::i;13894:1815::-;;;;;;;;;:::i;8588:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8588:109:0;;;;;;;;:::i;12587:1299::-;12784:18;12820:42;12836:7;12845:16;12820:15;:42::i;:::-;-1:-1:-1;12880:6:0;12875:825;12896:5;:12;12892:1;:16;12875:825;;;12930:16;;:::i;:::-;12949:5;12955:1;12949:8;;;;;;;;;;;;;;;;;;;13016:12;;;;13079:9;;13110:47;;-1:-1:-1;;;13110:47:0;;12949:8;;-1:-1:-1;13016:12:0;;12972:26;;-1:-1:-1;;;;;13110:21:0;;;;;:47;;13140:4;;13079:9;;13110:47;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13110:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13110:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13110:47:0;;;;;;;;;:51;13106:130;;;13182:38;13194:11;13207:4;:9;;;13218:1;13182:11;:38::i;:::-;13250:59;13262:11;13275:4;:9;;;13286:4;:22;;;13250:11;:59::i;:::-;13327:18;13350:4;-1:-1:-1;;;;;13350:23:0;;13392:10;13421:4;:12;;;13452:4;:22;;;13493:4;:13;;;13525:4;:15;;;13559:4;:13;;;13350:237;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13350:237:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13350:237:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13350:237:0;;;;;;;;;-1:-1:-1;13326:261:0;-1:-1:-1;13618:32:0;13326:261;13636:13;13618:32;:17;:32;:::i;:::-;13675:12;;;;13665:23;;-1:-1:-1;;;13665:23:0;;13602:48;;-1:-1:-1;;;;;;13665:9:0;;;;;:23;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13665:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;12910:3:0;;;;;-1:-1:-1;12875:825:0;;-1:-1:-1;;;;;12875:825:0;;;13735:16;13718:13;:33;;13710:58;;;;-1:-1:-1;;;13710:58:0;;;;;;;;;;;;;;;;;13781:43;13793:8;13803:20;13814:8;13803:10;:20::i;:::-;13781:11;:43::i;:::-;;13835:41;13847:7;13856:19;13867:7;13856:10;:19::i;13835:41::-;;12587:1299;;;;;;:::o;8293:140::-;7694:9;:7;:9::i;:::-;7686:54;;;;-1:-1:-1;;;7686:54:0;;;;;;;;;8392:1;8376:6;;8355:40;;-1:-1:-1;;;;;8376:6:0;;;;8355:40;;8392:1;;8355:40;8423:1;8406:19;;-1:-1:-1;;;;;;8406:19:0;;;8293:140::o;15717:4325::-;15932:18;15970:42;15986:7;15995:16;15970:15;:42::i;:::-;-1:-1:-1;16030:6:0;16025:3829;16046:13;:20;16042:1;:24;16025:3829;;;16088:27;16219:13;16233:1;16219:16;;;;;;;;;;;;;;:23;16246:1;16219:28;16215:3556;;;16268:16;;:::i;:::-;16287:13;16301:1;16287:16;;;;;;;;;;;;;;16304:1;16287:19;;;;;;;;;;;;;;;;;;;16369:12;;;;16438:9;;16471:47;;-1:-1:-1;;;16471:47:0;;16287:19;;-1:-1:-1;16369:12:0;;16325:26;;-1:-1:-1;;;;;16471:21:0;;;;;:47;;16501:4;;16438:9;;16471:47;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16471:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16471:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16471:47:0;;;;;;;;;:51;16467:138;;;16547:38;16559:11;16572:4;:9;;;16583:1;16547:11;:38::i;:::-;16623:59;16635:11;16648:4;:9;;;16659:4;:22;;;16623:11;:59::i;:::-;16810:12;;;;16845:22;;;;16890:13;;;;;16926:15;;;;16964:13;;;;16731:265;;-1:-1:-1;;;16731:265:0;;-1:-1:-1;;;;;16731:23:0;;;;;:265;;16777:10;;16810:12;;16845:22;;16731:265;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16731:265:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16731:265:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16731:265:0;;;;;;;;;-1:-1:-1;17025:12:0;;;;17015:23;;-1:-1:-1;;;17015:23:0;;16703:293;;-1:-1:-1;;;;;;17015:9:0;;;;;:23;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17015:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17015:23:0;;;;16215:3556;;;;;;17375:28;17466:22;;:::i;:::-;17491:13;17505:1;17491:16;;;;;;;;;;;;;;17508:1;17491:19;;;;;;;;;;;;;;;;;;;17574:15;;17713:18;;;;17687:45;;-1:-1:-1;;;17687:45:0;;17491:19;;-1:-1:-1;;;;;;17635:29:0;;;;;;;17687:25;;:45;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17687:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17687:45:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17687:45:0;;;;;;;;;17792:18;;;;17755:56;;-1:-1:-1;;;17755:56:0;;-1:-1:-1;;;;;17755:36:0;;;;;:56;;17792:18;17755:56;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17755:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17755:56:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17755:56:0;;;;;;;;;17860:19;;;;;17834:46;;-1:-1:-1;;;17834:46:0;;-1:-1:-1;;;;;17834:25:0;;;;;:46;;17860:19;17834:46;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17834:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17834:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17834:46:0;;;;;;;;;17940:19;;;;;17903:57;;-1:-1:-1;;;17903:57:0;;-1:-1:-1;;;;;17903:36:0;;;;;:57;;17940:19;17903:57;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17903:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17903:57:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17903:57:0;;;;;;;;;17983:10;:21;;;18027:14;-1:-1:-1;;;;;18027:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18027:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18027:27:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18027:27:0;;;;;;;;;17635:438;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17635:438:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17635:438:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17635:438:0;;;;;;;;;17609:464;;18180:21;;:::i;:::-;18204:13;18218:1;18204:16;;;;;;;;;;;;;;18221:1;18204:19;;;;;;;;;;;;;;;;;;;18291:17;;;;18372:14;;18410:57;;-1:-1:-1;;;18410:57:0;;18204:19;;-1:-1:-1;18291:17:0;;-1:-1:-1;;18475:2:0;-1:-1:-1;;;;;18410:26:0;;;;;:57;;18445:4;;18372:14;;18410:57;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18410:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18410:57:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18410:57:0;;;;;;;;;:68;18406:172;;;18503:55;18515:16;18533:9;:14;;;-1:-1:-1;;18503:11:0;:55::i;:::-;18626:13;-1:-1:-1;;;;;18626:32:0;;18681:10;18714:9;:17;;;18754:9;:27;;;18804:9;:18;;;18845:23;18932:9;:18;;;18626:343;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18626:343:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18626:343:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18626:343:0;;;;;;;;;-1:-1:-1;19007:17:0;;;;18988:37;;-1:-1:-1;;;18988:37:0;;18598:371;;-1:-1:-1;;;;;;18988:18:0;;;;;:37;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18988:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;19158:18:0;;;;19243:15;;19200:59;;-1:-1:-1;;;19200:59:0;;-1:-1:-1;;19267:2:0;-1:-1:-1;;;;;19200:27:0;;;;;:59;;19236:4;;19243:15;19200:59;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19200:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19200:59:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19200:59:0;;;;;;;;;:70;19196:176;;;19295:57;19307:17;19326:10;:15;;;-1:-1:-1;;19295:11:0;:57::i;:::-;19481:18;;;;19522:28;;;;19573:19;;;;;19615:21;;;;19659:19;;;;19392:305;;-1:-1:-1;;;19392:305:0;;-1:-1:-1;;;;;19392:33:0;;;;;:305;;19448:10;;19481:18;;19522:28;;19392:305;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19392:305:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19392:305:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19392:305:0;;;;;;;;;-1:-1:-1;;19736:18:0;;;;19716:39;;-1:-1:-1;;;19716:39:0;;-1:-1:-1;;;;;19716:19:0;;;;;:39;;19736:18;19716:39;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19716:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19716:39:0;;;;16215:3556;;;;;;;;19801:41;:22;19828:13;19801:41;:26;:41;:::i;:::-;19785:57;-1:-1:-1;;16068:3:0;;16025:3829;;11298:1281;11524:19;11561:39;11577:7;11586:13;11561:15;:39::i;:::-;-1:-1:-1;11618:6:0;11613:783;11634:5;:12;11630:1;:16;11613:783;;;11668:16;;:::i;:::-;11687:5;11693:1;11687:8;;;;;;;;;;;;;;;;;;;11754:12;;;;11817:9;;11848:47;;-1:-1:-1;;;11848:47:0;;11687:8;;-1:-1:-1;11754:12:0;;11710:26;;-1:-1:-1;;;;;11848:21:0;;;;;:47;;11878:4;;11817:9;;11848:47;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11848:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11848:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11848:47:0;;;;;;;;;:51;11844:130;;;11920:38;11932:11;11945:4;:9;;;11956:1;11920:11;:38::i;:::-;11988:52;12000:11;12013:4;:9;;;12024:4;:15;;;11988:11;:52::i;:::-;12058:19;12082:4;-1:-1:-1;;;;;12082:22:0;;12123:10;12152:4;:12;;;12183:4;:15;;;12217:4;:13;;;12249:4;:22;;;12290:4;:13;;;12082:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12082:236:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12082:236:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;12082:236:0;;;;;;;;;-1:-1:-1;12057:261:0;-1:-1:-1;12350:34:0;12057:261;12369:14;12350:34;:18;:34;:::i;:::-;12333:51;-1:-1:-1;;11648:3:0;;;;;-1:-1:-1;11613:783:0;;-1:-1:-1;;11613:783:0;;;12434:17;12416:14;:35;;12408:61;;;;-1:-1:-1;;;12408:61:0;;;;;;;;;12482:37;12494:8;12504:14;12482:11;:37::i;:::-;;12530:41;12542:7;12551:19;12562:7;12551:10;:19::i;12530:41::-;;11298:1281;;;;;;;:::o;7482:79::-;7520:7;7547:6;-1:-1:-1;;;;;7547:6:0;7482:79;:::o;7848:94::-;7888:4;7928:6;;-1:-1:-1;;;;;7928:6:0;7912:12;:10;:12::i;:::-;-1:-1:-1;;;;;7912:22:0;;7905:29;;7848:94;:::o;11173:117::-;7694:9;:7;:9::i;:::-;7686:54;;;;-1:-1:-1;;;7686:54:0;;;;;;;;;11243:8;:39;;-1:-1:-1;;;;;;11243:39:0;-1:-1:-1;;;;;11243:39:0;;;;;;;;;;11173:117::o;13894:1815::-;14138:19;14177:39;14193:7;14202:13;14177:15;:39::i;:::-;-1:-1:-1;14234:6:0;14229:1295;14250:13;:20;14246:1;:24;14229:1295;;;14292:19;;14326:1063;14347:13;14361:1;14347:16;;;;;;;;;;;;;;:23;14343:1;:27;14326:1063;;;14396:16;;:::i;:::-;14415:13;14429:1;14415:16;;;;;;;;;;;;;;14432:1;14415:19;;;;;;;;;;;;;;14396:38;;14453:26;14497:4;:12;;;14453:57;;14533:1;14538;14533:6;14529:247;;;14724:15;;;:32;;;14529:247;14831:9;;14864:47;;-1:-1:-1;;;14864:47:0;;14796:18;;-1:-1:-1;;;;;14864:21:0;;;;;:47;;14894:4;;14831:9;;14864:47;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14864:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14864:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14864:47:0;;;;;;;;;:51;14860:138;;;14940:38;14952:11;14965:4;:9;;;14976:1;14940:11;:38::i;:::-;15016:52;15028:11;15041:4;:9;;;15052:4;:15;;;15016:11;:52::i;:::-;15187:12;;;;15222:15;;;;15260:13;;;;;15296:22;;;;15341:13;;;;15109:264;;-1:-1:-1;;;15109:264:0;;-1:-1:-1;;;;;15109:22:0;;;;;:264;;15154:10;;15187:12;;15222:15;;15109:264;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15109:264:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15109:264:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15109:264:0;;;;;;;;;-1:-1:-1;15089:284:0;-1:-1:-1;;14372:3:0;;;;;-1:-1:-1;14326:1063:0;;-1:-1:-1;14326:1063:0;;-1:-1:-1;15478:34:0;:14;15497;15478:34;:18;:34;:::i;:::-;15461:51;-1:-1:-1;;14272:3:0;;14229:1295;;8588:109;7694:9;:7;:9::i;:::-;7686:54;;;;-1:-1:-1;;;7686:54:0;;;;;;;;;8661:28;8680:8;8661:18;:28::i;:::-;8588:109;:::o;20052:382::-;20129:4;20150:12;20156:5;20150;:12::i;:::-;20146:281;;;20179:4;;;;;;;;;-1:-1:-1;;;;;20179:4:0;-1:-1:-1;;;;;20179:12:0;;20198:9;20179:31;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20179:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20179:31:0;;;;;20146:281;;;20357:58;20374:5;20381:10;20401:4;20408:6;20357:16;:58::i;:::-;20052:382;;;;:::o;22166:392::-;22278:58;;22258:17;;-1:-1:-1;;;22301:22:0;22278:58;;22325:2;;22329:6;;22278:58;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22278:58:0;;;;-1:-1:-1;;;;;22278:58:0;;38:4:-1;29:7;25:18;67:10;61:17;-1:-1;;;;;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;22278:58:0;22258:78;;22347:23;22373:59;22394:5;22402:4;22373:59;;;;;;;;;;;;;-1:-1:-1;;;22373:59:0;;;:12;:59::i;:::-;22447:17;;22347:85;;-1:-1:-1;22447:21:0;22443:108;;22504:10;22493:30;;;;;;;;;;;;;;22485:54;;;;-1:-1:-1;;;22485:54:0;;;;;;;;;22166:392;;;;;:::o;896:181::-;954:7;986:5;;;1010:6;;;;1002:46;;;;-1:-1:-1;;;1002:46:0;;;;;;;;;1068:1;896:181;-1:-1:-1;;;896:181:0:o;20442:240::-;20507:4;20528:12;20534:5;20528;:12::i;:::-;20524:151;;;20564:4;;:29;;-1:-1:-1;;;20564:29:0;;-1:-1:-1;;;;;20564:4:0;;;;:14;;:29;;20587:4;;20564:29;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20564:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20564:29:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20564:29:0;;;;;;;;;20557:36;;;;20524:151;20633:30;;-1:-1:-1;;;20633:30:0;;-1:-1:-1;;;;;20633:15:0;;;;;:30;;20657:4;;20633:30;;;;20524:151;20442:240;;;:::o;20690:506::-;20763:4;20784:11;20780:55;;-1:-1:-1;20819:4:0;20812:11;;20780:55;20851:12;20857:5;20851;:12::i;:::-;20847:342;;;20880:4;;:21;;-1:-1:-1;;;20880:21:0;;-1:-1:-1;;;;;20880:4:0;;;;:13;;:21;;20894:6;;20880:21;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20880:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20880:21:0;;;;20917:9;20931:10;-1:-1:-1;;;;;20931:15:0;20953:6;20931:33;;;;;;;;;;;;;;;;;;;;;;;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;;20916:48:0;;;20987:4;20979:31;;;;-1:-1:-1;;;20979:31:0;;;;;;;;;20847:342;;;;21138:39;21151:5;21158:10;21170:6;21138:12;:39::i;6272:99::-;6353:10;6272:99;:::o;8803:229::-;-1:-1:-1;;;;;8877:22:0;;8869:73;;;;-1:-1:-1;;;8869:73:0;;;;;;;;;8979:6;;;8958:38;;-1:-1:-1;;;;;8958:38:0;;;;8979:6;;;8958:38;;;9007:6;:17;;-1:-1:-1;;;;;;9007:17:0;-1:-1:-1;;;;;9007:17:0;;;;;;;;;;8803:229::o;21204:122::-;-1:-1:-1;;;;;21288:29:0;;10990:42;21288:29;21204:122;;;:::o;21736:422::-;21867:69;;21847:17;;-1:-1:-1;;;21890:27:0;21867:69;;21919:4;;21925:2;;21929:6;;21867:69;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21867:69:0;;;;-1:-1:-1;;;;;21867:69:0;;38:4:-1;29:7;25:18;67:10;61:17;-1:-1;;;;;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;21867:69:0;21847:89;;21947:23;21973:59;21994:5;22002:4;21973:59;;;;;;;;;;;;;-1:-1:-1;;;21973:59:0;;;:12;:59::i;:::-;22047:17;;21947:85;;-1:-1:-1;22047:21:0;22043:108;;22104:10;22093:30;;;;;;;;;;;;;;22085:54;;;;-1:-1:-1;;;22085:54:0;;;;;;;;;21736:422;;;;;;:::o;22566:193::-;22669:12;22701:50;22724:6;22732:4;22738:12;22701:22;:50::i;:::-;22694:57;22566:193;-1:-1:-1;;;;22566:193:0:o;21334:394::-;21447:59;;21427:17;;-1:-1:-1;;;21470:23:0;21447:59;;21495:2;;21499:6;;21447:59;;;;22767:837;22880:12;22906;22920:23;22947:6;-1:-1:-1;;;;;22947:11:0;22959:4;22947:17;;;;;;;;;;;;;;;;;;;;;;;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;;22905:59:0;;;;23006:7;23002:595;;;23037:10;-1:-1:-1;23030:17:0;;-1:-1:-1;23030:17:0;23002:595;23151:17;;:21;23147:439;;23414:10;23408:17;23475:15;23462:10;23458:2;23454:19;23447:44;23362:148;23557:12;23550:20;;-1:-1:-1;;;23550:20:0;;;;;;;;;10300:13345;;;;;;;;;;-1:-1:-1;;;;;10300:13345:0;;;;;;-1:-1:-1;;;;;10300:13345:0;;;;;;-1:-1:-1;;;;;10300:13345:0;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;180:792;;335:3;328:4;320:6;316:17;312:27;302:2;;353:1;350;343:12;302:2;390:6;377:20;412:118;427:102;522:6;427:102;;;412:118;;;558:21;;;602:4;590:17;;;;403:127;;-1:-1;615:14;;590:17;710:1;695:271;720:6;717:1;714:13;695:271;;;803:3;790:17;782:6;778:30;827:75;898:3;886:10;827:75;;;815:88;;-1:-1;926:4;917:14;;;;945;;;;;742:1;735:9;695:271;;;699:14;295:677;;;;;;;;1016:750;;1146:3;1139:4;1131:6;1127:17;1123:27;1113:2;;1164:1;1161;1154:12;1113:2;1201:6;1188:20;1223:93;1238:77;1308:6;1238:77;;1223:93;1214:102;;1333:5;1358:6;1351:5;1344:21;1388:4;1380:6;1376:17;1366:27;;1410:4;1405:3;1401:14;1394:21;;1463:6;1510:3;1502:4;1494:6;1490:17;1485:3;1481:27;1478:36;1475:2;;;1527:1;1524;1517:12;1475:2;1552:1;1537:223;1562:6;1559:1;1556:13;1537:223;;;1620:3;1642:54;1692:3;1680:10;1642:54;;;1630:67;;-1:-1;1720:4;1711:14;;;;1748:4;1739:14;;;;;1584:1;1577:9;1537:223;;1810:758;;1944:3;1937:4;1929:6;1925:17;1921:27;1911:2;;1962:1;1959;1952:12;1911:2;1999:6;1986:20;2021:97;2036:81;2110:6;2036:81;;2021:97;2012:106;;2135:5;2160:6;2153:5;2146:21;2190:4;2182:6;2178:17;2168:27;;2212:4;2207:3;2203:14;2196:21;;2265:6;2312:3;2304:4;2296:6;2292:17;2287:3;2283:27;2280:36;2277:2;;;2329:1;2326;2319:12;2277:2;2354:1;2339:223;2364:6;2361:1;2358:13;2339:223;;;2422:3;2444:54;2494:3;2482:10;2444:54;;;2432:67;;-1:-1;2522:4;2513:14;;;;2550:4;2541:14;;;;;2386:1;2379:9;2339:223;;2576:128;2651:13;;2669:30;2651:13;2669:30;;2711:174;2800:20;;2825:55;2800:20;2825:55;;2924:1066;;3030:4;3018:9;3013:3;3009:19;3005:30;3002:2;;;3048:1;3045;3038:12;3002:2;3066:20;3081:4;3066:20;;;3057:29;-1:-1;3136:1;3167:49;3212:3;3192:9;3167:49;;;3143:74;;-1:-1;3281:2;3314:49;3359:3;3335:22;;;3314:49;;;3307:4;3300:5;3296:16;3289:75;3238:137;3429:2;3462:49;3507:3;3498:6;3487:9;3483:22;3462:49;;;3455:4;3448:5;3444:16;3437:75;3385:138;3579:2;3612:49;3657:3;3648:6;3637:9;3633:22;3612:49;;;3605:4;3598:5;3594:16;3587:75;3533:140;3736:3;3770:49;3815:3;3806:6;3795:9;3791:22;3770:49;;;3763:4;3756:5;3752:16;3745:75;3683:148;3885:3;3919:49;3964:3;3955:6;3944:9;3940:22;3919:49;;;3912:4;3905:5;3901:16;3894:75;3841:139;2996:994;;;;;3997:130;4064:20;;4089:33;4064:20;4089:33;;4134:134;4212:13;;4230:33;4212:13;4230:33;;4275:241;;4379:2;4367:9;4358:7;4354:23;4350:32;4347:2;;;4395:1;4392;4385:12;4347:2;4430:1;4447:53;4492:7;4472:9;4447:53;;4523:917;;;;;4785:3;4773:9;4764:7;4760:23;4756:33;4753:2;;;4802:1;4799;4792:12;4753:2;4837:31;;4888:18;4877:30;;4874:2;;;4920:1;4917;4910:12;4874:2;4940:116;5048:7;5039:6;5028:9;5024:22;4940:116;;;4930:126;;4816:246;5093:2;5111:75;5178:7;5169:6;5158:9;5154:22;5111:75;;;5101:85;;5072:120;5223:2;5241:75;5308:7;5299:6;5288:9;5284:22;5241:75;;;5231:85;;5202:120;5353:2;5371:53;5416:7;5407:6;5396:9;5392:22;5371:53;;;5361:63;;5332:98;4747:693;;;;;;;;5447:1043;;;;;;5726:3;5714:9;5705:7;5701:23;5697:33;5694:2;;;5743:1;5740;5733:12;5694:2;5778:31;;5829:18;5818:30;;5815:2;;;5861:1;5858;5851:12;5815:2;5881:116;5989:7;5980:6;5969:9;5965:22;5881:116;;;5871:126;;5757:246;6034:2;6052:75;6119:7;6110:6;6099:9;6095:22;6052:75;;;6042:85;;6013:120;6164:2;6182:75;6249:7;6240:6;6229:9;6225:22;6182:75;;;6172:85;;6143:120;6294:2;6312:53;6357:7;6348:6;6337:9;6333:22;6312:53;;;6302:63;;6273:98;6402:3;6421:53;6466:7;6457:6;6446:9;6442:22;6421:53;;;6411:63;;6381:99;5688:802;;;;;;;;;6497:875;;;;;6738:3;6726:9;6717:7;6713:23;6709:33;6706:2;;;6755:1;6752;6745:12;6706:2;6790:31;;6841:18;6830:30;;6827:2;;;6873:1;6870;6863:12;6827:2;6893:95;6980:7;6971:6;6960:9;6956:22;6893:95;;7379:1001;;;;;;7637:3;7625:9;7616:7;7612:23;7608:33;7605:2;;;7654:1;7651;7644:12;7605:2;7689:31;;7740:18;7729:30;;7726:2;;;7772:1;7769;7762:12;7726:2;7792:95;7879:7;7870:6;7859:9;7855:22;7792:95;;8387:257;;8499:2;8487:9;8478:7;8474:23;8470:32;8467:2;;;8515:1;8512;8505:12;8467:2;8550:1;8567:61;8620:7;8600:9;8567:61;;8651:263;;8766:2;8754:9;8745:7;8741:23;8737:32;8734:2;;;8782:1;8779;8772:12;8734:2;8817:1;8834:64;8890:7;8870:9;8834:64;;8921:399;;;9053:2;9041:9;9032:7;9028:23;9024:32;9021:2;;;9069:1;9066;9059:12;9021:2;9104:1;9121:64;9177:7;9157:9;9121:64;;;9111:74;;9083:108;9222:2;9240:64;9296:7;9287:6;9276:9;9272:22;9240:64;;;9230:74;;9201:109;9015:305;;;;;;9327:142;9418:45;9457:5;9418:45;;;9413:3;9406:58;9400:69;;;9476:113;9559:24;9577:5;9559:24;;9596:104;9673:21;9688:5;9673:21;;9707:356;;9835:38;9867:5;9835:38;;;9885:88;9966:6;9961:3;9885:88;;;9878:95;;9978:52;10023:6;10018:3;10011:4;10004:5;10000:16;9978:52;;;10042:16;;;;;9815:248;-1:-1;;9815:248;10070:347;;10182:39;10215:5;10182:39;;;10233:71;10297:6;10292:3;10233:71;;;10226:78;;10309:52;10354:6;10349:3;10342:4;10335:5;10331:16;10309:52;;;10382:29;10404:6;10382:29;;;10373:39;;;;10162:255;-1:-1;;;10162:255;10425:465;;10585:67;10649:2;10644:3;10585:67;;;10685:66;10665:87;;-1:-1;;;10781:2;10772:12;;10765:88;10881:2;10872:12;;10571:319;-1:-1;;10571:319;10899:364;;11059:67;11123:2;11118:3;11059:67;;;-1:-1;;;11139:87;;11254:2;11245:12;;11045:218;-1:-1;;11045:218;11272:364;;11432:67;11496:2;11491:3;11432:67;;;11532:66;11512:87;;11627:2;11618:12;;11418:218;-1:-1;;11418:218;11645:364;;11805:67;11869:2;11864:3;11805:67;;;-1:-1;;;11885:87;;12000:2;11991:12;;11791:218;-1:-1;;11791:218;12018:364;;12178:67;12242:2;12237:3;12178:67;;;-1:-1;;;12258:87;;12373:2;12364:12;;12164:218;-1:-1;;12164:218;12391:364;;12551:67;12615:2;12610:3;12551:67;;;12651:66;12631:87;;12746:2;12737:12;;12537:218;-1:-1;;12537:218;12764:364;;12924:67;12988:2;12983:3;12924:67;;;-1:-1;;;13004:87;;13119:2;13110:12;;12910:218;-1:-1;;12910:218;13137:296;;13314:83;13395:1;13390:3;13314:83;;13441:113;13524:24;13542:5;13524:24;;13561:262;;13705:93;13794:3;13785:6;13705:93;;13830:370;;14028:147;14171:3;14028:147;;14207:213;14325:2;14310:18;;14339:71;14314:9;14383:6;14339:71;;14427:229;14553:2;14538:18;;14567:79;14542:9;14619:6;14567:79;;14663:340;14817:2;14802:18;;14831:79;14806:9;14883:6;14831:79;;;14921:72;14989:2;14978:9;14974:18;14965:6;14921:72;;15010:787;15276:3;15261:19;;15291:79;15265:9;15343:6;15291:79;;;15381:72;15449:2;15438:9;15434:18;15425:6;15381:72;;;15464;15532:2;15521:9;15517:18;15508:6;15464:72;;;15547;15615:2;15604:9;15600:18;15591:6;15547:72;;;15630:73;15698:3;15687:9;15683:19;15674:6;15630:73;;;15714;15782:3;15771:9;15767:19;15758:6;15714:73;;;15247:550;;;;;;;;;;15804:435;15978:2;15963:18;;15992:71;15967:9;16036:6;15992:71;;;16074:72;16142:2;16131:9;16127:18;16118:6;16074:72;;;16157;16225:2;16214:9;16210:18;16201:6;16157:72;;16246:324;16392:2;16377:18;;16406:71;16381:9;16450:6;16406:71;;;16488:72;16556:2;16545:9;16541:18;16532:6;16488:72;;16577:201;16689:2;16674:18;;16703:65;16678:9;16741:6;16703:65;;16785:301;16923:2;16937:47;;;16908:18;;16998:78;16908:18;17062:6;16998:78;;17093:407;17284:2;17298:47;;;17269:18;;17359:131;17269:18;17359:131;;17507:407;17698:2;17712:47;;;17683:18;;17773:131;17683:18;17773:131;;17921:407;18112:2;18126:47;;;18097:18;;18187:131;18097:18;18187:131;;18335:407;18526:2;18540:47;;;18511:18;;18601:131;18511:18;18601:131;;18749:407;18940:2;18954:47;;;18925:18;;19015:131;18925:18;19015:131;;19163:407;19354:2;19368:47;;;19339:18;;19429:131;19339:18;19429:131;;19577:407;19768:2;19782:47;;;19753:18;;19843:131;19753:18;19843:131;;19991:213;20109:2;20094:18;;20123:71;20098:9;20167:6;20123:71;;20211:771;20469:3;20454:19;;20484:71;20458:9;20528:6;20484:71;;;20566:72;20634:2;20623:9;20619:18;20610:6;20566:72;;;20649;20717:2;20706:9;20702:18;20693:6;20649:72;;;20732;20800:2;20789:9;20785:18;20776:6;20732:72;;20989:256;21051:2;21045:9;21077:17;;;21152:18;21137:34;;21173:22;;;21134:62;21131:2;;;21209:1;21206;21199:12;21131:2;21225;21218:22;21029:216;;-1:-1;21029:216;21252:342;;21449:18;21441:6;21438:30;21435:2;;;21481:1;21478;21471:12;21435:2;-1:-1;21516:4;21504:17;;;21569:15;;21372:222;22253:121;22340:12;;22311:63;22664:163;22767:19;;;22816:4;22807:14;;22760:67;22835:91;;22897:24;22915:5;22897:24;;22933:85;22999:13;22992:21;;22975:43;23025:113;;23109:24;23127:5;23109:24;;23145:121;-1:-1;;;;;23207:54;;23190:76;23273:72;23335:5;23318:27;23352:129;;23439:37;23470:5;23439:37;;23732:268;23797:1;23804:101;23818:6;23815:1;23812:13;23804:101;;;23885:11;;;23879:18;23866:11;;;23859:39;23840:2;23833:10;23804:101;;;23920:6;23917:1;23914:13;23911:2;;;23985:1;23976:6;23971:3;23967:16;23960:27;23911:2;23781:219;;;;;24008:97;24096:2;24076:14;-1:-1;;24072:28;;24056:49;24113:117;24182:24;24200:5;24182:24;;;24175:5;24172:35;24162:2;;24221:1;24218;24211:12;24237:111;24303:21;24318:5;24303:21;;24355:161;24446:46;24486:5;24446:46;;24523:117;24592:24;24610:5;24592:24;
Swarm Source
bzzr://1a8b20dd4a4ab2b5aecf0615ae3a9eac9de34ee2511bb6df5076cc3ac742a0ea
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.