Contract Overview
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
ZeroTwOhmTreasury
Compiler Version
v0.7.5+commit.eb77ed08
Optimization Enabled:
Yes with 100 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function add32(uint32 a, uint32 b) internal pure returns (uint32) { uint32 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function mul32(uint32 a, uint32 b) internal pure returns (uint32) { if (a == 0) { return 0; } uint32 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } } library Address { function isContract(address account) internal view returns (bool) { // This method relies in 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; } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { if (returndata.length > 0) { // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IOwnable { function manager() external view returns (address); function renounceManagement() external; function pushManagement( address newOwner_ ) external; function pullManagement() external; } contract Ownable is IOwnable { address internal _owner; address internal _newOwner; event OwnershipPushed(address indexed previousOwner, address indexed newOwner); event OwnershipPulled(address indexed previousOwner, address indexed newOwner); constructor () { _owner = msg.sender; emit OwnershipPushed( address(0), _owner ); } function manager() public view override returns (address) { return _owner; } modifier onlyManager() { require( _owner == msg.sender, "Ownable: caller is not the owner" ); _; } function renounceManagement() public virtual override onlyManager() { emit OwnershipPushed( _owner, address(0) ); _owner = address(0); } function pushManagement( address newOwner_ ) public virtual override onlyManager() { require( newOwner_ != address(0), "Ownable: new owner is the zero address"); emit OwnershipPushed( _owner, newOwner_ ); _newOwner = newOwner_; } function pullManagement() public virtual override { require( msg.sender == _newOwner, "Ownable: must be new owner to pull"); emit OwnershipPulled( _owner, _newOwner ); _owner = _newOwner; } } interface IERC20 { function decimals() external view returns (uint8); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function approve(address spender, uint256 amount) external returns (bool); function totalSupply() external view returns (uint256); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface IERC20Mintable { function mint( uint256 amount_ ) external; function mint( address account_, uint256 ammount_ ) external; } interface IOHMERC20 { function burnFrom(address account_, uint256 amount_) external; } interface IBondCalculator { function valuation( address pair_, uint amount_ ) external view returns ( uint _value ); } contract ZeroTwOhmTreasury is Ownable { using SafeMath for uint; using SafeMath for uint32; using SafeERC20 for IERC20; event Deposit( address indexed token, uint amount, uint value ); event Withdrawal( address indexed token, uint amount, uint value ); event CreateDebt( address indexed debtor, address indexed token, uint amount, uint value ); event RepayDebt( address indexed debtor, address indexed token, uint amount, uint value ); event ReservesManaged( address indexed token, uint amount ); event ReservesUpdated( uint indexed totalReserves ); event ReservesAudited( uint indexed totalReserves ); event RewardsMinted( address indexed caller, address indexed recipient, uint amount ); event ChangeQueued( MANAGING indexed managing, address queued ); event ChangeActivated( MANAGING indexed managing, address activated, bool result ); enum MANAGING { RESERVEDEPOSITOR, RESERVESPENDER, RESERVETOKEN, RESERVEMANAGER, LIQUIDITYDEPOSITOR, LIQUIDITYTOKEN, LIQUIDITYMANAGER, DEBTOR, REWARDMANAGER, SOHM } address public immutable Z2O; uint32 public immutable secondsNeededForQueue; address[] public reserveTokens; // Push only, beware false-positives. mapping( address => bool ) public isReserveToken; mapping( address => uint32 ) public reserveTokenQueue; // Delays changes to mapping. address[] public reserveDepositors; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isReserveDepositor; mapping( address => uint32 ) public reserveDepositorQueue; // Delays changes to mapping. address[] public reserveSpenders; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isReserveSpender; mapping( address => uint32 ) public reserveSpenderQueue; // Delays changes to mapping. address[] public liquidityTokens; // Push only, beware false-positives. mapping( address => bool ) public isLiquidityToken; mapping( address => uint32 ) public LiquidityTokenQueue; // Delays changes to mapping. address[] public liquidityDepositors; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isLiquidityDepositor; mapping( address => uint32 ) public LiquidityDepositorQueue; // Delays changes to mapping. mapping( address => address ) public bondCalculator; // bond calculator for liquidity token address[] public reserveManagers; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isReserveManager; mapping( address => uint32 ) public ReserveManagerQueue; // Delays changes to mapping. address[] public liquidityManagers; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isLiquidityManager; mapping( address => uint32 ) public LiquidityManagerQueue; // Delays changes to mapping. address[] public debtors; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isDebtor; mapping( address => uint32 ) public debtorQueue; // Delays changes to mapping. mapping( address => uint ) public debtorBalance; address[] public rewardManagers; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isRewardManager; mapping( address => uint32 ) public rewardManagerQueue; // Delays changes to mapping. address public sZ2O; uint public sOHMQueue; // Delays change to sOHM address uint public totalReserves; // Risk-free value of all assets uint public totalDebt; constructor ( address _Z2O, address _MIM, uint32 _secondsNeededForQueue ) { require( _Z2O != address(0) ); Z2O = _Z2O; isReserveToken[ _MIM ] = true; reserveTokens.push( _MIM ); secondsNeededForQueue = _secondsNeededForQueue; } /** @notice allow approved address to deposit an asset for OHM @param _amount uint @param _token address @param _profit uint @return send_ uint */ function deposit( uint _amount, address _token, uint _profit ) external returns ( uint send_ ) { require( isReserveToken[ _token ] || isLiquidityToken[ _token ], "Not accepted" ); IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount ); if ( isReserveToken[ _token ] ) { require( isReserveDepositor[ msg.sender ], "Not approved" ); } else { require( isLiquidityDepositor[ msg.sender ], "Not approved" ); } uint value = valueOf(_token, _amount); // mint OHM needed and store amount of rewards for distribution send_ = value.sub( _profit ); IERC20Mintable( Z2O ).mint( msg.sender, send_ ); totalReserves = totalReserves.add( value ); emit ReservesUpdated( totalReserves ); emit Deposit( _token, _amount, value ); } /** @notice allow approved address to burn OHM for reserves @param _amount uint @param _token address */ function withdraw( uint _amount, address _token ) external { require( isReserveToken[ _token ], "Not accepted" ); // Only reserves can be used for redemptions require( isReserveSpender[ msg.sender ] == true, "Not approved" ); uint value = valueOf( _token, _amount ); IOHMERC20( Z2O ).burnFrom( msg.sender, value ); totalReserves = totalReserves.sub( value ); emit ReservesUpdated( totalReserves ); IERC20( _token ).safeTransfer( msg.sender, _amount ); emit Withdrawal( _token, _amount, value ); } /** @notice allow approved address to borrow reserves @param _amount uint @param _token address */ function incurDebt( uint _amount, address _token ) external { require( isDebtor[ msg.sender ], "Not approved" ); require( isReserveToken[ _token ], "Not accepted" ); uint value = valueOf( _token, _amount ); uint maximumDebt = IERC20( sZ2O ).balanceOf( msg.sender ); // Can only borrow against sOHM held uint availableDebt = maximumDebt.sub( debtorBalance[ msg.sender ] ); require( value <= availableDebt, "Exceeds debt limit" ); debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].add( value ); totalDebt = totalDebt.add( value ); totalReserves = totalReserves.sub( value ); emit ReservesUpdated( totalReserves ); IERC20( _token ).transfer( msg.sender, _amount ); emit CreateDebt( msg.sender, _token, _amount, value ); } /** @notice allow approved address to repay borrowed reserves with reserves @param _amount uint @param _token address */ function repayDebtWithReserve( uint _amount, address _token ) external { require( isDebtor[ msg.sender ], "Not approved" ); require( isReserveToken[ _token ], "Not accepted" ); IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount ); uint value = valueOf( _token, _amount ); debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].sub( value ); totalDebt = totalDebt.sub( value ); totalReserves = totalReserves.add( value ); emit ReservesUpdated( totalReserves ); emit RepayDebt( msg.sender, _token, _amount, value ); } /** @notice allow approved address to repay borrowed reserves with OHM @param _amount uint */ function repayDebtWithOHM( uint _amount ) external { require( isDebtor[ msg.sender ], "Not approved" ); IOHMERC20( Z2O ).burnFrom( msg.sender, _amount ); debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].sub( _amount ); totalDebt = totalDebt.sub( _amount ); emit RepayDebt( msg.sender, Z2O, _amount, _amount ); } /** @notice allow approved address to withdraw assets @param _token address @param _amount uint */ function manage( address _token, uint _amount ) external { if( isLiquidityToken[ _token ] ) { require( isLiquidityManager[ msg.sender ], "Not approved" ); } else { require( isReserveManager[ msg.sender ], "Not approved" ); } uint value = valueOf(_token, _amount); require( value <= excessReserves(), "Insufficient reserves" ); totalReserves = totalReserves.sub( value ); emit ReservesUpdated( totalReserves ); IERC20( _token ).safeTransfer( msg.sender, _amount ); emit ReservesManaged( _token, _amount ); } /** @notice send epoch reward to staking contract */ function mintRewards( address _recipient, uint _amount ) external { require( isRewardManager[ msg.sender ], "Not approved" ); require( _amount <= excessReserves(), "Insufficient reserves" ); IERC20Mintable( Z2O ).mint( _recipient, _amount ); emit RewardsMinted( msg.sender, _recipient, _amount ); } /** @notice returns excess reserves not backing tokens @return uint */ function excessReserves() public view returns ( uint ) { return totalReserves.sub( IERC20( Z2O ).totalSupply().sub( totalDebt ) ); } /** @notice takes inventory of all tracked assets @notice always consolidate to recognized reserves before audit */ function auditReserves() external onlyManager() { uint reserves; for( uint i = 0; i < reserveTokens.length; i++ ) { reserves = reserves.add ( valueOf( reserveTokens[ i ], IERC20( reserveTokens[ i ] ).balanceOf( address(this) ) ) ); } for( uint i = 0; i < liquidityTokens.length; i++ ) { reserves = reserves.add ( valueOf( liquidityTokens[ i ], IERC20( liquidityTokens[ i ] ).balanceOf( address(this) ) ) ); } totalReserves = reserves; emit ReservesUpdated( reserves ); emit ReservesAudited( reserves ); } /** @notice returns OHM valuation of asset @param _token address @param _amount uint @return value_ uint */ function valueOf( address _token, uint _amount ) public view returns ( uint value_ ) { if ( isReserveToken[ _token ] ) { // convert amount to match OHM decimals value_ = _amount.mul( 10 ** IERC20( Z2O ).decimals() ).div( 10 ** IERC20( _token ).decimals() ); } else if ( isLiquidityToken[ _token ] ) { value_ = IBondCalculator( bondCalculator[ _token ] ).valuation( _token, _amount ); } } /** @notice queue address to change boolean in mapping @param _managing MANAGING @param _address address @return bool */ function queue( MANAGING _managing, address _address ) external onlyManager() returns ( bool ) { require( _address != address(0) ); if ( _managing == MANAGING.RESERVEDEPOSITOR ) { // 0 reserveDepositorQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1 reserveSpenderQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2 reserveTokenQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3 ReserveManagerQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue.mul32( 2 ) ); } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4 LiquidityDepositorQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5 LiquidityTokenQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6 LiquidityManagerQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue.mul32( 2 ) ); } else if ( _managing == MANAGING.DEBTOR ) { // 7 debtorQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8 rewardManagerQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if ( _managing == MANAGING.SOHM ) { // 9 sOHMQueue = uint32(block.timestamp).add32( secondsNeededForQueue ); } else return false; emit ChangeQueued( _managing, _address ); return true; } /** @notice verify queue then set boolean in mapping @param _managing MANAGING @param _address address @param _calculator address @return bool */ function toggle( MANAGING _managing, address _address, address _calculator ) external onlyManager() returns ( bool ) { require( _address != address(0) ); bool result; if ( _managing == MANAGING.RESERVEDEPOSITOR ) { // 0 if ( requirements( reserveDepositorQueue, isReserveDepositor, _address ) ) { reserveDepositorQueue[ _address ] = 0; if( !listContains( reserveDepositors, _address ) ) { reserveDepositors.push( _address ); } } result = !isReserveDepositor[ _address ]; isReserveDepositor[ _address ] = result; } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1 if ( requirements( reserveSpenderQueue, isReserveSpender, _address ) ) { reserveSpenderQueue[ _address ] = 0; if( !listContains( reserveSpenders, _address ) ) { reserveSpenders.push( _address ); } } result = !isReserveSpender[ _address ]; isReserveSpender[ _address ] = result; } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2 if ( requirements( reserveTokenQueue, isReserveToken, _address ) ) { reserveTokenQueue[ _address ] = 0; if( !listContains( reserveTokens, _address ) ) { reserveTokens.push( _address ); } } result = !isReserveToken[ _address ]; isReserveToken[ _address ] = result; } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3 if ( requirements( ReserveManagerQueue, isReserveManager, _address ) ) { reserveManagers.push( _address ); ReserveManagerQueue[ _address ] = 0; if( !listContains( reserveManagers, _address ) ) { reserveManagers.push( _address ); } } result = !isReserveManager[ _address ]; isReserveManager[ _address ] = result; } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4 if ( requirements( LiquidityDepositorQueue, isLiquidityDepositor, _address ) ) { liquidityDepositors.push( _address ); LiquidityDepositorQueue[ _address ] = 0; if( !listContains( liquidityDepositors, _address ) ) { liquidityDepositors.push( _address ); } } result = !isLiquidityDepositor[ _address ]; isLiquidityDepositor[ _address ] = result; } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5 if ( requirements( LiquidityTokenQueue, isLiquidityToken, _address ) ) { LiquidityTokenQueue[ _address ] = 0; if( !listContains( liquidityTokens, _address ) ) { liquidityTokens.push( _address ); } } result = !isLiquidityToken[ _address ]; isLiquidityToken[ _address ] = result; bondCalculator[ _address ] = _calculator; } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6 if ( requirements( LiquidityManagerQueue, isLiquidityManager, _address ) ) { LiquidityManagerQueue[ _address ] = 0; if( !listContains( liquidityManagers, _address ) ) { liquidityManagers.push( _address ); } } result = !isLiquidityManager[ _address ]; isLiquidityManager[ _address ] = result; } else if ( _managing == MANAGING.DEBTOR ) { // 7 if ( requirements( debtorQueue, isDebtor, _address ) ) { debtorQueue[ _address ] = 0; if( !listContains( debtors, _address ) ) { debtors.push( _address ); } } result = !isDebtor[ _address ]; isDebtor[ _address ] = result; } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8 if ( requirements( rewardManagerQueue, isRewardManager, _address ) ) { rewardManagerQueue[ _address ] = 0; if( !listContains( rewardManagers, _address ) ) { rewardManagers.push( _address ); } } result = !isRewardManager[ _address ]; isRewardManager[ _address ] = result; } else if ( _managing == MANAGING.SOHM ) { // 9 sOHMQueue = 0; sZ2O = _address; result = true; } else return false; emit ChangeActivated( _managing, _address, result ); return true; } /** @notice checks requirements and returns altered structs @param queue_ mapping( address => uint ) @param status_ mapping( address => bool ) @param _address address @return bool */ function requirements( mapping( address => uint32 ) storage queue_, mapping( address => bool ) storage status_, address _address ) internal view returns ( bool ) { if ( !status_[ _address ] ) { require( queue_[ _address ] != 0, "Must queue" ); require( queue_[ _address ] <= uint32(block.timestamp), "Queue not expired" ); return true; } return false; } /** @notice checks array to ensure against duplicate @param _list address[] @param _token address @return bool */ function listContains( address[] storage _list, address _token ) internal view returns ( bool ) { for( uint i = 0; i < _list.length; i++ ) { if( _list[ i ] == _token ) { return true; } } return false; } }
{ "optimizer": { "enabled": true, "runs": 100 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"_Z2O","type":"address"},{"internalType":"address","name":"_MIM","type":"address"},{"internalType":"uint32","name":"_secondsNeededForQueue","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ZeroTwOhmTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"activated","type":"address"},{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"ChangeActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ZeroTwOhmTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"queued","type":"address"}],"name":"ChangeQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"CreateDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RepayDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesAudited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReservesManaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityDepositorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityTokenQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ReserveManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Z2O","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bondCalculator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"debtors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_profit","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"send_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"excessReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"incurDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDebtor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveSpender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRewardManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum ZeroTwOhmTreasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"}],"name":"queue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"repayDebtWithOHM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"repayDebtWithReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveDepositorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveSpenderQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveSpenders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveTokenQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sOHMQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sZ2O","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondsNeededForQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ZeroTwOhmTreasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_calculator","type":"address"}],"name":"toggle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"valueOf","outputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b50604051620038aa380380620038aa8339818101604052606081101561003557600080fd5b5080516020820151604092830151600080546001600160a01b031916331780825594519394929391926001600160a01b0316917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b0383166100a057600080fd5b6001600160601b0319606084901b166080526001600160a01b039182166000818152600360205260408120805460ff1916600190811790915560028054918201815582527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319169092179091556001600160e01b031960e083901b1660a052919092169163ffffffff169061370190620001a9903980611a27528061200652806120835280612100528061217c528061220e528061228b5280612307528061238952806124065280612483525080610a1e5280610dc05280610ed15280610f855280611386528061191c5280611c9a528061253c52506137016000f3fe608060405234801561001057600080fd5b50600436106102c05760003560e01c806387d67dff1161017d578063d031370b116100d9578063ee4e19a111610092578063ee4e19a114610884578063f1696d2e146108aa578063fb939588146108b2578063fbfd393b146108d8578063fc7b9c181461090f578063fd1ec01014610917578063fff9ee8714610934576102c0565b8063d031370b146107b8578063d796ffb8146107d5578063df89b34414610801578063e54194b814610827578063e83afee31461082f578063ebd83cd81461085e576102c0565b8063a569e57111610136578063a569e571146106ab578063ab319c9a146106d1578063b1bd38b0146106f7578063b5b1d5601461071d578063bc157ac11461073a578063c24ad43e1461076c578063cd85641a14610792576102c0565b806387d67dff146105ee5780638f59c727146106145780638f6a7b571461063a5780638f840ddd14610657578063932cc8c31461065f578063a1210a2d14610685576102c0565b80632b7ce5001161022c57806368c31dd5116101e557806368c31dd5146104fe5780636a20de92146105245780636b5e40a71461055057806370a0502a1461056d578063788c6c011461058a5780637a8960d8146105c9578063869871bf146105d1576102c0565b80632b7ce5001461047d578063437f79121461048557806346f68ee9146104a2578063481c6a75146104c85780634e83423c146104d05780635a96ac0a146104f6576102c0565b80630f70431f1161027e5780630f70431f146103a0578063124154ca146103bd57806312422d23146103f75780631af4da70146104235780631eec5a9a146104495780632789de3714610475576102c0565b8062f714ce146102c55780630619aff1146102f3578063089208d81461032c578063094a8651146103345780630b0eee301461036c5780630c3513a814610398575b600080fd5b6102f1600480360360408110156102db57600080fd5b50803590602001356001600160a01b031661095a565b005b6103106004803603602081101561030957600080fd5b5035610b31565b604080516001600160a01b039092168252519081900360200190f35b6102f1610b5b565b61035a6004803603602081101561034a57600080fd5b50356001600160a01b0316610bf2565b60408051918252519081900360200190f35b6102f16004803603604081101561038257600080fd5b506001600160a01b038135169060200135610c04565b61035a610db3565b6102f1600480360360208110156103b657600080fd5b5035610e57565b6103e3600480360360208110156103d357600080fd5b50356001600160a01b0316610fd6565b604080519115158252519081900360200190f35b6102f16004803603604081101561040d57600080fd5b50803590602001356001600160a01b0316610feb565b6103106004803603602081101561043957600080fd5b50356001600160a01b03166112bb565b61035a6004803603604081101561045f57600080fd5b506001600160a01b0381351690602001356112d6565b61035a6114ca565b6102f16114d0565b6103106004803603602081101561049b57600080fd5b5035611693565b6102f1600480360360208110156104b857600080fd5b50356001600160a01b03166116a3565b610310611790565b6103e3600480360360208110156104e657600080fd5b50356001600160a01b031661179f565b6102f16117b4565b6103e36004803603602081101561051457600080fd5b50356001600160a01b031661185e565b6102f16004803603604081101561053a57600080fd5b506001600160a01b038135169060200135611873565b6103106004803603602081101561056657600080fd5b50356119ed565b6103106004803603602081101561058357600080fd5b50356119fd565b6105b0600480360360208110156105a057600080fd5b50356001600160a01b0316611a0d565b6040805163ffffffff9092168252519081900360200190f35b6105b0611a25565b610310600480360360208110156105e757600080fd5b5035611a49565b6103e36004803603602081101561060457600080fd5b50356001600160a01b0316611a59565b6105b06004803603602081101561062a57600080fd5b50356001600160a01b0316611a6e565b6103106004803603602081101561065057600080fd5b5035611a86565b61035a611a96565b6105b06004803603602081101561067557600080fd5b50356001600160a01b0316611a9c565b6103e36004803603602081101561069b57600080fd5b50356001600160a01b0316611ab4565b6103e3600480360360208110156106c157600080fd5b50356001600160a01b0316611ac9565b6105b0600480360360208110156106e757600080fd5b50356001600160a01b0316611ade565b6105b06004803603602081101561070d57600080fd5b50356001600160a01b0316611af6565b6103106004803603602081101561073357600080fd5b5035611b0e565b61035a6004803603606081101561075057600080fd5b508035906001600160a01b036020820135169060400135611b1e565b6105b06004803603602081101561078257600080fd5b50356001600160a01b0316611d9c565b6105b0600480360360208110156107a857600080fd5b50356001600160a01b0316611db4565b610310600480360360208110156107ce57600080fd5b5035611dcc565b6102f1600480360360408110156107eb57600080fd5b50803590602001356001600160a01b0316611ddc565b6103e36004803603602081101561081757600080fd5b50356001600160a01b0316611f5f565b610310611f74565b6103e36004803603604081101561084557600080fd5b50803560ff1690602001356001600160a01b0316611f83565b6103e36004803603602081101561087457600080fd5b50356001600160a01b0316612510565b6103e36004803603602081101561089a57600080fd5b50356001600160a01b0316612525565b61031061253a565b6105b0600480360360208110156108c857600080fd5b50356001600160a01b031661255e565b6103e3600480360360608110156108ee57600080fd5b5060ff813516906001600160a01b0360208201358116916040013516612576565b61035a612e8c565b6103106004803603602081101561092d57600080fd5b5035612e92565b6105b06004803603602081101561094a57600080fd5b50356001600160a01b0316612ea2565b6001600160a01b03811660009081526003602052604090205460ff166109b6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b3360009081526009602052604090205460ff161515600114610a0e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610a1a82846112d6565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610a9357600080fd5b505af1158015610aa7573d6000803e3d6000fd5b5050602154610ab99250905082612eba565b602181905560405160008051602061368283398151915290600090a2610ae96001600160a01b0383163385612efc565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60128181548110610b4157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610ba8576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601b6020526000908152604090205481565b6001600160a01b0382166000908152600c602052604090205460ff1615610c7d573360009081526016602052604090205460ff16610c78576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b610cd0565b3360009081526013602052604090205460ff16610cd0576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610cdc83836112d6565b9050610ce6610db3565b811115610d32576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b602154610d3f9082612eba565b602181905560405160008051602061368283398151915290600090a2610d6f6001600160a01b0384163384612efc565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000610e52610e496022547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e1757600080fd5b505afa158015610e2b573d6000803e3d6000fd5b505050506040513d6020811015610e4157600080fd5b505190612eba565b60215490612eba565b905090565b3360009081526019602052604090205460ff16610eaa576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916379cc679091604480830192600092919082900301818387803b158015610f1857600080fd5b505af1158015610f2c573d6000803e3d6000fd5b5050336000908152601b6020526040902054610f4b9250905082612eba565b336000908152601b6020526040902055602254610f689082612eba565b602255604080518281526020810183905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60066020526000908152604090205460ff1681565b3360009081526019602052604090205460ff1661103e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff1661109a576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b60006110a682846112d6565b601f54604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156110f757600080fd5b505afa15801561110b573d6000803e3d6000fd5b505050506040513d602081101561112157600080fd5b5051336000908152601b602052604081205491925090611142908390612eba565b90508083111561118e576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601b60205260409020546111a89084612f53565b336000908152601b60205260409020556022546111c59084612f53565b6022556021546111d59084612eba565b602181905560405160008051602061368283398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b15801561124057600080fd5b505af1158015611254573d6000803e3d6000fd5b505050506040513d602081101561126a57600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b6011602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526003602052604081205460ff16156114135761140c836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d602081101561135d57600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a91611406916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163313ce56791600480820192602092909190829003018186803b1580156113cd57600080fd5b505afa1580156113e1573d6000803e3d6000fd5b505050506040513d60208110156113f757600080fd5b5051859060ff16600a0a612fab565b90613004565b90506114c4565b6001600160a01b0383166000908152600c602052604090205460ff16156114c4576001600160a01b03808416600081815260116020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b15801561149557600080fd5b505afa1580156114a9573d6000803e3d6000fd5b505050506040513d60208110156114bf57600080fd5b505190505b92915050565b60205481565b6000546001600160a01b0316331461151d576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6000805b6002548110156115f5576115eb6115e46002838154811061153e57fe5b600091825260209091200154600280546001600160a01b03909216918590811061156457fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b1580156115b357600080fd5b505afa1580156115c7573d6000803e3d6000fd5b505050506040513d60208110156115dd57600080fd5b50516112d6565b8390612f53565b9150600101611521565b5060005b600b548110156116465761163c6115e4600b838154811061161657fe5b600091825260209091200154600b80546001600160a01b03909216918590811061156457fe5b91506001016115f9565b506021819055604051819060008051602061368283398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b60088181548110610b4157600080fd5b6000546001600160a01b031633146116f0576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6001600160a01b0381166117355760405162461bcd60e51b81526004018080602001828103825260268152602001806135f96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601d6020526000908152604090205460ff1681565b6001546001600160a01b031633146117fd5760405162461bcd60e51b815260040180806020018281038252602281526020018061361f6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60036020526000908152604090205460ff1681565b336000908152601d602052604090205460ff166118c6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6118ce610db3565b81111561191a576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561199157600080fd5b505af11580156119a5573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60058181548110610b4157600080fd5b60158181548110610b4157600080fd5b60046020526000908152604090205463ffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60188181548110610b4157600080fd5b60096020526000908152604090205460ff1681565b600d6020526000908152604090205463ffffffff1681565b600e8181548110610b4157600080fd5b60215481565b60076020526000908152604090205463ffffffff1681565b600f6020526000908152604090205460ff1681565b600c6020526000908152604090205460ff1681565b60176020526000908152604090205463ffffffff1681565b60146020526000908152604090205463ffffffff1681565b601c8181548110610b4157600080fd5b6001600160a01b03821660009081526003602052604081205460ff1680611b5d57506001600160a01b0383166000908152600c602052604090205460ff165b611b9d576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611bb26001600160a01b038416333087613046565b6001600160a01b03831660009081526003602052604090205460ff1615611c2b573360009081526006602052604090205460ff16611c26576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611c7e565b336000908152600f602052604090205460ff16611c7e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000611c8a84866112d6565b9050611c968184612eba565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d0f57600080fd5b505af1158015611d23573d6000803e3d6000fd5b5050602154611d359250905082612f53565b602181905560405160008051602061368283398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b600a6020526000908152604090205463ffffffff1681565b601a6020526000908152604090205463ffffffff1681565b60028181548110610b4157600080fd5b3360009081526019602052604090205460ff16611e2f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16611e8b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611ea06001600160a01b038216333085613046565b6000611eac82846112d6565b336000908152601b6020526040902054909150611ec99082612eba565b336000908152601b6020526040902055602254611ee69082612eba565b602255602154611ef69082612f53565b602181905560405160008051602061368283398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b60166020526000908152604090205460ff1681565b601f546001600160a01b031681565b600080546001600160a01b03163314611fd1576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6001600160a01b038216611fe457600080fd5b6000836009811115611ff257fe5b14156120615761202c63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600760205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600183600981111561206f57fe5b14156120de576120a963ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600a60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60028360098111156120ec57fe5b141561215b5761212663ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600460205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600383600981111561216957fe5b14156121ec576121b76121a763ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061310716565b63ffffffff42811691906130a616565b6001600160a01b0383166000908152601460205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60048360098111156121fa57fe5b14156122695761223463ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152601060205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600583600981111561227757fe5b14156122e6576122b163ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600d60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60068360098111156122f457fe5b1415612367576123326121a763ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061310716565b6001600160a01b0383166000908152601760205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600783600981111561237557fe5b14156123e4576123af63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152601a60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60088360098111156123f257fe5b14156124615761242c63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152601e60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600983600981111561246f57fe5b14156124b7576124a963ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b63ffffffff166020556124bf565b5060006114c4565b8260098111156124cb57fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b60136020526000908152604090205460ff1681565b60196020526000908152604090205460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b601e6020526000908152604090205463ffffffff1681565b600080546001600160a01b031633146125c4576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6001600160a01b0383166125d757600080fd5b6000808560098111156125e657fe5b14156126ac576125f96007600686613178565b1561267c576001600160a01b0384166000908152600760205260409020805463ffffffff1916905561262c600585613271565b61267c57600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff199091168117909155612e2e565b60018560098111156126ba57fe5b1415612780576126cd600a600986613178565b15612750576001600160a01b0384166000908152600a60205260409020805463ffffffff19169055612700600885613271565b61275057600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600960205260409020805460ff81161560ff199091168117909155612e2e565b600285600981111561278e57fe5b1415612854576127a16004600386613178565b15612824576001600160a01b0384166000908152600460205260409020805463ffffffff191690556127d4600285613271565b61282457600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600360205260409020805460ff81161560ff199091168117909155612e2e565b600385600981111561286257fe5b1415612965576128756014601386613178565b1561293557601280546001810182557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0387169081179091556000908152601460205260409020805463ffffffff191690556128e59085613271565b61293557601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff199091168117909155612e2e565b600485600981111561297357fe5b1415612a76576129866010600f86613178565b15612a4657600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0387169081179091556000908152601060205260409020805463ffffffff191690556129f69085613271565b612a4657600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff199091168117909155612e2e565b6005856009811115612a8457fe5b1415612b6c57612a97600d600c86613178565b15612b1a576001600160a01b0384166000908152600d60205260409020805463ffffffff19169055612aca600b85613271565b612b1a57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600c60209081526040808320805460ff81161560ff199091168117909155601190925290912080546001600160a01b03191692851692909217909155612e2e565b6006856009811115612b7a57fe5b1415612c4057612b8d6017601686613178565b15612c10576001600160a01b0384166000908152601760205260409020805463ffffffff19169055612bc0601585613271565b612c1057601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff199091168117909155612e2e565b6007856009811115612c4e57fe5b1415612d1457612c61601a601986613178565b15612ce4576001600160a01b0384166000908152601a60205260409020805463ffffffff19169055612c94601885613271565b612ce457601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601960205260409020805460ff81161560ff199091168117909155612e2e565b6008856009811115612d2257fe5b1415612de857612d35601e601d86613178565b15612db8576001600160a01b0384166000908152601e60205260409020805463ffffffff19169055612d68601c85613271565b612db857601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601d60205260409020805460ff81161560ff199091168117909155612e2e565b6009856009811115612df657fe5b1415612e2457506000602055601f80546001600160a01b0319166001600160a01b0385161790556001612e2e565b6000915050612e85565b846009811115612e3a57fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60225481565b600b8181548110610b4157600080fd5b60106020526000908152604090205463ffffffff1681565b6000612e8583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132c1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612f4e908490613358565b505050565b600082820183811015612e85576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600082612fba575060006114c4565b82820282848281612fc757fe5b0414612e855760405162461bcd60e51b81526004018080602001828103825260218152602001806136416021913960400191505060405180910390fd5b6000612e8583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613409565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526130a0908590613358565b50505050565b600082820163ffffffff8085169082161015612e85576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600063ffffffff831661311c575060006114c4565b82820263ffffffff808416908086169083168161313557fe5b0463ffffffff1614612e855760405162461bcd60e51b81526004018080602001828103825260218152602001806136416021913960400191505060405180910390fd5b6001600160a01b03811660009081526020839052604081205460ff16613267576001600160a01b03821660009081526020859052604090205463ffffffff166131f5576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b03821660009081526020859052604090205463ffffffff4281169116111561325f576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b506001612e85565b5060009392505050565b6000805b835481101561326757826001600160a01b031684828154811061329457fe5b6000918252602090912001546001600160a01b031614156132b95760019150506114c4565b600101613275565b600081848411156133505760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133155781810151838201526020016132fd565b50505050905090810190601f1680156133425780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606133ad826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661346e9092919063ffffffff16565b805190915015612f4e578080602001905160208110156133cc57600080fd5b5051612f4e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806136a2602a913960400191505060405180910390fd5b600081836134585760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156133155781810151838201526020016132fd565b50600083858161346457fe5b0495945050505050565b606061347d8484600085613485565b949350505050565b6060613490856135f2565b6134e1576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106135205780518252601f199092019160209182019101613501565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613582576040519150601f19603f3d011682016040523d82523d6000602084013e613587565b606091505b5091509150811561359b57915061347d9050565b8051156135ab5780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156133155781810151838201526020016132fd565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212200f5ff9f6ce53c47bb1bfc404e13a4a7753cf53730888048a1d6d6d8356fcdd8964736f6c63430007050033000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac000000000000000000000000fea7a6a0b346362bf88a9e4a88416b77a57d6c2a0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102c05760003560e01c806387d67dff1161017d578063d031370b116100d9578063ee4e19a111610092578063ee4e19a114610884578063f1696d2e146108aa578063fb939588146108b2578063fbfd393b146108d8578063fc7b9c181461090f578063fd1ec01014610917578063fff9ee8714610934576102c0565b8063d031370b146107b8578063d796ffb8146107d5578063df89b34414610801578063e54194b814610827578063e83afee31461082f578063ebd83cd81461085e576102c0565b8063a569e57111610136578063a569e571146106ab578063ab319c9a146106d1578063b1bd38b0146106f7578063b5b1d5601461071d578063bc157ac11461073a578063c24ad43e1461076c578063cd85641a14610792576102c0565b806387d67dff146105ee5780638f59c727146106145780638f6a7b571461063a5780638f840ddd14610657578063932cc8c31461065f578063a1210a2d14610685576102c0565b80632b7ce5001161022c57806368c31dd5116101e557806368c31dd5146104fe5780636a20de92146105245780636b5e40a71461055057806370a0502a1461056d578063788c6c011461058a5780637a8960d8146105c9578063869871bf146105d1576102c0565b80632b7ce5001461047d578063437f79121461048557806346f68ee9146104a2578063481c6a75146104c85780634e83423c146104d05780635a96ac0a146104f6576102c0565b80630f70431f1161027e5780630f70431f146103a0578063124154ca146103bd57806312422d23146103f75780631af4da70146104235780631eec5a9a146104495780632789de3714610475576102c0565b8062f714ce146102c55780630619aff1146102f3578063089208d81461032c578063094a8651146103345780630b0eee301461036c5780630c3513a814610398575b600080fd5b6102f1600480360360408110156102db57600080fd5b50803590602001356001600160a01b031661095a565b005b6103106004803603602081101561030957600080fd5b5035610b31565b604080516001600160a01b039092168252519081900360200190f35b6102f1610b5b565b61035a6004803603602081101561034a57600080fd5b50356001600160a01b0316610bf2565b60408051918252519081900360200190f35b6102f16004803603604081101561038257600080fd5b506001600160a01b038135169060200135610c04565b61035a610db3565b6102f1600480360360208110156103b657600080fd5b5035610e57565b6103e3600480360360208110156103d357600080fd5b50356001600160a01b0316610fd6565b604080519115158252519081900360200190f35b6102f16004803603604081101561040d57600080fd5b50803590602001356001600160a01b0316610feb565b6103106004803603602081101561043957600080fd5b50356001600160a01b03166112bb565b61035a6004803603604081101561045f57600080fd5b506001600160a01b0381351690602001356112d6565b61035a6114ca565b6102f16114d0565b6103106004803603602081101561049b57600080fd5b5035611693565b6102f1600480360360208110156104b857600080fd5b50356001600160a01b03166116a3565b610310611790565b6103e3600480360360208110156104e657600080fd5b50356001600160a01b031661179f565b6102f16117b4565b6103e36004803603602081101561051457600080fd5b50356001600160a01b031661185e565b6102f16004803603604081101561053a57600080fd5b506001600160a01b038135169060200135611873565b6103106004803603602081101561056657600080fd5b50356119ed565b6103106004803603602081101561058357600080fd5b50356119fd565b6105b0600480360360208110156105a057600080fd5b50356001600160a01b0316611a0d565b6040805163ffffffff9092168252519081900360200190f35b6105b0611a25565b610310600480360360208110156105e757600080fd5b5035611a49565b6103e36004803603602081101561060457600080fd5b50356001600160a01b0316611a59565b6105b06004803603602081101561062a57600080fd5b50356001600160a01b0316611a6e565b6103106004803603602081101561065057600080fd5b5035611a86565b61035a611a96565b6105b06004803603602081101561067557600080fd5b50356001600160a01b0316611a9c565b6103e36004803603602081101561069b57600080fd5b50356001600160a01b0316611ab4565b6103e3600480360360208110156106c157600080fd5b50356001600160a01b0316611ac9565b6105b0600480360360208110156106e757600080fd5b50356001600160a01b0316611ade565b6105b06004803603602081101561070d57600080fd5b50356001600160a01b0316611af6565b6103106004803603602081101561073357600080fd5b5035611b0e565b61035a6004803603606081101561075057600080fd5b508035906001600160a01b036020820135169060400135611b1e565b6105b06004803603602081101561078257600080fd5b50356001600160a01b0316611d9c565b6105b0600480360360208110156107a857600080fd5b50356001600160a01b0316611db4565b610310600480360360208110156107ce57600080fd5b5035611dcc565b6102f1600480360360408110156107eb57600080fd5b50803590602001356001600160a01b0316611ddc565b6103e36004803603602081101561081757600080fd5b50356001600160a01b0316611f5f565b610310611f74565b6103e36004803603604081101561084557600080fd5b50803560ff1690602001356001600160a01b0316611f83565b6103e36004803603602081101561087457600080fd5b50356001600160a01b0316612510565b6103e36004803603602081101561089a57600080fd5b50356001600160a01b0316612525565b61031061253a565b6105b0600480360360208110156108c857600080fd5b50356001600160a01b031661255e565b6103e3600480360360608110156108ee57600080fd5b5060ff813516906001600160a01b0360208201358116916040013516612576565b61035a612e8c565b6103106004803603602081101561092d57600080fd5b5035612e92565b6105b06004803603602081101561094a57600080fd5b50356001600160a01b0316612ea2565b6001600160a01b03811660009081526003602052604090205460ff166109b6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b3360009081526009602052604090205460ff161515600114610a0e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610a1a82846112d6565b90507f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac6001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610a9357600080fd5b505af1158015610aa7573d6000803e3d6000fd5b5050602154610ab99250905082612eba565b602181905560405160008051602061368283398151915290600090a2610ae96001600160a01b0383163385612efc565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60128181548110610b4157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610ba8576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601b6020526000908152604090205481565b6001600160a01b0382166000908152600c602052604090205460ff1615610c7d573360009081526016602052604090205460ff16610c78576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b610cd0565b3360009081526013602052604090205460ff16610cd0576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610cdc83836112d6565b9050610ce6610db3565b811115610d32576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b602154610d3f9082612eba565b602181905560405160008051602061368283398151915290600090a2610d6f6001600160a01b0384163384612efc565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000610e52610e496022547f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e1757600080fd5b505afa158015610e2b573d6000803e3d6000fd5b505050506040513d6020811015610e4157600080fd5b505190612eba565b60215490612eba565b905090565b3360009081526019602052604090205460ff16610eaa576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac16916379cc679091604480830192600092919082900301818387803b158015610f1857600080fd5b505af1158015610f2c573d6000803e3d6000fd5b5050336000908152601b6020526040902054610f4b9250905082612eba565b336000908152601b6020526040902055602254610f689082612eba565b602255604080518281526020810183905281516001600160a01b037f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60066020526000908152604090205460ff1681565b3360009081526019602052604090205460ff1661103e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff1661109a576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b60006110a682846112d6565b601f54604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156110f757600080fd5b505afa15801561110b573d6000803e3d6000fd5b505050506040513d602081101561112157600080fd5b5051336000908152601b602052604081205491925090611142908390612eba565b90508083111561118e576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601b60205260409020546111a89084612f53565b336000908152601b60205260409020556022546111c59084612f53565b6022556021546111d59084612eba565b602181905560405160008051602061368283398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b15801561124057600080fd5b505af1158015611254573d6000803e3d6000fd5b505050506040513d602081101561126a57600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b6011602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526003602052604081205460ff16156114135761140c836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d602081101561135d57600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a91611406916001600160a01b037f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac169163313ce56791600480820192602092909190829003018186803b1580156113cd57600080fd5b505afa1580156113e1573d6000803e3d6000fd5b505050506040513d60208110156113f757600080fd5b5051859060ff16600a0a612fab565b90613004565b90506114c4565b6001600160a01b0383166000908152600c602052604090205460ff16156114c4576001600160a01b03808416600081815260116020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b15801561149557600080fd5b505afa1580156114a9573d6000803e3d6000fd5b505050506040513d60208110156114bf57600080fd5b505190505b92915050565b60205481565b6000546001600160a01b0316331461151d576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6000805b6002548110156115f5576115eb6115e46002838154811061153e57fe5b600091825260209091200154600280546001600160a01b03909216918590811061156457fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b1580156115b357600080fd5b505afa1580156115c7573d6000803e3d6000fd5b505050506040513d60208110156115dd57600080fd5b50516112d6565b8390612f53565b9150600101611521565b5060005b600b548110156116465761163c6115e4600b838154811061161657fe5b600091825260209091200154600b80546001600160a01b03909216918590811061156457fe5b91506001016115f9565b506021819055604051819060008051602061368283398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b60088181548110610b4157600080fd5b6000546001600160a01b031633146116f0576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6001600160a01b0381166117355760405162461bcd60e51b81526004018080602001828103825260268152602001806135f96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601d6020526000908152604090205460ff1681565b6001546001600160a01b031633146117fd5760405162461bcd60e51b815260040180806020018281038252602281526020018061361f6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60036020526000908152604090205460ff1681565b336000908152601d602052604090205460ff166118c6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6118ce610db3565b81111561191a576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac6001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561199157600080fd5b505af11580156119a5573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60058181548110610b4157600080fd5b60158181548110610b4157600080fd5b60046020526000908152604090205463ffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60188181548110610b4157600080fd5b60096020526000908152604090205460ff1681565b600d6020526000908152604090205463ffffffff1681565b600e8181548110610b4157600080fd5b60215481565b60076020526000908152604090205463ffffffff1681565b600f6020526000908152604090205460ff1681565b600c6020526000908152604090205460ff1681565b60176020526000908152604090205463ffffffff1681565b60146020526000908152604090205463ffffffff1681565b601c8181548110610b4157600080fd5b6001600160a01b03821660009081526003602052604081205460ff1680611b5d57506001600160a01b0383166000908152600c602052604090205460ff165b611b9d576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611bb26001600160a01b038416333087613046565b6001600160a01b03831660009081526003602052604090205460ff1615611c2b573360009081526006602052604090205460ff16611c26576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611c7e565b336000908152600f602052604090205460ff16611c7e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000611c8a84866112d6565b9050611c968184612eba565b91507f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac6001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d0f57600080fd5b505af1158015611d23573d6000803e3d6000fd5b5050602154611d359250905082612f53565b602181905560405160008051602061368283398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b600a6020526000908152604090205463ffffffff1681565b601a6020526000908152604090205463ffffffff1681565b60028181548110610b4157600080fd5b3360009081526019602052604090205460ff16611e2f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16611e8b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611ea06001600160a01b038216333085613046565b6000611eac82846112d6565b336000908152601b6020526040902054909150611ec99082612eba565b336000908152601b6020526040902055602254611ee69082612eba565b602255602154611ef69082612f53565b602181905560405160008051602061368283398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b60166020526000908152604090205460ff1681565b601f546001600160a01b031681565b600080546001600160a01b03163314611fd1576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6001600160a01b038216611fe457600080fd5b6000836009811115611ff257fe5b14156120615761202c63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600760205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600183600981111561206f57fe5b14156120de576120a963ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600a60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60028360098111156120ec57fe5b141561215b5761212663ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600460205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600383600981111561216957fe5b14156121ec576121b76121a763ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061310716565b63ffffffff42811691906130a616565b6001600160a01b0383166000908152601460205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60048360098111156121fa57fe5b14156122695761223463ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152601060205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600583600981111561227757fe5b14156122e6576122b163ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152600d60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60068360098111156122f457fe5b1415612367576123326121a763ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061310716565b6001600160a01b0383166000908152601760205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600783600981111561237557fe5b14156123e4576123af63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152601a60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b60088360098111156123f257fe5b14156124615761242c63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b6001600160a01b0383166000908152601e60205260409020805463ffffffff191663ffffffff929092169190911790556124bf565b600983600981111561246f57fe5b14156124b7576124a963ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130a616565b63ffffffff166020556124bf565b5060006114c4565b8260098111156124cb57fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b60136020526000908152604090205460ff1681565b60196020526000908152604090205460ff1681565b7f000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac81565b601e6020526000908152604090205463ffffffff1681565b600080546001600160a01b031633146125c4576040805162461bcd60e51b81526020600482018190526024820152600080516020613662833981519152604482015290519081900360640190fd5b6001600160a01b0383166125d757600080fd5b6000808560098111156125e657fe5b14156126ac576125f96007600686613178565b1561267c576001600160a01b0384166000908152600760205260409020805463ffffffff1916905561262c600585613271565b61267c57600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff199091168117909155612e2e565b60018560098111156126ba57fe5b1415612780576126cd600a600986613178565b15612750576001600160a01b0384166000908152600a60205260409020805463ffffffff19169055612700600885613271565b61275057600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600960205260409020805460ff81161560ff199091168117909155612e2e565b600285600981111561278e57fe5b1415612854576127a16004600386613178565b15612824576001600160a01b0384166000908152600460205260409020805463ffffffff191690556127d4600285613271565b61282457600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600360205260409020805460ff81161560ff199091168117909155612e2e565b600385600981111561286257fe5b1415612965576128756014601386613178565b1561293557601280546001810182557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0387169081179091556000908152601460205260409020805463ffffffff191690556128e59085613271565b61293557601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff199091168117909155612e2e565b600485600981111561297357fe5b1415612a76576129866010600f86613178565b15612a4657600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0387169081179091556000908152601060205260409020805463ffffffff191690556129f69085613271565b612a4657600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff199091168117909155612e2e565b6005856009811115612a8457fe5b1415612b6c57612a97600d600c86613178565b15612b1a576001600160a01b0384166000908152600d60205260409020805463ffffffff19169055612aca600b85613271565b612b1a57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600c60209081526040808320805460ff81161560ff199091168117909155601190925290912080546001600160a01b03191692851692909217909155612e2e565b6006856009811115612b7a57fe5b1415612c4057612b8d6017601686613178565b15612c10576001600160a01b0384166000908152601760205260409020805463ffffffff19169055612bc0601585613271565b612c1057601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff199091168117909155612e2e565b6007856009811115612c4e57fe5b1415612d1457612c61601a601986613178565b15612ce4576001600160a01b0384166000908152601a60205260409020805463ffffffff19169055612c94601885613271565b612ce457601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601960205260409020805460ff81161560ff199091168117909155612e2e565b6008856009811115612d2257fe5b1415612de857612d35601e601d86613178565b15612db8576001600160a01b0384166000908152601e60205260409020805463ffffffff19169055612d68601c85613271565b612db857601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601d60205260409020805460ff81161560ff199091168117909155612e2e565b6009856009811115612df657fe5b1415612e2457506000602055601f80546001600160a01b0319166001600160a01b0385161790556001612e2e565b6000915050612e85565b846009811115612e3a57fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60225481565b600b8181548110610b4157600080fd5b60106020526000908152604090205463ffffffff1681565b6000612e8583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132c1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612f4e908490613358565b505050565b600082820183811015612e85576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600082612fba575060006114c4565b82820282848281612fc757fe5b0414612e855760405162461bcd60e51b81526004018080602001828103825260218152602001806136416021913960400191505060405180910390fd5b6000612e8583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613409565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526130a0908590613358565b50505050565b600082820163ffffffff8085169082161015612e85576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600063ffffffff831661311c575060006114c4565b82820263ffffffff808416908086169083168161313557fe5b0463ffffffff1614612e855760405162461bcd60e51b81526004018080602001828103825260218152602001806136416021913960400191505060405180910390fd5b6001600160a01b03811660009081526020839052604081205460ff16613267576001600160a01b03821660009081526020859052604090205463ffffffff166131f5576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b03821660009081526020859052604090205463ffffffff4281169116111561325f576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b506001612e85565b5060009392505050565b6000805b835481101561326757826001600160a01b031684828154811061329457fe5b6000918252602090912001546001600160a01b031614156132b95760019150506114c4565b600101613275565b600081848411156133505760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133155781810151838201526020016132fd565b50505050905090810190601f1680156133425780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606133ad826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661346e9092919063ffffffff16565b805190915015612f4e578080602001905160208110156133cc57600080fd5b5051612f4e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806136a2602a913960400191505060405180910390fd5b600081836134585760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156133155781810151838201526020016132fd565b50600083858161346457fe5b0495945050505050565b606061347d8484600085613485565b949350505050565b6060613490856135f2565b6134e1576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106135205780518252601f199092019160209182019101613501565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613582576040519150601f19603f3d011682016040523d82523d6000602084013e613587565b606091505b5091509150811561359b57915061347d9050565b8051156135ab5780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156133155781810151838201526020016132fd565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212200f5ff9f6ce53c47bb1bfc404e13a4a7753cf53730888048a1d6d6d8356fcdd8964736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac000000000000000000000000fea7a6a0b346362bf88a9e4a88416b77a57d6c2a0000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _Z2O (address): 0xdb96f8efd6865644993505318cc08FF9C42fb9aC
Arg [1] : _MIM (address): 0xFEa7a6a0B346362BF88A9e4A88416B77a57D6c2A
Arg [2] : _secondsNeededForQueue (uint32): 0
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000db96f8efd6865644993505318cc08ff9c42fb9ac
Arg [1] : 000000000000000000000000fea7a6a0b346362bf88a9e4a88416b77a57d6c2a
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.