Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 240 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Remove Liquidity... | 17610354 | 380 days ago | IN | 0 ETH | 0.00165856 | ||||
Remove Liquidity | 17591273 | 383 days ago | IN | 0 ETH | 0.00226316 | ||||
Add Liquidity | 16804651 | 494 days ago | IN | 0 ETH | 0.00728427 | ||||
Remove Liquidity... | 16389259 | 552 days ago | IN | 0 ETH | 0.00210704 | ||||
Add Liquidity | 16116218 | 590 days ago | IN | 0 ETH | 0.00170617 | ||||
Remove Liquidity | 15414168 | 691 days ago | IN | 0 ETH | 0.00079027 | ||||
Remove Liquidity | 15414157 | 691 days ago | IN | 0 ETH | 0.0009609 | ||||
Remove Liquidity... | 15414154 | 691 days ago | IN | 0 ETH | 0.00108943 | ||||
Remove Liquidity | 15414127 | 691 days ago | IN | 0 ETH | 0.0015848 | ||||
Remove Liquidity | 15414117 | 691 days ago | IN | 0 ETH | 0.00133421 | ||||
Remove Liquidity | 15213324 | 722 days ago | IN | 0 ETH | 0.00691983 | ||||
Remove Liquidity | 15213324 | 722 days ago | IN | 0 ETH | 0.00632801 | ||||
Remove Liquidity | 15033408 | 751 days ago | IN | 0 ETH | 0.00317483 | ||||
Remove Liquidity | 15033406 | 751 days ago | IN | 0 ETH | 0.00290301 | ||||
Remove Liquidity | 14919621 | 771 days ago | IN | 0 ETH | 0.00261966 | ||||
Remove Liquidity... | 14824805 | 786 days ago | IN | 0 ETH | 0.00190711 | ||||
Remove Liquidity | 14416235 | 851 days ago | IN | 0 ETH | 0.00184893 | ||||
Remove Liquidity | 14402810 | 853 days ago | IN | 0 ETH | 0.00200446 | ||||
Remove Liquidity | 14295104 | 869 days ago | IN | 0 ETH | 0.00480603 | ||||
Remove Liquidity... | 14150127 | 892 days ago | IN | 0 ETH | 0.00834676 | ||||
Remove Liquidity | 14150127 | 892 days ago | IN | 0 ETH | 0.00829024 | ||||
Remove Liquidity | 14103614 | 899 days ago | IN | 0 ETH | 0.0122871 | ||||
Add Liquidity | 14100090 | 900 days ago | IN | 0 ETH | 0.01029342 | ||||
Remove Liquidity... | 14058002 | 906 days ago | IN | 0 ETH | 0.0270436 | ||||
Remove Liquidity | 14058002 | 906 days ago | IN | 0 ETH | 0.01767817 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17610354 | 380 days ago | 4.2 ETH | ||||
17610354 | 380 days ago | 4.2 ETH | ||||
16389259 | 552 days ago | 0.11 ETH | ||||
16389259 | 552 days ago | 0.11 ETH | ||||
15414154 | 691 days ago | 10 ETH | ||||
15414154 | 691 days ago | 10 ETH | ||||
14824805 | 786 days ago | 0.143 ETH | ||||
14824805 | 786 days ago | 0.143 ETH | ||||
14150127 | 892 days ago | 2 ETH | ||||
14150127 | 892 days ago | 2 ETH | ||||
14058002 | 906 days ago | 1 ETH | ||||
14058002 | 906 days ago | 1 ETH | ||||
13822328 | 943 days ago | 10 ETH | ||||
13822328 | 943 days ago | 10 ETH | ||||
13773903 | 950 days ago | 3 ETH | ||||
13460755 | 1000 days ago | 4 ETH | ||||
13460755 | 1000 days ago | 4 ETH | ||||
13127560 | 1051 days ago | 0.1 ETH | ||||
13030272 | 1066 days ago | 4 ETH | ||||
13030272 | 1066 days ago | 4 ETH | ||||
12944721 | 1080 days ago | 0.143 ETH | ||||
12918895 | 1084 days ago | 6 ETH | ||||
12918895 | 1084 days ago | 6 ETH | ||||
12901523 | 1087 days ago | 0.2 ETH | ||||
12901523 | 1087 days ago | 0.2 ETH |
Loading...
Loading
Contract Name:
CentaurRouter
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity =0.6.12; import './libraries/SafeMath.sol'; import './libraries/TransferHelper.sol'; import './interfaces/IERC20.sol'; import './interfaces/IWETH.sol'; import './interfaces/ICentaurFactory.sol'; import './interfaces/ICentaurPool.sol'; import './interfaces/ICentaurRouter.sol'; import "@openzeppelin/contracts/utils/Address.sol"; contract CentaurRouter is ICentaurRouter { using SafeMath for uint; address public override factory; address public immutable override WETH; bool public override onlyEOAEnabled; mapping(address => bool) public override whitelistContracts; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'CentaurSwap: EXPIRED'); _; } modifier onlyEOA(address _address) { if (onlyEOAEnabled) { require((!Address.isContract(_address) || whitelistContracts[_address]), 'CentaurSwap: ONLY_EOA_ALLOWED'); } _; } modifier onlyFactory() { require(msg.sender == factory, 'CentaurSwap: ONLY_FACTORY_ALLOWED'); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; onlyEOAEnabled = true; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** ADD LIQUIDITY **** function _addLiquidity( address _baseToken, uint _amount, uint _minLiquidity ) internal view virtual returns (uint liquidity) { ICentaurPool pool = ICentaurPool(ICentaurFactory(factory).getPool(_baseToken)); uint _totalSupply = pool.totalSupply(); uint _baseTokenTargetAmount = pool.baseTokenTargetAmount(); liquidity = _amount; if (_totalSupply == 0) { liquidity = _amount.add(_baseTokenTargetAmount); } else { liquidity = _amount.mul(_totalSupply).div(_baseTokenTargetAmount); } require(liquidity > _minLiquidity, 'CentaurSwap: INSUFFICIENT_OUTPUT_AMOUNT'); } function addLiquidity( address _baseToken, uint _amount, address _to, uint _minLiquidity, uint _deadline ) external virtual override ensure(_deadline) onlyEOA(msg.sender) returns (uint amount, uint liquidity) { address pool = ICentaurFactory(factory).getPool(_baseToken); require(pool != address(0), 'CentaurSwap: POOL_NOT_FOUND'); (liquidity) = _addLiquidity(_baseToken, _amount, _minLiquidity); TransferHelper.safeTransferFrom(_baseToken, msg.sender, pool, _amount); liquidity = ICentaurPool(pool).mint(_to); require(liquidity > _minLiquidity, 'CentaurSwap: INSUFFICIENT_OUTPUT_AMOUNT'); return (_amount, liquidity); } function addLiquidityETH( address _to, uint _minLiquidity, uint _deadline ) external virtual override payable ensure(_deadline) onlyEOA(msg.sender) returns (uint amount, uint liquidity) { address pool = ICentaurFactory(factory).getPool(WETH); require(pool != address(0), 'CentaurSwap: POOL_NOT_FOUND'); (liquidity) = _addLiquidity(WETH, msg.value, _minLiquidity); IWETH(WETH).deposit{value: msg.value}(); assert(IWETH(WETH).transfer(pool, msg.value)); liquidity = ICentaurPool(pool).mint(_to); require(liquidity > _minLiquidity, 'CentaurSwap: INSUFFICIENT_OUTPUT_AMOUNT'); return (msg.value, liquidity); } function removeLiquidity( address _baseToken, uint _liquidity, address _to, uint _minAmount, uint _deadline ) public virtual override ensure(_deadline) onlyEOA(msg.sender) returns (uint amount) { address pool = ICentaurFactory(factory).getPool(_baseToken); require(pool != address(0), 'CentaurSwap: POOL_NOT_FOUND'); ICentaurPool(pool).transferFrom(msg.sender, pool, _liquidity); // send liquidity to pool amount = ICentaurPool(pool).burn(_to); require(amount > _minAmount, 'CentaurSwap: INSUFFICIENT_OUTPUT_AMOUNT'); return amount; } function removeLiquidityETH( uint _liquidity, address _to, uint _minAmount, uint _deadline ) public virtual override ensure(_deadline) onlyEOA(msg.sender) returns (uint amount) { amount = removeLiquidity( WETH, _liquidity, address(this), _minAmount, _deadline ); IWETH(WETH).withdraw(amount); TransferHelper.safeTransferETH(_to, amount); return amount; } function swapExactTokensForTokens( address _fromToken, uint _amountIn, address _toToken, uint _amountOutMin, address _to, uint _deadline ) external virtual override ensure(_deadline) onlyEOA(msg.sender) { require(getAmountOut(_fromToken, _toToken, _amountIn) >= _amountOutMin, 'CentaurSwap: INSUFFICIENT_OUTPUT_AMOUNT'); (address inputTokenPool, address outputTokenPool) = validatePools(_fromToken, _toToken); TransferHelper.safeTransferFrom(_fromToken, msg.sender, inputTokenPool, _amountIn); (uint finalAmountIn, uint value) = ICentaurPool(inputTokenPool).swapFrom(msg.sender); ICentaurPool(outputTokenPool).swapTo(msg.sender, _fromToken, finalAmountIn, value, _to); } function swapExactETHForTokens( address _toToken, uint _amountOutMin, address _to, uint _deadline ) external virtual override payable ensure(_deadline) onlyEOA(msg.sender) { require(getAmountOut(WETH, _toToken, msg.value) >= _amountOutMin, 'CentaurSwap: INSUFFICIENT_OUTPUT_AMOUNT'); (address inputTokenPool, address outputTokenPool) = validatePools(WETH, _toToken); IWETH(WETH).deposit{value: msg.value}(); assert(IWETH(WETH).transfer(inputTokenPool, msg.value)); // TransferHelper.safeTransferFrom(WETH, msg.sender, inputTokenPool, msg.value); (uint finalAmountIn, uint value) = ICentaurPool(inputTokenPool).swapFrom(msg.sender); ICentaurPool(outputTokenPool).swapTo(msg.sender, WETH, finalAmountIn, value, _to); } function swapTokensForExactTokens( address _fromToken, uint _amountInMax, address _toToken, uint _amountOut, address _to, uint _deadline ) external virtual override ensure(_deadline) onlyEOA(msg.sender) { uint amountIn = getAmountIn(_fromToken, _toToken, _amountOut); require(amountIn <= _amountInMax, 'CentaurSwap: EXCESSIVE_INPUT_AMOUNT'); (address inputTokenPool, address outputTokenPool) = validatePools(_fromToken, _toToken); TransferHelper.safeTransferFrom(_fromToken, msg.sender, inputTokenPool, amountIn); (uint finalAmountIn, uint value) = ICentaurPool(inputTokenPool).swapFrom(msg.sender); ICentaurPool(outputTokenPool).swapTo(msg.sender, _fromToken, finalAmountIn, value, _to); } function swapETHForExactTokens( address _toToken, uint _amountOut, address _to, uint _deadline ) external virtual override payable ensure(_deadline) onlyEOA(msg.sender) { uint amountIn = getAmountIn(WETH, _toToken, _amountOut); require(amountIn <= msg.value, 'CentaurSwap: EXCESSIVE_INPUT_AMOUNT'); (address inputTokenPool, address outputTokenPool) = validatePools(WETH, _toToken); IWETH(WETH).deposit{value: amountIn}(); assert(IWETH(WETH).transfer(inputTokenPool, amountIn)); (uint finalAmountIn, uint value) = ICentaurPool(inputTokenPool).swapFrom(msg.sender); ICentaurPool(outputTokenPool).swapTo(msg.sender, WETH, finalAmountIn, value, _to); if (msg.value > amountIn) TransferHelper.safeTransferETH(msg.sender, msg.value - amountIn); } function swapSettle(address _sender, address _pool) external virtual override returns (uint amount, address receiver) { (amount, receiver) = ICentaurPool(_pool).swapSettle(_sender); address token = ICentaurPool(_pool).baseToken(); if (token == WETH) { IWETH(WETH).withdraw(amount); TransferHelper.safeTransferETH(receiver, amount); } else { TransferHelper.safeTransfer(token, receiver, amount); } } function swapSettleMultiple(address _sender, address[] memory _pools) external virtual override { for(uint i = 0; i < _pools.length; i++) { (uint amount, address receiver) = ICentaurPool(_pools[i]).swapSettle(_sender); address token = ICentaurPool(_pools[i]).baseToken(); if (token == WETH) { IWETH(WETH).withdraw(amount); TransferHelper.safeTransferETH(receiver, amount); } else { TransferHelper.safeTransfer(token, receiver, amount); } } } function validatePools(address _fromToken, address _toToken) public view virtual override returns (address inputTokenPool, address outputTokenPool) { inputTokenPool = ICentaurFactory(factory).getPool(_fromToken); require(inputTokenPool != address(0), 'CentaurSwap: POOL_NOT_FOUND'); outputTokenPool = ICentaurFactory(factory).getPool(_toToken); require(outputTokenPool != address(0), 'CentaurSwap: POOL_NOT_FOUND'); return (inputTokenPool, outputTokenPool); } function getAmountOut( address _fromToken, address _toToken, uint _amountIn ) public view virtual override returns (uint amountOut) { uint poolFee = ICentaurFactory(factory).poolFee(); uint value = ICentaurPool(ICentaurFactory(factory).getPool(_fromToken)).getValueFromAmountIn(_amountIn); uint amountOutBeforeFees = ICentaurPool(ICentaurFactory(factory).getPool(_toToken)).getAmountOutFromValue(value); amountOut = (amountOutBeforeFees).mul(uint(100 ether).sub(poolFee)).div(100 ether); } function getAmountIn( address _fromToken, address _toToken, uint _amountOut ) public view virtual override returns (uint amountIn) { uint poolFee = ICentaurFactory(factory).poolFee(); uint amountOut = _amountOut.mul(100 ether).div(uint(100 ether).sub(poolFee)); uint value = ICentaurPool(ICentaurFactory(factory).getPool(_toToken)).getValueFromAmountOut(amountOut); amountIn = ICentaurPool(ICentaurFactory(factory).getPool(_fromToken)).getAmountInFromValue(value); } // Helper functions function setFactory(address _factory) external virtual override onlyFactory { factory = _factory; } function setOnlyEOAEnabled(bool _onlyEOAEnabled) external virtual override onlyFactory { onlyEOAEnabled = _onlyEOAEnabled; } function addContractToWhitelist(address _address) external virtual override onlyFactory { require(Address.isContract(_address), 'CentaurSwap: NOT_CONTRACT'); whitelistContracts[_address] = true; } function removeContractFromWhitelist(address _address) external virtual override onlyFactory { whitelistContracts[_address] = false; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @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. */ 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. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { 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. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function symbol() external pure returns (string memory); /** * @dev Returns the token decimal. */ function decimals() external pure returns (uint8); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface ICentaurFactory { event PoolCreated(address indexed token, address pool, uint); function poolFee() external view returns (uint); function poolLogic() external view returns (address); function cloneFactory() external view returns (address); function settlement() external view returns (address); function router() external view returns (address payable); function getPool(address token) external view returns (address pool); function allPools(uint) external view returns (address pool); function allPoolsLength() external view returns (uint); function isValidPool(address pool) external view returns (bool); function createPool(address token, address oracle, uint poolUtilizationPercentage) external returns (address pool); function addPool(address pool) external; function removePool(address pool) external; function setPoolLiquidityParameter(address, uint) external; function setPoolTradeEnabled(address, bool) external; function setPoolDepositEnabled(address, bool) external; function setPoolWithdrawEnabled(address, bool) external; function setAllPoolsTradeEnabled(bool) external; function setAllPoolsDepositEnabled(bool) external; function setAllPoolsWithdrawEnabled(bool) external; function emergencyWithdrawFromPool(address, address, uint, address) external; function setRouterOnlyEOAEnabled(bool) external; function setRouterContractWhitelist(address, bool) external; function setSettlementDuration(uint) external; function setPoolFee(uint) external; function setPoolLogic(address) external; function setCloneFactory(address) external; function setSettlement(address) external; function setRouter(address payable) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface ICentaurPool { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); event Mint(address indexed sender, uint amount); event Burn(address indexed sender, uint amount, address indexed to); event AmountIn(address indexed sender, uint amount); event AmountOut(address indexed sender, uint amount, address indexed to); event EmergencyWithdraw(uint256 _timestamp, address indexed _token, uint256 _amount, address indexed _to); function factory() external view returns (address); function settlement() external view returns (address); function baseToken() external view returns (address); function baseTokenDecimals() external view returns (uint); function oracle() external view returns (address); function oracleDecimals() external view returns (uint); function baseTokenTargetAmount() external view returns (uint); function baseTokenBalance() external view returns (uint); function liquidityParameter() external view returns (uint); function init(address, address, address, uint) external; function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount); function swapTo(address _sender, address _fromToken, uint _amountIn, uint _value, address _receiver) external returns (uint maxAmount); function swapFrom(address _sender) external returns (uint amount, uint value); function swapSettle(address _sender) external returns (uint, address); function getOraclePrice() external view returns (uint price); function getAmountOutFromValue(uint _value) external view returns (uint amount); function getValueFromAmountIn(uint _amount) external view returns (uint value); function getAmountInFromValue(uint _value) external view returns (uint amount); function getValueFromAmountOut(uint _amount) external view returns (uint value); function setFactory(address) external; function setTradeEnabled(bool) external; function setDepositEnabled(bool) external; function setWithdrawEnabled(bool) external; function setLiquidityParameter(uint) external; function emergencyWithdraw(address, uint, address) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; interface ICentaurRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function onlyEOAEnabled() external pure returns (bool); function whitelistContracts(address _address) external view returns (bool); function addLiquidity( address _baseToken, uint _amount, address _to, uint _minLiquidity, uint _deadline ) external returns (uint amount, uint liquidity); function addLiquidityETH( address _to, uint _minLiquidity, uint _deadline ) external payable returns (uint amount, uint liquidity); function removeLiquidity( address _baseToken, uint _liquidity, address _to, uint _minAmount, uint _deadline ) external returns (uint amount); function removeLiquidityETH( uint _liquidity, address _to, uint _minAmount, uint _deadline ) external returns (uint amount); function swapExactTokensForTokens( address _fromToken, uint _amountIn, address _toToken, uint _amountOutMin, address to, uint _deadline ) external; function swapExactETHForTokens( address _toToken, uint _amountOutMin, address to, uint _deadline ) external payable; function swapTokensForExactTokens( address _fromToken, uint _amountInMax, address _toToken, uint _amountOut, address _to, uint _deadline ) external; function swapETHForExactTokens( address _toToken, uint _amountOut, address _to, uint _deadline ) external payable; function swapSettle(address _sender, address _pool) external returns (uint amount, address receiver); function swapSettleMultiple(address _sender, address[] memory _pools) external; function validatePools(address _fromToken, address _toToken) external view returns (address inputTokenPool, address outputTokenPool); function getAmountOut(address _fromToken, address _toToken, uint _amountIn) external view returns (uint amountOut); function getAmountIn(address _fromToken, address _toToken, uint _amountOut) external view returns (uint amountIn); function setFactory(address) external; function setOnlyEOAEnabled(bool) external; function addContractToWhitelist(address) external; function removeContractFromWhitelist(address) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { 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); } } } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addContractToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_baseToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_minLiquidity","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_minLiquidity","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_fromToken","type":"address"},{"internalType":"address","name":"_toToken","type":"address"},{"internalType":"uint256","name":"_amountOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_fromToken","type":"address"},{"internalType":"address","name":"_toToken","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyEOAEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeContractFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_baseToken","type":"address"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_minAmount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_minAmount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_factory","type":"address"}],"name":"setFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_onlyEOAEnabled","type":"bool"}],"name":"setOnlyEOAEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_toToken","type":"address"},{"internalType":"uint256","name":"_amountOut","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_toToken","type":"address"},{"internalType":"uint256","name":"_amountOutMin","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_fromToken","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_toToken","type":"address"},{"internalType":"uint256","name":"_amountOutMin","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_pool","type":"address"}],"name":"swapSettle","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address[]","name":"_pools","type":"address[]"}],"name":"swapSettleMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fromToken","type":"address"},{"internalType":"uint256","name":"_amountInMax","type":"uint256"},{"internalType":"address","name":"_toToken","type":"address"},{"internalType":"uint256","name":"_amountOut","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fromToken","type":"address"},{"internalType":"address","name":"_toToken","type":"address"}],"name":"validatePools","outputs":[{"internalType":"address","name":"inputTokenPool","type":"address"},{"internalType":"address","name":"outputTokenPool","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405234801561001057600080fd5b5060405162004e6738038062004e678339818101604052604081101561003557600080fd5b810190808051906020019092919080519060200190929190505050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600060146101000a81548160ff021916908315150217905550505060805160601c614cfc6200016b6000398061013452806112035280611351528061137b52806113fc528061173d52806117c652806117f152806118725280611a155280612af95280612b4d5280612d6a5280612def5280612e1a5280612e9b528061303e528061327b52806132cf528061337d5280613cb05280613cdc5250614cfc6000f3fe60806040526004361061012d5760003560e01c80636972320f116100ab578063b480bfff1161006f578063b480bfff14610897578063c45a0155146108e8578063de7d92e914610929578063e7d9888c146109e1578063e99453f814610a90578063ff4b159214610b1357610189565b80636972320f146105f057806370878926146106d5578063a73212211461074d578063ad5c4648146107ef578063af5a6c7e1461083057610189565b80634ddc7503116100f25780634ddc75031461045557806353b609b5146104825780635b46ec71146105115780635bb478081461054e57806368d15bbf1461059f57610189565b8062c240871461018e5780630145ff68146102315780631052acb9146102a45780634aa066521461031c5780634d8c2c6b146103ab57610189565b36610189577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461018757fe5b005b600080fd5b34801561019a57600080fd5b5061021b600480360360a08110156101b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610bc2565b6040518082815260200191505060405180910390f35b6102876004803603606081101561024757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611061565b604051808381526020018281526020019250505060405180910390f35b61031a600480360360808110156102ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115d8565b005b34801561032857600080fd5b506103956004803603606081101561033f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b29565b6040518082815260200191505060405180910390f35b3480156103b757600080fd5b50610438600480360360a08110156103ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611ec8565b604051808381526020018281526020019250505060405180910390f35b34801561046157600080fd5b5061046a6122ba565b60405180821515815260200191505060405180910390f35b34801561048e57600080fd5b506104fb600480360360608110156104a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122cd565b6040518082815260200191505060405180910390f35b34801561051d57600080fd5b5061054c6004803603602081101561053457600080fd5b8101908080351515906020019092919050505061266b565b005b34801561055a57600080fd5b5061059d6004803603602081101561057157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061272c565b005b3480156105ab57600080fd5b506105ee600480360360208110156105c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612813565b005b3480156105fc57600080fd5b506106d36004803603604081101561061357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561065057600080fd5b82018360208201111561066257600080fd5b8035906020019184602083028401116401000000008311171561068457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061298c565b005b61074b600480360360808110156106eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c06565b005b34801561075957600080fd5b506107bc6004803603604081101561077057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061313c565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b3480156107fb57600080fd5b5061080461337b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083c57600080fd5b5061087f6004803603602081101561085357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061339f565b60405180821515815260200191505060405180910390f35b3480156108a357600080fd5b506108e6600480360360208110156108ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133bf565b005b3480156108f457600080fd5b506108fd6134be565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561093557600080fd5b506109986004803603604081101561094c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134e2565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b3480156109ed57600080fd5b50610a8e600480360360c0811015610a0457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137ba565b005b348015610a9c57600080fd5b50610afd60048036036080811015610ab357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613b4b565b6040518082815260200191505060405180910390f35b348015610b1f57600080fd5b50610bc0600480360360c0811015610b3657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613d79565b005b60008142811015610c3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff1615610d2257610c5a81614110565b1580610caf5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610d21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db8a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610dac57600080fd5b505afa158015610dc0573d6000803e3d6000fd5b505050506040513d6020811015610dd657600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43656e74617572537761703a20504f4f4c5f4e4f545f464f554e44000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd33838b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610f1b57600080fd5b505af1158015610f2f573d6000803e3d6000fd5b505050506040513d6020811015610f4557600080fd5b8101908080519060200190929190505050508073ffffffffffffffffffffffffffffffffffffffff166389afcb44886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610fc057600080fd5b505af1158015610fd4573d6000803e3d6000fd5b505050506040513d6020811015610fea57600080fd5b81019080805190602001909291905050509350858411611055576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c7c6027913960400191505060405180910390fd5b50505095945050505050565b60008082428110156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff16156111c2576110fa81614110565b158061114f5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6111c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43656e74617572537761703a20504f4f4c5f4e4f545f464f554e44000000000081525060200191505060405180910390fd5b6113777f00000000000000000000000000000000000000000000000000000000000000003489614123565b93507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156113e157600080fd5b505af11580156113f5573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82346040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561148b57600080fd5b505af115801561149f573d6000803e3d6000fd5b505050506040513d60208110156114b557600080fd5b81019080805190602001909291905050506114cc57fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561153557600080fd5b505af1158015611549573d6000803e3d6000fd5b505050506040513d602081101561155f57600080fd5b810190808051906020019092919050505093508684116115ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c7c6027913960400191505060405180910390fd5b349450505050935093915050565b804281101561164f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff16156117365761166e81614110565b15806116c35750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b60006117637f000000000000000000000000000000000000000000000000000000000000000088886122cd565b9050348111156117be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614bf46023913960400191505060405180910390fd5b6000806117eb7f00000000000000000000000000000000000000000000000000000000000000008a6134e2565b915091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561185757600080fd5b505af115801561186b573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561190157600080fd5b505af1158015611915573d6000803e3d6000fd5b505050506040513d602081101561192b57600080fd5b810190808051906020019092919050505061194257fe5b6000808373ffffffffffffffffffffffffffffffffffffffff166328a4a0d1336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b1580156119ad57600080fd5b505af11580156119c1573d6000803e3d6000fd5b505050506040513d60408110156119d757600080fd5b810190808051906020019092919080519060200190929190505050915091508273ffffffffffffffffffffffffffffffffffffffff16631a275a03337f000000000000000000000000000000000000000000000000000000000000000085858e6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050602060405180830381600087803b158015611acb57600080fd5b505af1158015611adf573d6000803e3d6000fd5b505050506040513d6020811015611af557600080fd5b81019080805190602001909291905050505084341115611b1c57611b1b338634036143a4565b5b5050505050505050505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663089fe6aa6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b9257600080fd5b505afa158015611ba6573d6000803e3d6000fd5b505050506040513d6020811015611bbc57600080fd5b8101908080519060200190929190505050905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c5957600080fd5b505afa158015611c6d573d6000803e3d6000fd5b505050506040513d6020811015611c8357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663fecc5a56856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611ce457600080fd5b505afa158015611cf8573d6000803e3d6000fd5b505050506040513d6020811015611d0e57600080fd5b8101908080519060200190929190505050905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611dab57600080fd5b505afa158015611dbf573d6000803e3d6000fd5b505050506040513d6020811015611dd557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663a0930ebe836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611e3657600080fd5b505afa158015611e4a573d6000803e3d6000fd5b505050506040513d6020811015611e6057600080fd5b81019080805190602001909291905050509050611ebc68056bc75e2d63100000611eae611e9f8668056bc75e2d6310000061450390919063ffffffff16565b8461454d90919063ffffffff16565b6145d390919063ffffffff16565b93505050509392505050565b6000808242811015611f42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff161561202957611f6181614110565b1580611fb65750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db8b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156120b357600080fd5b505afa1580156120c7573d6000803e3d6000fd5b505050506040513d60208110156120dd57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43656e74617572537761703a20504f4f4c5f4e4f545f464f554e44000000000081525060200191505060405180910390fd5b61219e8a8a89614123565b93506121ac8a33838c61461d565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561221557600080fd5b505af1158015612229573d6000803e3d6000fd5b505050506040513d602081101561223f57600080fd5b810190808051906020019092919050505093508684116122aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c7c6027913960400191505060405180910390fd5b8894505050509550959350505050565b600060149054906101000a900460ff1681565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663089fe6aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561233657600080fd5b505afa15801561234a573d6000803e3d6000fd5b505050506040513d602081101561236057600080fd5b8101908080519060200190929190505050905060006123be6123948368056bc75e2d6310000061450390919063ffffffff16565b6123b068056bc75e2d631000008761454d90919063ffffffff16565b6145d390919063ffffffff16565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561244a57600080fd5b505afa15801561245e573d6000803e3d6000fd5b505050506040513d602081101561247457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663807e6cc6836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156124d557600080fd5b505afa1580156124e9573d6000803e3d6000fd5b505050506040513d60208110156124ff57600080fd5b8101908080519060200190929190505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561259957600080fd5b505afa1580156125ad573d6000803e3d6000fd5b505050506040513d60208110156125c357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16638d2f19bc826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561262457600080fd5b505afa158015612638573d6000803e3d6000fd5b505050506040513d602081101561264e57600080fd5b810190808051906020019092919050505093505050509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461270f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c386021913960400191505060405180910390fd5b80600060146101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c386021913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c386021913960400191505060405180910390fd5b6128c081614110565b612932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43656e74617572537761703a204e4f545f434f4e54524143540000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60005b8151811015612c01576000808383815181106129a757fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166392a3d6c0866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015612a1657600080fd5b505af1158015612a2a573d6000803e3d6000fd5b505050506040513d6040811015612a4057600080fd5b810190808051906020019092919080519060200190929190505050915091506000848481518110612a6d57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b158015612aba57600080fd5b505afa158015612ace573d6000803e3d6000fd5b505050506040513d6020811015612ae457600080fd5b810190808051906020019092919050505090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612be5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bbe57600080fd5b505af1158015612bd2573d6000803e3d6000fd5b50505050612be082846143a4565b612bf1565b612bf0818385614802565b5b505050808060010191505061298f565b505050565b8042811015612c7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff1615612d6457612c9c81614110565b1580612cf15750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b84612d907f00000000000000000000000000000000000000000000000000000000000000008834611b29565b1015612de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c7c6027913960400191505060405180910390fd5b600080612e147f0000000000000000000000000000000000000000000000000000000000000000896134e2565b915091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e8057600080fd5b505af1158015612e94573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83346040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612f2a57600080fd5b505af1158015612f3e573d6000803e3d6000fd5b505050506040513d6020811015612f5457600080fd5b8101908080519060200190929190505050612f6b57fe5b6000808373ffffffffffffffffffffffffffffffffffffffff166328a4a0d1336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015612fd657600080fd5b505af1158015612fea573d6000803e3d6000fd5b505050506040513d604081101561300057600080fd5b810190808051906020019092919080519060200190929190505050915091508273ffffffffffffffffffffffffffffffffffffffff16631a275a03337f000000000000000000000000000000000000000000000000000000000000000085858d6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050602060405180830381600087803b1580156130f457600080fd5b505af1158015613108573d6000803e3d6000fd5b505050506040513d602081101561311e57600080fd5b81019080805190602001909291905050505050505050505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff166392a3d6c0856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b1580156131a757600080fd5b505af11580156131bb573d6000803e3d6000fd5b505050506040513d60408110156131d157600080fd5b810190808051906020019092919080519060200190929190505050809250819350505060008373ffffffffffffffffffffffffffffffffffffffff1663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561323c57600080fd5b505afa158015613250573d6000803e3d6000fd5b505050506040513d602081101561326657600080fd5b810190808051906020019092919050505090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613367577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561334057600080fd5b505af1158015613354573d6000803e3d6000fd5b5050505061336282846143a4565b613373565b613372818385614802565b5b509250929050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60016020528060005260406000206000915054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613463576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c386021913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561356c57600080fd5b505afa158015613580573d6000803e3d6000fd5b505050506040513d602081101561359657600080fd5b81019080805190602001909291905050509150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561364c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43656e74617572537761703a20504f4f4c5f4e4f545f464f554e44000000000081525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156136d357600080fd5b505afa1580156136e7573d6000803e3d6000fd5b505050506040513d60208110156136fd57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156137b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43656e74617572537761703a20504f4f4c5f4e4f545f464f554e44000000000081525060200191505060405180910390fd5b9250929050565b8042811015613831576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff16156139185761385081614110565b15806138a55750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b8461392489888a611b29565b101561397b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c7c6027913960400191505060405180910390fd5b6000806139888a896134e2565b915091506139988a33848c61461d565b6000808373ffffffffffffffffffffffffffffffffffffffff166328a4a0d1336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015613a0357600080fd5b505af1158015613a17573d6000803e3d6000fd5b505050506040513d6040811015613a2d57600080fd5b810190808051906020019092919080519060200190929190505050915091508273ffffffffffffffffffffffffffffffffffffffff16631a275a03338e85858d6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050602060405180830381600087803b158015613b0157600080fd5b505af1158015613b15573d6000803e3d6000fd5b505050506040513d6020811015613b2b57600080fd5b810190808051906020019092919050505050505050505050505050505050565b60008142811015613bc4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff1615613cab57613be381614110565b1580613c385750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613caa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b613cd87f000000000000000000000000000000000000000000000000000000000000000088308888610bc2565b92507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613d4d57600080fd5b505af1158015613d61573d6000803e3d6000fd5b50505050613d6f86846143a4565b5050949350505050565b8042811015613df0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff1615613ed757613e0f81614110565b1580613e645750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b6000613ee48988886122cd565b905087811115613f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614bf46023913960400191505060405180910390fd5b600080613f4c8b8a6134e2565b91509150613f5c8b33848661461d565b6000808373ffffffffffffffffffffffffffffffffffffffff166328a4a0d1336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015613fc757600080fd5b505af1158015613fdb573d6000803e3d6000fd5b505050506040513d6040811015613ff157600080fd5b810190808051906020019092919080519060200190929190505050915091508273ffffffffffffffffffffffffffffffffffffffff16631a275a03338f85858e6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050602060405180830381600087803b1580156140c557600080fd5b505af11580156140d9573d6000803e3d6000fd5b505050506040513d60208110156140ef57600080fd5b81019080805190602001909291905050505050505050505050505050505050565b600080823b905060008111915050919050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156141ad57600080fd5b505afa1580156141c1573d6000803e3d6000fd5b505050506040513d60208110156141d757600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561423257600080fd5b505afa158015614246573d6000803e3d6000fd5b505050506040513d602081101561425c57600080fd5b8101908080519060200190929190505050905060008273ffffffffffffffffffffffffffffffffffffffff1663faa482246040518163ffffffff1660e01b815260040160206040518083038186803b1580156142b757600080fd5b505afa1580156142cb573d6000803e3d6000fd5b505050506040513d60208110156142e157600080fd5b81019080805190602001909291905050509050859350600082141561431a5761431381876149e590919063ffffffff16565b9350614342565b61433f81614331848961454d90919063ffffffff16565b6145d390919063ffffffff16565b93505b84841161439a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c7c6027913960400191505060405180910390fd5b5050509392505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff811180156143d657600080fd5b506040519080825280601f01601f1916602001820160405280156144095781602001600182028036833780820191505090505b506040518082805190602001908083835b6020831061443d578051825260208201915060208101905060208303925061441a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461449f576040519150601f19603f3d011682016040523d82523d6000602084013e6144a4565b606091505b50509050806144fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614c596023913960400191505060405180910390fd5b505050565b600061454583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614a6d565b905092915050565b60008083141561456057600090506145cd565b600082840290508284828161457157fe5b04146145c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c176021913960400191505060405180910390fd5b809150505b92915050565b600061461583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614b2d565b905092915050565b600060608573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106146fe57805182526020820191506020810190506020830392506146db565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614760576040519150601f19603f3d011682016040523d82523d6000602084013e614765565b606091505b50915091508180156147a557506000815114806147a4575080806020019051602081101561479257600080fd5b81019080805190602001909291905050505b5b6147fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ca36024913960400191505060405180910390fd5b505050505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106148c557805182526020820191506020810190506020830392506148a2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614927576040519150601f19603f3d011682016040523d82523d6000602084013e61492c565b606091505b509150915081801561496c575060008151148061496b575080806020019051602081101561495957600080fd5b81019080805190602001909291905050505b5b6149de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5472616e7366657248656c7065723a205452414e534645525f4641494c45440081525060200191505060405180910390fd5b5050505050565b600080828401905083811015614a63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290614b1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614adf578082015181840152602081019050614ac4565b50505050905090810190601f168015614b0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290614bd9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614b9e578082015181840152602081019050614b83565b50505050905090810190601f168015614bcb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614be557fe5b04905080915050939250505056fe43656e74617572537761703a204558434553534956455f494e5055545f414d4f554e54536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743656e74617572537761703a204f4e4c595f464143544f52595f414c4c4f5745445472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454443656e74617572537761703a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220646ec73ba37e93657cb4fb985ca496f23da5c9640f380de4c3fb0e9e9429b48364736f6c634300060c00330000000000000000000000000a6f16ed7895ec475f62dc8613dbaa84ee407ff8000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x60806040526004361061012d5760003560e01c80636972320f116100ab578063b480bfff1161006f578063b480bfff14610897578063c45a0155146108e8578063de7d92e914610929578063e7d9888c146109e1578063e99453f814610a90578063ff4b159214610b1357610189565b80636972320f146105f057806370878926146106d5578063a73212211461074d578063ad5c4648146107ef578063af5a6c7e1461083057610189565b80634ddc7503116100f25780634ddc75031461045557806353b609b5146104825780635b46ec71146105115780635bb478081461054e57806368d15bbf1461059f57610189565b8062c240871461018e5780630145ff68146102315780631052acb9146102a45780634aa066521461031c5780634d8c2c6b146103ab57610189565b36610189577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461018757fe5b005b600080fd5b34801561019a57600080fd5b5061021b600480360360a08110156101b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610bc2565b6040518082815260200191505060405180910390f35b6102876004803603606081101561024757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611061565b604051808381526020018281526020019250505060405180910390f35b61031a600480360360808110156102ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115d8565b005b34801561032857600080fd5b506103956004803603606081101561033f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b29565b6040518082815260200191505060405180910390f35b3480156103b757600080fd5b50610438600480360360a08110156103ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611ec8565b604051808381526020018281526020019250505060405180910390f35b34801561046157600080fd5b5061046a6122ba565b60405180821515815260200191505060405180910390f35b34801561048e57600080fd5b506104fb600480360360608110156104a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122cd565b6040518082815260200191505060405180910390f35b34801561051d57600080fd5b5061054c6004803603602081101561053457600080fd5b8101908080351515906020019092919050505061266b565b005b34801561055a57600080fd5b5061059d6004803603602081101561057157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061272c565b005b3480156105ab57600080fd5b506105ee600480360360208110156105c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612813565b005b3480156105fc57600080fd5b506106d36004803603604081101561061357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561065057600080fd5b82018360208201111561066257600080fd5b8035906020019184602083028401116401000000008311171561068457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061298c565b005b61074b600480360360808110156106eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c06565b005b34801561075957600080fd5b506107bc6004803603604081101561077057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061313c565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b3480156107fb57600080fd5b5061080461337b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083c57600080fd5b5061087f6004803603602081101561085357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061339f565b60405180821515815260200191505060405180910390f35b3480156108a357600080fd5b506108e6600480360360208110156108ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133bf565b005b3480156108f457600080fd5b506108fd6134be565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561093557600080fd5b506109986004803603604081101561094c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134e2565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b3480156109ed57600080fd5b50610a8e600480360360c0811015610a0457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137ba565b005b348015610a9c57600080fd5b50610afd60048036036080811015610ab357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613b4b565b6040518082815260200191505060405180910390f35b348015610b1f57600080fd5b50610bc0600480360360c0811015610b3657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613d79565b005b60008142811015610c3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff1615610d2257610c5a81614110565b1580610caf5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610d21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db8a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610dac57600080fd5b505afa158015610dc0573d6000803e3d6000fd5b505050506040513d6020811015610dd657600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43656e74617572537761703a20504f4f4c5f4e4f545f464f554e44000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd33838b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610f1b57600080fd5b505af1158015610f2f573d6000803e3d6000fd5b505050506040513d6020811015610f4557600080fd5b8101908080519060200190929190505050508073ffffffffffffffffffffffffffffffffffffffff166389afcb44886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610fc057600080fd5b505af1158015610fd4573d6000803e3d6000fd5b505050506040513d6020811015610fea57600080fd5b81019080805190602001909291905050509350858411611055576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c7c6027913960400191505060405180910390fd5b50505095945050505050565b60008082428110156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff16156111c2576110fa81614110565b158061114f5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6111c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43656e74617572537761703a20504f4f4c5f4e4f545f464f554e44000000000081525060200191505060405180910390fd5b6113777f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23489614123565b93507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156113e157600080fd5b505af11580156113f5573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82346040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561148b57600080fd5b505af115801561149f573d6000803e3d6000fd5b505050506040513d60208110156114b557600080fd5b81019080805190602001909291905050506114cc57fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561153557600080fd5b505af1158015611549573d6000803e3d6000fd5b505050506040513d602081101561155f57600080fd5b810190808051906020019092919050505093508684116115ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c7c6027913960400191505060405180910390fd5b349450505050935093915050565b804281101561164f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff16156117365761166e81614110565b15806116c35750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b60006117637f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc288886122cd565b9050348111156117be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614bf46023913960400191505060405180910390fd5b6000806117eb7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28a6134e2565b915091507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561185757600080fd5b505af115801561186b573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561190157600080fd5b505af1158015611915573d6000803e3d6000fd5b505050506040513d602081101561192b57600080fd5b810190808051906020019092919050505061194257fe5b6000808373ffffffffffffffffffffffffffffffffffffffff166328a4a0d1336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b1580156119ad57600080fd5b505af11580156119c1573d6000803e3d6000fd5b505050506040513d60408110156119d757600080fd5b810190808051906020019092919080519060200190929190505050915091508273ffffffffffffffffffffffffffffffffffffffff16631a275a03337f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc285858e6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050602060405180830381600087803b158015611acb57600080fd5b505af1158015611adf573d6000803e3d6000fd5b505050506040513d6020811015611af557600080fd5b81019080805190602001909291905050505084341115611b1c57611b1b338634036143a4565b5b5050505050505050505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663089fe6aa6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b9257600080fd5b505afa158015611ba6573d6000803e3d6000fd5b505050506040513d6020811015611bbc57600080fd5b8101908080519060200190929190505050905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c5957600080fd5b505afa158015611c6d573d6000803e3d6000fd5b505050506040513d6020811015611c8357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663fecc5a56856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611ce457600080fd5b505afa158015611cf8573d6000803e3d6000fd5b505050506040513d6020811015611d0e57600080fd5b8101908080519060200190929190505050905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611dab57600080fd5b505afa158015611dbf573d6000803e3d6000fd5b505050506040513d6020811015611dd557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663a0930ebe836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611e3657600080fd5b505afa158015611e4a573d6000803e3d6000fd5b505050506040513d6020811015611e6057600080fd5b81019080805190602001909291905050509050611ebc68056bc75e2d63100000611eae611e9f8668056bc75e2d6310000061450390919063ffffffff16565b8461454d90919063ffffffff16565b6145d390919063ffffffff16565b93505050509392505050565b6000808242811015611f42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff161561202957611f6181614110565b1580611fb65750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db8b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156120b357600080fd5b505afa1580156120c7573d6000803e3d6000fd5b505050506040513d60208110156120dd57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43656e74617572537761703a20504f4f4c5f4e4f545f464f554e44000000000081525060200191505060405180910390fd5b61219e8a8a89614123565b93506121ac8a33838c61461d565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561221557600080fd5b505af1158015612229573d6000803e3d6000fd5b505050506040513d602081101561223f57600080fd5b810190808051906020019092919050505093508684116122aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c7c6027913960400191505060405180910390fd5b8894505050509550959350505050565b600060149054906101000a900460ff1681565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663089fe6aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561233657600080fd5b505afa15801561234a573d6000803e3d6000fd5b505050506040513d602081101561236057600080fd5b8101908080519060200190929190505050905060006123be6123948368056bc75e2d6310000061450390919063ffffffff16565b6123b068056bc75e2d631000008761454d90919063ffffffff16565b6145d390919063ffffffff16565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561244a57600080fd5b505afa15801561245e573d6000803e3d6000fd5b505050506040513d602081101561247457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663807e6cc6836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156124d557600080fd5b505afa1580156124e9573d6000803e3d6000fd5b505050506040513d60208110156124ff57600080fd5b8101908080519060200190929190505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561259957600080fd5b505afa1580156125ad573d6000803e3d6000fd5b505050506040513d60208110156125c357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16638d2f19bc826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561262457600080fd5b505afa158015612638573d6000803e3d6000fd5b505050506040513d602081101561264e57600080fd5b810190808051906020019092919050505093505050509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461270f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c386021913960400191505060405180910390fd5b80600060146101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c386021913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c386021913960400191505060405180910390fd5b6128c081614110565b612932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43656e74617572537761703a204e4f545f434f4e54524143540000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60005b8151811015612c01576000808383815181106129a757fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166392a3d6c0866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015612a1657600080fd5b505af1158015612a2a573d6000803e3d6000fd5b505050506040513d6040811015612a4057600080fd5b810190808051906020019092919080519060200190929190505050915091506000848481518110612a6d57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b158015612aba57600080fd5b505afa158015612ace573d6000803e3d6000fd5b505050506040513d6020811015612ae457600080fd5b810190808051906020019092919050505090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612be5577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bbe57600080fd5b505af1158015612bd2573d6000803e3d6000fd5b50505050612be082846143a4565b612bf1565b612bf0818385614802565b5b505050808060010191505061298f565b505050565b8042811015612c7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff1615612d6457612c9c81614110565b1580612cf15750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b84612d907f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28834611b29565b1015612de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c7c6027913960400191505060405180910390fd5b600080612e147f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2896134e2565b915091507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e8057600080fd5b505af1158015612e94573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83346040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612f2a57600080fd5b505af1158015612f3e573d6000803e3d6000fd5b505050506040513d6020811015612f5457600080fd5b8101908080519060200190929190505050612f6b57fe5b6000808373ffffffffffffffffffffffffffffffffffffffff166328a4a0d1336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015612fd657600080fd5b505af1158015612fea573d6000803e3d6000fd5b505050506040513d604081101561300057600080fd5b810190808051906020019092919080519060200190929190505050915091508273ffffffffffffffffffffffffffffffffffffffff16631a275a03337f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc285858d6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050602060405180830381600087803b1580156130f457600080fd5b505af1158015613108573d6000803e3d6000fd5b505050506040513d602081101561311e57600080fd5b81019080805190602001909291905050505050505050505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff166392a3d6c0856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b1580156131a757600080fd5b505af11580156131bb573d6000803e3d6000fd5b505050506040513d60408110156131d157600080fd5b810190808051906020019092919080519060200190929190505050809250819350505060008373ffffffffffffffffffffffffffffffffffffffff1663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561323c57600080fd5b505afa158015613250573d6000803e3d6000fd5b505050506040513d602081101561326657600080fd5b810190808051906020019092919050505090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613367577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561334057600080fd5b505af1158015613354573d6000803e3d6000fd5b5050505061336282846143a4565b613373565b613372818385614802565b5b509250929050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60016020528060005260406000206000915054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613463576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c386021913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561356c57600080fd5b505afa158015613580573d6000803e3d6000fd5b505050506040513d602081101561359657600080fd5b81019080805190602001909291905050509150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561364c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43656e74617572537761703a20504f4f4c5f4e4f545f464f554e44000000000081525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156136d357600080fd5b505afa1580156136e7573d6000803e3d6000fd5b505050506040513d60208110156136fd57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156137b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43656e74617572537761703a20504f4f4c5f4e4f545f464f554e44000000000081525060200191505060405180910390fd5b9250929050565b8042811015613831576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff16156139185761385081614110565b15806138a55750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b8461392489888a611b29565b101561397b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c7c6027913960400191505060405180910390fd5b6000806139888a896134e2565b915091506139988a33848c61461d565b6000808373ffffffffffffffffffffffffffffffffffffffff166328a4a0d1336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015613a0357600080fd5b505af1158015613a17573d6000803e3d6000fd5b505050506040513d6040811015613a2d57600080fd5b810190808051906020019092919080519060200190929190505050915091508273ffffffffffffffffffffffffffffffffffffffff16631a275a03338e85858d6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050602060405180830381600087803b158015613b0157600080fd5b505af1158015613b15573d6000803e3d6000fd5b505050506040513d6020811015613b2b57600080fd5b810190808051906020019092919050505050505050505050505050505050565b60008142811015613bc4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff1615613cab57613be381614110565b1580613c385750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613caa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b613cd87f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc288308888610bc2565b92507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613d4d57600080fd5b505af1158015613d61573d6000803e3d6000fd5b50505050613d6f86846143a4565b5050949350505050565b8042811015613df0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43656e74617572537761703a204558504952454400000000000000000000000081525060200191505060405180910390fd5b33600060149054906101000a900460ff1615613ed757613e0f81614110565b1580613e645750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43656e74617572537761703a204f4e4c595f454f415f414c4c4f57454400000081525060200191505060405180910390fd5b5b6000613ee48988886122cd565b905087811115613f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614bf46023913960400191505060405180910390fd5b600080613f4c8b8a6134e2565b91509150613f5c8b33848661461d565b6000808373ffffffffffffffffffffffffffffffffffffffff166328a4a0d1336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015613fc757600080fd5b505af1158015613fdb573d6000803e3d6000fd5b505050506040513d6040811015613ff157600080fd5b810190808051906020019092919080519060200190929190505050915091508273ffffffffffffffffffffffffffffffffffffffff16631a275a03338f85858e6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050602060405180830381600087803b1580156140c557600080fd5b505af11580156140d9573d6000803e3d6000fd5b505050506040513d60208110156140ef57600080fd5b81019080805190602001909291905050505050505050505050505050505050565b600080823b905060008111915050919050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bbe4f6db866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156141ad57600080fd5b505afa1580156141c1573d6000803e3d6000fd5b505050506040513d60208110156141d757600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561423257600080fd5b505afa158015614246573d6000803e3d6000fd5b505050506040513d602081101561425c57600080fd5b8101908080519060200190929190505050905060008273ffffffffffffffffffffffffffffffffffffffff1663faa482246040518163ffffffff1660e01b815260040160206040518083038186803b1580156142b757600080fd5b505afa1580156142cb573d6000803e3d6000fd5b505050506040513d60208110156142e157600080fd5b81019080805190602001909291905050509050859350600082141561431a5761431381876149e590919063ffffffff16565b9350614342565b61433f81614331848961454d90919063ffffffff16565b6145d390919063ffffffff16565b93505b84841161439a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c7c6027913960400191505060405180910390fd5b5050509392505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff811180156143d657600080fd5b506040519080825280601f01601f1916602001820160405280156144095781602001600182028036833780820191505090505b506040518082805190602001908083835b6020831061443d578051825260208201915060208101905060208303925061441a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461449f576040519150601f19603f3d011682016040523d82523d6000602084013e6144a4565b606091505b50509050806144fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614c596023913960400191505060405180910390fd5b505050565b600061454583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614a6d565b905092915050565b60008083141561456057600090506145cd565b600082840290508284828161457157fe5b04146145c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c176021913960400191505060405180910390fd5b809150505b92915050565b600061461583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614b2d565b905092915050565b600060608573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106146fe57805182526020820191506020810190506020830392506146db565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614760576040519150601f19603f3d011682016040523d82523d6000602084013e614765565b606091505b50915091508180156147a557506000815114806147a4575080806020019051602081101561479257600080fd5b81019080805190602001909291905050505b5b6147fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ca36024913960400191505060405180910390fd5b505050505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106148c557805182526020820191506020810190506020830392506148a2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614927576040519150601f19603f3d011682016040523d82523d6000602084013e61492c565b606091505b509150915081801561496c575060008151148061496b575080806020019051602081101561495957600080fd5b81019080805190602001909291905050505b5b6149de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5472616e7366657248656c7065723a205452414e534645525f4641494c45440081525060200191505060405180910390fd5b5050505050565b600080828401905083811015614a63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290614b1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614adf578082015181840152602081019050614ac4565b50505050905090810190601f168015614b0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290614bd9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614b9e578082015181840152602081019050614b83565b50505050905090810190601f168015614bcb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614be557fe5b04905080915050939250505056fe43656e74617572537761703a204558434553534956455f494e5055545f414d4f554e54536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743656e74617572537761703a204f4e4c595f464143544f52595f414c4c4f5745445472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454443656e74617572537761703a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220646ec73ba37e93657cb4fb985ca496f23da5c9640f380de4c3fb0e9e9429b48364736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000a6f16ed7895ec475f62dc8613dbaa84ee407ff8000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-----Decoded View---------------
Arg [0] : _factory (address): 0x0a6F16ED7895ec475f62dc8613dbAa84Ee407ff8
Arg [1] : _WETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000a6f16ed7895ec475f62dc8613dbaa84ee407ff8
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.