More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,262 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 14354394 | 939 days ago | IN | 0 ETH | 0.00385833 | ||||
Withdraw | 14185283 | 965 days ago | IN | 0 ETH | 0.00566087 | ||||
Stake | 14171065 | 968 days ago | IN | 0 ETH | 0.0049134 | ||||
Redeem | 14158737 | 969 days ago | IN | 0 ETH | 0.00574919 | ||||
Redeem | 14158637 | 969 days ago | IN | 0 ETH | 0.00565793 | ||||
Redeem | 14158630 | 969 days ago | IN | 0 ETH | 0.00565793 | ||||
Redeem | 14158539 | 969 days ago | IN | 0 ETH | 0.00520164 | ||||
Redeem | 14158497 | 969 days ago | IN | 0 ETH | 0.0052929 | ||||
Redeem | 14158496 | 969 days ago | IN | 0 ETH | 0.0064471 | ||||
Withdraw | 14120711 | 975 days ago | IN | 0 ETH | 0.01340262 | ||||
Withdraw | 13801512 | 1025 days ago | IN | 0 ETH | 0.00771696 | ||||
Redeem | 13509952 | 1071 days ago | IN | 0 ETH | 0.01545613 | ||||
Redeem | 13463837 | 1078 days ago | IN | 0 ETH | 0.00806037 | ||||
Redeem | 13375120 | 1092 days ago | IN | 0 ETH | 0.00977226 | ||||
Buy | 13286382 | 1106 days ago | IN | 0.05764138 ETH | 0.01489544 | ||||
Redeem | 13260103 | 1110 days ago | IN | 0 ETH | 0.00568386 | ||||
Redeem | 13237752 | 1113 days ago | IN | 0 ETH | 0.00946217 | ||||
Withdraw | 13236405 | 1113 days ago | IN | 0 ETH | 0.00486205 | ||||
Buy | 13211857 | 1117 days ago | IN | 0.2287305 ETH | 0.01830492 | ||||
Redeem | 13118567 | 1132 days ago | IN | 0 ETH | 0.00696028 | ||||
Buy | 13109345 | 1133 days ago | IN | 0.32495387 ETH | 0.05552492 | ||||
Redeem | 13086909 | 1137 days ago | IN | 0 ETH | 0.00770992 | ||||
Withdraw | 13086792 | 1137 days ago | IN | 0 ETH | 0.0075005 | ||||
Redeem | 13024120 | 1146 days ago | IN | 0 ETH | 0.0045541 | ||||
Stake | 12982158 | 1153 days ago | IN | 0 ETH | 0.00489266 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13286382 | 1106 days ago | 0.02516565 ETH | ||||
13286382 | 1106 days ago | 0.02593862 ETH | ||||
13286382 | 1106 days ago | 0.00576413 ETH | ||||
13211857 | 1117 days ago | 0.09986145 ETH | ||||
13211857 | 1117 days ago | 0.10292872 ETH | ||||
13211857 | 1117 days ago | 0.02287305 ETH | ||||
13109345 | 1133 days ago | 0.14187161 ETH | ||||
13109345 | 1133 days ago | 0.14622924 ETH | ||||
13109345 | 1133 days ago | 0.03249538 ETH | ||||
12073460 | 1294 days ago | 1.32446642 ETH | ||||
12073460 | 1294 days ago | 1.36514782 ETH | ||||
12073460 | 1294 days ago | 0.30336618 ETH | ||||
12044415 | 1298 days ago | 0.3844766 ETH | ||||
12044415 | 1298 days ago | 0.39628592 ETH | ||||
12044415 | 1298 days ago | 0.08806353 ETH | ||||
12011121 | 1303 days ago | 2.70463816 ETH | ||||
12011121 | 1303 days ago | 2.78771197 ETH | ||||
12011121 | 1303 days ago | 0.61949155 ETH | ||||
11974639 | 1309 days ago | 0.07032767 ETH | ||||
11974639 | 1309 days ago | 0.0724878 ETH | ||||
11974639 | 1309 days ago | 0.0161084 ETH | ||||
11971996 | 1309 days ago | 0.06954495 ETH | ||||
11971996 | 1309 days ago | 0.07168104 ETH | ||||
11971996 | 1309 days ago | 0.01592912 ETH | ||||
11971988 | 1309 days ago | 0.06954495 ETH |
Loading...
Loading
Contract Name:
LPStaking
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-19 */ // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library UniswapV2Library { using SafeMath for uint; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS'); } // calculates the CREATE2 address for a pair without making any external calls function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash )))); } // fetches and sorts the reserves for a pair function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); (uint reserve0, uint reserve1,) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { require(amountA > 0, 'UniswapV2Library: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY'); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) { require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(997); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'UniswapV2Library: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } pragma solidity ^0.6.0; /// @title LP Staking Contract interface IERC20 { function balanceOf(address account) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transfer(address recipient, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); } interface INodeRunnersNFT { function getFighter(uint256 tokenId) external view returns (uint256, uint256, uint256, uint256, uint256, uint256); function mint(address to, uint256 id, uint256 amount) external; } interface IUniswap { function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity); function WETH() external pure returns(address); function getAmountsOut(uint amountIn, address[] memory path) external pure returns (uint[] memory amounts); } interface IFactory { function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IUniswapV2Pair { function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast); function totalSupply() external view returns (uint); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); } contract LPStaking is ReentrancyGuard, Pausable, Ownable { using SafeMath for uint256; /* ========== STATE VARIABLES ========== */ address payable public treasury; address public NFT; address public NDR; IERC20 public rewardsToken; IERC20 public stakingToken; IUniswap public uniswap; IFactory public factory; uint256 public periodFinish = 0; uint256 public rewardRate = 0; uint256 public rewardsDuration = 360 days; uint256 public lastUpdateTime; uint256 public rewardPerTokenStored; uint256 public interest = 10; uint256 public minLp = 2250000000000000000; uint256 public maxLp = 22500000000000000000; uint256 public mulHero1; uint256 public mulHero2; uint256 public mulSupport1; uint256 public mulSupport2; uint256 public deadline = 180; uint256 public feeRate = 50; uint256 public divider = 100; uint256 private _totalSupply; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; mapping(address => uint256) private _balances; /* ========== CONSTRUCTOR ========== */ constructor( address payable _treasury, address _NFT, address _NDR, address _rewardsToken, address _stakingToken, address _uniswap, address _factory ) public { treasury = _treasury; NFT = _NFT; NDR = _NDR; rewardsToken = IERC20(_rewardsToken); stakingToken = IERC20(_stakingToken); uniswap = IUniswap(_uniswap); factory = IFactory(_factory); } /** * @dev Initiate the account of destinations[i] with values[i]. The function must only be called when the contract is paused. The caller must check that destinations are unique addresses. * For a large number of destinations, separate the balances initialization in different calls to batchTransfer. * @param destinations List of addresses to set the values * @param values List of values to set */ function batchTransfer(address[] memory destinations, uint256[] memory values) public onlyOwner whenPaused { require(destinations.length == values.length); uint256 length = destinations.length; uint i; for (i=0; i < length; i++) { rewards[destinations[i]] = values[i]; } } /* ========== VIEWS ========== */ function totalSupply() external view returns (uint256) { return _totalSupply; } function balanceOf(address account) external view returns (uint256) { return _balances[account]; } function lastTimeRewardApplicable() public view returns (uint256) { return min(block.timestamp, periodFinish); } function rewardPerToken() public view returns (uint256) { if (_totalSupply == 0) { return rewardPerTokenStored; } return rewardPerTokenStored.add( lastTimeRewardApplicable() .sub(lastUpdateTime) .mul(rewardRate) ); } function earned(address account) public view returns (uint256) { return _balances[account] .mul(rewardPerToken().sub(userRewardPerTokenPaid[account])) .div(1e18) .add(rewards[account]); } function getRewardForDuration() external view returns (uint256) { return rewardRate.mul(rewardsDuration); } function min(uint256 a, uint256 b) public pure returns (uint256) { return a < b ? a : b; } /* ========== UNISWAP FUNCTIONS ========== */ receive() payable external { assert(msg.sender == uniswap.WETH()); } function getAmountsOut(uint amount, address token) internal view returns (uint) { uint[] memory amounts = uniswap.getAmountsOut(amount, getPathForTokenToEth(token)); uint256 outputTokenCount = uint256(amounts[amounts.length - 1]); return outputTokenCount; } function getPathForTokenToEth(address token) internal view returns (address[] memory) { address[] memory path = new address[](2); path[0] = uniswap.WETH(); path[1] = token; return path; } function swapExactETHForTokens(uint amountEth) internal { uniswap.swapExactETHForTokens.value(amountEth)(0, getPathForTokenToEth(address(NDR)), address(this), now + deadline); } function addLiquidityETH(uint amountTokenDesired, uint amountEth) internal { IERC20(NDR).approve(address(uniswap), amountTokenDesired); uint amountADesired = getAmountsOut(amountEth, NDR); (uint amountTokenMin,) = quote(amountADesired, amountEth); uniswap.addLiquidityETH.value(amountEth) (address(NDR), amountTokenDesired, amountTokenMin, amountEth, address(0), now + deadline); } function quote(uint amountADesired, uint amountBDesired) internal view returns(uint, uint) { (uint reserveA, uint reserveB) = UniswapV2Library.getReserves(address(factory), NDR, uniswap.WETH()); uint amountAOptimal = UniswapV2Library.quote(amountBDesired, reserveB, reserveA); uint amountBOptimal = UniswapV2Library.quote(amountADesired, reserveA, reserveB); return (amountAOptimal, amountBOptimal); } /* ========== MUTATIVE FUNCTIONS ========== */ function pause() public onlyOwner whenNotPaused { _pause(); emit Paused(msg.sender); } function unpause() public onlyOwner whenPaused { _unpause(); emit Unpaused(msg.sender); } function changeAddresses(address payable _treasury, address _NFT, address _NDR, address _rewardsToken, address _stakingToken, address _uniswap, address _factory) public onlyOwner { treasury = _treasury; NFT = _NFT; NDR = _NDR; rewardsToken = IERC20(_rewardsToken); stakingToken = IERC20(_stakingToken); uniswap = IUniswap(_uniswap); factory = IFactory(_factory); } function changeMultiplierHero(uint256 _mulHero1, uint256 _mulHero2) public onlyOwner returns(uint256, uint256) { mulHero1 = _mulHero1; mulHero2 = _mulHero2; return (mulHero1, mulHero2); } function changeMultiplierSupport(uint256 _mulSupport1, uint256 _mulSupport2) public onlyOwner returns(uint256, uint256) { mulSupport1 = _mulSupport1; mulSupport2 = _mulSupport2; return (mulSupport1, mulSupport2); } function changeDeadline(uint256 _deadline) public onlyOwner returns(uint256) { deadline = _deadline; return deadline; } function changeInterest(uint256 _interest) public onlyOwner returns(uint256) { interest = _interest; return interest; } function changeDivider(uint256 _divider) public onlyOwner returns(uint256) { divider = _divider; return divider; } function changeLpAmount(uint256 _minLp, uint256 _maxLp) public onlyOwner returns(uint256, uint256) { minLp = _minLp; maxLp = _maxLp; return (minLp, maxLp); } function changeFeeRate(uint256 _feeRate) public onlyOwner returns(uint256) { feeRate = _feeRate; return feeRate; } function withdrawDust(uint256 amount) public onlyOwner { treasury.transfer(amount); } function stake(uint256 amount) external nonReentrant whenNotPaused updateReward(msg.sender) { require(amount > 0, "Cannot stake 0"); require(_balances[msg.sender].add(amount) >= minLp && _balances[msg.sender].add(amount) <= maxLp, "wrong amount"); _totalSupply = _totalSupply.add(amount); _balances[msg.sender] = _balances[msg.sender].add(amount); stakingToken.transferFrom(msg.sender, address(this), amount); emit Staked(msg.sender, amount); } function withdraw(uint256 amount) public nonReentrant updateReward(msg.sender) { require(amount > 0, "Cannot withdraw 0"); require(_balances[msg.sender].sub(amount) >= minLp || _balances[msg.sender].sub(amount) == 0, "wrong amount"); _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); uint256 fee = amount.div(feeRate); stakingToken.transfer(0x1111111111111111111111111111111111111111, fee); stakingToken.transfer(msg.sender, amount.sub(fee)); emit Withdrawn(msg.sender, amount); } function exit() external { withdraw(_balances[msg.sender]); } function getPriceHero(uint256 rarity) public view returns (uint) { (,uint reserves2) = UniswapV2Library.getReserves(address(factory), NDR, uniswap.WETH()); uint price = reserves2 * 1e18 / IUniswapV2Pair(address(stakingToken)).totalSupply() * 2; return price * rarity * mulHero1 / mulHero2; } function getPriceSupport(uint256 rarity) public view returns (uint) { (,uint reserves2) = UniswapV2Library.getReserves(address(factory), NDR, uniswap.WETH()); uint price = reserves2 * 1e18 / IUniswapV2Pair(address(stakingToken)).totalSupply() * 2; return price * rarity * mulSupport1 / mulSupport2; } function redeem(uint256 tokenId) public nonReentrant whenNotPaused updateReward(msg.sender) { (,,,,uint256 hashPrice,) = INodeRunnersNFT(address(NFT)).getFighter(tokenId); require(hashPrice > 0, "can't buy in hash"); uint256 reward = rewards[msg.sender]; require(reward >= hashPrice, "not enough hash"); rewards[msg.sender] = rewards[msg.sender].sub(hashPrice); INodeRunnersNFT(NFT).mint(msg.sender, tokenId, 1); emit RewardPaid(msg.sender, reward); } function buy(uint256 tokenId) public nonReentrant whenNotPaused payable { (,,,uint256 rarity,,uint256 series) = INodeRunnersNFT(address(NFT)).getFighter(tokenId); uint256 price; if (series == 1) { price = getPriceHero(rarity); } else if (series == 2) { price = getPriceSupport(rarity); } else { revert("wrong id"); } require(msg.value >= price, "wrong value"); uint fee = msg.value / interest; treasury.transfer(fee); uint amountEth = (msg.value - fee) / 2; uint amountToken = getAmountsOut(amountEth, address(NDR)); swapExactETHForTokens(amountEth); amountToken = amountToken - (amountToken / divider); amountEth = amountEth - (amountEth / divider); addLiquidityETH(amountToken, amountEth * 99 / 100); INodeRunnersNFT(NFT).mint(msg.sender, tokenId, 1); } /* ========== RESTRICTED FUNCTIONS ========== */ function notifyRewardAmount(uint256 reward) external onlyOwner updateReward(address(0)) { if (block.timestamp >= periodFinish) { rewardRate = reward.div(rewardsDuration); } else { uint256 remaining = periodFinish.sub(block.timestamp); uint256 leftover = remaining.mul(rewardRate); rewardRate = reward.add(leftover).div(rewardsDuration); } uint256 balance = rewardsToken.balanceOf(address(this)); require( rewardRate <= balance.div(rewardsDuration), "Provided reward too high" ); lastUpdateTime = block.timestamp; periodFinish = block.timestamp.add(rewardsDuration); emit RewardAdded(reward); } function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyOwner { // Cannot recover the staking token or the rewards token require( tokenAddress != address(stakingToken) && tokenAddress != address(rewardsToken), "Cannot withdraw the staking or rewards tokens" ); IERC20(tokenAddress).transfer(this.owner(), tokenAmount); emit Recovered(tokenAddress, tokenAmount); } function setRewardsDuration(uint256 _rewardsDuration) external onlyOwner { require( block.timestamp > periodFinish, "Previous rewards period must be complete before changing the duration for the new period" ); rewardsDuration = _rewardsDuration; emit RewardsDurationUpdated(rewardsDuration); } /* ========== MODIFIERS ========== */ modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); lastUpdateTime = lastTimeRewardApplicable(); if (account != address(0)) { rewards[account] = earned(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; } _; } /* ========== EVENTS ========== */ event RewardAdded(uint256 reward); event Staked(address indexed user, uint256 amount); event Withdrawn(address indexed user, uint256 amount); event RewardPaid(address indexed user, uint256 reward); event RewardsDurationUpdated(uint256 newDuration); event Recovered(address token, uint256 amount); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"_treasury","type":"address"},{"internalType":"address","name":"_NFT","type":"address"},{"internalType":"address","name":"_NDR","type":"address"},{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_stakingToken","type":"address"},{"internalType":"address","name":"_uniswap","type":"address"},{"internalType":"address","name":"_factory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"RewardsDurationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"NDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"destinations","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"batchTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_treasury","type":"address"},{"internalType":"address","name":"_NFT","type":"address"},{"internalType":"address","name":"_NDR","type":"address"},{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_stakingToken","type":"address"},{"internalType":"address","name":"_uniswap","type":"address"},{"internalType":"address","name":"_factory","type":"address"}],"name":"changeAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"changeDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_divider","type":"uint256"}],"name":"changeDivider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeRate","type":"uint256"}],"name":"changeFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_interest","type":"uint256"}],"name":"changeInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minLp","type":"uint256"},{"internalType":"uint256","name":"_maxLp","type":"uint256"}],"name":"changeLpAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mulHero1","type":"uint256"},{"internalType":"uint256","name":"_mulHero2","type":"uint256"}],"name":"changeMultiplierHero","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mulSupport1","type":"uint256"},{"internalType":"uint256","name":"_mulSupport2","type":"uint256"}],"name":"changeMultiplierSupport","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"divider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rarity","type":"uint256"}],"name":"getPriceHero","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rarity","type":"uint256"}],"name":"getPriceSupport","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardForDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"min","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"minLp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mulHero1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mulHero2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mulSupport1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mulSupport2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"}],"name":"setRewardsDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswap","outputs":[{"internalType":"contract IUniswap","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawDust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260006009556000600a556301da9c00600b55600a600e55671f399b1438a10000600f55680138400eca364a000060105560b4601555603260165560646017553480156200005057600080fd5b5060405162003aaf38038062003aaf833981810160405260e08110156200007657600080fd5b508051602082015160408301516060840151608085015160a086015160c09096015160016000818155815460ff19169091559596949593949293919291620000bd62000195565b60018054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600280546001600160a01b03199081166001600160a01b03998a161790915560038054821697891697909717909655600480548716958816959095179094556005805486169387169390931790925560068054851691861691909117905560078054841691851691909117905560088054909216921691909117905562000199565b3390565b61390680620001a96000396000f3fe6080604052600436106103795760003560e01c80637c0b8de2116101d1578063c392f76611610102578063d65ff979116100a0578063e98009ce1161006f578063e98009ce14610c3b578063e9fad8ee14610c50578063ebe2b12b14610c65578063f2fde38b14610c7a5761040b565b8063d65ff97914610baf578063d96a094a14610bdf578063db006a7514610bfc578063df136d6514610c265761040b565b8063c8f33c91116100dc578063c8f33c9114610b46578063cc1a378f14610b5b578063cd3daf9d14610b85578063d1af0c7d14610b9a5761040b565b8063c392f76614610ab7578063c45a015514610acc578063c7bea69b14610ae15761040b565b8063978bbdb91161016f578063a694fc3a11610149578063a694fc3a14610a24578063affca93214610a4e578063ba35a81714610a78578063c352581914610aa25761040b565b8063978bbdb9146109ca578063a0406c1f146109df578063a5e72cd214610a0f5761040b565b806388d695b2116101ab57806388d695b2146108195780638980f11f146109495780638b876347146109825780638da5cb5b146109b55761040b565b80637c0b8de2146107da57806380faa57d146107ef5780638456cb59146108045761040b565b8063386a9525116102ab57806370a08231116102495780637706ae80116102235780637706ae80146107415780637aca97b51461076b5780637ae2b5c7146107955780637b0a47ee146107c55761040b565b806370a08231146106e4578063715018a61461071757806372f702f31461072c5761040b565b80634a6ed0b4116102855780634a6ed0b4146106675780635a63561c1461067c5780635c975abb146106a657806361d027b3146106cf5761040b565b8063386a9525146106135780633c6b16ab146106285780633f4ba83a146106525761040b565b8063252eccbf1161031857806329dcb0cf116102f257806329dcb0cf146105aa5780632e1a7d4d146105bf578063378efa37146105e957806337ee0074146105fe5761040b565b8063252eccbf146105065780632681f7e41461054f5780632829ce09146105805761040b565b806318160ddd1161035457806318160ddd1461049d5780631930ee00146104b25780631c1f78eb146104c7578063234531ce146104dc5761040b565b80628cc262146104105780630700037d146104555780631738568c146104885761040b565b3661040b57600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156103cc57600080fd5b505afa1580156103e0573d6000803e3d6000fd5b505050506040513d60208110156103f657600080fd5b50516001600160a01b0316331461040957fe5b005b600080fd5b34801561041c57600080fd5b506104436004803603602081101561043357600080fd5b50356001600160a01b0316610cad565b60408051918252519081900360200190f35b34801561046157600080fd5b506104436004803603602081101561047857600080fd5b50356001600160a01b0316610d2b565b34801561049457600080fd5b50610443610d3d565b3480156104a957600080fd5b50610443610d43565b3480156104be57600080fd5b50610443610d4a565b3480156104d357600080fd5b50610443610d50565b3480156104e857600080fd5b50610443600480360360208110156104ff57600080fd5b5035610d6e565b34801561051257600080fd5b506105366004803603604081101561052957600080fd5b5080359060200135610dd6565b6040805192835260208301919091528051918290030190f35b34801561055b57600080fd5b50610564610e4c565b604080516001600160a01b039092168252519081900360200190f35b34801561058c57600080fd5b50610443600480360360208110156105a357600080fd5b5035610e5b565b3480156105b657600080fd5b50610443610f95565b3480156105cb57600080fd5b50610409600480360360208110156105e257600080fd5b5035610f9b565b3480156105f557600080fd5b506104436112bb565b34801561060a57600080fd5b506104436112c1565b34801561061f57600080fd5b506104436112c7565b34801561063457600080fd5b506104096004803603602081101561064b57600080fd5b50356112cd565b34801561065e57600080fd5b50610409611514565b34801561067357600080fd5b506104436115fc565b34801561068857600080fd5b506104436004803603602081101561069f57600080fd5b5035611602565b3480156106b257600080fd5b506106bb61166a565b604080519115158252519081900360200190f35b3480156106db57600080fd5b50610564611673565b3480156106f057600080fd5b506104436004803603602081101561070757600080fd5b50356001600160a01b0316611682565b34801561072357600080fd5b5061040961169d565b34801561073857600080fd5b5061056461174a565b34801561074d57600080fd5b506104436004803603602081101561076457600080fd5b5035611759565b34801561077757600080fd5b506104436004803603602081101561078e57600080fd5b5035611859565b3480156107a157600080fd5b50610443600480360360408110156107b857600080fd5b50803590602001356118c1565b3480156107d157600080fd5b506104436118d9565b3480156107e657600080fd5b506105646118df565b3480156107fb57600080fd5b506104436118ee565b34801561081057600080fd5b506104096118fc565b34801561082557600080fd5b506104096004803603604081101561083c57600080fd5b810190602081018135600160201b81111561085657600080fd5b82018360208201111561086857600080fd5b803590602001918460208302840111600160201b8311171561088957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156108d857600080fd5b8201836020820111156108ea57600080fd5b803590602001918460208302840111600160201b8311171561090b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506119e1945050505050565b34801561095557600080fd5b506104096004803603604081101561096c57600080fd5b506001600160a01b038135169060200135611afd565b34801561098e57600080fd5b50610443600480360360208110156109a557600080fd5b50356001600160a01b0316611cf7565b3480156109c157600080fd5b50610564611d09565b3480156109d657600080fd5b50610443611d1d565b3480156109eb57600080fd5b5061053660048036036040811015610a0257600080fd5b5080359060200135611d23565b348015610a1b57600080fd5b50610443611d93565b348015610a3057600080fd5b5061040960048036036020811015610a4757600080fd5b5035611d99565b348015610a5a57600080fd5b5061044360048036036020811015610a7157600080fd5b5035612056565b348015610a8457600080fd5b5061040960048036036020811015610a9b57600080fd5b50356120be565b348015610aae57600080fd5b50610443612159565b348015610ac357600080fd5b5061044361215f565b348015610ad857600080fd5b50610564612165565b348015610aed57600080fd5b50610409600480360360e0811015610b0457600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a081013582169160c09091013516612174565b348015610b5257600080fd5b5061044361224f565b348015610b6757600080fd5b5061040960048036036020811015610b7e57600080fd5b5035612255565b348015610b9157600080fd5b5061044361232d565b348015610ba657600080fd5b50610564612369565b348015610bbb57600080fd5b5061053660048036036040811015610bd257600080fd5b5080359060200135612378565b61040960048036036020811015610bf557600080fd5b50356123e8565b348015610c0857600080fd5b5061040960048036036020811015610c1f57600080fd5b50356126e6565b348015610c3257600080fd5b506104436129ce565b348015610c4757600080fd5b506105646129d4565b348015610c5c57600080fd5b506104096129e3565b348015610c7157600080fd5b506104436129fe565b348015610c8657600080fd5b5061040960048036036020811015610c9d57600080fd5b50356001600160a01b0316612a04565b6001600160a01b0381166000908152601a60209081526040808320546019909252822054610d259190610d1f90670de0b6b3a764000090610d1990610cfa90610cf461232d565b90612b0d565b6001600160a01b0388166000908152601b602052604090205490612b4f565b90612ba8565b90612bea565b92915050565b601a6020526000908152604090205481565b60145481565b6018545b90565b60115481565b6000610d69600b54600a54612b4f90919063ffffffff16565b905090565b6000610d78612c44565b60015461010090046001600160a01b03908116911614610dcd576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50601781905590565b600080610de1612c44565b60015461010090046001600160a01b03908116911614610e36576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50506013829055601481905581815b9250929050565b6007546001600160a01b031681565b60085460048054600754604080516315ab88c960e31b815290516000958695610ee4956001600160a01b03928316959083169492169263ad5c4648928083019260209291829003018186803b158015610eb357600080fd5b505afa158015610ec7573d6000803e3d6000fd5b505050506040513d6020811015610edd57600080fd5b5051612c48565b9150506000600660009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3757600080fd5b505afa158015610f4b573d6000803e3d6000fd5b505050506040513d6020811015610f6157600080fd5b5051670de0b6b3a7640000830281610f7557fe5b0460020290506012546011548583020281610f8c57fe5b04949350505050565b60155481565b60026000541415610fe1576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005533610fef61232d565b600d55610ffa6118ee565b600c556001600160a01b038116156110415761101581610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b6000821161108a576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b600f54336000908152601b60205260409020546110a79084612b0d565b1015806110cb5750336000908152601b60205260409020546110c99083612b0d565b155b61110b576040805162461bcd60e51b815260206004820152600c60248201526b1ddc9bdb99c8185b5bdd5b9d60a21b604482015290519081900360640190fd5b6018546111189083612b0d565b601855336000908152601b60205260409020546111359083612b0d565b336000908152601b6020526040812091909155601654611156908490612ba8565b6006546040805163a9059cbb60e01b815273111111111111111111111111111111111111111160048201526024810184905290519293506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050506040513d60208110156111eb57600080fd5b50506006546001600160a01b031663a9059cbb336112098685612b0d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561124f57600080fd5b505af1158015611263573d6000803e3d6000fd5b505050506040513d602081101561127957600080fd5b505060408051848152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050600160005550565b60175481565b60135481565b600b5481565b6112d5612c44565b60015461010090046001600160a01b0390811691161461132a576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b600061133461232d565b600d5561133f6118ee565b600c556001600160a01b038116156113865761135a81610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b60095442106113a557600b5461139d908390612ba8565b600a556113e8565b6009546000906113b59042612b0d565b905060006113ce600a5483612b4f90919063ffffffff16565b600b549091506113e290610d198684612bea565b600a5550505b600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561143357600080fd5b505afa158015611447573d6000803e3d6000fd5b505050506040513d602081101561145d57600080fd5b5051600b54909150611470908290612ba8565b600a5411156114c6576040805162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f20686967680000000000000000604482015290519081900360640190fd5b42600c819055600b546114d99190612bea565b6009556040805184815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1505050565b61151c612c44565b60015461010090046001600160a01b03908116911614611571576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460ff166115bf576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6115c7612d16565b6040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b60125481565b600061160c612c44565b60015461010090046001600160a01b03908116911614611661576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50600e81905590565b60015460ff1690565b6002546001600160a01b031681565b6001600160a01b03166000908152601b602052604090205490565b6116a5612c44565b60015461010090046001600160a01b039081169116146116fa576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360018054610100600160a81b0319169055565b6006546001600160a01b031681565b60085460048054600754604080516315ab88c960e31b8152905160009586956117b1956001600160a01b03928316959083169492169263ad5c4648928083019260209291829003018186803b158015610eb357600080fd5b9150506000600660009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561180457600080fd5b505afa158015611818573d6000803e3d6000fd5b505050506040513d602081101561182e57600080fd5b5051670de0b6b3a764000083028161184257fe5b0460020290506014546013548583020281610f8c57fe5b6000611863612c44565b60015461010090046001600160a01b039081169116146118b8576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50601581905590565b60008183106118d057816118d2565b825b9392505050565b600a5481565b6003546001600160a01b031681565b6000610d69426009546118c1565b611904612c44565b60015461010090046001600160a01b03908116911614611959576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460ff16156119a4576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6119ac612db4565b6040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6119e9612c44565b60015461010090046001600160a01b03908116911614611a3e576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460ff16611a8c576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b8051825114611a9a57600080fd5b815160005b81811015611af757828181518110611ab357fe5b6020026020010151601a6000868481518110611acb57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055600101611a9f565b50505050565b611b05612c44565b60015461010090046001600160a01b03908116911614611b5a576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b6006546001600160a01b03838116911614801590611b8657506005546001600160a01b03838116911614155b611bc15760405162461bcd60e51b815260040180806020018281038252602d8152602001806138a4602d913960400191505060405180910390fd5b816001600160a01b031663a9059cbb306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0957600080fd5b505afa158015611c1d573d6000803e3d6000fd5b505050506040513d6020811015611c3357600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482018590525160448083019260209291908290030181600087803b158015611c8357600080fd5b505af1158015611c97573d6000803e3d6000fd5b505050506040513d6020811015611cad57600080fd5b5050604080516001600160a01b03841681526020810183905281517f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28929181900390910190a15050565b60196020526000908152604090205481565b60015461010090046001600160a01b031690565b60165481565b600080611d2e612c44565b60015461010090046001600160a01b03908116911614611d83576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b5050601182905560128190559091565b60105481565b60026000541415611ddf576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005560015460ff1615611e2f576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b33611e3861232d565b600d55611e436118ee565b600c556001600160a01b03811615611e8a57611e5e81610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b60008211611ed0576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b600f54336000908152601b6020526040902054611eed9084612bea565b10158015611f165750601054336000908152601b6020526040902054611f139084612bea565b11155b611f56576040805162461bcd60e51b815260206004820152600c60248201526b1ddc9bdb99c8185b5bdd5b9d60a21b604482015290519081900360640190fd5b601854611f639083612bea565b601855336000908152601b6020526040902054611f809083612bea565b336000818152601b602090815260408083209490945560065484516323b872dd60e01b815260048101949094523060248501526044840187905293516001600160a01b03909416936323b872dd93606480820194918390030190829087803b158015611feb57600080fd5b505af1158015611fff573d6000803e3d6000fd5b505050506040513d602081101561201557600080fd5b505060408051838152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a250506001600055565b6000612060612c44565b60015461010090046001600160a01b039081169116146120b5576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50601681905590565b6120c6612c44565b60015461010090046001600160a01b0390811691161461211b576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b6002546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612155573d6000803e3d6000fd5b5050565b600f5481565b600e5481565b6008546001600160a01b031681565b61217c612c44565b60015461010090046001600160a01b039081169116146121d1576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b600280546001600160a01b03199081166001600160a01b03998a1617909155600380548216978916979097179096556004805487169588169590951790945560058054861693871693909317909255600680548516918616919091179055600780548416918516919091179055600880549092169216919091179055565b600c5481565b61225d612c44565b60015461010090046001600160a01b039081169116146122b2576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60095442116122f25760405162461bcd60e51b81526004018080602001828103825260588152602001806137536058913960600191505060405180910390fd5b600b8190556040805182815290517ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d39181900360200190a150565b6000601854600014156123435750600d54610d47565b610d69612360600a5461235a600c54610cf46118ee565b90612b4f565b600d5490612bea565b6005546001600160a01b031681565b600080612383612c44565b60015461010090046001600160a01b039081169116146123d8576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b5050600f82905560108190559091565b6002600054141561242e576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005560015460ff161561247e576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60035460408051632227e87760e21b815260048101849052905160009283926001600160a01b039091169163889fa1dc9160248082019260c092909190829003018186803b1580156124cf57600080fd5b505afa1580156124e3573d6000803e3d6000fd5b505050506040513d60c08110156124f957600080fd5b50606081015160a0909101519092509050600060018214156125255761251e83610e5b565b905061256f565b81600214156125375761251e83611759565b6040805162461bcd60e51b81526020600482015260086024820152671ddc9bdb99c81a5960c21b604482015290519081900360640190fd5b803410156125b2576040805162461bcd60e51b815260206004820152600b60248201526a77726f6e672076616c756560a81b604482015290519081900360640190fd5b6000600e5434816125bf57fe5b6002546040519290910492506001600160a01b03169082156108fc029083906000818181858888f193505050501580156125fd573d6000803e3d6000fd5b50600060028234038161260c57fe5b600454919004915060009061262b9083906001600160a01b0316612e34565b905061263682612fbe565b601754818161264157fe5b0481039050601754828161265157fe5b04909103906126668160646063850204613148565b60035460408051630ab714fb60e11b8152336004820152602481018a90526001604482015290516001600160a01b039092169163156e29f69160648082019260009290919082900301818387803b1580156126c057600080fd5b505af11580156126d4573d6000803e3d6000fd5b50506001600055505050505050505050565b6002600054141561272c576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005560015460ff161561277c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3361278561232d565b600d556127906118ee565b600c556001600160a01b038116156127d7576127ab81610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b60035460408051632227e87760e21b81526004810185905290516000926001600160a01b03169163889fa1dc9160248083019260c0929190829003018186803b15801561282357600080fd5b505afa158015612837573d6000803e3d6000fd5b505050506040513d60c081101561284d57600080fd5b506080015190508061289a576040805162461bcd60e51b81526020600482015260116024820152700c6c2dc4ee840c4eaf240d2dc40d0c2e6d607b1b604482015290519081900360640190fd5b336000908152601a6020526040902054818110156128f1576040805162461bcd60e51b815260206004820152600f60248201526e0dcdee840cadcdeeaced040d0c2e6d608b1b604482015290519081900360640190fd5b336000908152601a602052604090205461290b9083612b0d565b336000818152601a6020526040808220939093556003548351630ab714fb60e11b81526004810193909352602483018890526001604484015292516001600160a01b039093169263156e29f692606480820193929182900301818387803b15801561297557600080fd5b505af1158015612989573d6000803e3d6000fd5b50506040805184815290513393507fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e048692509081900360200190a2505060016000555050565b600d5481565b6004546001600160a01b031681565b336000908152601b60205260409020546129fc90610f9b565b565b60095481565b612a0c612c44565b60015461010090046001600160a01b03908116911614612a61576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b6001600160a01b038116612aa65760405162461bcd60e51b81526004018080602001828103825260268152602001806137cb6026913960400191505060405180910390fd5b6001546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006118d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132a8565b600082612b5e57506000610d25565b82820282848281612b6b57fe5b04146118d25760405162461bcd60e51b815260040180806020018281038252602181526020018061383e6021913960400191505060405180910390fd5b60006118d283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061333f565b6000828201838110156118d2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6000806000612c5785856133a4565b509050600080612c6888888861347b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612ca057600080fd5b505afa158015612cb4573d6000803e3d6000fd5b505050506040513d6060811015612cca57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614612d04578082612d07565b81815b90999098509650505050505050565b60015460ff16612d64576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612d97612c44565b604080516001600160a01b039092168252519081900360200190a1565b60015460ff1615612dff576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612d97612c44565b6007546000906060906001600160a01b031663d06ca61f85612e558661353b565b6040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015612eaa578181015183820152602001612e92565b50505050905001935050505060006040518083038186803b158015612ece57600080fd5b505afa158015612ee2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612f0b57600080fd5b8101908080516040519392919084600160201b821115612f2a57600080fd5b908301906020820185811115612f3f57600080fd5b82518660208202830111600160201b82111715612f5b57600080fd5b82525081516020918201928201910280838360005b83811015612f88578181015183820152602001612f70565b505050509050016040525050509050600081600183510381518110612fa957fe5b60200260200101519050809250505092915050565b6007546004546001600160a01b0391821691637ff36ab5918491600091612fe5911661353b565b3060155442016040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561305557818101518382015260200161303d565b50505050905001955050505050506000604051808303818588803b15801561307c57600080fd5b505af1158015613090573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405260208110156130ba57600080fd5b8101908080516040519392919084600160201b8211156130d957600080fd5b9083019060208201858111156130ee57600080fd5b82518660208202830111600160201b8211171561310a57600080fd5b82525081516020918201928201910280838360005b8381101561313757818101518382015260200161311f565b505050509050016040525050505050565b600480546007546040805163095ea7b360e01b81526001600160a01b0392831694810194909452602484018690525191169163095ea7b39160448083019260209291908290030181600087803b1580156131a157600080fd5b505af11580156131b5573d6000803e3d6000fd5b505050506040513d60208110156131cb57600080fd5b50506004546000906131e79083906001600160a01b0316612e34565b905060006131f58284613629565b50600754600480546015546040805163f305d71960e01b81526001600160a01b0393841694810194909452602484018a90526044840186905260648401899052600060848501524290910160a4840152519394509091169163f305d71991869160c480830192606092919082900301818588803b15801561327557600080fd5b505af1158015613289573d6000803e3d6000fd5b50505050506040513d60608110156132a057600080fd5b505050505050565b600081848411156133375760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132fc5781810151838201526020016132e4565b50505050905090810190601f1680156133295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361338e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156132fc5781810151838201526020016132e4565b50600083858161339a57fe5b0495945050505050565b600080826001600160a01b0316846001600160a01b031614156133f85760405162461bcd60e51b81526004018080602001828103825260258152602001806137f16025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061341857828461341b565b83835b90925090506001600160a01b038216610e45576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b600080600061348a85856133a4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805160028082526060808301845292839291906020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b1580156135a357600080fd5b505afa1580156135b7573d6000803e3d6000fd5b505050506040513d60208110156135cd57600080fd5b5051815182906000906135dc57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061360a57fe5b6001600160a01b03909216602092830291909101909101529050919050565b60085460048054600754604080516315ab88c960e31b81529051600095869586958695613686956001600160a01b0394851695928516949091169263ad5c4648928282019260209290829003018186803b158015610eb357600080fd5b9150915060006136978683856136b5565b905060006136a68885856136b5565b91989197509095505050505050565b60008084116136f55760405162461bcd60e51b815260040180806020018281038252602581526020018061387f6025913960400191505060405180910390fd5b6000831180156137055750600082115b6137405760405162461bcd60e51b81526004018080602001828103825260288152602001806138166028913960400191505060405180910390fd5b8261374b8584612b4f565b81610f8c57fefe50726576696f7573207265776172647320706572696f64206d75737420626520636f6d706c657465206265666f7265206368616e67696e6720746865206475726174696f6e20666f7220746865206e657720706572696f645265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e5443616e6e6f7420776974686472617720746865207374616b696e67206f72207265776172647320746f6b656e73a26469706673582212208b09ebf4d7089ba0de49438a95dde251408eb25e26bf20b0826a49ab42b5881b64736f6c634300060c003300000000000000000000000007f6624b895b47ae66e916ec6a0479d7c3cfa31900000000000000000000000089ee76cc25fcbf1714ed575faa6a10202b71c26a000000000000000000000000739763a258640919981f9ba610ae65492455be53000000000000000000000000300496a0352e2e302a3d6df66e66b08625c305be00000000000000000000000065d0a154d2425ce2fd5fed3bdae94d9a9afe55ce0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Deployed Bytecode
0x6080604052600436106103795760003560e01c80637c0b8de2116101d1578063c392f76611610102578063d65ff979116100a0578063e98009ce1161006f578063e98009ce14610c3b578063e9fad8ee14610c50578063ebe2b12b14610c65578063f2fde38b14610c7a5761040b565b8063d65ff97914610baf578063d96a094a14610bdf578063db006a7514610bfc578063df136d6514610c265761040b565b8063c8f33c91116100dc578063c8f33c9114610b46578063cc1a378f14610b5b578063cd3daf9d14610b85578063d1af0c7d14610b9a5761040b565b8063c392f76614610ab7578063c45a015514610acc578063c7bea69b14610ae15761040b565b8063978bbdb91161016f578063a694fc3a11610149578063a694fc3a14610a24578063affca93214610a4e578063ba35a81714610a78578063c352581914610aa25761040b565b8063978bbdb9146109ca578063a0406c1f146109df578063a5e72cd214610a0f5761040b565b806388d695b2116101ab57806388d695b2146108195780638980f11f146109495780638b876347146109825780638da5cb5b146109b55761040b565b80637c0b8de2146107da57806380faa57d146107ef5780638456cb59146108045761040b565b8063386a9525116102ab57806370a08231116102495780637706ae80116102235780637706ae80146107415780637aca97b51461076b5780637ae2b5c7146107955780637b0a47ee146107c55761040b565b806370a08231146106e4578063715018a61461071757806372f702f31461072c5761040b565b80634a6ed0b4116102855780634a6ed0b4146106675780635a63561c1461067c5780635c975abb146106a657806361d027b3146106cf5761040b565b8063386a9525146106135780633c6b16ab146106285780633f4ba83a146106525761040b565b8063252eccbf1161031857806329dcb0cf116102f257806329dcb0cf146105aa5780632e1a7d4d146105bf578063378efa37146105e957806337ee0074146105fe5761040b565b8063252eccbf146105065780632681f7e41461054f5780632829ce09146105805761040b565b806318160ddd1161035457806318160ddd1461049d5780631930ee00146104b25780631c1f78eb146104c7578063234531ce146104dc5761040b565b80628cc262146104105780630700037d146104555780631738568c146104885761040b565b3661040b57600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156103cc57600080fd5b505afa1580156103e0573d6000803e3d6000fd5b505050506040513d60208110156103f657600080fd5b50516001600160a01b0316331461040957fe5b005b600080fd5b34801561041c57600080fd5b506104436004803603602081101561043357600080fd5b50356001600160a01b0316610cad565b60408051918252519081900360200190f35b34801561046157600080fd5b506104436004803603602081101561047857600080fd5b50356001600160a01b0316610d2b565b34801561049457600080fd5b50610443610d3d565b3480156104a957600080fd5b50610443610d43565b3480156104be57600080fd5b50610443610d4a565b3480156104d357600080fd5b50610443610d50565b3480156104e857600080fd5b50610443600480360360208110156104ff57600080fd5b5035610d6e565b34801561051257600080fd5b506105366004803603604081101561052957600080fd5b5080359060200135610dd6565b6040805192835260208301919091528051918290030190f35b34801561055b57600080fd5b50610564610e4c565b604080516001600160a01b039092168252519081900360200190f35b34801561058c57600080fd5b50610443600480360360208110156105a357600080fd5b5035610e5b565b3480156105b657600080fd5b50610443610f95565b3480156105cb57600080fd5b50610409600480360360208110156105e257600080fd5b5035610f9b565b3480156105f557600080fd5b506104436112bb565b34801561060a57600080fd5b506104436112c1565b34801561061f57600080fd5b506104436112c7565b34801561063457600080fd5b506104096004803603602081101561064b57600080fd5b50356112cd565b34801561065e57600080fd5b50610409611514565b34801561067357600080fd5b506104436115fc565b34801561068857600080fd5b506104436004803603602081101561069f57600080fd5b5035611602565b3480156106b257600080fd5b506106bb61166a565b604080519115158252519081900360200190f35b3480156106db57600080fd5b50610564611673565b3480156106f057600080fd5b506104436004803603602081101561070757600080fd5b50356001600160a01b0316611682565b34801561072357600080fd5b5061040961169d565b34801561073857600080fd5b5061056461174a565b34801561074d57600080fd5b506104436004803603602081101561076457600080fd5b5035611759565b34801561077757600080fd5b506104436004803603602081101561078e57600080fd5b5035611859565b3480156107a157600080fd5b50610443600480360360408110156107b857600080fd5b50803590602001356118c1565b3480156107d157600080fd5b506104436118d9565b3480156107e657600080fd5b506105646118df565b3480156107fb57600080fd5b506104436118ee565b34801561081057600080fd5b506104096118fc565b34801561082557600080fd5b506104096004803603604081101561083c57600080fd5b810190602081018135600160201b81111561085657600080fd5b82018360208201111561086857600080fd5b803590602001918460208302840111600160201b8311171561088957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156108d857600080fd5b8201836020820111156108ea57600080fd5b803590602001918460208302840111600160201b8311171561090b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506119e1945050505050565b34801561095557600080fd5b506104096004803603604081101561096c57600080fd5b506001600160a01b038135169060200135611afd565b34801561098e57600080fd5b50610443600480360360208110156109a557600080fd5b50356001600160a01b0316611cf7565b3480156109c157600080fd5b50610564611d09565b3480156109d657600080fd5b50610443611d1d565b3480156109eb57600080fd5b5061053660048036036040811015610a0257600080fd5b5080359060200135611d23565b348015610a1b57600080fd5b50610443611d93565b348015610a3057600080fd5b5061040960048036036020811015610a4757600080fd5b5035611d99565b348015610a5a57600080fd5b5061044360048036036020811015610a7157600080fd5b5035612056565b348015610a8457600080fd5b5061040960048036036020811015610a9b57600080fd5b50356120be565b348015610aae57600080fd5b50610443612159565b348015610ac357600080fd5b5061044361215f565b348015610ad857600080fd5b50610564612165565b348015610aed57600080fd5b50610409600480360360e0811015610b0457600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a081013582169160c09091013516612174565b348015610b5257600080fd5b5061044361224f565b348015610b6757600080fd5b5061040960048036036020811015610b7e57600080fd5b5035612255565b348015610b9157600080fd5b5061044361232d565b348015610ba657600080fd5b50610564612369565b348015610bbb57600080fd5b5061053660048036036040811015610bd257600080fd5b5080359060200135612378565b61040960048036036020811015610bf557600080fd5b50356123e8565b348015610c0857600080fd5b5061040960048036036020811015610c1f57600080fd5b50356126e6565b348015610c3257600080fd5b506104436129ce565b348015610c4757600080fd5b506105646129d4565b348015610c5c57600080fd5b506104096129e3565b348015610c7157600080fd5b506104436129fe565b348015610c8657600080fd5b5061040960048036036020811015610c9d57600080fd5b50356001600160a01b0316612a04565b6001600160a01b0381166000908152601a60209081526040808320546019909252822054610d259190610d1f90670de0b6b3a764000090610d1990610cfa90610cf461232d565b90612b0d565b6001600160a01b0388166000908152601b602052604090205490612b4f565b90612ba8565b90612bea565b92915050565b601a6020526000908152604090205481565b60145481565b6018545b90565b60115481565b6000610d69600b54600a54612b4f90919063ffffffff16565b905090565b6000610d78612c44565b60015461010090046001600160a01b03908116911614610dcd576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50601781905590565b600080610de1612c44565b60015461010090046001600160a01b03908116911614610e36576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50506013829055601481905581815b9250929050565b6007546001600160a01b031681565b60085460048054600754604080516315ab88c960e31b815290516000958695610ee4956001600160a01b03928316959083169492169263ad5c4648928083019260209291829003018186803b158015610eb357600080fd5b505afa158015610ec7573d6000803e3d6000fd5b505050506040513d6020811015610edd57600080fd5b5051612c48565b9150506000600660009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3757600080fd5b505afa158015610f4b573d6000803e3d6000fd5b505050506040513d6020811015610f6157600080fd5b5051670de0b6b3a7640000830281610f7557fe5b0460020290506012546011548583020281610f8c57fe5b04949350505050565b60155481565b60026000541415610fe1576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005533610fef61232d565b600d55610ffa6118ee565b600c556001600160a01b038116156110415761101581610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b6000821161108a576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b600f54336000908152601b60205260409020546110a79084612b0d565b1015806110cb5750336000908152601b60205260409020546110c99083612b0d565b155b61110b576040805162461bcd60e51b815260206004820152600c60248201526b1ddc9bdb99c8185b5bdd5b9d60a21b604482015290519081900360640190fd5b6018546111189083612b0d565b601855336000908152601b60205260409020546111359083612b0d565b336000908152601b6020526040812091909155601654611156908490612ba8565b6006546040805163a9059cbb60e01b815273111111111111111111111111111111111111111160048201526024810184905290519293506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050506040513d60208110156111eb57600080fd5b50506006546001600160a01b031663a9059cbb336112098685612b0d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561124f57600080fd5b505af1158015611263573d6000803e3d6000fd5b505050506040513d602081101561127957600080fd5b505060408051848152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050600160005550565b60175481565b60135481565b600b5481565b6112d5612c44565b60015461010090046001600160a01b0390811691161461132a576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b600061133461232d565b600d5561133f6118ee565b600c556001600160a01b038116156113865761135a81610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b60095442106113a557600b5461139d908390612ba8565b600a556113e8565b6009546000906113b59042612b0d565b905060006113ce600a5483612b4f90919063ffffffff16565b600b549091506113e290610d198684612bea565b600a5550505b600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561143357600080fd5b505afa158015611447573d6000803e3d6000fd5b505050506040513d602081101561145d57600080fd5b5051600b54909150611470908290612ba8565b600a5411156114c6576040805162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f20686967680000000000000000604482015290519081900360640190fd5b42600c819055600b546114d99190612bea565b6009556040805184815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1505050565b61151c612c44565b60015461010090046001600160a01b03908116911614611571576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460ff166115bf576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6115c7612d16565b6040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b60125481565b600061160c612c44565b60015461010090046001600160a01b03908116911614611661576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50600e81905590565b60015460ff1690565b6002546001600160a01b031681565b6001600160a01b03166000908152601b602052604090205490565b6116a5612c44565b60015461010090046001600160a01b039081169116146116fa576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360018054610100600160a81b0319169055565b6006546001600160a01b031681565b60085460048054600754604080516315ab88c960e31b8152905160009586956117b1956001600160a01b03928316959083169492169263ad5c4648928083019260209291829003018186803b158015610eb357600080fd5b9150506000600660009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561180457600080fd5b505afa158015611818573d6000803e3d6000fd5b505050506040513d602081101561182e57600080fd5b5051670de0b6b3a764000083028161184257fe5b0460020290506014546013548583020281610f8c57fe5b6000611863612c44565b60015461010090046001600160a01b039081169116146118b8576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50601581905590565b60008183106118d057816118d2565b825b9392505050565b600a5481565b6003546001600160a01b031681565b6000610d69426009546118c1565b611904612c44565b60015461010090046001600160a01b03908116911614611959576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460ff16156119a4576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6119ac612db4565b6040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6119e9612c44565b60015461010090046001600160a01b03908116911614611a3e576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460ff16611a8c576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b8051825114611a9a57600080fd5b815160005b81811015611af757828181518110611ab357fe5b6020026020010151601a6000868481518110611acb57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055600101611a9f565b50505050565b611b05612c44565b60015461010090046001600160a01b03908116911614611b5a576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b6006546001600160a01b03838116911614801590611b8657506005546001600160a01b03838116911614155b611bc15760405162461bcd60e51b815260040180806020018281038252602d8152602001806138a4602d913960400191505060405180910390fd5b816001600160a01b031663a9059cbb306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0957600080fd5b505afa158015611c1d573d6000803e3d6000fd5b505050506040513d6020811015611c3357600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482018590525160448083019260209291908290030181600087803b158015611c8357600080fd5b505af1158015611c97573d6000803e3d6000fd5b505050506040513d6020811015611cad57600080fd5b5050604080516001600160a01b03841681526020810183905281517f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28929181900390910190a15050565b60196020526000908152604090205481565b60015461010090046001600160a01b031690565b60165481565b600080611d2e612c44565b60015461010090046001600160a01b03908116911614611d83576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b5050601182905560128190559091565b60105481565b60026000541415611ddf576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005560015460ff1615611e2f576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b33611e3861232d565b600d55611e436118ee565b600c556001600160a01b03811615611e8a57611e5e81610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b60008211611ed0576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b600f54336000908152601b6020526040902054611eed9084612bea565b10158015611f165750601054336000908152601b6020526040902054611f139084612bea565b11155b611f56576040805162461bcd60e51b815260206004820152600c60248201526b1ddc9bdb99c8185b5bdd5b9d60a21b604482015290519081900360640190fd5b601854611f639083612bea565b601855336000908152601b6020526040902054611f809083612bea565b336000818152601b602090815260408083209490945560065484516323b872dd60e01b815260048101949094523060248501526044840187905293516001600160a01b03909416936323b872dd93606480820194918390030190829087803b158015611feb57600080fd5b505af1158015611fff573d6000803e3d6000fd5b505050506040513d602081101561201557600080fd5b505060408051838152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a250506001600055565b6000612060612c44565b60015461010090046001600160a01b039081169116146120b5576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50601681905590565b6120c6612c44565b60015461010090046001600160a01b0390811691161461211b576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b6002546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612155573d6000803e3d6000fd5b5050565b600f5481565b600e5481565b6008546001600160a01b031681565b61217c612c44565b60015461010090046001600160a01b039081169116146121d1576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b600280546001600160a01b03199081166001600160a01b03998a1617909155600380548216978916979097179096556004805487169588169590951790945560058054861693871693909317909255600680548516918616919091179055600780548416918516919091179055600880549092169216919091179055565b600c5481565b61225d612c44565b60015461010090046001600160a01b039081169116146122b2576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60095442116122f25760405162461bcd60e51b81526004018080602001828103825260588152602001806137536058913960600191505060405180910390fd5b600b8190556040805182815290517ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d39181900360200190a150565b6000601854600014156123435750600d54610d47565b610d69612360600a5461235a600c54610cf46118ee565b90612b4f565b600d5490612bea565b6005546001600160a01b031681565b600080612383612c44565b60015461010090046001600160a01b039081169116146123d8576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b5050600f82905560108190559091565b6002600054141561242e576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005560015460ff161561247e576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60035460408051632227e87760e21b815260048101849052905160009283926001600160a01b039091169163889fa1dc9160248082019260c092909190829003018186803b1580156124cf57600080fd5b505afa1580156124e3573d6000803e3d6000fd5b505050506040513d60c08110156124f957600080fd5b50606081015160a0909101519092509050600060018214156125255761251e83610e5b565b905061256f565b81600214156125375761251e83611759565b6040805162461bcd60e51b81526020600482015260086024820152671ddc9bdb99c81a5960c21b604482015290519081900360640190fd5b803410156125b2576040805162461bcd60e51b815260206004820152600b60248201526a77726f6e672076616c756560a81b604482015290519081900360640190fd5b6000600e5434816125bf57fe5b6002546040519290910492506001600160a01b03169082156108fc029083906000818181858888f193505050501580156125fd573d6000803e3d6000fd5b50600060028234038161260c57fe5b600454919004915060009061262b9083906001600160a01b0316612e34565b905061263682612fbe565b601754818161264157fe5b0481039050601754828161265157fe5b04909103906126668160646063850204613148565b60035460408051630ab714fb60e11b8152336004820152602481018a90526001604482015290516001600160a01b039092169163156e29f69160648082019260009290919082900301818387803b1580156126c057600080fd5b505af11580156126d4573d6000803e3d6000fd5b50506001600055505050505050505050565b6002600054141561272c576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005560015460ff161561277c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3361278561232d565b600d556127906118ee565b600c556001600160a01b038116156127d7576127ab81610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b60035460408051632227e87760e21b81526004810185905290516000926001600160a01b03169163889fa1dc9160248083019260c0929190829003018186803b15801561282357600080fd5b505afa158015612837573d6000803e3d6000fd5b505050506040513d60c081101561284d57600080fd5b506080015190508061289a576040805162461bcd60e51b81526020600482015260116024820152700c6c2dc4ee840c4eaf240d2dc40d0c2e6d607b1b604482015290519081900360640190fd5b336000908152601a6020526040902054818110156128f1576040805162461bcd60e51b815260206004820152600f60248201526e0dcdee840cadcdeeaced040d0c2e6d608b1b604482015290519081900360640190fd5b336000908152601a602052604090205461290b9083612b0d565b336000818152601a6020526040808220939093556003548351630ab714fb60e11b81526004810193909352602483018890526001604484015292516001600160a01b039093169263156e29f692606480820193929182900301818387803b15801561297557600080fd5b505af1158015612989573d6000803e3d6000fd5b50506040805184815290513393507fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e048692509081900360200190a2505060016000555050565b600d5481565b6004546001600160a01b031681565b336000908152601b60205260409020546129fc90610f9b565b565b60095481565b612a0c612c44565b60015461010090046001600160a01b03908116911614612a61576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b6001600160a01b038116612aa65760405162461bcd60e51b81526004018080602001828103825260268152602001806137cb6026913960400191505060405180910390fd5b6001546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006118d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132a8565b600082612b5e57506000610d25565b82820282848281612b6b57fe5b04146118d25760405162461bcd60e51b815260040180806020018281038252602181526020018061383e6021913960400191505060405180910390fd5b60006118d283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061333f565b6000828201838110156118d2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6000806000612c5785856133a4565b509050600080612c6888888861347b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612ca057600080fd5b505afa158015612cb4573d6000803e3d6000fd5b505050506040513d6060811015612cca57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614612d04578082612d07565b81815b90999098509650505050505050565b60015460ff16612d64576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612d97612c44565b604080516001600160a01b039092168252519081900360200190a1565b60015460ff1615612dff576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612d97612c44565b6007546000906060906001600160a01b031663d06ca61f85612e558661353b565b6040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015612eaa578181015183820152602001612e92565b50505050905001935050505060006040518083038186803b158015612ece57600080fd5b505afa158015612ee2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612f0b57600080fd5b8101908080516040519392919084600160201b821115612f2a57600080fd5b908301906020820185811115612f3f57600080fd5b82518660208202830111600160201b82111715612f5b57600080fd5b82525081516020918201928201910280838360005b83811015612f88578181015183820152602001612f70565b505050509050016040525050509050600081600183510381518110612fa957fe5b60200260200101519050809250505092915050565b6007546004546001600160a01b0391821691637ff36ab5918491600091612fe5911661353b565b3060155442016040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561305557818101518382015260200161303d565b50505050905001955050505050506000604051808303818588803b15801561307c57600080fd5b505af1158015613090573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405260208110156130ba57600080fd5b8101908080516040519392919084600160201b8211156130d957600080fd5b9083019060208201858111156130ee57600080fd5b82518660208202830111600160201b8211171561310a57600080fd5b82525081516020918201928201910280838360005b8381101561313757818101518382015260200161311f565b505050509050016040525050505050565b600480546007546040805163095ea7b360e01b81526001600160a01b0392831694810194909452602484018690525191169163095ea7b39160448083019260209291908290030181600087803b1580156131a157600080fd5b505af11580156131b5573d6000803e3d6000fd5b505050506040513d60208110156131cb57600080fd5b50506004546000906131e79083906001600160a01b0316612e34565b905060006131f58284613629565b50600754600480546015546040805163f305d71960e01b81526001600160a01b0393841694810194909452602484018a90526044840186905260648401899052600060848501524290910160a4840152519394509091169163f305d71991869160c480830192606092919082900301818588803b15801561327557600080fd5b505af1158015613289573d6000803e3d6000fd5b50505050506040513d60608110156132a057600080fd5b505050505050565b600081848411156133375760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132fc5781810151838201526020016132e4565b50505050905090810190601f1680156133295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361338e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156132fc5781810151838201526020016132e4565b50600083858161339a57fe5b0495945050505050565b600080826001600160a01b0316846001600160a01b031614156133f85760405162461bcd60e51b81526004018080602001828103825260258152602001806137f16025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061341857828461341b565b83835b90925090506001600160a01b038216610e45576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b600080600061348a85856133a4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805160028082526060808301845292839291906020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b1580156135a357600080fd5b505afa1580156135b7573d6000803e3d6000fd5b505050506040513d60208110156135cd57600080fd5b5051815182906000906135dc57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061360a57fe5b6001600160a01b03909216602092830291909101909101529050919050565b60085460048054600754604080516315ab88c960e31b81529051600095869586958695613686956001600160a01b0394851695928516949091169263ad5c4648928282019260209290829003018186803b158015610eb357600080fd5b9150915060006136978683856136b5565b905060006136a68885856136b5565b91989197509095505050505050565b60008084116136f55760405162461bcd60e51b815260040180806020018281038252602581526020018061387f6025913960400191505060405180910390fd5b6000831180156137055750600082115b6137405760405162461bcd60e51b81526004018080602001828103825260288152602001806138166028913960400191505060405180910390fd5b8261374b8584612b4f565b81610f8c57fefe50726576696f7573207265776172647320706572696f64206d75737420626520636f6d706c657465206265666f7265206368616e67696e6720746865206475726174696f6e20666f7220746865206e657720706572696f645265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e5443616e6e6f7420776974686472617720746865207374616b696e67206f72207265776172647320746f6b656e73a26469706673582212208b09ebf4d7089ba0de49438a95dde251408eb25e26bf20b0826a49ab42b5881b64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000007f6624b895b47ae66e916ec6a0479d7c3cfa31900000000000000000000000089ee76cc25fcbf1714ed575faa6a10202b71c26a000000000000000000000000739763a258640919981f9ba610ae65492455be53000000000000000000000000300496a0352e2e302a3d6df66e66b08625c305be00000000000000000000000065d0a154d2425ce2fd5fed3bdae94d9a9afe55ce0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
-----Decoded View---------------
Arg [0] : _treasury (address): 0x07F6624b895B47AE66E916eC6a0479D7c3cFa319
Arg [1] : _NFT (address): 0x89eE76cC25Fcbf1714ed575FAa6A10202B71c26A
Arg [2] : _NDR (address): 0x739763a258640919981F9bA610AE65492455bE53
Arg [3] : _rewardsToken (address): 0x300496A0352e2E302a3d6df66e66B08625C305Be
Arg [4] : _stakingToken (address): 0x65d0A154D2425CE2Fd5fED3BdaE94D9a9aFE55CE
Arg [5] : _uniswap (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [6] : _factory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 00000000000000000000000007f6624b895b47ae66e916ec6a0479d7c3cfa319
Arg [1] : 00000000000000000000000089ee76cc25fcbf1714ed575faa6a10202b71c26a
Arg [2] : 000000000000000000000000739763a258640919981f9ba610ae65492455be53
Arg [3] : 000000000000000000000000300496a0352e2e302a3d6df66e66b08625c305be
Arg [4] : 00000000000000000000000065d0a154d2425ce2fd5fed3bdae94d9a9afe55ce
Arg [5] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [6] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Deployed Bytecode Sourcemap
15271:13380:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19095:7;;;;;;;;;-1:-1:-1;;;;;19095:7:0;-1:-1:-1;;;;;19095:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19095:14:0;-1:-1:-1;;;;;19081:28:0;:10;:28;19074:36;;;;15271:13380;;;;;18469:265;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18469:265:0;-1:-1:-1;;;;;18469:265:0;;:::i;:::-;;;;;;;;;;;;;;;;16303:42;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16303:42:0;-1:-1:-1;;;;;16303:42:0;;:::i;16064:26::-;;;;;;;;;;;;;:::i;17760:93::-;;;;;;;;;;;;;:::i;15971:23::-;;;;;;;;;;;;;:::i;18742:121::-;;;;;;;;;;;;;:::i;22267:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22267:137:0;;:::i;21709:246::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21709:246:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15575:23;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;15575:23:0;;;;;;;;;;;;;;24074:323;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24074:323:0;;:::i;16097:29::-;;;;;;;;;;;;;:::i;23372:607::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23372:607:0;;:::i;16167:28::-;;;;;;;;;;;;;:::i;16031:26::-;;;;;;;;;;;;;:::i;15711:41::-;;;;;;;;;;;;;:::i;26283:757::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26283:757:0;;:::i;20918:112::-;;;;;;;;;;;;;:::i;16001:23::-;;;;;;;;;;;;;:::i;22113:142::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22113:142:0;;:::i;8919:78::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;15421:31;;;;;;;;;;;;;:::i;17861:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17861:112:0;-1:-1:-1;;;;;17861:112:0;;:::i;11240:148::-;;;;;;;;;;;;;:::i;15542:26::-;;;;;;;;;;;;;:::i;24409:332::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24409:332:0;;:::i;21963:142::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21963:142:0;;:::i;18871:104::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18871:104:0;;;;;;;:::i;15675:29::-;;;;;;;;;;;;;:::i;15459:18::-;;;;;;;;;;;;;:::i;17981:126::-;;;;;;;;;;;;;:::i;20801:109::-;;;;;;;;;;;;;:::i;17372:339::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17372:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17372:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17372:339:0;;;;;;;;-1:-1:-1;17372:339:0;;-1:-1:-1;;;;;17372:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17372:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17372:339:0;;-1:-1:-1;17372:339:0;;-1:-1:-1;;;;;17372:339:0:i;27048:478::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27048:478:0;;;;;;;;:::i;16239:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16239:57:0;-1:-1:-1;;;;;16239:57:0;;:::i;10598:79::-;;;;;;;;;;;;;:::i;16133:27::-;;;;;;;;;;;;;:::i;21478:219::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21478:219:0;;;;;;;:::i;15921:43::-;;;;;;;;;;;;;:::i;22861:503::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22861:503:0;;:::i;22609:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22609:137:0;;:::i;22754:99::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22754:99:0;;:::i;15872:42::-;;;;;;;;;;;;;:::i;15837:28::-;;;;;;;;;;;;;:::i;15605:23::-;;;;;;;;;;;;;:::i;21038:432::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21038:432:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15759:29::-;;;;;;;;;;;;;:::i;27534:360::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27534:360:0;;:::i;18115:346::-;;;;;;;;;;;;;:::i;15509:26::-;;;;;;;;;;;;;:::i;22412:189::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22412:189:0;;;;;;;:::i;25276:943::-;;;;;;;;;;;;;;;;-1:-1:-1;25276:943:0;;:::i;24749:519::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24749:519:0;;:::i;15795:35::-;;;;;;;;;;;;;:::i;15484:18::-;;;;;;;;;;;;;:::i;23987:75::-;;;;;;;;;;;;;:::i;15637:31::-;;;;;;;;;;;;;:::i;11543:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11543:244:0;-1:-1:-1;;;;;11543:244:0;;:::i;18469:265::-;-1:-1:-1;;;;;18709:16:0;;18523:7;18709:16;;;:7;:16;;;;;;;;;18625:22;:31;;;;;;18563:163;;18709:16;18563:123;;18681:4;;18563:95;;18604:53;;:16;:14;:16::i;:::-;:20;;:53::i;:::-;-1:-1:-1;;;;;18563:18:0;;;;;;:9;:18;;;;;;;:40;:95::i;:::-;:117;;:123::i;:::-;:145;;:163::i;:::-;18543:183;18469:265;-1:-1:-1;;18469:265:0:o;16303:42::-;;;;;;;;;;;;;:::o;16064:26::-;;;;:::o;17760:93::-;17833:12;;17760:93;;:::o;15971:23::-;;;;:::o;18742:121::-;18797:7;18824:31;18839:15;;18824:10;;:14;;:31;;;;:::i;:::-;18817:38;;18742:121;:::o;22267:137::-;22333:7;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;22353:7:0::1;:18:::0;;;;22267:137::o;21709:246::-;21811:7;21820;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;;21840:11:0::1;:26:::0;;;21877:11:::1;:26:::0;;;21854:12;21891;10880:1:::1;21709:246:::0;;;;;:::o;15575:23::-;;;-1:-1:-1;;;;;15575:23:0;;:::o;24074:323::-;24207:7;;24217:3;;;24222:7;;:14;;;-1:-1:-1;;;24222:14:0;;;;24133:4;;;;24170:67;;-1:-1:-1;;;;;24207:7:0;;;;24217:3;;;;24222:7;;;:12;;:14;;;;;;;;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24222:14:0;24170:28;:67::i;:::-;24150:87;;;24248:10;24303:12;;;;;;;;;-1:-1:-1;;;;;24303:12:0;-1:-1:-1;;;;;24280:49:0;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24280:51:0;24273:4;24261:16;;24280:51;24261:70;;;;;24334:1;24261:74;24248:87;;24381:8;;24370;;24361:6;24353:5;:14;:25;:36;;;;;;;24074:323;-1:-1:-1;;;;24074:323:0:o;16097:29::-;;;;:::o;23372:607::-;12671:1;13277:7;;:19;;13269:63;;;;;-1:-1:-1;;;13269:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13269:63:0;;;;;;;;;;;;;;;12671:1;13410:7;:18;23439:10:::1;28020:16;:14;:16::i;:::-;27997:20;:39:::0;28064:26:::1;:24;:26::i;:::-;28047:14;:43:::0;-1:-1:-1;;;;;28105:21:0;::::1;::::0;28101:157:::1;;28162:15;28169:7;28162:6;:15::i;:::-;-1:-1:-1::0;;;;;28143:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;28226:20:::1;::::0;28192:22:::1;:31:::0;;;;;;:54;28101:157:::1;23479:1:::2;23470:6;:10;23462:40;;;::::0;;-1:-1:-1;;;23462:40:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;23462:40:0;;;;;;;;;;;;;::::2;;23558:5;::::0;23531:10:::2;23521:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;23547:6;23521:25:::2;:33::i;:::-;:42;;:84;;;-1:-1:-1::0;23577:10:0::2;23567:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;23593:6;23567:25:::2;:33::i;:::-;:38:::0;23521:84:::2;23513:109;;;::::0;;-1:-1:-1;;;23513:109:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;23513:109:0;;;;;;;;;;;;;::::2;;23648:12;::::0;:24:::2;::::0;23665:6;23648:16:::2;:24::i;:::-;23633:12;:39:::0;23717:10:::2;23707:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;23733:6;23707:25:::2;:33::i;:::-;23693:10;23683:21;::::0;;;:9:::2;:21;::::0;;;;:57;;;;23776:7:::2;::::0;23765:19:::2;::::0;:6;;:10:::2;:19::i;:::-;23795:12;::::0;:70:::2;::::0;;-1:-1:-1;;;23795:70:0;;23817:42:::2;23795:70;::::0;::::2;::::0;;;;;;;;;23751:33;;-1:-1:-1;;;;;;23795:12:0;;::::2;::::0;:21:::2;::::0;:70;;;;;::::2;::::0;;;;;;;;;:12:::2;::::0;:70;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;23876:12:0::2;::::0;-1:-1:-1;;;;;23876:12:0::2;:21;23898:10;23910:15;:6:::0;23921:3;23910:10:::2;:15::i;:::-;23876:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;23876:50:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;23942:29:0::2;::::0;;;;;;;23952:10:::2;::::0;23942:29:::2;::::0;;;;;23876:50:::2;23942:29:::0;;::::2;-1:-1:-1::0;;12627:1:0;13589:7;:22;-1:-1:-1;23372:607:0:o;16167:28::-;;;;:::o;16031:26::-;;;;:::o;15711:41::-;;;;:::o;26283:757::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;26367:1:::1;28020:16;:14;:16::i;:::-;27997:20;:39:::0;28064:26:::1;:24;:26::i;:::-;28047:14;:43:::0;-1:-1:-1;;;;;28105:21:0;::::1;::::0;28101:157:::1;;28162:15;28169:7;28162:6;:15::i;:::-;-1:-1:-1::0;;;;;28143:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;28226:20:::1;::::0;28192:22:::1;:31:::0;;;;;;:54;28101:157:::1;26405:12:::2;;26386:15;:31;26382:318;;26458:15;::::0;26447:27:::2;::::0;:6;;:10:::2;:27::i;:::-;26434:10;:40:::0;26382:318:::2;;;26527:12;::::0;26507:17:::2;::::0;26527:33:::2;::::0;26544:15:::2;26527:16;:33::i;:::-;26507:53;;26575:16;26594:25;26608:10;;26594:9;:13;;:25;;;;:::i;:::-;26672:15;::::0;26575:44;;-1:-1:-1;26647:41:0::2;::::0;:20:::2;:6:::0;26575:44;26647:10:::2;:20::i;:41::-;26634:10;:54:::0;-1:-1:-1;;26382:318:0::2;26728:12;::::0;:37:::2;::::0;;-1:-1:-1;;;26728:37:0;;26759:4:::2;26728:37;::::0;::::2;::::0;;;26710:15:::2;::::0;-1:-1:-1;;;;;26728:12:0::2;::::0;:22:::2;::::0;:37;;;;;::::2;::::0;;;;;;;;:12;:37;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;26728:37:0;26824:15:::2;::::0;26728:37;;-1:-1:-1;26812:28:0::2;::::0;26728:37;;26812:11:::2;:28::i;:::-;26798:10;;:42;;26776:116;;;::::0;;-1:-1:-1;;;26776:116:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;26920:15;26903:14;:32:::0;;;26981:15:::2;::::0;26961:36:::2;::::0;26920:15;26961:19:::2;:36::i;:::-;26946:12;:51:::0;27013:19:::2;::::0;;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;28268:1;10880::::1;26283:757:::0;:::o;20918:112::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;9513:7:::1;::::0;::::1;;9505:40;;;::::0;;-1:-1:-1;;;9505:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9505:40:0;;;;;;;;;;;;;::::1;;20976:10:::2;:8;:10::i;:::-;21002:20;::::0;;21011:10:::2;21002:20:::0;;;;::::2;::::0;;;;::::2;::::0;;::::2;20918:112::o:0;16001:23::-;;;;:::o;22113:142::-;22181:7;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;22201:8:0::1;:20:::0;;;;22113:142::o;8919:78::-;8982:7;;;;8919:78;:::o;15421:31::-;;;-1:-1:-1;;;;;15421:31:0;;:::o;17861:112::-;-1:-1:-1;;;;;17947:18:0;17920:7;17947:18;;;:9;:18;;;;;;;17861:112::o;11240:148::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;11331:6:::1;::::0;11310:40:::1;::::0;11347:1:::1;::::0;11331:6:::1;::::0;::::1;-1:-1:-1::0;;;;;11331:6:0::1;::::0;11310:40:::1;::::0;11347:1;;11310:40:::1;11361:6;:19:::0;;-1:-1:-1;;;;;;11361:19:0::1;::::0;;11240:148::o;15542:26::-;;;-1:-1:-1;;;;;15542:26:0;;:::o;24409:332::-;24545:7;;24555:3;;;24560:7;;:14;;;-1:-1:-1;;;24560:14:0;;;;24471:4;;;;24508:67;;-1:-1:-1;;;;;24545:7:0;;;;24555:3;;;;24560:7;;;:12;;:14;;;;;;;;;;;;:7;:14;;;;;;;;;;24508:67;24488:87;;;24586:10;24641:12;;;;;;;;;-1:-1:-1;;;;;24641:12:0;-1:-1:-1;;;;;24618:49:0;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24618:51:0;24611:4;24599:16;;24618:51;24599:70;;;;;24672:1;24599:74;24586:87;;24722:11;;24708;;24699:6;24691:5;:14;:28;:42;;;;21963:142;22031:7;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;22051:8:0::1;:20:::0;;;;21963:142::o;18871:104::-;18927:7;18958:1;18954;:5;:13;;18966:1;18954:13;;;18962:1;18954:13;18947:20;18871:104;-1:-1:-1;;;18871:104:0:o;15675:29::-;;;;:::o;15459:18::-;;;-1:-1:-1;;;;;15459:18:0;;:::o;17981:126::-;18038:7;18065:34;18069:15;18086:12;;18065:3;:34::i;20801:109::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;9237:7:::1;::::0;::::1;;9236:8;9228:37;;;::::0;;-1:-1:-1;;;9228:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9228:37:0;;;;;;;;;;;;;::::1;;20860:8:::2;:6;:8::i;:::-;20884:18;::::0;;20891:10:::2;20884:18:::0;;;;::::2;::::0;;;;::::2;::::0;;::::2;20801:109::o:0;17372:339::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;9513:7:::1;::::0;::::1;;9505:40;;;::::0;;-1:-1:-1;;;9505:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9505:40:0;;;;;;;;;;;;;::::1;;17521:6:::2;:13;17498:12;:19;:36;17490:45;;;::::0;::::2;;17565:19:::0;;17548:14:::2;17614:90;17628:6;17624:1;:10;17614:90;;;17683:6;17690:1;17683:9;;;;;;;;;;;;;;17656:7;:24;17664:12;17677:1;17664:15;;;;;;;;;::::0;;::::2;::::0;;;;;;;-1:-1:-1;;;;;17656:24:0::2;::::0;;;::::2;::::0;;;;;;-1:-1:-1;17656:24:0;:36;17636:3:::2;;17614:90;;;9556:1;;17372:339:::0;;:::o;27048:478::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;27255:12:::1;::::0;-1:-1:-1;;;;;27231:37:0;;::::1;27255:12:::0;::::1;27231:37;::::0;::::1;::::0;:95:::1;;-1:-1:-1::0;27313:12:0::1;::::0;-1:-1:-1;;;;;27289:37:0;;::::1;27313:12:::0;::::1;27289:37;;27231:95;27209:190;;;;-1:-1:-1::0;;;27209:190:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27417:12;-1:-1:-1::0;;;;;27410:29:0::1;;27440:4;-1:-1:-1::0;;;;;27440:10:0::1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27440:12:0;27410:56:::1;::::0;;-1:-1:-1;;;;;;27410:56:0::1;::::0;;;;;;-1:-1:-1;;;;;27410:56:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;27440:12:::1;::::0;27410:56;;;;;;;-1:-1:-1;27410:56:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;27482:36:0::1;::::0;;-1:-1:-1;;;;;27482:36:0;::::1;::::0;;27410:56:::1;27482:36:::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;27048:478:::0;;:::o;16239:57::-;;;;;;;;;;;;;:::o;10598:79::-;10663:6;;;;;-1:-1:-1;;;;;10663:6:0;;10598:79::o;16133:27::-;;;;:::o;21478:219::-;21571:7;21580;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;;21600:8:0::1;:20:::0;;;21631:8:::1;:20:::0;;;21600;;21478:219::o;15921:43::-;;;;:::o;22861:503::-;12671:1;13277:7;;:19;;13269:63;;;;;-1:-1:-1;;;13269:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13269:63:0;;;;;;;;;;;;;;;12671:1;13410:7;:18;9237:7:::1;::::0;::::1;;9236:8;9228:37;;;::::0;;-1:-1:-1;;;9228:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9228:37:0;;;;;;;;;;;;;::::1;;22941:10:::2;28020:16;:14;:16::i;:::-;27997:20;:39:::0;28064:26:::2;:24;:26::i;:::-;28047:14;:43:::0;-1:-1:-1;;;;;28105:21:0;::::2;::::0;28101:157:::2;;28162:15;28169:7;28162:6;:15::i;:::-;-1:-1:-1::0;;;;;28143:16:0;::::2;;::::0;;;:7:::2;:16;::::0;;;;;;;:34;;;;28226:20:::2;::::0;28192:22:::2;:31:::0;;;;;;:54;28101:157:::2;22981:1:::3;22972:6;:10;22964:37;;;::::0;;-1:-1:-1;;;22964:37:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;22964:37:0;;;;;;;;;;;;;::::3;;23057:5;::::0;23030:10:::3;23020:21;::::0;;;:9:::3;:21;::::0;;;;;:33:::3;::::0;23046:6;23020:25:::3;:33::i;:::-;:42;;:88;;;;-1:-1:-1::0;23103:5:0::3;::::0;23076:10:::3;23066:21;::::0;;;:9:::3;:21;::::0;;;;;:33:::3;::::0;23092:6;23066:25:::3;:33::i;:::-;:42;;23020:88;23012:113;;;::::0;;-1:-1:-1;;;23012:113:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;23012:113:0;;;;;;;;;;;;;::::3;;23151:12;::::0;:24:::3;::::0;23168:6;23151:16:::3;:24::i;:::-;23136:12;:39:::0;23220:10:::3;23210:21;::::0;;;:9:::3;:21;::::0;;;;;:33:::3;::::0;23236:6;23210:25:::3;:33::i;:::-;23196:10;23186:21;::::0;;;:9:::3;:21;::::0;;;;;;;:57;;;;23254:12:::3;::::0;:60;;-1:-1:-1;;;23254:60:0;;::::3;::::0;::::3;::::0;;;;23300:4:::3;23254:60:::0;;;;;;;;;;;;-1:-1:-1;;;;;23254:12:0;;::::3;::::0;:25:::3;::::0;:60;;;;;;;;;;;;;:12;:60;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;;23330:26:0::3;::::0;;;;;;;23337:10:::3;::::0;23330:26:::3;::::0;;;;;23254:60:::3;23330:26:::0;;::::3;-1:-1:-1::0;;12627:1:0;13589:7;:22;22861:503::o;22609:137::-;22675:7;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;22695:7:0::1;:18:::0;;;;22609:137::o;22754:99::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;22820:8:::1;::::0;:25:::1;::::0;-1:-1:-1;;;;;22820:8:0;;::::1;::::0;:25;::::1;;;::::0;22838:6;;22820:8:::1;:25:::0;:8;:25;22838:6;22820:8;:25;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22754:99:::0;:::o;15872:42::-;;;;:::o;15837:28::-;;;;:::o;15605:23::-;;;-1:-1:-1;;;;;15605:23:0;;:::o;21038:432::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;21228:8:::1;:20:::0;;-1:-1:-1;;;;;;21228:20:0;;::::1;-1:-1:-1::0;;;;;21228:20:0;;::::1;;::::0;;;21259:3:::1;:10:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;21280:3:::1;:10:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;21301:12:::1;:36:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;21348:12:::1;:36:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;21395:7:::1;:28:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;21434:7:::1;:28:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;21038:432::o;15759:29::-;;;;:::o;27534:360::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;27658:12:::1;;27640:15;:30;27618:168;;;;-1:-1:-1::0;;;27618:168:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27797:15;:34:::0;;;27847:39:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;27534:360:::0;:::o;18115:346::-;18162:7;18186:12;;18202:1;18186:17;18182:77;;;-1:-1:-1;18227:20:0;;18220:27;;18182:77;18289:164;18332:106;18427:10;;18332:68;18385:14;;18332:26;:24;:26::i;:68::-;:94;;:106::i;:::-;18289:20;;;:24;:164::i;15509:26::-;;;-1:-1:-1;;;;;15509:26:0;;:::o;22412:189::-;22493:7;22502;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;;22522:5:0::1;:14:::0;;;22547:5:::1;:14:::0;;;22522;;22412:189::o;25276:943::-;12671:1;13277:7;;:19;;13269:63;;;;;-1:-1:-1;;;13269:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13269:63:0;;;;;;;;;;;;;;;12671:1;13410:7;:18;9237:7:::1;::::0;::::1;;9236:8;9228:37;;;::::0;;-1:-1:-1;;;9228:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9228:37:0;;;;;;;;;;;;;::::1;;25421:3:::2;::::0;25397:49:::2;::::0;;-1:-1:-1;;;25397:49:0;;::::2;::::0;::::2;::::0;;;;;25363:14:::2;::::0;;;-1:-1:-1;;;;;25421:3:0;;::::2;::::0;25397:40:::2;::::0;:49;;;;;::::2;::::0;;;;;;;;;25421:3;25397:49;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;25397:49:0;;;;;;;;;;;-1:-1:-1;25397:49:0;-1:-1:-1;25457:13:0::2;25495:1;25485:11:::0;::::2;25481:204;;;25521:20;25534:6;25521:12;:20::i;:::-;25513:28;;25481:204;;;25563:6;25573:1;25563:11;25559:126;;;25599:23;25615:6;25599:15;:23::i;25559:126::-;25655:18;::::0;;-1:-1:-1;;;25655:18:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;25655:18:0;;;;;;;;;;;;;::::2;25559:126;25716:5;25703:9;:18;;25695:42;;;::::0;;-1:-1:-1;;;25695:42:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;25695:42:0;;;;;;;;;;;;;::::2;;25748:8;25771;;25759:9;:20;;;;;25790:8;::::0;:22:::2;::::0;25759:20;;;::::2;::::0;-1:-1:-1;;;;;;25790:8:0::2;::::0;:22;::::2;;;::::0;25759:20;;25790:8:::2;:22:::0;:8;:22;25759:20;25790:8;:22;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;25823:14;25860:1;25853:3;25841:9;:15;25840:21;;;;;25924:3;::::0;25840:21;;::::2;::::0;-1:-1:-1;25872:16:0::2;::::0;25891:38:::2;::::0;25840:21;;-1:-1:-1;;;;;25924:3:0::2;25891:13;:38::i;:::-;25872:57;;25940:32;25962:9;25940:21;:32::i;:::-;26026:7;;26012:11;:21;;;;;;25997:11;:37;25983:51;;26082:7;;26070:9;:19;;;;;;26057:33:::0;;::::2;::::0;26101:50:::2;26117:11:::0;26147:3:::2;26142:2;26130:14:::0;::::2;:20;26101:15;:50::i;:::-;26178:3;::::0;26162:49:::2;::::0;;-1:-1:-1;;;26162:49:0;;26188:10:::2;26162:49;::::0;::::2;::::0;;;;;;;26178:3;26162:49;;;;;;-1:-1:-1;;;;;26178:3:0;;::::2;::::0;26162:25:::2;::::0;:49;;;;;26178:3:::2;::::0;26162:49;;;;;;;;26178:3;;26162:49;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;12627:1:0;13589:7;:22;-1:-1:-1;;;;;;;;;25276:943:0:o;24749:519::-;12671:1;13277:7;;:19;;13269:63;;;;;-1:-1:-1;;;13269:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13269:63:0;;;;;;;;;;;;;;;12671:1;13410:7;:18;9237:7:::1;::::0;::::1;;9236:8;9228:37;;;::::0;;-1:-1:-1;;;9228:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9228:37:0;;;;;;;;;;;;;::::1;;24829:10:::2;28020:16;:14;:16::i;:::-;27997:20;:39:::0;28064:26:::2;:24;:26::i;:::-;28047:14;:43:::0;-1:-1:-1;;;;;28105:21:0;::::2;::::0;28101:157:::2;;28162:15;28169:7;28162:6;:15::i;:::-;-1:-1:-1::0;;;;;28143:16:0;::::2;;::::0;;;:7:::2;:16;::::0;;;;;;;:34;;;;28226:20:::2;::::0;28192:22:::2;:31:::0;;;;;;:54;28101:157:::2;24903:3:::3;::::0;24879:49:::3;::::0;;-1:-1:-1;;;24879:49:0;;::::3;::::0;::::3;::::0;;;;;24857:17:::3;::::0;-1:-1:-1;;;;;24903:3:0::3;::::0;24879:40:::3;::::0;:49;;;;;::::3;::::0;;;;;;;;24903:3;24879:49;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;24879:49:0;;;;-1:-1:-1;24947:13:0;24939:43:::3;;;::::0;;-1:-1:-1;;;24939:43:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;24939:43:0;;;;;;;;;;;;;::::3;;25018:10;24993:14;25010:19:::0;;;:7:::3;:19;::::0;;;;;25048;;::::3;;25040:47;;;::::0;;-1:-1:-1;;;25040:47:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;25040:47:0;;;;;;;;;;;;;::::3;;25128:10;25120:19;::::0;;;:7:::3;:19;::::0;;;;;:34:::3;::::0;25144:9;25120:23:::3;:34::i;:::-;25106:10;25098:19;::::0;;;:7:::3;:19;::::0;;;;;:56;;;;25181:3:::3;::::0;25165:49;;-1:-1:-1;;;25165:49:0;;::::3;::::0;::::3;::::0;;;;;;;;;;25181:3;25165:49;;;;;;-1:-1:-1;;;;;25181:3:0;;::::3;::::0;25165:25:::3;::::0;:49;;;;;25098:19;25165:49;;;;;;25098:19;25181:3;25165:49;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;25230:30:0::3;::::0;;;;;;;25241:10:::3;::::0;-1:-1:-1;25230:30:0::3;::::0;-1:-1:-1;25230:30:0;;;;::::3;::::0;;::::3;-1:-1:-1::0;;12627:1:0;13589:7;:22;-1:-1:-1;;24749:519:0:o;15795:35::-;;;;:::o;15484:18::-;;;-1:-1:-1;;;;;15484:18:0;;:::o;23987:75::-;24042:10;24032:21;;;;:9;:21;;;;;;24023:31;;:8;:31::i;:::-;23987:75::o;15637:31::-;;;;:::o;11543:244::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11632:22:0;::::1;11624:73;;;;-1:-1:-1::0;;;11624:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11734:6;::::0;11713:38:::1;::::0;-1:-1:-1;;;;;11713:38:0;;::::1;::::0;11734:6:::1;::::0;::::1;;::::0;11713:38:::1;::::0;;;::::1;11762:6;:17:::0;;-1:-1:-1;;;;;11762:17:0;;::::1;;;-1:-1:-1::0;;;;;;11762:17:0;;::::1;::::0;;;::::1;::::0;;11543:244::o;789:136::-;847:7;874:43;878:1;881;874:43;;;;;;;;;;;;;;;;;:3;:43::i;1679:471::-;1737:7;1982:6;1978:47;;-1:-1:-1;2012:1:0;2005:8;;1978:47;2049:5;;;2053:1;2049;:5;:1;2073:5;;;;;:10;2065:56;;;;-1:-1:-1;;;2065:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2626:132;2684:7;2711:39;2715:1;2718;2711:39;;;;;;;;;;;;;;;;;:3;:39::i;325:181::-;383:7;415:5;;;439:6;;;;431:46;;;;;-1:-1:-1;;;431:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8028:106;8116:10;8028:106;:::o;5929:391::-;6022:13;6037;6064:14;6083:26;6094:6;6102;6083:10;:26::i;:::-;6063:46;;;6121:13;6136;6169:32;6177:7;6186:6;6194;6169:7;:32::i;:::-;-1:-1:-1;;;;;6154:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6154:62:0;;;;;;;6120:96;;;;;-1:-1:-1;6120:96:0;;-1:-1:-1;;;;;;6250:16:0;;;;;;;:62;;6293:8;6303;6250:62;;;6270:8;6280;6250:62;6227:85;;;;-1:-1:-1;5929:391:0;-1:-1:-1;;;;;;;5929:391:0:o;9968:120::-;9513:7;;;;9505:40;;;;;-1:-1:-1;;;9505:40:0;;;;;;;;;;;;-1:-1:-1;;;9505:40:0;;;;;;;;;;;;;;;10027:7:::1;:15:::0;;-1:-1:-1;;10027:15:0::1;::::0;;10058:22:::1;10067:12;:10;:12::i;:::-;10058:22;::::0;;-1:-1:-1;;;;;10058:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;9968:120::o:0;9709:118::-;9237:7;;;;9236:8;9228:37;;;;;-1:-1:-1;;;9228:37:0;;;;;;;;;;;;-1:-1:-1;;;9228:37:0;;;;;;;;;;;;;;;9779:4:::1;9769:14:::0;;-1:-1:-1;;9769:14:0::1;::::0;::::1;::::0;;9799:20:::1;9806:12;:10;:12::i;19126:289::-:0;19241:7;;19200:4;;19217:21;;-1:-1:-1;;;;;19241:7:0;:21;19263:6;19271:27;19292:5;19271:20;:27::i;:::-;19241:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19241:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19241:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19241:58:0;;;;;;;;;;;;-1:-1:-1;19241:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19217:82;;19310:24;19345:7;19370:1;19353:7;:14;:18;19345:27;;;;;;;;;;;;;;19310:63;;19391:16;19384:23;;;;19126:289;;;;:::o;19659:191::-;19726:7;;19805:3;;-1:-1:-1;;;;;19726:7:0;;;;:29;;19762:9;;19726:7;;19776:34;;19805:3;19776:20;:34::i;:::-;19820:4;19833:8;;19827:3;:14;19726:116;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19726:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19726:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19726:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19726:116:0;;;;;;;;;;;;-1:-1:-1;19726:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19659:191;:::o;19858:431::-;19951:3;;;19972:7;;19944:57;;;-1:-1:-1;;;19944:57:0;;-1:-1:-1;;;;;19972:7:0;;;19944:57;;;;;;;;;;;;;;19951:3;;;19944:19;;:57;;;;;;;;;;;;;;19951:3;;19944:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20059:3:0;;20012:19;;20034:29;;20048:9;;-1:-1:-1;;;;;20059:3:0;20034:13;:29::i;:::-;20012:51;;20075:19;20099:32;20105:14;20121:9;20099:5;:32::i;:::-;-1:-1:-1;20142:7:0;;20201:3;;;20272:8;;20142:139;;;-1:-1:-1;;;20142:139:0;;-1:-1:-1;;;;;20201:3:0;;;20142:139;;;;;;;;;;;;;;;;;;;;;;;;;:7;:139;;;;20266:3;:14;;;20142:139;;;;;20074:57;;-1:-1:-1;20142:7:0;;;;:23;;20172:9;;20142:139;;;;;;;;;;;;;;20172:9;20142:7;:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19858:431:0:o;1228:192::-;1314:7;1350:12;1342:6;;;;1334:29;;;;-1:-1:-1;;;1334:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1386:5:0;;;1228:192::o;3254:278::-;3340:7;3375:12;3368:5;3360:28;;;;-1:-1:-1;;;3360:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3399:9;3415:1;3411;:5;;;;;;;3254:278;-1:-1:-1;;;;;3254:278:0:o;4952:349::-;5027:14;5043;5088:6;-1:-1:-1;;;;;5078:16:0;:6;-1:-1:-1;;;;;5078:16:0;;;5070:66;;;;-1:-1:-1;;;5070:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5175:6;-1:-1:-1;;;;;5166:15:0;:6;-1:-1:-1;;;;;5166:15:0;;:53;;5204:6;5212;5166:53;;;5185:6;5193;5166:53;5147:72;;-1:-1:-1;5147:72:0;-1:-1:-1;;;;;;5238:20:0;;5230:63;;;;;-1:-1:-1;;;5230:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5393:478;5482:12;5508:14;5524;5542:26;5553:6;5561;5542:10;:26::i;:::-;5706:32;;;-1:-1:-1;;5706:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5696:43;;;;;;-1:-1:-1;;;;;;5609:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5599:262;;;;;;;;;5393:478;-1:-1:-1;;;;;5393:478:0:o;19423:228::-;19544:16;;;19558:1;19544:16;;;19491;19544;;;;;19491;;;19544;19558:1;19544:16;;;;;;;;-1:-1:-1;;19581:7:0;;:14;;;-1:-1:-1;;;19581:14:0;;;;19520:40;;-1:-1:-1;;;;;;19581:7:0;;;;:12;;-1:-1:-1;19581:14:0;;;;;;;;;;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19581:14:0;19571:7;;:4;;19576:1;;19571:7;;;;;;;;;:24;-1:-1:-1;;;;;19571:24:0;;;-1:-1:-1;;;;;19571:24:0;;;;;19616:5;19606:4;19611:1;19606:7;;;;;;;;-1:-1:-1;;;;;19606:15:0;;;:7;;;;;;;;;;;:15;19639:4;-1:-1:-1;19423:228:0;;;:::o;20297:442::-;20469:7;;20479:3;;;20484:7;;:14;;;-1:-1:-1;;;20484:14:0;;;;20376:4;;;;;;;;20432:67;;-1:-1:-1;;;;;20469:7:0;;;;20479:3;;;;20484:7;;;;:12;;:14;;;;;;;;;;;;:7;:14;;;;;;;;;;20432:67;20399:100;;;;20510:19;20532:58;20555:14;20571:8;20581;20532:22;:58::i;:::-;20510:80;;20601:19;20623:58;20646:14;20662:8;20672;20623:22;:58::i;:::-;20700:14;;;;-1:-1:-1;20297:442:0;;-1:-1:-1;;;;;;20297:442:0:o;6433:321::-;6515:12;6558:1;6548:7;:11;6540:61;;;;-1:-1:-1;;;6540:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6631:1;6620:8;:12;:28;;;;;6647:1;6636:8;:12;6620:28;6612:81;;;;-1:-1:-1;;;6612:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6738:8;6714:21;:7;6726:8;6714:11;:21::i;:::-;:32;;;
Swarm Source
ipfs://8b09ebf4d7089ba0de49438a95dde251408eb25e26bf20b0826a49ab42b5881b
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.