More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 99 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Get Reward | 2126840 | 3 hrs ago | IN | 0 S | 0.00040534 | ||||
Withdraw | 2123503 | 4 hrs ago | IN | 0 S | 0.00026595 | ||||
Get Reward | 2121396 | 5 hrs ago | IN | 0 S | 0.00024834 | ||||
Withdraw | 2118168 | 6 hrs ago | IN | 0 S | 0.00013874 | ||||
Get Reward | 2110442 | 8 hrs ago | IN | 0 S | 0.00036814 | ||||
Withdraw | 2107874 | 9 hrs ago | IN | 0 S | 0.00020893 | ||||
Withdraw | 2107763 | 9 hrs ago | IN | 0 S | 0.00019517 | ||||
Get Reward | 2105266 | 10 hrs ago | IN | 0 S | 0.00056477 | ||||
Get Reward | 2089488 | 14 hrs ago | IN | 0 S | 0.00051304 | ||||
Get Reward | 2089452 | 14 hrs ago | IN | 0 S | 0.0005936 | ||||
Get Reward | 2089443 | 14 hrs ago | IN | 0 S | 0.0005936 | ||||
Withdraw | 2082894 | 16 hrs ago | IN | 0 S | 0.00022822 | ||||
Get Reward | 2082860 | 16 hrs ago | IN | 0 S | 0.00026715 | ||||
Withdraw | 2082313 | 16 hrs ago | IN | 0 S | 0.00008707 | ||||
Withdraw | 2082310 | 16 hrs ago | IN | 0 S | 0.00021312 | ||||
Withdraw | 2080783 | 17 hrs ago | IN | 0 S | 0.00016653 | ||||
Get Reward | 2043873 | 29 hrs ago | IN | 0 S | 0.00024834 | ||||
Withdraw | 2041468 | 30 hrs ago | IN | 0 S | 0.00017672 | ||||
Get Reward | 2037124 | 31 hrs ago | IN | 0 S | 0.00039922 | ||||
Deposit | 2034347 | 31 hrs ago | IN | 0 S | 0.00016091 | ||||
Withdraw | 2034160 | 31 hrs ago | IN | 0 S | 0.00017995 | ||||
Get Reward | 2033729 | 32 hrs ago | IN | 0 S | 0.00046712 | ||||
Withdraw | 2033664 | 32 hrs ago | IN | 0 S | 0.00020431 | ||||
Deposit | 2030341 | 32 hrs ago | IN | 0 S | 0.00017279 | ||||
Withdraw | 2030046 | 32 hrs ago | IN | 0 S | 0.00020431 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
1645649 | 5 days ago | Contract Creation | 0 S |
Loading...
Loading
Contract Name:
GaugeEquivalent
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-26 */ /** * EQUALIZER EXCHANGE * The New Liquidity Hub of Fantom chain! * https://equalizer.exchange (Dapp) * https://discord.gg/MaMhbgHMby (Community) * * * Contributors: * - Synthetix Network * - Curve Finance * - Andre Cronje, Solidly.Exchange * - 543 (Sam), ftm.guru, Eliteness.netowork & Equalizer.exchange * * Version: v4.11.0 * - Prohibit notifyRewards without existing farmers * - Trap dust from last farmer * * Version: v1.3.0 * - Split `baseReward` * - veRewards Split Ratio * - SplitLockTime * - Gauge Receipts (ERC20) Tracker * * * SPDX-License-Identifier: UNLICENSED */ /** *v1.5.5 *0xf438b2fdf46ea176ebf99ec7852c4699e8e38b1f *Submitted for verification at FtmScan.com on 2023-03-27 */ pragma solidity 0.8.9; // File: contracts/interfaces/IGaugeFactory.sol interface IGaugeFactory { function createGauge(address, address, address, bool, address[] memory) external returns (address); } // File: contracts/interfaces/IVotingEscrow.sol interface IVotingEscrow { struct Point { int128 bias; int128 slope; // # -dweight / dt uint256 ts; uint256 blk; // block } function token() external view returns (address); function team() external returns (address); function epoch() external view returns (uint); function point_history(uint loc) external view returns (Point memory); function user_point_history(uint tokenId, uint loc) external view returns (Point memory); function user_point_epoch(uint tokenId) external view returns (uint); function ownerOf(uint) external view returns (address); function isApprovedOrOwner(address, uint) external view returns (bool); function transferFrom(address, address, uint) external; function voting(uint tokenId) external; function abstain(uint tokenId) external; function attach(uint tokenId) external; function detach(uint tokenId) external; function checkpoint() external; function deposit_for(uint tokenId, uint value) external; function create_lock_for(uint, uint, address) external returns (uint); function balanceOfNFT(uint) external view returns (uint); function totalSupply() external view returns (uint); } // File: contracts/interfaces/IVoter.sol interface IVoter { function _ve() external view returns (address); function governor() external view returns (address); function emergencyCouncil() external view returns (address); function protocolFeesTaker() external view returns (address); function attachTokenToGauge(uint _tokenId, address account) external; function attachable() external view returns (bool); function protocolFeesPerMillion() external view returns (uint); function detachTokenFromGauge(uint _tokenId, address account) external; function emitDeposit(uint _tokenId, address account, uint amount) external; function emitWithdraw(uint _tokenId, address account, uint amount) external; function isWhitelisted(address token) external view returns (bool); function notifyRewardAmount(uint amount) external; function distribute(address _gauge) external; } // File: contracts/interfaces/IPair.sol interface IPair { function metadata() external view returns (uint dec0, uint dec1, uint r0, uint r1, bool st, address t0, address t1); function claimFees() external returns (uint, uint); function tokens() external returns (address, address); function transferFrom(address src, address dst, uint amount) external returns (bool); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function burn(address to) external returns (uint amount0, uint amount1); function mint(address to) external returns (uint liquidity); function getReserves() external view returns (uint _reserve0, uint _reserve1, uint _blockTimestampLast); function getAmountOut(uint, address) external view returns (uint); } // File: contracts/interfaces/IERC20.sol interface IERC20 { function totalSupply() external view returns (uint256); function transfer(address recipient, uint amount) external returns (bool); function symbol() external view returns (string memory); function name() external view returns (string memory); function decimals() external view returns (uint8); function balanceOf(address) external view returns (uint); function transferFrom(address sender, address recipient, uint amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); } // File: contracts/interfaces/IBribe.sol interface IBribe { function _deposit(uint amount, uint tokenId) external; function _withdraw(uint amount, uint tokenId) external; function getRewardForOwner(uint tokenId, address[] memory tokens) external; function notifyRewardAmount(address token, uint amount) external; function left(address token) external view returns (uint); function rewardsListLength() external view returns (uint); function rewards(uint) external view returns (address); } library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * > It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } contract ReentrancyGuard { /// @dev counter to allow mutex lock with only one SSTORE operation uint256 private _guardCounter; constructor () { // The counter starts at one to prevent changing it from zero to a non-zero // value, which is a more expensive operation. _guardCounter = 1; } /** * @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() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require(localCounter == _guardCounter, "RG!"); } } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: non-zero to non-zero" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: LLC fail"); //low-level call fail if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: !success"); } } } 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: +OF"); // 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) { require(b <= a, "SafeMath: -OF"); // subtraction overflow 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-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: *OF"); // 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) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: /0"); // division by zero 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) { require(b != 0, "SafeMath: %0"); // modulo by zero" return a % b; } } contract GaugeEquivalent is ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; /* ========== STATE VARIABLES ========== */ struct Reward { address rewardsDistributor; uint256 rewardsDuration; uint256 periodFinish; uint256 rewardRate; uint256 lastUpdateTime; uint256 rewardPerTokenStored; } // Constants IERC20 public stake; IVotingEscrow public ve; IVoter public voter; bool public isForPair; address public baseReward; bool public paused; mapping(address => Reward) public rewardData; address[] public rewardTokens; address[] public bribeTokens; IBribe public bribe; // user -> reward token -> amount mapping(address => mapping(address => uint256)) public userRewardPerTokenPaid; mapping(address => mapping(address => uint256)) public rewards; mapping(address => bool) public isReward; mapping(address => bool) public isBribeToken; uint256 private _totalSupply; mapping(address => uint256) private _balances; address public feeTaker; uint256 public splitRatio; //per million uint256 public splitLocktime; mapping(address => uint) public payouts; mapping(address => uint) public payoutsNotified; mapping(address => mapping(address => uint)) public earnings; mapping(address => uint) public totalFeesPayouts; /* ========== CONSTRUCTOR ========== */ constructor( address _stake, address _ebribe, address __ve, address _voter, bool _forPair, address[] memory _allowedRewardTokens ) { stake = IERC20(_stake); bribe = IBribe(_ebribe); ve = IVotingEscrow(__ve); voter = IVoter(_voter); isForPair = _forPair; address _baseReward = ve.token(); baseReward = _baseReward; splitLocktime = 26 weeks; for (uint i; i < _allowedRewardTokens.length; i++) { if (_allowedRewardTokens[i] != address(0)) { isReward[_allowedRewardTokens[i]] = true; rewardTokens.push(_allowedRewardTokens[i]); rewardData[_allowedRewardTokens[i]].rewardsDistributor = _voter; rewardData[_allowedRewardTokens[i]].rewardsDuration = 7 days; } } if(_forPair) { //claimFees : Bribe Rewards //Pre-approve to save gas, since both Bribe & Gauge are immutable (address _token0, address _token1) = IPair(_stake).tokens(); IERC20(_token0).approve(_ebribe, type(uint256).max); IERC20(_token1).approve(_ebribe, type(uint256).max); bribeTokens.push(_token0); bribeTokens.push(_token1); isBribeToken[_token0] = true; isBribeToken[_token1] = true; emit BribeTokenSet(_token0, _ebribe, true); emit BribeTokenSet(_token1, _ebribe, true); } ///else ve.team() must manually `addBribeTokens()` IERC20(_baseReward).approve(address(__ve), type(uint256).max); } /* ========== VIEWS ========== */ function name() external view returns (string memory) { return string(abi.encodePacked("Equalizer Gauge for ", stake.name())); } function symbol() external view returns (string memory) { return string(abi.encodePacked("EQ.G:", stake.symbol())); } function decimals() external view returns (uint256) { return stake.decimals(); } function totalSupply() external view returns (uint256) { return _totalSupply; } function balanceOf(address account) external view returns (uint256) { return _balances[account]; } function lastTimeRewardApplicable(address _rewardsToken) public view returns (uint256) { return Math.min(block.timestamp, rewardData[_rewardsToken].periodFinish); } function rewardPerToken(address _rewardsToken) public view returns (uint256) { if (_totalSupply == 0) { return rewardData[_rewardsToken].rewardPerTokenStored; } return rewardData[_rewardsToken].rewardPerTokenStored.add( lastTimeRewardApplicable(_rewardsToken).sub(rewardData[_rewardsToken].lastUpdateTime).mul(rewardData[_rewardsToken].rewardRate).mul(1e18).div(_totalSupply) ); } /// @param account 1 /// @param _rewardsToken 2 function earnedBy(address account, address _rewardsToken) public view returns (uint256) { return _balances[account].mul(rewardPerToken(_rewardsToken).sub(userRewardPerTokenPaid[account][_rewardsToken])).div(1e18).add(rewards[account][_rewardsToken]); } /// Backwards compatible view with 3qu471738 <= v1.3 /// @param _rewardsToken 1 /// @param account 2 function earned(address _rewardsToken, address account) public view returns (uint256) { return earnedBy(account, _rewardsToken); } function getRewardForDuration(address _rewardsToken) external view returns (uint256) { return rewardData[_rewardsToken].rewardRate.mul(rewardData[_rewardsToken].rewardsDuration); } function left(address _rewardsToken) external view returns (uint) { if (block.timestamp >= rewardData[_rewardsToken].periodFinish) return 0; uint256 remaining = rewardData[_rewardsToken].periodFinish.sub(block.timestamp); return remaining.mul(rewardData[_rewardsToken].rewardRate); } function rewardsListLength() external view returns (uint) { return rewardTokens.length; } function bribesListLength() external view returns (uint) { return bribeTokens.length; } /* ========== BACKWARDS-COMPATIBLE VIEW FUNCTIONS ========== */ function _ve() external view returns (address) { return address(ve); } function periodFinish(address _tkn) external view returns (uint) { return rewardData[_tkn].periodFinish; } function rewardRate(address _tkn) external view returns (uint) { return rewardData[_tkn].rewardRate; } function lastUpdateTime(address _tkn) external view returns (uint) { return rewardData[_tkn].lastUpdateTime; } /* ========== MUTATIVE FUNCTIONS ========== */ function setRewardsDistributor(address _rewardsToken, address _rewardsDistributor) external onlyOwner { rewardData[_rewardsToken].rewardsDistributor = _rewardsDistributor; } function deposit(uint256 amount) public nonReentrant notPaused updateReward(msg.sender) { require(amount > 0, "0a"); // Cannot stake 0 _totalSupply = _totalSupply.add(amount); _balances[msg.sender] = _balances[msg.sender].add(amount); stake.safeTransferFrom(msg.sender, address(this), amount); emit Deposit(msg.sender, amount); emit Transfer(address(0), msg.sender, amount); //_claimFees(); } function depositFor(address _user, uint256 amount) public nonReentrant notPaused updateReward(_user) { require(amount > 0, "0a"); // Cannot stake 0 _totalSupply = _totalSupply.add(amount); _balances[_user] = _balances[_user].add(amount); stake.safeTransferFrom(msg.sender, address(this), amount); emit Deposit(_user, amount); emit Transfer(address(0), _user, amount); //_claimFees(); } function depositAll() external { deposit(stake.balanceOf(msg.sender)); } function depositAllFor(address _user) external { depositFor(_user, stake.balanceOf(msg.sender)); } function withdraw(uint256 amount) public nonReentrant updateReward(msg.sender) { require(amount > 0, "0a"); // Cannot withdraw 0 require(amount < _totalSupply, "0t"); // Last Farmer should reduce withdraw amount by 1; Please use (amount-1) _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); stake.safeTransfer(msg.sender, amount); emit Withdrawn(msg.sender, amount); emit Transfer(msg.sender, address(0), amount); //_claimFees(); } function withdrawAll() external { withdraw(_balances[msg.sender]); } function exit() external { withdraw(_balances[msg.sender]); getReward(); } function getReward() public nonReentrant updateReward(msg.sender) { for (uint i; i < rewardTokens.length; i++) { address _rewardsToken = rewardTokens[i]; uint256 _reward = rewards[msg.sender][_rewardsToken]; _sendReward(msg.sender, _rewardsToken, _reward); } _claimFees(); } function getReward(address account, address[] memory tokens) external { require(msg.sender == account || msg.sender == address(voter), "Un-authorized claim!"); voter.distribute(address(this)); _getReward(account, tokens); } function _getReward(address account, address[] memory _tokens) internal nonReentrant updateReward(account) { for (uint i; i < _tokens.length; i++) { address _rewardsToken = _tokens[i]; uint256 _reward = rewards[account][_rewardsToken]; _sendReward(account, _rewardsToken, _reward); } _claimFees(); } function _sendReward(address _acc, address _toke, uint _rew) internal { if (_rew > 0) { rewards[_acc][_toke] = 0; if(_toke == baseReward) { uint _spr = splitRatio; if(_spr > 0) { uint _toLock = ( _rew.mul(_spr) ).div(1e6); ve.create_lock_for(_toLock, splitLocktime, _acc); IERC20(_toke).safeTransfer(_acc, _rew.sub(_toLock)); } else { IERC20(_toke).safeTransfer(_acc, _rew); } } else { IERC20(_toke).safeTransfer(_acc, _rew); } emit ClaimRewards(_toke, _acc, _rew); payouts[_toke] += _rew; earnings[_acc][_toke] += _rew; } } function notifyRewardAmount(address _rewardsToken, uint256 _reward) external nonReentrant updateReward(address(0)) { require(_rewardsToken != address(stake), "!!stk"); // Can't distribute staked token as reward! require(isReward[_rewardsToken], "Not a reward!!" ); require(_totalSupply>0,"No Farmers!"); /// The old pattern to get force collection of fees at least once a week during emission distribution to this gauge /// & distribute it to voters over the next week via the (external) Bribe _claimFees(); /// Support feeOnTransfer tokens like ELITE etc. uint rtbb = IERC20(_rewardsToken).balanceOf(address(this)); // handle the transfer of reward tokens via `transferFrom` to reduce the number // of transactions required and ensure correctness of the reward amount IERC20(_rewardsToken).safeTransferFrom(msg.sender, address(this), _reward); uint rtba = IERC20(_rewardsToken).balanceOf(address(this)); _reward = rtba - rtbb; require(_reward > 0, "0r"); // Reward amount must be greater than 0! if (block.timestamp >= rewardData[_rewardsToken].periodFinish) { rewardData[_rewardsToken].rewardRate = _reward.div(rewardData[_rewardsToken].rewardsDuration); } else { //Griefing Protection Enabled for Unknown reward adders uint _oldRewardRate = rewardData[_rewardsToken].rewardRate; uint256 remaining = rewardData[_rewardsToken].periodFinish.sub(block.timestamp); uint256 leftover = remaining.mul(rewardData[_rewardsToken].rewardRate); rewardData[_rewardsToken].rewardRate = _reward.add(leftover).div(rewardData[_rewardsToken].rewardsDuration); if( msg.sender!=address(voter) || msg.sender!=rewardData[_rewardsToken].rewardsDistributor || msg.sender!=ve.team() ) { require( ( rewardData[_rewardsToken].rewardRate >= _oldRewardRate || _reward > leftover ), "EGPE" // Enhanced Griefing Protection Enabled! ); } } rewardData[_rewardsToken].lastUpdateTime = block.timestamp; rewardData[_rewardsToken].periodFinish = block.timestamp.add(rewardData[_rewardsToken].rewardsDuration); emit RewardAdded(_rewardsToken, msg.sender, _reward); payoutsNotified[_rewardsToken] += _reward; } function claimFees() external nonReentrant returns (uint claimed0, uint claimed1) { return _claimFees(); } function _claimFees() internal returns (uint claimed0, uint claimed1) { uint _pfpm = voter.protocolFeesPerMillion(); address _pft = _pfpm > 0 ? voter.protocolFeesTaker() : address(0); /// Equa7izer v1.5: Support Custom pools to be Gaugable if (!isForPair) { /// For non-official/external/independent gauges only /// If compatible, the claimed fees should be notified to Bribe /// Else, this contract will hold the fees & ve.team() can rescue() uint _bn = bribeTokens.length; IERC20[] memory _brews = new IERC20[](_bn); uint[] memory _brewbals = new uint[](_bn); for(uint _n; _n < _bn; _n++) { _brews[_n] = IERC20( bribeTokens[_n] ); /// Record current balance to protect gauge deposits & rewards. /// Also Support feeOnTransfer tokens like ELITE etc. /// Also makes sure a bribe-reward isnt 'killed' or uninitialized. _brewbals[_n] = address(_brews[_n]) == address(0) ? 0 : _brews[_n].balanceOf(address(this)); } try IPair(address(stake)).claimFees() { /// if call succeeds, gauge will have a surplus of extra tokens which can be sent to bribes /// useful in cases of non-equa1izer lps, like conc., weighted or multi-token Liquidity pools for(uint _n = 0; _n < _bn; _n++) { /// Don't trigger bribes for 0x00 rewards uint _a = address(_brews[_n]) == address(0) ? 0 : _brews[_n].balanceOf(address(this)); /// Trigger only when a token balance increases when we try IPair(stake).claimFees() /// because there could possibly be an overlap between rewardTokens & bribeTokens if(_a > _brewbals[_n]) { ///Protocol Fees if( ( (_a - _brewbals[_n]) * _pfpm) / 1e6 > 0) { _brews[_n].transfer(_pft, ( (_a.sub(_brewbals[_n])) * _pfpm) / 1e6 ); emit ProtocolFees(msg.sender,_pft,address(_brews[_n]),((_a.sub(_brewbals[_n])) * _pfpm) / 1e6); _a = _brews[_n].balanceOf(address(this)); } ///Normal Fees -> Bribe if (feeTaker == address(0)) { bribe.notifyRewardAmount( address(_brews[_n]), (_a.sub(_brewbals[_n])) ); emit ClaimFees(msg.sender, address(bribe), address(_brews[_n]), (_a - _brewbals[_n]) ); totalFeesPayouts[ address(_brews[_n]) ] += (_a - _brewbals[_n]); } ///Re-channeled Fees -> FeesTaker else { _brews[_n].transfer(feeTaker, (_a.sub(_brewbals[_n])) ); emit ClaimFees(msg.sender, feeTaker, address(_brews[_n]), (_a - _brewbals[_n]) ); totalFeesPayouts[ address(_brews[_n]) ] += (_a - _brewbals[_n]); } } /// else: we dont have any fees here ser! } return (0, 0); } catch { /// if call fails, do nothing (much). return (0, 0); } } //else: /// For actual Protocol gauges, created by Voter, for E9ua1izer Factory Pairs (address _token0, address _token1) = IPair(address(stake)).tokens(); /// Support feeOnTransfer tokens like ELITE etc. uint t0bb = IERC20(_token0).balanceOf(address(this)); uint t1bb = IERC20(_token1).balanceOf(address(this)); //(claimed0, claimed1) = try IPair(address(stake)).claimFees() { claimed0 = IERC20(_token0).balanceOf(address(this)) - t0bb; claimed1 = IERC20(_token1).balanceOf(address(this)) - t1bb; //claimed0 = t0ba - t0bb; //claimed1 = t1ba - t1bb; ///ProtocolFees if( ( claimed0 * _pfpm) / 1e6 > 0) { IERC20(_token0).transfer(_pft, (claimed0*_pfpm)/1e6 ); emit ProtocolFees(msg.sender,_token0,_pft,(claimed0*_pfpm)/1e6); claimed0 = IERC20(_token0).balanceOf(address(this)).sub(t0bb); } if( ( claimed1 * _pfpm) / 1e6 > 0) { IERC20(_token1).transfer(_pft, (claimed1*_pfpm)/1e6 ); emit ProtocolFees(msg.sender,_token1,_pft,(claimed1*_pfpm)/1e6); claimed1 = IERC20(_token1).balanceOf(address(this)).sub(t1bb); } ///Normal Fees -> Bribe if (feeTaker == address(0)) { if (claimed0 > 0) { bribe.notifyRewardAmount(_token0, claimed0); totalFeesPayouts[ _token0 ] += claimed0; // stores total token0 fees claimed since genesis emit ClaimFees(msg.sender, address(bribe), _token0, claimed0); } if (claimed1 > 0) { bribe.notifyRewardAmount(_token1, claimed1); totalFeesPayouts[ _token1 ] += claimed1; // stores total token1 fees claimed since genesis emit ClaimFees(msg.sender, address(bribe), _token1, claimed1); } } ///Re-channeled Fees -> FeesTaker else { IERC20(_token0).transfer(feeTaker, claimed0); IERC20(_token1).transfer(feeTaker, claimed1); emit ClaimFees(msg.sender, feeTaker, _token0, claimed0); emit ClaimFees(msg.sender, feeTaker, _token1, claimed1); totalFeesPayouts[ _token0 ] += claimed0; // stores total token0 fees claimed since genesis totalFeesPayouts[ _token1 ] += claimed1; // stores total token1 fees claimed since genesis } return (claimed0, claimed1); } catch { ///dont revert if _claimFees_ fails, just skip it. Useful with fee-on-transfer tokens. return (0, 0); } } /* ========== RESTRICTED FUNCTIONS ========== */ function addReward(address _rewardsToken, address _rewardsDistributor, uint256 _rewardsDuration) public onlyOwner { require( isReward[_rewardsToken] == false && rewardData[_rewardsToken].rewardsDuration == 0 , "AI" // Already Initialized! ); require( _rewardsToken != address(stake), "!!stk"); // Cannot reward staking token! rewardTokens.push(_rewardsToken); isReward[_rewardsToken] = true; rewardData[_rewardsToken].rewardsDistributor = _rewardsDistributor; rewardData[_rewardsToken].rewardsDuration = _rewardsDuration; } /// This can break claims of rewards! /// Useful during a platform-wide upgrade (optional) function rescue(uint _amt, address _token, address _to) external onlyOwner { if(_token == address(stake)) { /// totalSupply marks the sum of all user deposits. /// surplus checks for any additional holdings that are not user-deposits /// Helps rescue of extra rewards from single-side same-token staking. uint _surplus = (stake.balanceOf(address(this))).sub(_totalSupply); require( _amt <= _surplus, "!!stk"); // Rescuing User Deposits Prohibited! } IERC20(_token).transfer(_to, _amt); emit Recovered(_token, _amt); } function setRewardsDuration(address _rewardsToken, uint256 _rewardsDuration) external onlyOwner { require( block.timestamp > rewardData[_rewardsToken].periodFinish, "RPa" // Reward period still active ); require(_rewardsDuration > 0, "0d"); // Reward duration must be non-zero rewardData[_rewardsToken].rewardsDuration = _rewardsDuration; emit RewardsDurationUpdated(_rewardsToken, rewardData[_rewardsToken].rewardsDuration); } function addBribeToken(address _t) public onlyOwner { require(isBribeToken[_t] == false, "BTa"); // Bribe Token already Active! require( _t != address(stake), "!!stk"); // Cannot bribe staking token! IERC20(_t).approve(address(bribe), type(uint256).max); bribeTokens.push(_t); isBribeToken[_t] = true; emit BribeTokenSet(_t, address(bribe), true); } function removeBribeToken(address _t) public onlyOwner { require(isBribeToken[_t] == true, "BTi"); // Bribe Token Inactive! IERC20(_t).approve(address(bribe), 0); uint _bl = bribeTokens.length; if(bribeTokens[_bl-1]==_t) { bribeTokens.pop(); isBribeToken[_t] = false; } else { for(uint i; i < bribeTokens.length - 1; i++) { if(bribeTokens[i]==_t) { bribeTokens[i] = bribeTokens[_bl-1]; bribeTokens.pop(); isBribeToken[_t] = false; } } } emit BribeTokenSet(_t, address(bribe), false); } function addBribeTokens(address[] memory _tks) external onlyOwner { for(uint _j; _j < _tks.length; _j++) { addBribeToken(_tks[_j]); } } function removeBribeTokens(address[] memory _tks) external onlyOwner { for(uint _j; _j < _tks.length; _j++) { removeBribeToken(_tks[_j]); } } /// When feeTaker is set, all Fees Claims go to it instead of going to the Bribe. /// Useful during a platform-wide upgrade (optional) function setFeeTaker(address _ft) external onlyOwner { feeTaker = _ft; } function setPaused(bool _b) external onlyOwner { paused = _b; } function setBribe(address _b) external { require(msg.sender==address(voter), "Who U"); // Un-authorized! address _ob = address(bribe); for(uint i;i<bribeTokens.length;i++) { address _rt = bribeTokens[i]; IERC20(_rt).approve(_ob, 0); // revoke old-bribe allowances IERC20(_rt).approve(_b, type(uint256).max); // approve new bribe } bribe = IBribe(_b); } function setSplitParameters(uint256 _sr, uint256 _st) external onlyOwner { require(_sr<=1e6, "+SR"); // SR: Must be under a million! splitRatio = _sr; splitLocktime = _st; } /* ========== MODIFIERS ========== */ modifier updateReward(address account) { for (uint i; i < rewardTokens.length; i++) { address token = rewardTokens[i]; rewardData[token].rewardPerTokenStored = rewardPerToken(token); rewardData[token].lastUpdateTime = lastTimeRewardApplicable(token); if (account != address(0)) { rewards[account][token] = earnedBy(account, token); userRewardPerTokenPaid[account][token] = rewardData[token].rewardPerTokenStored; } } _; } modifier onlyOwner { require(msg.sender==ve.team(), "!TEAM"); // Only ve.team! _; } modifier notPaused { require(!paused, "PAUSE"); // Paused _; } /* ========== EVENTS ========== */ event RewardAdded(address indexed token, address indexed notifier, uint256 reward); event Deposit(address indexed user, uint256 amount); event Withdrawn(address indexed user, uint256 amount); event Transfer(address indexed from, address indexed to, uint256 amount); event ClaimRewards(address indexed token, address indexed user, uint256 reward); event RewardsDurationUpdated(address indexed token, uint256 newDuration); event Recovered(address indexed token, uint256 amount); event BribeTokenSet(address indexed token, address indexed bribe, bool indexed active); event ProtocolFees(address indexed initiator, address indexed taker, address indexed token, uint amount); event ClaimFees(address indexed initiator, address indexed beneficiary, address indexed token, uint amount); } // File: contracts/factories/GaugeFactory.sol contract GaugeFactory is IGaugeFactory { address public lastGauge; event GaugeCreated(address indexed maker, address indexed pool, address g, address b, address v, bool i, address[] a); function createGauge( address _pool, address _bribe, address _ve, bool isPair, address[] memory _allowedRewards ) external returns (address) { GaugeEquivalent gauge = new GaugeEquivalent( _pool, _bribe, _ve, msg.sender, isPair, _allowedRewards ); lastGauge = address(gauge); emit GaugeCreated(msg.sender, _pool, address(gauge), _bribe, _ve, isPair, _allowedRewards); return lastGauge; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_stake","type":"address"},{"internalType":"address","name":"_ebribe","type":"address"},{"internalType":"address","name":"__ve","type":"address"},{"internalType":"address","name":"_voter","type":"address"},{"internalType":"bool","name":"_forPair","type":"bool"},{"internalType":"address[]","name":"_allowedRewardTokens","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bribe","type":"address"},{"indexed":true,"internalType":"bool","name":"active","type":"bool"}],"name":"BribeTokenSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"taker","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"notifier","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"RewardsDurationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","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":"_ve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_t","type":"address"}],"name":"addBribeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tks","type":"address[]"}],"name":"addBribeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_rewardsDistributor","type":"address"},{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"}],"name":"addReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bribe","outputs":[{"internalType":"contract IBribe","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bribeTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bribesListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimFees","outputs":[{"internalType":"uint256","name":"claimed0","type":"uint256"},{"internalType":"uint256","name":"claimed1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"depositAllFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"earnedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"earnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeTaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"getRewardForDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBribeToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isForPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tkn","type":"address"}],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"left","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"uint256","name":"_reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"payouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"payoutsNotified","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tkn","type":"address"}],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_t","type":"address"}],"name":"removeBribeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tks","type":"address[]"}],"name":"removeBribeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardData","outputs":[{"internalType":"address","name":"rewardsDistributor","type":"address"},{"internalType":"uint256","name":"rewardsDuration","type":"uint256"},{"internalType":"uint256","name":"periodFinish","type":"uint256"},{"internalType":"uint256","name":"rewardRate","type":"uint256"},{"internalType":"uint256","name":"lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"rewardPerTokenStored","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tkn","type":"address"}],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_b","type":"address"}],"name":"setBribe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ft","type":"address"}],"name":"setFeeTaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_b","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_rewardsDistributor","type":"address"}],"name":"setRewardsDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"}],"name":"setRewardsDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sr","type":"uint256"},{"internalType":"uint256","name":"_st","type":"uint256"}],"name":"setSplitParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"splitLocktime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"splitRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stake","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalFeesPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ve","outputs":[{"internalType":"contract IVotingEscrow","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"contract IVoter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162005c1638038062005c1683398101604081905262000034916200063b565b6001600081815581546001600160a01b03808a166001600160a01b031992831617909355600880548985169083161790556002805488851692168217905560038054861515600160a01b026001600160a81b0319909116948816949094179390931790925560408051637e062a3560e11b8152905191929163fc0c546a91600480820192602092909190829003018186803b158015620000d357600080fd5b505afa158015620000e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010e91906200076c565b600480546001600160a01b0319166001600160a01b03831617905562eff100601155905060005b8251811015620002f05760006001600160a01b03168382815181106200015f576200015f62000791565b60200260200101516001600160a01b031614620002db576001600b600085848151811062000191576200019162000791565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506006838281518110620001e757620001e762000791565b6020908102919091018101518254600181018455600093845291832090910180546001600160a01b0319166001600160a01b03909216919091179055835186916005918690859081106200023f576200023f62000791565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555062093a8060056000858481518110620002ab57620002ab62000791565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600101819055505b80620002e781620007a7565b91505062000135565b5082156200056257600080886001600160a01b0316639d63848a6040518163ffffffff1660e01b81526004016040805180830381600087803b1580156200033657600080fd5b505af11580156200034b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003719190620007d1565b60405163095ea7b360e01b81526001600160a01b038b8116600483015260001960248301529294509092509083169063095ea7b390604401602060405180830381600087803b158015620003c457600080fd5b505af1158015620003d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ff919062000809565b5060405163095ea7b360e01b81526001600160a01b038981166004830152600019602483015282169063095ea7b390604401602060405180830381600087803b1580156200044c57600080fd5b505af115801562000461573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000487919062000809565b5060078054600181810183557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68891820180546001600160a01b038088166001600160a01b0319928316811790935585548085019096559490930180548686169416841790556000818152600c6020526040808220805460ff19908116861790915594825280822080549095168417909455925191938c1692909160008051602062005bf68339815191529190a46040516001906001600160a01b03808b16919084169060008051602062005bf683398151915290600090a450505b60405163095ea7b360e01b81526001600160a01b038681166004830152600019602483015282169063095ea7b390604401602060405180830381600087803b158015620005ae57600080fd5b505af1158015620005c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005e9919062000809565b505050505050505062000827565b80516001600160a01b03811681146200060f57600080fd5b919050565b805180151581146200060f57600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156200065557600080fd5b6200066087620005f7565b9550602062000671818901620005f7565b95506200068160408901620005f7565b94506200069160608901620005f7565b9350620006a16080890162000614565b60a08901519093506001600160401b0380821115620006bf57600080fd5b818a0191508a601f830112620006d457600080fd5b815181811115620006e957620006e962000625565b8060051b604051601f19603f8301168101818110858211171562000711576200071162000625565b60405291825284820192508381018501918d8311156200073057600080fd5b938501935b8285101562000759576200074985620005f7565b8452938501939285019262000735565b8096505050505050509295509295509295565b6000602082840312156200077f57600080fd5b6200078a82620005f7565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415620007ca57634e487b7160e01b600052601160045260246000fd5b5060010190565b60008060408385031215620007e557600080fd5b620007f083620005f7565b91506200080060208401620005f7565b90509250929050565b6000602082840312156200081c57600080fd5b6200078a8262000614565b6153bf80620008376000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80635a6e6eab116101f457806399bcc0521161011a578063de5f6268116100ad578063e81defce1161007c578063e81defce14610931578063e9fad8ee14610944578063f12297771461094c578063f5ae22401461095f57600080fd5b8063de5f6268146108e2578063e5748213146108ea578063e6886396146108fe578063e70b9e271461090657600080fd5b8063d0ed26ae116100e9578063d0ed26ae14610863578063d294f09314610876578063da09d19d14610893578063dd501205146108bf57600080fd5b806399bcc05214610817578063b66503cf1461082a578063b6b55f251461083d578063bcd110141461085057600080fd5b8063749f1044116101925780638a501100116101615780638a501100146107e35780638dd598fb146107f65780638f27f1041461080757806395d89b411461080f57600080fd5b8063749f1044146107a257806376ad03bc146107b55780637bb7bed1146107c8578063853828b6146107db57600080fd5b8063638634ee116101ce578063638634ee1461071b57806365bcfbe71461072e5780637035ab981461074e57806370a082311461077957600080fd5b80635a6e6eab146106eb5780635c59f3bb146106fe5780635c975abb1461070757600080fd5b80632f4f21e2116102d95780633f695b45116102775780634d5ce038116102465780634d5ce0381461067f5780634ec5908d146106b257806352f18405146106c55780635557cc61146106d857600080fd5b80633f695b45146105c257806345797e67146105d557806346c96aac146105e857806348e5d9f8146105fb57600080fd5b8063313ce567116102b3578063313ce5671461058c57806337d0208c146105945780633a4b66f1146105a75780633d18b912146105ba57600080fd5b80632f4f21e2146105535780633010d8ef1461056657806331279d3d1461057957600080fd5b806318160ddd116103515780632378bea6116103205780632378bea6146104d65780632af2cecc146104e95780632ce9aead146105145780632e1a7d4d1461054057600080fd5b806318160ddd146104645780631f8507161461046c578063211dc32d14610497578063221ca18c146104aa57600080fd5b80630efeb2fb1161038d5780630efeb2fb146103fe578063102a7ad41461041e57806315ae92f71461043157806316c38b3c1461045157600080fd5b8063023df767146103b457806306fdde03146103c95780630a91a2c4146103e7575b600080fd5b6103c76103c2366004614d0b565b610972565b005b6103d1610bcc565b6040516103de9190614d54565b60405180910390f35b6103f060115481565b6040519081526020016103de565b6103f061040c366004614d0b565b60136020526000908152604090205481565b6103f061042c366004614d87565b610c71565b6103f061043f366004614d0b565b60156020526000908152604090205481565b6103c761045f366004614dce565b610d0c565b600d546103f0565b60025461047f906001600160a01b031681565b6040516001600160a01b0390911681526020016103de565b6103f06104a5366004614d87565b610de2565b6103f06104b8366004614d0b565b6001600160a01b031660009081526005602052604090206003015490565b6103c76104e4366004614deb565b610dee565b6103f06104f7366004614d87565b601460209081526000928352604080842090915290825290205481565b6103f0610522366004614d0b565b6001600160a01b031660009081526005602052604090206004015490565b6103c761054e366004614e17565b610f87565b6103c7610561366004614deb565b6111dc565b6103c7610574366004614d0b565b61145d565b6103c7610587366004614f00565b6114e1565b6103f06115ac565b60085461047f906001600160a01b031681565b60015461047f906001600160a01b031681565b6103c7611631565b6103c76105d0366004614d87565b6117ea565b6103c76105e3366004614f50565b6118d0565b60035461047f906001600160a01b031681565b610648610609366004614d0b565b60056020819052600091825260409091208054600182015460028301546003840154600485015494909501546001600160a01b03909316949193909286565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c0016103de565b6106a261068d366004614d0b565b600b6020526000908152604090205460ff1681565b60405190151581526020016103de565b6103c76106c0366004614d0b565b6119cc565b6103c76106d3366004614f72565b611aa6565b6103c76106e6366004614d0b565b611b9e565b6103c76106f9366004614f72565b611f41565b6103f060105481565b6004546106a290600160a01b900460ff1681565b6103f0610729366004614d0b565b612039565b6103f061073c366004614d0b565b60126020526000908152604090205481565b6103f061075c366004614d87565b600960209081526000928352604080842090915290825290205481565b6103f0610787366004614d0b565b6001600160a01b03166000908152600e602052604090205490565b600f5461047f906001600160a01b031681565b60045461047f906001600160a01b031681565b61047f6107d6366004614e17565b612060565b6103c761208a565b6103c76107f1366004614fa7565b6120a5565b6002546001600160a01b031661047f565b6007546103f0565b6103d16122e8565b6103f0610825366004614d0b565b612379565b6103c7610838366004614deb565b6123fa565b6103c761084b366004614e17565b612a4e565b6103f061085e366004614d0b565b612c85565b6103c7610871366004614fe9565b612cb1565b61087e612e8c565b604080519283526020830191909152016103de565b6103f06108a1366004614d0b565b6001600160a01b031660009081526005602052604090206002015490565b6106a26108cd366004614d0b565b600c6020526000908152604090205460ff1681565b6103c7612edb565b6003546106a290600160a01b900460ff1681565b6006546103f0565b6103f0610914366004614d87565b600a60209081526000928352604080842090915290825290205481565b6103c761093f366004614d0b565b612f58565b6103c7613111565b6103f061095a366004614d0b565b613132565b61047f61096d366004614e17565b6131d6565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156109c257600080fd5b505af11580156109d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fa919061502a565b6001600160a01b0316336001600160a01b031614610a335760405162461bcd60e51b8152600401610a2a90615047565b60405180910390fd5b6001600160a01b0381166000908152600c602052604090205460ff1615610a825760405162461bcd60e51b815260206004820152600360248201526242546160e81b6044820152606401610a2a565b6001546001600160a01b0382811691161415610ab05760405162461bcd60e51b8152600401610a2a90615066565b60085460405163095ea7b360e01b81526001600160a01b038381169263095ea7b392610ae6929091169060001990600401615085565b602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b38919061509e565b506007805460018082019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b038481169182179092556000818152600c6020526040808220805460ff19168617905560085490519316927f6f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d059190a450565b600154604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301926000929190829003018186803b158015610c1157600080fd5b505afa158015610c25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c4d91908101906150bb565b604051602001610c5d919061514f565b604051602081830303815290604052905090565b6001600160a01b038083166000818152600a60209081526040808320948616808452948252808320549383526009825280832094835293905291822054610d039190610cfd90670de0b6b3a764000090610cf790610cd890610cd289613132565b906131e6565b6001600160a01b0389166000908152600e60205260409020549061323c565b906132a1565b906132ed565b90505b92915050565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d5c57600080fd5b505af1158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d94919061502a565b6001600160a01b0316336001600160a01b031614610dc45760405162461bcd60e51b8152600401610a2a90615047565b60048054911515600160a01b0260ff60a01b19909216919091179055565b6000610d038284610c71565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610e3e57600080fd5b505af1158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e76919061502a565b6001600160a01b0316336001600160a01b031614610ea65760405162461bcd60e51b8152600401610a2a90615047565b6001600160a01b0382166000908152600560205260409020600201544211610ef65760405162461bcd60e51b815260206004820152600360248201526252506160e81b6044820152606401610a2a565b60008111610f2b5760405162461bcd60e51b81526020600482015260026024820152610c1960f21b6044820152606401610a2a565b6001600160a01b03821660008181526005602052604090819020600101839055517fad2f86b01ed93b4b3a150d448c61a4f5d8d38075d3c0c64cc0a26fd6e1f4954590610f7b9084815260200190565b60405180910390a25050565b6001600080828254610f9991906151a1565b9091555050600080549033905b60065481101561109b57600060068281548110610fc557610fc56151b9565b6000918252602090912001546001600160a01b03169050610fe581613132565b6001600160a01b0382166000908152600560208190526040909120015561100b81612039565b6001600160a01b038083166000908152600560205260409020600401919091558316156110885761103c8382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b5080611093816151cf565b915050610fa6565b50600083116110bc5760405162461bcd60e51b8152600401610a2a906151ea565b600d5483106110f25760405162461bcd60e51b81526020600482015260026024820152610c1d60f21b6044820152606401610a2a565b600d546110ff90846131e6565b600d55336000908152600e602052604090205461111c90846131e6565b336000818152600e6020526040902091909155600154611148916001600160a01b03909116908561333c565b60405183815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59060200160405180910390a260405183815260009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35060005481146111d85760405162461bcd60e51b8152600401610a2a90615206565b5050565b60016000808282546111ee91906151a1565b9091555050600054600454600160a01b900460ff16156112385760405162461bcd60e51b8152602060048201526005602482015264504155534560d81b6044820152606401610a2a565b8260005b6006548110156113315760006006828154811061125b5761125b6151b9565b6000918252602090912001546001600160a01b0316905061127b81613132565b6001600160a01b038216600090815260056020819052604090912001556112a181612039565b6001600160a01b0380831660009081526005602052604090206004019190915583161561131e576112d28382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b5080611329816151cf565b91505061123c565b50600083116113525760405162461bcd60e51b8152600401610a2a906151ea565b600d5461135f90846132ed565b600d556001600160a01b0384166000908152600e602052604090205461138590846132ed565b6001600160a01b038086166000908152600e60205260409020919091556001546113b29116333086613392565b836001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c846040516113ed91815260200190565b60405180910390a26040518381526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060005481146114585760405162461bcd60e51b8152600401610a2a90615206565b505050565b6001546040516370a0823160e01b81523360048201526114de9183916001600160a01b03909116906370a082319060240160206040518083038186803b1580156114a657600080fd5b505afa1580156114ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105619190615223565b50565b336001600160a01b038316148061150257506003546001600160a01b031633145b6115455760405162461bcd60e51b8152602060048201526014602482015273556e2d617574686f72697a656420636c61696d2160601b6044820152606401610a2a565b6003546040516363453ae160e01b81523060048201526001600160a01b03909116906363453ae190602401600060405180830381600087803b15801561158a57600080fd5b505af115801561159e573d6000803e3d6000fd5b505050506111d882826133d0565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b1580156115f157600080fd5b505afa158015611605573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611629919061523c565b60ff16905090565b600160008082825461164391906151a1565b9091555050600080549033905b6006548110156117455760006006828154811061166f5761166f6151b9565b6000918252602090912001546001600160a01b0316905061168f81613132565b6001600160a01b038216600090815260056020819052604090912001556116b581612039565b6001600160a01b03808316600090815260056020526040902060040191909155831615611732576116e68382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b508061173d816151cf565b915050611650565b5060005b6006548110156117bd57600060068281548110611768576117686151b9565b600091825260208083209091015433808452600a835260408085206001600160a01b039093168086529290935291909220549192506117a8908383613587565b505080806117b5906151cf565b915050611749565b506117c6613781565b50505060005481146114de5760405162461bcd60e51b8152600401610a2a90615206565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561183a57600080fd5b505af115801561184e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611872919061502a565b6001600160a01b0316336001600160a01b0316146118a25760405162461bcd60e51b8152600401610a2a90615047565b6001600160a01b03918216600090815260056020526040902080546001600160a01b03191691909216179055565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561192057600080fd5b505af1158015611934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611958919061502a565b6001600160a01b0316336001600160a01b0316146119885760405162461bcd60e51b8152600401610a2a90615047565b620f42408211156119c15760405162461bcd60e51b815260206004820152600360248201526215a9a960e91b6044820152606401610a2a565b601091909155601155565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611a1c57600080fd5b505af1158015611a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a54919061502a565b6001600160a01b0316336001600160a01b031614611a845760405162461bcd60e51b8152600401610a2a90615047565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611af657600080fd5b505af1158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e919061502a565b6001600160a01b0316336001600160a01b031614611b5e5760405162461bcd60e51b8152600401610a2a90615047565b60005b81518110156111d857611b8c828281518110611b7f57611b7f6151b9565b6020026020010151610972565b80611b96816151cf565b915050611b61565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611bee57600080fd5b505af1158015611c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c26919061502a565b6001600160a01b0316336001600160a01b031614611c565760405162461bcd60e51b8152600401610a2a90615047565b6001600160a01b0381166000908152600c602052604090205460ff161515600114611ca95760405162461bcd60e51b815260206004820152600360248201526242546960e81b6044820152606401610a2a565b60085460405163095ea7b360e01b81526001600160a01b038381169263095ea7b392611cde9290911690600090600401615085565b602060405180830381600087803b158015611cf857600080fd5b505af1158015611d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d30919061509e565b5060078054906001600160a01b03831690611d4c60018461525f565b81548110611d5c57611d5c6151b9565b6000918252602090912001546001600160a01b03161415611dcf576007805480611d8857611d88615276565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0384168252600c905260409020805460ff19169055611eff565b60005b600754611de19060019061525f565b811015611efd57826001600160a01b031660078281548110611e0557611e056151b9565b6000918252602090912001546001600160a01b03161415611eeb576007611e2d60018461525f565b81548110611e3d57611e3d6151b9565b600091825260209091200154600780546001600160a01b039092169183908110611e6957611e696151b9565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506007805480611ea857611ea8615276565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0385168252600c905260409020805460ff191690555b80611ef5816151cf565b915050611dd2565b505b6008546040516000916001600160a01b0390811691908516907f6f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d05908490a45050565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611f9157600080fd5b505af1158015611fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc9919061502a565b6001600160a01b0316336001600160a01b031614611ff95760405162461bcd60e51b8152600401610a2a90615047565b60005b81518110156111d85761202782828151811061201a5761201a6151b9565b6020026020010151611b9e565b80612031816151cf565b915050611ffc565b6001600160a01b038116600090815260056020526040812060020154610d06904290614b87565b6006818154811061207057600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600e60205260409020546120a390610f87565b565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156120f557600080fd5b505af1158015612109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212d919061502a565b6001600160a01b0316336001600160a01b03161461215d5760405162461bcd60e51b8152600401610a2a90615047565b6001546001600160a01b038381169116141561221f57600d546001546040516370a0823160e01b81523060048201526000926121fb9290916001600160a01b03909116906370a08231906024015b60206040518083038186803b1580156121c357600080fd5b505afa1580156121d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190615223565b90508084111561221d5760405162461bcd60e51b8152600401610a2a90615066565b505b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb9061224d9084908790600401615085565b602060405180830381600087803b15801561226757600080fd5b505af115801561227b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229f919061509e565b50816001600160a01b03167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28846040516122db91815260200190565b60405180910390a2505050565b600154604080516395d89b4160e01b815290516060926001600160a01b0316916395d89b41916004808301926000929190829003018186803b15801561232d57600080fd5b505afa158015612341573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261236991908101906150bb565b604051602001610c5d919061528c565b6001600160a01b03811660009081526005602052604081206002015442106123a357506000919050565b6001600160a01b0382166000908152600560205260408120600201546123c990426131e6565b6001600160a01b0384166000908152600560205260409020600301549091506123f390829061323c565b9392505050565b600160008082825461240c91906151a1565b90915550506000805490805b60065481101561250d57600060068281548110612437576124376151b9565b6000918252602090912001546001600160a01b0316905061245781613132565b6001600160a01b0382166000908152600560208190526040909120015561247d81612039565b6001600160a01b038083166000908152600560205260409020600401919091558316156124fa576124ae8382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b5080612505816151cf565b915050612418565b506001546001600160a01b038581169116141561253c5760405162461bcd60e51b8152600401610a2a90615066565b6001600160a01b0384166000908152600b602052604090205460ff166125955760405162461bcd60e51b815260206004820152600e60248201526d4e6f74206120726577617264212160901b6044820152606401610a2a565b6000600d54116125d55760405162461bcd60e51b815260206004820152600b60248201526a4e6f204661726d6572732160a81b6044820152606401610a2a565b6125dd613781565b50506040516370a0823160e01b81523060048201526000906001600160a01b038616906370a082319060240160206040518083038186803b15801561262157600080fd5b505afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126599190615223565b90506126706001600160a01b038616333087613392565b6040516370a0823160e01b81523060048201526000906001600160a01b038716906370a082319060240160206040518083038186803b1580156126b257600080fd5b505afa1580156126c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ea9190615223565b90506126f6828261525f565b94506000851161272d5760405162461bcd60e51b8152602060048201526002602482015261183960f11b6044820152606401610a2a565b6001600160a01b0386166000908152600560205260409020600201544210612797576001600160a01b0386166000908152600560205260409020600101546127769086906132a1565b6001600160a01b038716600090815260056020526040902060030155612977565b6001600160a01b038616600090815260056020526040812060038101546002909101549091906127c790426131e6565b6001600160a01b038916600090815260056020526040812060030154919250906127f290839061323c565b6001600160a01b038a1660009081526005602052604090206001015490915061281f90610cf78a846132ed565b6001600160a01b038a811660009081526005602052604090206003908101929092559054163314158061286c57506001600160a01b03898116600090815260056020526040902054163314155b806129105750600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156128c257600080fd5b505af11580156128d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128fa919061502a565b6001600160a01b0316336001600160a01b031614155b15612973576001600160a01b0389166000908152600560205260409020600301548311158061293e57508088115b6129735760405162461bcd60e51b8152600401610a2a906020808252600490820152634547504560e01b604082015260600190565b5050505b6001600160a01b038616600090815260056020526040902042600482018190556001909101546129a791906132ed565b6001600160a01b038716600081815260056020908152604091829020600201939093555187815233927f0f7cde3c0518e1cc590491be5861d70a2e333f7e65af2e1ebd91a3c9a3cc638d910160405180910390a36001600160a01b03861660009081526013602052604081208054879290612a239084906151a1565b9250508190555050505060005481146114585760405162461bcd60e51b8152600401610a2a90615206565b6001600080828254612a6091906151a1565b9091555050600054600454600160a01b900460ff1615612aaa5760405162461bcd60e51b8152602060048201526005602482015264504155534560d81b6044820152606401610a2a565b3360005b600654811015612ba357600060068281548110612acd57612acd6151b9565b6000918252602090912001546001600160a01b03169050612aed81613132565b6001600160a01b03821660009081526005602081905260409091200155612b1381612039565b6001600160a01b03808316600090815260056020526040902060040191909155831615612b9057612b448382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b5080612b9b816151cf565b915050612aae565b5060008311612bc45760405162461bcd60e51b8152600401610a2a906151ea565b600d54612bd190846132ed565b600d55336000908152600e6020526040902054612bee90846132ed565b336000818152600e6020526040902091909155600154612c1b916001600160a01b03909116903086613392565b60405183815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a260405183815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ae565b6001600160a01b03811660009081526005602052604081206001810154600390910154610d069161323c565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612d0157600080fd5b505af1158015612d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d39919061502a565b6001600160a01b0316336001600160a01b031614612d695760405162461bcd60e51b8152600401610a2a90615047565b6001600160a01b0383166000908152600b602052604090205460ff16158015612dab57506001600160a01b038316600090815260056020526040902060010154155b612ddc5760405162461bcd60e51b8152602060048201526002602482015261414960f01b6044820152606401610a2a565b6001546001600160a01b0384811691161415612e0a5760405162461bcd60e51b8152600401610a2a90615066565b6006805460018181019092557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b039586166001600160a01b031991821681179092556000918252600b60209081526040808420805460ff19168617905560059091529091208054949095169316929092178355910155565b6000806001600080828254612ea191906151a1565b9091555050600054612eb1613781565b925092506000548114612ed65760405162461bcd60e51b8152600401610a2a90615206565b509091565b6001546040516370a0823160e01b81523360048201526120a3916001600160a01b0316906370a082319060240160206040518083038186803b158015612f2057600080fd5b505afa158015612f34573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615223565b6003546001600160a01b03163314612f9a5760405162461bcd60e51b815260206004820152600560248201526457686f205560d81b6044820152606401610a2a565b6008546001600160a01b031660005b6007548110156130ed57600060078281548110612fc857612fc86151b9565b600091825260208220015460405163095ea7b360e01b81526001600160a01b039091169250829163095ea7b391613003918791600401615085565b602060405180830381600087803b15801561301d57600080fd5b505af1158015613031573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613055919061509e565b5060405163095ea7b360e01b81526001600160a01b0382169063095ea7b39061308690879060001990600401615085565b602060405180830381600087803b1580156130a057600080fd5b505af11580156130b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d8919061509e565b505080806130e5906151cf565b915050612fa9565b5050600880546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600e602052604090205461312a90610f87565b6120a3611631565b6000600d546000141561315f57506001600160a01b03166000908152600560208190526040909120015490565b600d546001600160a01b03831660009081526005602052604090206003810154600490910154610d06926131b3929091610cf791670de0b6b3a7640000916131ad91908290610cd28b612039565b9061323c565b6001600160a01b03841660009081526005602081905260409091200154906132ed565b6007818154811061207057600080fd5b6000828211156132285760405162461bcd60e51b815260206004820152600d60248201526c29b0b332a6b0ba341d1016a7a360991b6044820152606401610a2a565b6000613234838561525f565b949350505050565b60008261324b57506000610d06565b600061325783856152b9565b90508261326485836152d8565b14610d035760405162461bcd60e51b815260206004820152600d60248201526c29b0b332a6b0ba341d101527a360991b6044820152606401610a2a565b60008082116132e15760405162461bcd60e51b815260206004820152600c60248201526b0536166654d6174683a202f360a41b6044820152606401610a2a565b600061323483856152d8565b6000806132fa83856151a1565b905083811015610d035760405162461bcd60e51b815260206004820152600d60248201526c29b0b332a6b0ba341d1015a7a360991b6044820152606401610a2a565b6114588363a9059cbb60e01b848460405160240161335b929190615085565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614b9d565b6040516001600160a01b03808516602483015283166044820152606481018290526133ca9085906323b872dd60e01b9060840161335b565b50505050565b60016000808282546133e291906151a1565b9091555050600080549083905b6006548110156134e45760006006828154811061340e5761340e6151b9565b6000918252602090912001546001600160a01b0316905061342e81613132565b6001600160a01b0382166000908152600560208190526040909120015561345481612039565b6001600160a01b038083166000908152600560205260409020600401919091558316156134d1576134858382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b50806134dc816151cf565b9150506133ef565b5060005b835181101561355a576000848281518110613505576135056151b9565b6020908102919091018101516001600160a01b038089166000908152600a8452604080822092841682529190935290912054909150613545878383613587565b50508080613552906151cf565b9150506134e8565b50613563613781565b50505060005481146114585760405162461bcd60e51b8152600401610a2a90615206565b8015611458576001600160a01b038084166000908152600a60209081526040808320868516808552925282209190915560045490911614156136b25760105480156136985760006135df620f4240610cf7858561323c565b60025460115460405163d4e54c3b60e01b81526004810184905260248101919091526001600160a01b03888116604483015292935091169063d4e54c3b90606401602060405180830381600087803b15801561363a57600080fd5b505af115801561364e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136729190615223565b506136928561368185846131e6565b6001600160a01b038716919061333c565b506136ac565b6136ac6001600160a01b038416858461333c565b506136c6565b6136c66001600160a01b038316848361333c565b826001600160a01b0316826001600160a01b03167f9aa05b3d70a9e3e2f004f039648839560576334fb45c81f91b6db03ad9e2efc98360405161370b91815260200190565b60405180910390a36001600160a01b0382166000908152601260205260408120805483929061373b9084906151a1565b90915550506001600160a01b038084166000908152601460209081526040808320938616835292905290812080548392906137779084906151a1565b9091555050505050565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316633f6678256040518163ffffffff1660e01b815260040160206040518083038186803b1580156137d457600080fd5b505afa1580156137e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061380c9190615223565b9050600080821161381e5760006138a4565b600360009054906101000a90046001600160a01b03166001600160a01b03166313416d996040518163ffffffff1660e01b815260040160206040518083038186803b15801561386c57600080fd5b505afa158015613880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a4919061502a565b600354909150600160a01b900460ff166142625760075460008167ffffffffffffffff8111156138d6576138d6614e30565b6040519080825280602002602001820160405280156138ff578160200160208202803683370190505b50905060008267ffffffffffffffff81111561391d5761391d614e30565b604051908082528060200260200182016040528015613946578160200160208202803683370190505b50905060005b83811015613ab65760078181548110613967576139676151b9565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110613997576139976151b9565b60200260200101906001600160a01b031690816001600160a01b03168152505060006001600160a01b03168382815181106139d4576139d46151b9565b60200260200101516001600160a01b031614613a84578281815181106139fc576139fc6151b9565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015613a4757600080fd5b505afa158015613a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a7f9190615223565b613a87565b60005b828281518110613a9957613a996151b9565b602090810291909101015280613aae816151cf565b91505061394c565b506001546040805163d294f09360e01b815281516001600160a01b039093169263d294f093926004808401939192918290030181600087803b158015613afb57600080fd5b505af1925050508015613b2b575060408051601f3d908101601f19168201909252613b28918101906152fa565b60015b613b3e5750600096879650945050505050565b505060005b83811015614252576000806001600160a01b0316848381518110613b6957613b696151b9565b60200260200101516001600160a01b031614613c1957838281518110613b9157613b916151b9565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015613bdc57600080fd5b505afa158015613bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c149190615223565b613c1c565b60005b9050828281518110613c3057613c306151b9565b602002602001015181111561423f576000620f424088858581518110613c5857613c586151b9565b602002602001015184613c6b919061525f565b613c7591906152b9565b613c7f91906152d8565b1115613ea957838281518110613c9757613c976151b9565b60200260200101516001600160a01b031663a9059cbb87620f42408a613cdf888881518110613cc857613cc86151b9565b6020026020010151876131e690919063ffffffff16565b613ce991906152b9565b613cf391906152d8565b6040518363ffffffff1660e01b8152600401613d10929190615085565b602060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d62919061509e565b50838281518110613d7557613d756151b9565b60200260200101516001600160a01b0316866001600160a01b0316336001600160a01b03167f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f42408b613dec898981518110613dd557613dd56151b9565b6020026020010151886131e690919063ffffffff16565b613df691906152b9565b613e0091906152d8565b60405190815260200160405180910390a4838281518110613e2357613e236151b9565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015613e6e57600080fd5b505afa158015613e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea69190615223565b90505b600f546001600160a01b03166140735760085484516001600160a01b039091169063b66503cf90869085908110613ee257613ee26151b9565b6020026020010151613f16868681518110613eff57613eff6151b9565b6020026020010151856131e690919063ffffffff16565b6040518363ffffffff1660e01b8152600401613f33929190615085565b600060405180830381600087803b158015613f4d57600080fd5b505af1158015613f61573d6000803e3d6000fd5b50505050838281518110613f7757613f776151b9565b60200260200101516001600160a01b0316600860009054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b031660008051602061536a833981519152868681518110613fd257613fd26151b9565b602002602001015185613fe5919061525f565b60405190815260200160405180910390a4828281518110614008576140086151b9565b60200260200101518161401b919061525f565b60156000868581518110614031576140316151b9565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600082825461406891906151a1565b9091555061423f9050565b838281518110614085576140856151b9565b60200260200101516001600160a01b031663a9059cbb600f60009054906101000a90046001600160a01b03166140c6868681518110613eff57613eff6151b9565b6040518363ffffffff1660e01b81526004016140e3929190615085565b602060405180830381600087803b1580156140fd57600080fd5b505af1158015614111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614135919061509e565b50838281518110614148576141486151b9565b60200260200101516001600160a01b0316600f60009054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b031660008051602061536a8339815191528686815181106141a3576141a36151b9565b6020026020010151856141b6919061525f565b60405190815260200160405180910390a48282815181106141d9576141d96151b9565b6020026020010151816141ec919061525f565b60156000868581518110614202576142026151b9565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600082825461423991906151a1565b90915550505b508061424a816151cf565b915050613b43565b5060009788975095505050505050565b60015460408051634eb1c24560e11b8152815160009384936001600160a01b0390911692639d63848a926004808301939282900301818787803b1580156142a857600080fd5b505af11580156142bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e0919061531e565b6040516370a0823160e01b815230600482015291935091506000906001600160a01b038416906370a082319060240160206040518083038186803b15801561432757600080fd5b505afa15801561433b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061435f9190615223565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b1580156143a457600080fd5b505afa1580156143b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143dc9190615223565b6001546040805163d294f09360e01b815281519394506001600160a01b039092169263d294f0939260048082019392918290030181600087803b15801561442257600080fd5b505af1925050508015614452575060408051601f3d908101601f1916820190925261444f918101906152fa565b60015b614466575060009788975095505050505050565b50506040516370a0823160e01b815230600482015282906001600160a01b038616906370a082319060240160206040518083038186803b1580156144a957600080fd5b505afa1580156144bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144e19190615223565b6144eb919061525f565b6040516370a0823160e01b815230600482015290985081906001600160a01b038516906370a082319060240160206040518083038186803b15801561452f57600080fd5b505afa158015614543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145679190615223565b614571919061525f565b96506000620f4240614583888b6152b9565b61458d91906152d8565b11156146b9576001600160a01b03841663a9059cbb86620f42406145b18a8d6152b9565b6145bb91906152d8565b6040518363ffffffff1660e01b81526004016145d8929190615085565b602060405180830381600087803b1580156145f257600080fd5b505af1158015614606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061462a919061509e565b506001600160a01b03808616908516337f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f42406146698b8e6152b9565b61467391906152d8565b60405190815260200160405180910390a46040516370a0823160e01b81523060048201526146b69083906001600160a01b038716906370a08231906024016121ab565b97505b6000620f42406146c9888a6152b9565b6146d391906152d8565b11156147ff576001600160a01b03831663a9059cbb86620f42406146f78a8c6152b9565b61470191906152d8565b6040518363ffffffff1660e01b815260040161471e929190615085565b602060405180830381600087803b15801561473857600080fd5b505af115801561474c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614770919061509e565b506001600160a01b03808616908416337f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f42406147af8b8d6152b9565b6147b991906152d8565b60405190815260200160405180910390a46040516370a0823160e01b81523060048201526147fc9082906001600160a01b038616906370a08231906024016121ab565b96505b600f546001600160a01b03166149ac5787156148db5760085460405163b66503cf60e01b81526001600160a01b039091169063b66503cf906148479087908c90600401615085565b600060405180830381600087803b15801561486157600080fd5b505af1158015614875573d6000803e3d6000fd5b505050506001600160a01b038416600090815260156020526040812080548a92906148a19084906151a1565b90915550506008546040518981526001600160a01b03868116921690339060008051602061536a8339815191529060200160405180910390a45b86156149a75760085460405163b66503cf60e01b81526001600160a01b039091169063b66503cf906149139086908b90600401615085565b600060405180830381600087803b15801561492d57600080fd5b505af1158015614941573d6000803e3d6000fd5b505050506001600160a01b0383166000908152601560205260408120805489929061496d9084906151a1565b90915550506008546040518881526001600160a01b03858116921690339060008051602061536a8339815191529060200160405180910390a45b614b7d565b600f5460405163a9059cbb60e01b81526001600160a01b038681169263a9059cbb926149e092909116908c90600401615085565b602060405180830381600087803b1580156149fa57600080fd5b505af1158015614a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a32919061509e565b50600f5460405163a9059cbb60e01b81526001600160a01b038581169263a9059cbb92614a6792909116908b90600401615085565b602060405180830381600087803b158015614a8157600080fd5b505af1158015614a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ab9919061509e565b50600f546040518981526001600160a01b03868116921690339060008051602061536a8339815191529060200160405180910390a4600f546040518881526001600160a01b03858116921690339060008051602061536a8339815191529060200160405180910390a46001600160a01b038416600090815260156020526040812080548a9290614b4a9084906151a1565b90915550506001600160a01b03831660009081526015602052604081208054899290614b779084906151a1565b90915550505b5050505050509091565b6000818310614b965781610d03565b5090919050565b6001600160a01b0382163b614bf45760405162461bcd60e51b815260206004820152601760248201527f5361666545524332303a206e6f6e2d636f6e74726163740000000000000000006044820152606401610a2a565b600080836001600160a01b031683604051614c0f919061534d565b6000604051808303816000865af19150503d8060008114614c4c576040519150601f19603f3d011682016040523d82523d6000602084013e614c51565b606091505b509150915081614c995760405162461bcd60e51b815260206004820152601360248201527214d85999515490cc8c0e88131310c819985a5b606a1b6044820152606401610a2a565b8051156133ca5780806020019051810190614cb4919061509e565b6133ca5760405162461bcd60e51b81526020600482015260136024820152725361666545524332303a20217375636365737360681b6044820152606401610a2a565b6001600160a01b03811681146114de57600080fd5b600060208284031215614d1d57600080fd5b8135610d0381614cf6565b60005b83811015614d43578181015183820152602001614d2b565b838111156133ca5750506000910152565b6020815260008251806020840152614d73816040850160208701614d28565b601f01601f19169190910160400192915050565b60008060408385031215614d9a57600080fd5b8235614da581614cf6565b91506020830135614db581614cf6565b809150509250929050565b80151581146114de57600080fd5b600060208284031215614de057600080fd5b8135610d0381614dc0565b60008060408385031215614dfe57600080fd5b8235614e0981614cf6565b946020939093013593505050565b600060208284031215614e2957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e6f57614e6f614e30565b604052919050565b600082601f830112614e8857600080fd5b8135602067ffffffffffffffff821115614ea457614ea4614e30565b8160051b614eb3828201614e46565b9283528481018201928281019087851115614ecd57600080fd5b83870192505b84831015614ef5578235614ee681614cf6565b82529183019190830190614ed3565b979650505050505050565b60008060408385031215614f1357600080fd5b8235614f1e81614cf6565b9150602083013567ffffffffffffffff811115614f3a57600080fd5b614f4685828601614e77565b9150509250929050565b60008060408385031215614f6357600080fd5b50508035926020909101359150565b600060208284031215614f8457600080fd5b813567ffffffffffffffff811115614f9b57600080fd5b61323484828501614e77565b600080600060608486031215614fbc57600080fd5b833592506020840135614fce81614cf6565b91506040840135614fde81614cf6565b809150509250925092565b600080600060608486031215614ffe57600080fd5b833561500981614cf6565b9250602084013561501981614cf6565b929592945050506040919091013590565b60006020828403121561503c57600080fd5b8151610d0381614cf6565b602080825260059082015264215445414d60d81b604082015260600190565b602080825260059082015264212173746b60d81b604082015260600190565b6001600160a01b03929092168252602082015260400190565b6000602082840312156150b057600080fd5b8151610d0381614dc0565b6000602082840312156150cd57600080fd5b815167ffffffffffffffff808211156150e557600080fd5b818401915084601f8301126150f957600080fd5b81518181111561510b5761510b614e30565b61511e601f8201601f1916602001614e46565b915080825285602082850101111561513557600080fd5b615146816020840160208601614d28565b50949350505050565b73022b8bab0b634bd32b91023b0bab3b2903337b9160651b81526000825161517e816014850160208701614d28565b9190910160140192915050565b634e487b7160e01b600052601160045260246000fd5b600082198211156151b4576151b461518b565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156151e3576151e361518b565b5060010190565b602080825260029082015261306160f01b604082015260600190565b60208082526003908201526252472160e81b604082015260600190565b60006020828403121561523557600080fd5b5051919050565b60006020828403121561524e57600080fd5b815160ff81168114610d0357600080fd5b6000828210156152715761527161518b565b500390565b634e487b7160e01b600052603160045260246000fd5b6422a897239d60d91b8152600082516152ac816005850160208701614d28565b9190910160050192915050565b60008160001904831182151516156152d3576152d361518b565b500290565b6000826152f557634e487b7160e01b600052601260045260246000fd5b500490565b6000806040838503121561530d57600080fd5b505080516020909101519092909150565b6000806040838503121561533157600080fd5b825161533c81614cf6565b6020840151909250614db581614cf6565b6000825161535f818460208701614d28565b919091019291505056feee447878094bcc87bd81b55e4831b5e9e3d095866fce10f4f7e4caa64ea7a558a264697066735822122023af05e3daf5c615cce81ab6e1bd9272b0e1895173ea9881729dfe513f056e8364736f6c634300080900336f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d05000000000000000000000000bcbc5777537c0d0462fb82ba48eeb6cb361e853f000000000000000000000000e60d72cdf026c84c72144bbda4f8627c211105550000000000000000000000003045119766352ff250b3d45312bd0973cbf7235a00000000000000000000000017fa9da6e01ad59513707f92033a6eb03ccb10b4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ddf26b42c1d903de8962d3f79a74a501420d5f19
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80635a6e6eab116101f457806399bcc0521161011a578063de5f6268116100ad578063e81defce1161007c578063e81defce14610931578063e9fad8ee14610944578063f12297771461094c578063f5ae22401461095f57600080fd5b8063de5f6268146108e2578063e5748213146108ea578063e6886396146108fe578063e70b9e271461090657600080fd5b8063d0ed26ae116100e9578063d0ed26ae14610863578063d294f09314610876578063da09d19d14610893578063dd501205146108bf57600080fd5b806399bcc05214610817578063b66503cf1461082a578063b6b55f251461083d578063bcd110141461085057600080fd5b8063749f1044116101925780638a501100116101615780638a501100146107e35780638dd598fb146107f65780638f27f1041461080757806395d89b411461080f57600080fd5b8063749f1044146107a257806376ad03bc146107b55780637bb7bed1146107c8578063853828b6146107db57600080fd5b8063638634ee116101ce578063638634ee1461071b57806365bcfbe71461072e5780637035ab981461074e57806370a082311461077957600080fd5b80635a6e6eab146106eb5780635c59f3bb146106fe5780635c975abb1461070757600080fd5b80632f4f21e2116102d95780633f695b45116102775780634d5ce038116102465780634d5ce0381461067f5780634ec5908d146106b257806352f18405146106c55780635557cc61146106d857600080fd5b80633f695b45146105c257806345797e67146105d557806346c96aac146105e857806348e5d9f8146105fb57600080fd5b8063313ce567116102b3578063313ce5671461058c57806337d0208c146105945780633a4b66f1146105a75780633d18b912146105ba57600080fd5b80632f4f21e2146105535780633010d8ef1461056657806331279d3d1461057957600080fd5b806318160ddd116103515780632378bea6116103205780632378bea6146104d65780632af2cecc146104e95780632ce9aead146105145780632e1a7d4d1461054057600080fd5b806318160ddd146104645780631f8507161461046c578063211dc32d14610497578063221ca18c146104aa57600080fd5b80630efeb2fb1161038d5780630efeb2fb146103fe578063102a7ad41461041e57806315ae92f71461043157806316c38b3c1461045157600080fd5b8063023df767146103b457806306fdde03146103c95780630a91a2c4146103e7575b600080fd5b6103c76103c2366004614d0b565b610972565b005b6103d1610bcc565b6040516103de9190614d54565b60405180910390f35b6103f060115481565b6040519081526020016103de565b6103f061040c366004614d0b565b60136020526000908152604090205481565b6103f061042c366004614d87565b610c71565b6103f061043f366004614d0b565b60156020526000908152604090205481565b6103c761045f366004614dce565b610d0c565b600d546103f0565b60025461047f906001600160a01b031681565b6040516001600160a01b0390911681526020016103de565b6103f06104a5366004614d87565b610de2565b6103f06104b8366004614d0b565b6001600160a01b031660009081526005602052604090206003015490565b6103c76104e4366004614deb565b610dee565b6103f06104f7366004614d87565b601460209081526000928352604080842090915290825290205481565b6103f0610522366004614d0b565b6001600160a01b031660009081526005602052604090206004015490565b6103c761054e366004614e17565b610f87565b6103c7610561366004614deb565b6111dc565b6103c7610574366004614d0b565b61145d565b6103c7610587366004614f00565b6114e1565b6103f06115ac565b60085461047f906001600160a01b031681565b60015461047f906001600160a01b031681565b6103c7611631565b6103c76105d0366004614d87565b6117ea565b6103c76105e3366004614f50565b6118d0565b60035461047f906001600160a01b031681565b610648610609366004614d0b565b60056020819052600091825260409091208054600182015460028301546003840154600485015494909501546001600160a01b03909316949193909286565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c0016103de565b6106a261068d366004614d0b565b600b6020526000908152604090205460ff1681565b60405190151581526020016103de565b6103c76106c0366004614d0b565b6119cc565b6103c76106d3366004614f72565b611aa6565b6103c76106e6366004614d0b565b611b9e565b6103c76106f9366004614f72565b611f41565b6103f060105481565b6004546106a290600160a01b900460ff1681565b6103f0610729366004614d0b565b612039565b6103f061073c366004614d0b565b60126020526000908152604090205481565b6103f061075c366004614d87565b600960209081526000928352604080842090915290825290205481565b6103f0610787366004614d0b565b6001600160a01b03166000908152600e602052604090205490565b600f5461047f906001600160a01b031681565b60045461047f906001600160a01b031681565b61047f6107d6366004614e17565b612060565b6103c761208a565b6103c76107f1366004614fa7565b6120a5565b6002546001600160a01b031661047f565b6007546103f0565b6103d16122e8565b6103f0610825366004614d0b565b612379565b6103c7610838366004614deb565b6123fa565b6103c761084b366004614e17565b612a4e565b6103f061085e366004614d0b565b612c85565b6103c7610871366004614fe9565b612cb1565b61087e612e8c565b604080519283526020830191909152016103de565b6103f06108a1366004614d0b565b6001600160a01b031660009081526005602052604090206002015490565b6106a26108cd366004614d0b565b600c6020526000908152604090205460ff1681565b6103c7612edb565b6003546106a290600160a01b900460ff1681565b6006546103f0565b6103f0610914366004614d87565b600a60209081526000928352604080842090915290825290205481565b6103c761093f366004614d0b565b612f58565b6103c7613111565b6103f061095a366004614d0b565b613132565b61047f61096d366004614e17565b6131d6565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156109c257600080fd5b505af11580156109d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fa919061502a565b6001600160a01b0316336001600160a01b031614610a335760405162461bcd60e51b8152600401610a2a90615047565b60405180910390fd5b6001600160a01b0381166000908152600c602052604090205460ff1615610a825760405162461bcd60e51b815260206004820152600360248201526242546160e81b6044820152606401610a2a565b6001546001600160a01b0382811691161415610ab05760405162461bcd60e51b8152600401610a2a90615066565b60085460405163095ea7b360e01b81526001600160a01b038381169263095ea7b392610ae6929091169060001990600401615085565b602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b38919061509e565b506007805460018082019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b038481169182179092556000818152600c6020526040808220805460ff19168617905560085490519316927f6f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d059190a450565b600154604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301926000929190829003018186803b158015610c1157600080fd5b505afa158015610c25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c4d91908101906150bb565b604051602001610c5d919061514f565b604051602081830303815290604052905090565b6001600160a01b038083166000818152600a60209081526040808320948616808452948252808320549383526009825280832094835293905291822054610d039190610cfd90670de0b6b3a764000090610cf790610cd890610cd289613132565b906131e6565b6001600160a01b0389166000908152600e60205260409020549061323c565b906132a1565b906132ed565b90505b92915050565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d5c57600080fd5b505af1158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d94919061502a565b6001600160a01b0316336001600160a01b031614610dc45760405162461bcd60e51b8152600401610a2a90615047565b60048054911515600160a01b0260ff60a01b19909216919091179055565b6000610d038284610c71565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610e3e57600080fd5b505af1158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e76919061502a565b6001600160a01b0316336001600160a01b031614610ea65760405162461bcd60e51b8152600401610a2a90615047565b6001600160a01b0382166000908152600560205260409020600201544211610ef65760405162461bcd60e51b815260206004820152600360248201526252506160e81b6044820152606401610a2a565b60008111610f2b5760405162461bcd60e51b81526020600482015260026024820152610c1960f21b6044820152606401610a2a565b6001600160a01b03821660008181526005602052604090819020600101839055517fad2f86b01ed93b4b3a150d448c61a4f5d8d38075d3c0c64cc0a26fd6e1f4954590610f7b9084815260200190565b60405180910390a25050565b6001600080828254610f9991906151a1565b9091555050600080549033905b60065481101561109b57600060068281548110610fc557610fc56151b9565b6000918252602090912001546001600160a01b03169050610fe581613132565b6001600160a01b0382166000908152600560208190526040909120015561100b81612039565b6001600160a01b038083166000908152600560205260409020600401919091558316156110885761103c8382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b5080611093816151cf565b915050610fa6565b50600083116110bc5760405162461bcd60e51b8152600401610a2a906151ea565b600d5483106110f25760405162461bcd60e51b81526020600482015260026024820152610c1d60f21b6044820152606401610a2a565b600d546110ff90846131e6565b600d55336000908152600e602052604090205461111c90846131e6565b336000818152600e6020526040902091909155600154611148916001600160a01b03909116908561333c565b60405183815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59060200160405180910390a260405183815260009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35060005481146111d85760405162461bcd60e51b8152600401610a2a90615206565b5050565b60016000808282546111ee91906151a1565b9091555050600054600454600160a01b900460ff16156112385760405162461bcd60e51b8152602060048201526005602482015264504155534560d81b6044820152606401610a2a565b8260005b6006548110156113315760006006828154811061125b5761125b6151b9565b6000918252602090912001546001600160a01b0316905061127b81613132565b6001600160a01b038216600090815260056020819052604090912001556112a181612039565b6001600160a01b0380831660009081526005602052604090206004019190915583161561131e576112d28382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b5080611329816151cf565b91505061123c565b50600083116113525760405162461bcd60e51b8152600401610a2a906151ea565b600d5461135f90846132ed565b600d556001600160a01b0384166000908152600e602052604090205461138590846132ed565b6001600160a01b038086166000908152600e60205260409020919091556001546113b29116333086613392565b836001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c846040516113ed91815260200190565b60405180910390a26040518381526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060005481146114585760405162461bcd60e51b8152600401610a2a90615206565b505050565b6001546040516370a0823160e01b81523360048201526114de9183916001600160a01b03909116906370a082319060240160206040518083038186803b1580156114a657600080fd5b505afa1580156114ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105619190615223565b50565b336001600160a01b038316148061150257506003546001600160a01b031633145b6115455760405162461bcd60e51b8152602060048201526014602482015273556e2d617574686f72697a656420636c61696d2160601b6044820152606401610a2a565b6003546040516363453ae160e01b81523060048201526001600160a01b03909116906363453ae190602401600060405180830381600087803b15801561158a57600080fd5b505af115801561159e573d6000803e3d6000fd5b505050506111d882826133d0565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b1580156115f157600080fd5b505afa158015611605573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611629919061523c565b60ff16905090565b600160008082825461164391906151a1565b9091555050600080549033905b6006548110156117455760006006828154811061166f5761166f6151b9565b6000918252602090912001546001600160a01b0316905061168f81613132565b6001600160a01b038216600090815260056020819052604090912001556116b581612039565b6001600160a01b03808316600090815260056020526040902060040191909155831615611732576116e68382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b508061173d816151cf565b915050611650565b5060005b6006548110156117bd57600060068281548110611768576117686151b9565b600091825260208083209091015433808452600a835260408085206001600160a01b039093168086529290935291909220549192506117a8908383613587565b505080806117b5906151cf565b915050611749565b506117c6613781565b50505060005481146114de5760405162461bcd60e51b8152600401610a2a90615206565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561183a57600080fd5b505af115801561184e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611872919061502a565b6001600160a01b0316336001600160a01b0316146118a25760405162461bcd60e51b8152600401610a2a90615047565b6001600160a01b03918216600090815260056020526040902080546001600160a01b03191691909216179055565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561192057600080fd5b505af1158015611934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611958919061502a565b6001600160a01b0316336001600160a01b0316146119885760405162461bcd60e51b8152600401610a2a90615047565b620f42408211156119c15760405162461bcd60e51b815260206004820152600360248201526215a9a960e91b6044820152606401610a2a565b601091909155601155565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611a1c57600080fd5b505af1158015611a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a54919061502a565b6001600160a01b0316336001600160a01b031614611a845760405162461bcd60e51b8152600401610a2a90615047565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611af657600080fd5b505af1158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e919061502a565b6001600160a01b0316336001600160a01b031614611b5e5760405162461bcd60e51b8152600401610a2a90615047565b60005b81518110156111d857611b8c828281518110611b7f57611b7f6151b9565b6020026020010151610972565b80611b96816151cf565b915050611b61565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611bee57600080fd5b505af1158015611c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c26919061502a565b6001600160a01b0316336001600160a01b031614611c565760405162461bcd60e51b8152600401610a2a90615047565b6001600160a01b0381166000908152600c602052604090205460ff161515600114611ca95760405162461bcd60e51b815260206004820152600360248201526242546960e81b6044820152606401610a2a565b60085460405163095ea7b360e01b81526001600160a01b038381169263095ea7b392611cde9290911690600090600401615085565b602060405180830381600087803b158015611cf857600080fd5b505af1158015611d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d30919061509e565b5060078054906001600160a01b03831690611d4c60018461525f565b81548110611d5c57611d5c6151b9565b6000918252602090912001546001600160a01b03161415611dcf576007805480611d8857611d88615276565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0384168252600c905260409020805460ff19169055611eff565b60005b600754611de19060019061525f565b811015611efd57826001600160a01b031660078281548110611e0557611e056151b9565b6000918252602090912001546001600160a01b03161415611eeb576007611e2d60018461525f565b81548110611e3d57611e3d6151b9565b600091825260209091200154600780546001600160a01b039092169183908110611e6957611e696151b9565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506007805480611ea857611ea8615276565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0385168252600c905260409020805460ff191690555b80611ef5816151cf565b915050611dd2565b505b6008546040516000916001600160a01b0390811691908516907f6f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d05908490a45050565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611f9157600080fd5b505af1158015611fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc9919061502a565b6001600160a01b0316336001600160a01b031614611ff95760405162461bcd60e51b8152600401610a2a90615047565b60005b81518110156111d85761202782828151811061201a5761201a6151b9565b6020026020010151611b9e565b80612031816151cf565b915050611ffc565b6001600160a01b038116600090815260056020526040812060020154610d06904290614b87565b6006818154811061207057600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600e60205260409020546120a390610f87565b565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156120f557600080fd5b505af1158015612109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212d919061502a565b6001600160a01b0316336001600160a01b03161461215d5760405162461bcd60e51b8152600401610a2a90615047565b6001546001600160a01b038381169116141561221f57600d546001546040516370a0823160e01b81523060048201526000926121fb9290916001600160a01b03909116906370a08231906024015b60206040518083038186803b1580156121c357600080fd5b505afa1580156121d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190615223565b90508084111561221d5760405162461bcd60e51b8152600401610a2a90615066565b505b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb9061224d9084908790600401615085565b602060405180830381600087803b15801561226757600080fd5b505af115801561227b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229f919061509e565b50816001600160a01b03167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28846040516122db91815260200190565b60405180910390a2505050565b600154604080516395d89b4160e01b815290516060926001600160a01b0316916395d89b41916004808301926000929190829003018186803b15801561232d57600080fd5b505afa158015612341573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261236991908101906150bb565b604051602001610c5d919061528c565b6001600160a01b03811660009081526005602052604081206002015442106123a357506000919050565b6001600160a01b0382166000908152600560205260408120600201546123c990426131e6565b6001600160a01b0384166000908152600560205260409020600301549091506123f390829061323c565b9392505050565b600160008082825461240c91906151a1565b90915550506000805490805b60065481101561250d57600060068281548110612437576124376151b9565b6000918252602090912001546001600160a01b0316905061245781613132565b6001600160a01b0382166000908152600560208190526040909120015561247d81612039565b6001600160a01b038083166000908152600560205260409020600401919091558316156124fa576124ae8382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b5080612505816151cf565b915050612418565b506001546001600160a01b038581169116141561253c5760405162461bcd60e51b8152600401610a2a90615066565b6001600160a01b0384166000908152600b602052604090205460ff166125955760405162461bcd60e51b815260206004820152600e60248201526d4e6f74206120726577617264212160901b6044820152606401610a2a565b6000600d54116125d55760405162461bcd60e51b815260206004820152600b60248201526a4e6f204661726d6572732160a81b6044820152606401610a2a565b6125dd613781565b50506040516370a0823160e01b81523060048201526000906001600160a01b038616906370a082319060240160206040518083038186803b15801561262157600080fd5b505afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126599190615223565b90506126706001600160a01b038616333087613392565b6040516370a0823160e01b81523060048201526000906001600160a01b038716906370a082319060240160206040518083038186803b1580156126b257600080fd5b505afa1580156126c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ea9190615223565b90506126f6828261525f565b94506000851161272d5760405162461bcd60e51b8152602060048201526002602482015261183960f11b6044820152606401610a2a565b6001600160a01b0386166000908152600560205260409020600201544210612797576001600160a01b0386166000908152600560205260409020600101546127769086906132a1565b6001600160a01b038716600090815260056020526040902060030155612977565b6001600160a01b038616600090815260056020526040812060038101546002909101549091906127c790426131e6565b6001600160a01b038916600090815260056020526040812060030154919250906127f290839061323c565b6001600160a01b038a1660009081526005602052604090206001015490915061281f90610cf78a846132ed565b6001600160a01b038a811660009081526005602052604090206003908101929092559054163314158061286c57506001600160a01b03898116600090815260056020526040902054163314155b806129105750600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156128c257600080fd5b505af11580156128d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128fa919061502a565b6001600160a01b0316336001600160a01b031614155b15612973576001600160a01b0389166000908152600560205260409020600301548311158061293e57508088115b6129735760405162461bcd60e51b8152600401610a2a906020808252600490820152634547504560e01b604082015260600190565b5050505b6001600160a01b038616600090815260056020526040902042600482018190556001909101546129a791906132ed565b6001600160a01b038716600081815260056020908152604091829020600201939093555187815233927f0f7cde3c0518e1cc590491be5861d70a2e333f7e65af2e1ebd91a3c9a3cc638d910160405180910390a36001600160a01b03861660009081526013602052604081208054879290612a239084906151a1565b9250508190555050505060005481146114585760405162461bcd60e51b8152600401610a2a90615206565b6001600080828254612a6091906151a1565b9091555050600054600454600160a01b900460ff1615612aaa5760405162461bcd60e51b8152602060048201526005602482015264504155534560d81b6044820152606401610a2a565b3360005b600654811015612ba357600060068281548110612acd57612acd6151b9565b6000918252602090912001546001600160a01b03169050612aed81613132565b6001600160a01b03821660009081526005602081905260409091200155612b1381612039565b6001600160a01b03808316600090815260056020526040902060040191909155831615612b9057612b448382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b5080612b9b816151cf565b915050612aae565b5060008311612bc45760405162461bcd60e51b8152600401610a2a906151ea565b600d54612bd190846132ed565b600d55336000908152600e6020526040902054612bee90846132ed565b336000818152600e6020526040902091909155600154612c1b916001600160a01b03909116903086613392565b60405183815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a260405183815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ae565b6001600160a01b03811660009081526005602052604081206001810154600390910154610d069161323c565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612d0157600080fd5b505af1158015612d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d39919061502a565b6001600160a01b0316336001600160a01b031614612d695760405162461bcd60e51b8152600401610a2a90615047565b6001600160a01b0383166000908152600b602052604090205460ff16158015612dab57506001600160a01b038316600090815260056020526040902060010154155b612ddc5760405162461bcd60e51b8152602060048201526002602482015261414960f01b6044820152606401610a2a565b6001546001600160a01b0384811691161415612e0a5760405162461bcd60e51b8152600401610a2a90615066565b6006805460018181019092557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b039586166001600160a01b031991821681179092556000918252600b60209081526040808420805460ff19168617905560059091529091208054949095169316929092178355910155565b6000806001600080828254612ea191906151a1565b9091555050600054612eb1613781565b925092506000548114612ed65760405162461bcd60e51b8152600401610a2a90615206565b509091565b6001546040516370a0823160e01b81523360048201526120a3916001600160a01b0316906370a082319060240160206040518083038186803b158015612f2057600080fd5b505afa158015612f34573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615223565b6003546001600160a01b03163314612f9a5760405162461bcd60e51b815260206004820152600560248201526457686f205560d81b6044820152606401610a2a565b6008546001600160a01b031660005b6007548110156130ed57600060078281548110612fc857612fc86151b9565b600091825260208220015460405163095ea7b360e01b81526001600160a01b039091169250829163095ea7b391613003918791600401615085565b602060405180830381600087803b15801561301d57600080fd5b505af1158015613031573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613055919061509e565b5060405163095ea7b360e01b81526001600160a01b0382169063095ea7b39061308690879060001990600401615085565b602060405180830381600087803b1580156130a057600080fd5b505af11580156130b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d8919061509e565b505080806130e5906151cf565b915050612fa9565b5050600880546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600e602052604090205461312a90610f87565b6120a3611631565b6000600d546000141561315f57506001600160a01b03166000908152600560208190526040909120015490565b600d546001600160a01b03831660009081526005602052604090206003810154600490910154610d06926131b3929091610cf791670de0b6b3a7640000916131ad91908290610cd28b612039565b9061323c565b6001600160a01b03841660009081526005602081905260409091200154906132ed565b6007818154811061207057600080fd5b6000828211156132285760405162461bcd60e51b815260206004820152600d60248201526c29b0b332a6b0ba341d1016a7a360991b6044820152606401610a2a565b6000613234838561525f565b949350505050565b60008261324b57506000610d06565b600061325783856152b9565b90508261326485836152d8565b14610d035760405162461bcd60e51b815260206004820152600d60248201526c29b0b332a6b0ba341d101527a360991b6044820152606401610a2a565b60008082116132e15760405162461bcd60e51b815260206004820152600c60248201526b0536166654d6174683a202f360a41b6044820152606401610a2a565b600061323483856152d8565b6000806132fa83856151a1565b905083811015610d035760405162461bcd60e51b815260206004820152600d60248201526c29b0b332a6b0ba341d1015a7a360991b6044820152606401610a2a565b6114588363a9059cbb60e01b848460405160240161335b929190615085565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614b9d565b6040516001600160a01b03808516602483015283166044820152606481018290526133ca9085906323b872dd60e01b9060840161335b565b50505050565b60016000808282546133e291906151a1565b9091555050600080549083905b6006548110156134e45760006006828154811061340e5761340e6151b9565b6000918252602090912001546001600160a01b0316905061342e81613132565b6001600160a01b0382166000908152600560208190526040909120015561345481612039565b6001600160a01b038083166000908152600560205260409020600401919091558316156134d1576134858382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b50806134dc816151cf565b9150506133ef565b5060005b835181101561355a576000848281518110613505576135056151b9565b6020908102919091018101516001600160a01b038089166000908152600a8452604080822092841682529190935290912054909150613545878383613587565b50508080613552906151cf565b9150506134e8565b50613563613781565b50505060005481146114585760405162461bcd60e51b8152600401610a2a90615206565b8015611458576001600160a01b038084166000908152600a60209081526040808320868516808552925282209190915560045490911614156136b25760105480156136985760006135df620f4240610cf7858561323c565b60025460115460405163d4e54c3b60e01b81526004810184905260248101919091526001600160a01b03888116604483015292935091169063d4e54c3b90606401602060405180830381600087803b15801561363a57600080fd5b505af115801561364e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136729190615223565b506136928561368185846131e6565b6001600160a01b038716919061333c565b506136ac565b6136ac6001600160a01b038416858461333c565b506136c6565b6136c66001600160a01b038316848361333c565b826001600160a01b0316826001600160a01b03167f9aa05b3d70a9e3e2f004f039648839560576334fb45c81f91b6db03ad9e2efc98360405161370b91815260200190565b60405180910390a36001600160a01b0382166000908152601260205260408120805483929061373b9084906151a1565b90915550506001600160a01b038084166000908152601460209081526040808320938616835292905290812080548392906137779084906151a1565b9091555050505050565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316633f6678256040518163ffffffff1660e01b815260040160206040518083038186803b1580156137d457600080fd5b505afa1580156137e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061380c9190615223565b9050600080821161381e5760006138a4565b600360009054906101000a90046001600160a01b03166001600160a01b03166313416d996040518163ffffffff1660e01b815260040160206040518083038186803b15801561386c57600080fd5b505afa158015613880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a4919061502a565b600354909150600160a01b900460ff166142625760075460008167ffffffffffffffff8111156138d6576138d6614e30565b6040519080825280602002602001820160405280156138ff578160200160208202803683370190505b50905060008267ffffffffffffffff81111561391d5761391d614e30565b604051908082528060200260200182016040528015613946578160200160208202803683370190505b50905060005b83811015613ab65760078181548110613967576139676151b9565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110613997576139976151b9565b60200260200101906001600160a01b031690816001600160a01b03168152505060006001600160a01b03168382815181106139d4576139d46151b9565b60200260200101516001600160a01b031614613a84578281815181106139fc576139fc6151b9565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015613a4757600080fd5b505afa158015613a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a7f9190615223565b613a87565b60005b828281518110613a9957613a996151b9565b602090810291909101015280613aae816151cf565b91505061394c565b506001546040805163d294f09360e01b815281516001600160a01b039093169263d294f093926004808401939192918290030181600087803b158015613afb57600080fd5b505af1925050508015613b2b575060408051601f3d908101601f19168201909252613b28918101906152fa565b60015b613b3e5750600096879650945050505050565b505060005b83811015614252576000806001600160a01b0316848381518110613b6957613b696151b9565b60200260200101516001600160a01b031614613c1957838281518110613b9157613b916151b9565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015613bdc57600080fd5b505afa158015613bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c149190615223565b613c1c565b60005b9050828281518110613c3057613c306151b9565b602002602001015181111561423f576000620f424088858581518110613c5857613c586151b9565b602002602001015184613c6b919061525f565b613c7591906152b9565b613c7f91906152d8565b1115613ea957838281518110613c9757613c976151b9565b60200260200101516001600160a01b031663a9059cbb87620f42408a613cdf888881518110613cc857613cc86151b9565b6020026020010151876131e690919063ffffffff16565b613ce991906152b9565b613cf391906152d8565b6040518363ffffffff1660e01b8152600401613d10929190615085565b602060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d62919061509e565b50838281518110613d7557613d756151b9565b60200260200101516001600160a01b0316866001600160a01b0316336001600160a01b03167f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f42408b613dec898981518110613dd557613dd56151b9565b6020026020010151886131e690919063ffffffff16565b613df691906152b9565b613e0091906152d8565b60405190815260200160405180910390a4838281518110613e2357613e236151b9565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015613e6e57600080fd5b505afa158015613e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea69190615223565b90505b600f546001600160a01b03166140735760085484516001600160a01b039091169063b66503cf90869085908110613ee257613ee26151b9565b6020026020010151613f16868681518110613eff57613eff6151b9565b6020026020010151856131e690919063ffffffff16565b6040518363ffffffff1660e01b8152600401613f33929190615085565b600060405180830381600087803b158015613f4d57600080fd5b505af1158015613f61573d6000803e3d6000fd5b50505050838281518110613f7757613f776151b9565b60200260200101516001600160a01b0316600860009054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b031660008051602061536a833981519152868681518110613fd257613fd26151b9565b602002602001015185613fe5919061525f565b60405190815260200160405180910390a4828281518110614008576140086151b9565b60200260200101518161401b919061525f565b60156000868581518110614031576140316151b9565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600082825461406891906151a1565b9091555061423f9050565b838281518110614085576140856151b9565b60200260200101516001600160a01b031663a9059cbb600f60009054906101000a90046001600160a01b03166140c6868681518110613eff57613eff6151b9565b6040518363ffffffff1660e01b81526004016140e3929190615085565b602060405180830381600087803b1580156140fd57600080fd5b505af1158015614111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614135919061509e565b50838281518110614148576141486151b9565b60200260200101516001600160a01b0316600f60009054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b031660008051602061536a8339815191528686815181106141a3576141a36151b9565b6020026020010151856141b6919061525f565b60405190815260200160405180910390a48282815181106141d9576141d96151b9565b6020026020010151816141ec919061525f565b60156000868581518110614202576142026151b9565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600082825461423991906151a1565b90915550505b508061424a816151cf565b915050613b43565b5060009788975095505050505050565b60015460408051634eb1c24560e11b8152815160009384936001600160a01b0390911692639d63848a926004808301939282900301818787803b1580156142a857600080fd5b505af11580156142bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e0919061531e565b6040516370a0823160e01b815230600482015291935091506000906001600160a01b038416906370a082319060240160206040518083038186803b15801561432757600080fd5b505afa15801561433b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061435f9190615223565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b1580156143a457600080fd5b505afa1580156143b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143dc9190615223565b6001546040805163d294f09360e01b815281519394506001600160a01b039092169263d294f0939260048082019392918290030181600087803b15801561442257600080fd5b505af1925050508015614452575060408051601f3d908101601f1916820190925261444f918101906152fa565b60015b614466575060009788975095505050505050565b50506040516370a0823160e01b815230600482015282906001600160a01b038616906370a082319060240160206040518083038186803b1580156144a957600080fd5b505afa1580156144bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144e19190615223565b6144eb919061525f565b6040516370a0823160e01b815230600482015290985081906001600160a01b038516906370a082319060240160206040518083038186803b15801561452f57600080fd5b505afa158015614543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145679190615223565b614571919061525f565b96506000620f4240614583888b6152b9565b61458d91906152d8565b11156146b9576001600160a01b03841663a9059cbb86620f42406145b18a8d6152b9565b6145bb91906152d8565b6040518363ffffffff1660e01b81526004016145d8929190615085565b602060405180830381600087803b1580156145f257600080fd5b505af1158015614606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061462a919061509e565b506001600160a01b03808616908516337f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f42406146698b8e6152b9565b61467391906152d8565b60405190815260200160405180910390a46040516370a0823160e01b81523060048201526146b69083906001600160a01b038716906370a08231906024016121ab565b97505b6000620f42406146c9888a6152b9565b6146d391906152d8565b11156147ff576001600160a01b03831663a9059cbb86620f42406146f78a8c6152b9565b61470191906152d8565b6040518363ffffffff1660e01b815260040161471e929190615085565b602060405180830381600087803b15801561473857600080fd5b505af115801561474c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614770919061509e565b506001600160a01b03808616908416337f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f42406147af8b8d6152b9565b6147b991906152d8565b60405190815260200160405180910390a46040516370a0823160e01b81523060048201526147fc9082906001600160a01b038616906370a08231906024016121ab565b96505b600f546001600160a01b03166149ac5787156148db5760085460405163b66503cf60e01b81526001600160a01b039091169063b66503cf906148479087908c90600401615085565b600060405180830381600087803b15801561486157600080fd5b505af1158015614875573d6000803e3d6000fd5b505050506001600160a01b038416600090815260156020526040812080548a92906148a19084906151a1565b90915550506008546040518981526001600160a01b03868116921690339060008051602061536a8339815191529060200160405180910390a45b86156149a75760085460405163b66503cf60e01b81526001600160a01b039091169063b66503cf906149139086908b90600401615085565b600060405180830381600087803b15801561492d57600080fd5b505af1158015614941573d6000803e3d6000fd5b505050506001600160a01b0383166000908152601560205260408120805489929061496d9084906151a1565b90915550506008546040518881526001600160a01b03858116921690339060008051602061536a8339815191529060200160405180910390a45b614b7d565b600f5460405163a9059cbb60e01b81526001600160a01b038681169263a9059cbb926149e092909116908c90600401615085565b602060405180830381600087803b1580156149fa57600080fd5b505af1158015614a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a32919061509e565b50600f5460405163a9059cbb60e01b81526001600160a01b038581169263a9059cbb92614a6792909116908b90600401615085565b602060405180830381600087803b158015614a8157600080fd5b505af1158015614a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ab9919061509e565b50600f546040518981526001600160a01b03868116921690339060008051602061536a8339815191529060200160405180910390a4600f546040518881526001600160a01b03858116921690339060008051602061536a8339815191529060200160405180910390a46001600160a01b038416600090815260156020526040812080548a9290614b4a9084906151a1565b90915550506001600160a01b03831660009081526015602052604081208054899290614b779084906151a1565b90915550505b5050505050509091565b6000818310614b965781610d03565b5090919050565b6001600160a01b0382163b614bf45760405162461bcd60e51b815260206004820152601760248201527f5361666545524332303a206e6f6e2d636f6e74726163740000000000000000006044820152606401610a2a565b600080836001600160a01b031683604051614c0f919061534d565b6000604051808303816000865af19150503d8060008114614c4c576040519150601f19603f3d011682016040523d82523d6000602084013e614c51565b606091505b509150915081614c995760405162461bcd60e51b815260206004820152601360248201527214d85999515490cc8c0e88131310c819985a5b606a1b6044820152606401610a2a565b8051156133ca5780806020019051810190614cb4919061509e565b6133ca5760405162461bcd60e51b81526020600482015260136024820152725361666545524332303a20217375636365737360681b6044820152606401610a2a565b6001600160a01b03811681146114de57600080fd5b600060208284031215614d1d57600080fd5b8135610d0381614cf6565b60005b83811015614d43578181015183820152602001614d2b565b838111156133ca5750506000910152565b6020815260008251806020840152614d73816040850160208701614d28565b601f01601f19169190910160400192915050565b60008060408385031215614d9a57600080fd5b8235614da581614cf6565b91506020830135614db581614cf6565b809150509250929050565b80151581146114de57600080fd5b600060208284031215614de057600080fd5b8135610d0381614dc0565b60008060408385031215614dfe57600080fd5b8235614e0981614cf6565b946020939093013593505050565b600060208284031215614e2957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e6f57614e6f614e30565b604052919050565b600082601f830112614e8857600080fd5b8135602067ffffffffffffffff821115614ea457614ea4614e30565b8160051b614eb3828201614e46565b9283528481018201928281019087851115614ecd57600080fd5b83870192505b84831015614ef5578235614ee681614cf6565b82529183019190830190614ed3565b979650505050505050565b60008060408385031215614f1357600080fd5b8235614f1e81614cf6565b9150602083013567ffffffffffffffff811115614f3a57600080fd5b614f4685828601614e77565b9150509250929050565b60008060408385031215614f6357600080fd5b50508035926020909101359150565b600060208284031215614f8457600080fd5b813567ffffffffffffffff811115614f9b57600080fd5b61323484828501614e77565b600080600060608486031215614fbc57600080fd5b833592506020840135614fce81614cf6565b91506040840135614fde81614cf6565b809150509250925092565b600080600060608486031215614ffe57600080fd5b833561500981614cf6565b9250602084013561501981614cf6565b929592945050506040919091013590565b60006020828403121561503c57600080fd5b8151610d0381614cf6565b602080825260059082015264215445414d60d81b604082015260600190565b602080825260059082015264212173746b60d81b604082015260600190565b6001600160a01b03929092168252602082015260400190565b6000602082840312156150b057600080fd5b8151610d0381614dc0565b6000602082840312156150cd57600080fd5b815167ffffffffffffffff808211156150e557600080fd5b818401915084601f8301126150f957600080fd5b81518181111561510b5761510b614e30565b61511e601f8201601f1916602001614e46565b915080825285602082850101111561513557600080fd5b615146816020840160208601614d28565b50949350505050565b73022b8bab0b634bd32b91023b0bab3b2903337b9160651b81526000825161517e816014850160208701614d28565b9190910160140192915050565b634e487b7160e01b600052601160045260246000fd5b600082198211156151b4576151b461518b565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156151e3576151e361518b565b5060010190565b602080825260029082015261306160f01b604082015260600190565b60208082526003908201526252472160e81b604082015260600190565b60006020828403121561523557600080fd5b5051919050565b60006020828403121561524e57600080fd5b815160ff81168114610d0357600080fd5b6000828210156152715761527161518b565b500390565b634e487b7160e01b600052603160045260246000fd5b6422a897239d60d91b8152600082516152ac816005850160208701614d28565b9190910160050192915050565b60008160001904831182151516156152d3576152d361518b565b500290565b6000826152f557634e487b7160e01b600052601260045260246000fd5b500490565b6000806040838503121561530d57600080fd5b505080516020909101519092909150565b6000806040838503121561533157600080fd5b825161533c81614cf6565b6020840151909250614db581614cf6565b6000825161535f818460208701614d28565b919091019291505056feee447878094bcc87bd81b55e4831b5e9e3d095866fce10f4f7e4caa64ea7a558a264697066735822122023af05e3daf5c615cce81ab6e1bd9272b0e1895173ea9881729dfe513f056e8364736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bcbc5777537c0d0462fb82ba48eeb6cb361e853f000000000000000000000000e60d72cdf026c84c72144bbda4f8627c211105550000000000000000000000003045119766352ff250b3d45312bd0973cbf7235a00000000000000000000000017fa9da6e01ad59513707f92033a6eb03ccb10b4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ddf26b42c1d903de8962d3f79a74a501420d5f19
-----Decoded View---------------
Arg [0] : _stake (address): 0xbCbC5777537c0D0462fb82BA48Eeb6cb361E853f
Arg [1] : _ebribe (address): 0xe60D72CDF026c84c72144bbDA4f8627C21110555
Arg [2] : __ve (address): 0x3045119766352fF250b3d45312Bd0973CBF7235a
Arg [3] : _voter (address): 0x17fa9dA6e01aD59513707F92033a6eb03CcB10B4
Arg [4] : _forPair (bool): True
Arg [5] : _allowedRewardTokens (address[]): 0xddF26B42C1d903De8962d3F79a74a501420d5F19
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000bcbc5777537c0d0462fb82ba48eeb6cb361e853f
Arg [1] : 000000000000000000000000e60d72cdf026c84c72144bbda4f8627c21110555
Arg [2] : 0000000000000000000000003045119766352ff250b3d45312bd0973cbf7235a
Arg [3] : 00000000000000000000000017fa9da6e01ad59513707f92033a6eb03ccb10b4
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 000000000000000000000000ddf26b42c1d903de8962d3f79a74a501420d5f19
Deployed Bytecode Sourcemap
14313:25564:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35707:408;;;;;;:::i;:::-;;:::i;:::-;;17549:142;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15510:28;;;;;;;;;1199:25:1;;;1187:2;1172:18;15510:28:0;1053:177:1;15593:47:0;;;;;;:::i;:::-;;;;;;;;;;;;;;18881:266;;;;;;:::i;:::-;;:::i;15714:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;37445:77;;;;;;:::i;:::-;;:::i;17940:93::-;18013:12;;17940:93;;14760:23;;;;;-1:-1:-1;;;;;14760:23:0;;;;;;-1:-1:-1;;;;;2182:32:1;;;2164:51;;2152:2;2137:18;14760:23:0;1997:224:1;19271:144:0;;;;;;:::i;:::-;;:::i;20459:116::-;;;;;;:::i;:::-;-1:-1:-1;;;;;20540:16:0;20516:4;20540:16;;;:10;:16;;;;;:27;;;;20459:116;35196:503;;;;;;:::i;:::-;;:::i;15647:60::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;20583:124;;;;;;:::i;:::-;-1:-1:-1;;;;;20668:16:0;20644:4;20668:16;;;:10;:16;;;;;:31;;;;20583:124;22107:557;;;;;;:::i;:::-;;:::i;21432:453::-;;;;;;:::i;:::-;;:::i;21987:112::-;;;;;;:::i;:::-;;:::i;23224:255::-;;;;;;:::i;:::-;;:::i;17838:94::-;;;:::i;15025:19::-;;;;;-1:-1:-1;;;;;15025:19:0;;;14734;;;;;-1:-1:-1;;;;;14734:19:0;;;22869:347;;;:::i;20769:187::-;;;;;;:::i;:::-;;:::i;37979:205::-;;;;;;:::i;:::-;;:::i;14790:19::-;;;;;-1:-1:-1;;;;;14790:19:0;;;14903:44;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14903:44:0;;;;;;;;;;;;;;-1:-1:-1;;;;;5647:32:1;;;5629:51;;5711:2;5696:18;;5689:34;;;;5739:18;;;5732:34;;;;5797:2;5782:18;;5775:34;5840:3;5825:19;;5818:35;5667:3;5869:19;;5862:35;5616:3;5601:19;14903:44:0;5342:561:1;15245:40:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6073:14:1;;6066:22;6048:41;;6036:2;6021:18;15245:40:0;5908:187:1;37351:86:0;;;;;;:::i;:::-;;:::i;36842:171::-;;;;;;:::i;:::-;;:::i;36123:711::-;;;;;;:::i;:::-;;:::i;37021:177::-;;;;;;:::i;:::-;;:::i;15464:25::-;;;;;;14878:18;;;;;-1:-1:-1;;;14878:18:0;;;;;;18161:178;;;;;;:::i;:::-;;:::i;15547:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;15092:77;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;18041:112;;;;;;:::i;:::-;-1:-1:-1;;;;;18127:18:0;18100:7;18127:18;;;:9;:18;;;;;;;18041:112;15434:23;;;;;-1:-1:-1;;;;;15434:23:0;;;14844:25;;;;;-1:-1:-1;;;;;14844:25:0;;;14954:29;;;;;;:::i;:::-;;:::i;22672:82::-;;;:::i;34565:623::-;;;;;;:::i;:::-;;:::i;20239:84::-;20312:2;;-1:-1:-1;;;;;20312:2:0;20239:84;;20059:101;20134:11;:18;20059:101;;17699:131;;;:::i;19625:315::-;;;;;;:::i;:::-;;:::i;24707:2567::-;;;;;;:::i;:::-;;:::i;20964:460::-;;;;;;:::i;:::-;;:::i;19423:194::-;;;;;;:::i;:::-;;:::i;33826:630::-;;;;;;:::i;:::-;;:::i;27282:120::-;;;:::i;:::-;;;;7757:25:1;;;7813:2;7798:18;;7791:34;;;;7730:18;27282:120:0;7583:248:1;20331:120:0;;;;;;:::i;:::-;-1:-1:-1;;;;;20414:16:0;20390:4;20414:16;;;:10;:16;;;;;:29;;;;20331:120;15292:44;;;;;;:::i;:::-;;;;;;;;;;;;;;;;21893:86;;;:::i;14816:21::-;;;;;-1:-1:-1;;;14816:21:0;;;;;;19948:103;20024:12;:19;19948:103;;15176:62;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;37530:441;;;;;;:::i;:::-;;:::i;22762:97::-;;;:::i;18347:468::-;;;;;;:::i;:::-;;:::i;14990:28::-;;;;;;:::i;:::-;;:::i;35707:408::-;38849:2;;;;;;;;;-1:-1:-1;;;;;38849:2:0;-1:-1:-1;;;;;38849:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38837:21:0;:10;-1:-1:-1;;;;;38837:21:0;;38829:39;;;;-1:-1:-1;;;38829:39:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;35778:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;;::::1;;:25;35770:41;;;::::0;-1:-1:-1;;;35770:41:0;;8627:2:1;35770:41:0::1;::::0;::::1;8609:21:1::0;8666:1;8646:18;;;8639:29;-1:-1:-1;;;8684:18:1;;;8677:33;8727:18;;35770:41:0::1;8425:326:1::0;35770:41:0::1;35876:5;::::0;-1:-1:-1;;;;;35862:20:0;;::::1;35876:5:::0;::::1;35862:20;;35853:39;;;;-1:-1:-1::0;;;35853:39:0::1;;;;;;;:::i;:::-;35961:5;::::0;35934:53:::1;::::0;-1:-1:-1;;;35934:53:0;;-1:-1:-1;;;;;35934:18:0;;::::1;::::0;::::1;::::0;:53:::1;::::0;35961:5;;::::1;::::0;-1:-1:-1;;35969:17:0;35934:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;35998:11:0::1;:20:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;;35998:20:0::1;-1:-1:-1::0;;;;;35998:20:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;36029:16:0;;;:12:::1;35998:20;36029:16:::0;;;;;:23;;-1:-1:-1;;36029:23:0::1;::::0;::::1;::::0;;36094:5:::1;::::0;36068:39;;36094:5;::::1;::::0;36068:39:::1;::::0;-1:-1:-1;36068:39:0::1;35707:408:::0;:::o;17549:142::-;17669:5;;:12;;;-1:-1:-1;;;17669:12:0;;;;17588:13;;-1:-1:-1;;;;;17669:5:0;;:10;;:12;;;;;:5;;:12;;;;;;;:5;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17669:12:0;;;;;;;;;;;;:::i;:::-;17628:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;17614:69;;17549:142;:::o;18881:266::-;-1:-1:-1;;;;;19107:16:0;;;18960:7;19107:16;;;:7;:16;;;;;;;;:31;;;;;;;;;;;;;19044;;;:22;:31;;;;;:46;;;;;;;;;;18987:152;;19107:31;18987:115;;19097:4;;18987:105;;19010:81;;:29;19124:13;19010:14;:29::i;:::-;:33;;:81::i;:::-;-1:-1:-1;;;;;18987:18:0;;;;;;:9;:18;;;;;;;:22;:105::i;:::-;:109;;:115::i;:::-;:119;;:152::i;:::-;18980:159;;18881:266;;;;;:::o;37445:77::-;38849:2;;;;;;;;;-1:-1:-1;;;;;38849:2:0;-1:-1:-1;;;;;38849:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38837:21:0;:10;-1:-1:-1;;;;;38837:21:0;;38829:39;;;;-1:-1:-1;;;38829:39:0;;;;;;;:::i;:::-;37503:6:::1;:11:::0;;;::::1;;-1:-1:-1::0;;;37503:11:0::1;-1:-1:-1::0;;;;37503:11:0;;::::1;::::0;;;::::1;::::0;;37445:77::o;19271:144::-;19348:7;19375:32;19384:7;19393:13;19375:8;:32::i;35196:503::-;38849:2;;;;;;;;;-1:-1:-1;;;;;38849:2:0;-1:-1:-1;;;;;38849:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38837:21:0;:10;-1:-1:-1;;;;;38837:21:0;;38829:39;;;;-1:-1:-1;;;38829:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35343:25:0;::::1;;::::0;;;:10:::1;:25;::::0;;;;:38:::1;;::::0;35325:15:::1;:56;35303:139;;;::::0;-1:-1:-1;;;35303:139:0;;10975:2:1;35303:139:0::1;::::0;::::1;10957:21:1::0;11014:1;10994:18;;;10987:29;-1:-1:-1;;;11032:18:1;;;11025:33;11075:18;;35303:139:0::1;10773:326:1::0;35303:139:0::1;35480:1;35461:16;:20;35453:35;;;::::0;-1:-1:-1;;;35453:35:0;;11306:2:1;35453:35:0::1;::::0;::::1;11288:21:1::0;11345:1;11325:18;;;11318:29;-1:-1:-1;;;11363:18:1;;;11356:32;11405:18;;35453:35:0::1;11104:325:1::0;35453:35:0::1;-1:-1:-1::0;;;;;35535:25:0;::::1;;::::0;;;:10:::1;:25;::::0;;;;;;:41:::1;;:60:::0;;;35611:80;::::1;::::0;::::1;::::0;35579:16;1199:25:1;;1187:2;1172:18;;1053:177;35611:80:0::1;;;;;;;;35196:503:::0;;:::o;22107:557::-;7951:1;7934:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;7963:20:0;7986:13;;;22174:10:::1;::::0;38289:483:::1;38306:12;:19:::0;38302:23;::::1;38289:483;;;38347:13;38363:12;38376:1;38363:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38363:15:0::1;::::0;-1:-1:-1;38434:21:0::1;38363:15:::0;38434:14:::1;:21::i;:::-;-1:-1:-1::0;;;;;38393:17:0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;:38:::1;:62:::0;38505:31:::1;38404:5:::0;38505:24:::1;:31::i;:::-;-1:-1:-1::0;;;;;38470:17:0;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:32:::1;;:66:::0;;;;38555:21;::::1;::::0;38551:210:::1;;38623:24;38632:7;38641:5;38623:8;:24::i;:::-;-1:-1:-1::0;;;;;38597:16:0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:23;;::::1;::::0;;;;;;;;;:50;;;;38707:10:::1;:17:::0;;;;;;:38:::1;::::0;38666:31;;;:22:::1;:31:::0;;;;;:38;;;;;;;;;;:79;38551:210:::1;-1:-1:-1::0;38327:3:0;::::1;::::0;::::1;:::i;:::-;;;;38289:483;;;;22214:1:::2;22205:6;:10;22197:25;;;;-1:-1:-1::0;;;22197:25:0::2;;;;;;;:::i;:::-;22271:12;;22262:6;:21;22254:36;;;::::0;-1:-1:-1;;;22254:36:0;;12503:2:1;22254:36:0::2;::::0;::::2;12485:21:1::0;12542:1;12522:18;;;12515:29;-1:-1:-1;;;12560:18:1;;;12553:32;12602:18;;22254:36:0::2;12301:325:1::0;22254:36:0::2;22389:12;::::0;:24:::2;::::0;22406:6;22389:16:::2;:24::i;:::-;22374:12;:39:::0;22458:10:::2;22448:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;22474:6;22448:25:::2;:33::i;:::-;22434:10;22424:21;::::0;;;:9:::2;:21;::::0;;;;:57;;;;22492:5:::2;::::0;:38:::2;::::0;-1:-1:-1;;;;;22492:5:0;;::::2;::::0;22523:6;22492:18:::2;:38::i;:::-;22546:29;::::0;1199:25:1;;;22556:10:0::2;::::0;22546:29:::2;::::0;1187:2:1;1172:18;22546:29:0::2;;;;;;;22591:40;::::0;1199:25:1;;;22620:1:0::2;::::0;22600:10:::2;::::0;22591:40:::2;::::0;1187:2:1;1172:18;22591:40:0::2;;;;;;;;8010:1:::1;8046:13:::0;;8030:12;:29;8022:45;;;;-1:-1:-1;;;8022:45:0;;;;;;;:::i;:::-;7923:152;22107:557;:::o;21432:453::-;7951:1;7934:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;7963:20:0;7986:13;38952:6:::1;::::0;-1:-1:-1;;;38952:6:0;::::1;;;38951:7;38943:25;;;::::0;-1:-1:-1;;;38943:25:0;;13164:2:1;38943:25:0::1;::::0;::::1;13146:21:1::0;13203:1;13183:18;;;13176:29;-1:-1:-1;;;13221:18:1;;;13214:35;13266:18;;38943:25:0::1;12962:328:1::0;38943:25:0::1;21526:5:::2;38294:6;38289:483;38306:12;:19:::0;38302:23;::::2;38289:483;;;38347:13;38363:12;38376:1;38363:15;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;::::2;::::0;-1:-1:-1;;;;;38363:15:0::2;::::0;-1:-1:-1;38434:21:0::2;38363:15:::0;38434:14:::2;:21::i;:::-;-1:-1:-1::0;;;;;38393:17:0;::::2;;::::0;;;:10:::2;:17;::::0;;;;;;;:38:::2;:62:::0;38505:31:::2;38404:5:::0;38505:24:::2;:31::i;:::-;-1:-1:-1::0;;;;;38470:17:0;;::::2;;::::0;;;:10:::2;:17;::::0;;;;:32:::2;;:66:::0;;;;38555:21;::::2;::::0;38551:210:::2;;38623:24;38632:7;38641:5;38623:8;:24::i;:::-;-1:-1:-1::0;;;;;38597:16:0;;::::2;;::::0;;;:7:::2;:16;::::0;;;;;;;:23;;::::2;::::0;;;;;;;;;:50;;;;38707:10:::2;:17:::0;;;;;;:38:::2;::::0;38666:31;;;:22:::2;:31:::0;;;;;:38;;;;;;;;;;:79;38551:210:::2;-1:-1:-1::0;38327:3:0;::::2;::::0;::::2;:::i;:::-;;;;38289:483;;;;21561:1:::3;21552:6;:10;21544:25;;;;-1:-1:-1::0;;;21544:25:0::3;;;;;;;:::i;:::-;21613:12;::::0;:24:::3;::::0;21630:6;21613:16:::3;:24::i;:::-;21598:12;:39:::0;-1:-1:-1;;;;;21667:16:0;::::3;;::::0;;;:9:::3;:16;::::0;;;;;:28:::3;::::0;21688:6;21667:20:::3;:28::i;:::-;-1:-1:-1::0;;;;;21648:16:0;;::::3;;::::0;;;:9:::3;:16;::::0;;;;:47;;;;21706:5:::3;::::0;:57:::3;::::0;:5:::3;21729:10;21749:4;21756:6:::0;21706:22:::3;:57::i;:::-;21787:5;-1:-1:-1::0;;;;;21779:22:0::3;;21794:6;21779:22;;;;1199:25:1::0;;1187:2;1172:18;;1053:177;21779:22:0::3;;;;;;;;21817:35;::::0;1199:25:1;;;-1:-1:-1;;;;;21817:35:0;::::3;::::0;21834:1:::3;::::0;21817:35:::3;::::0;1187:2:1;1172:18;21817:35:0::3;;;;;;;38989:1:::2;8046:13:::0;;8030:12;:29;8022:45;;;;-1:-1:-1;;;8022:45:0;;;;;;;:::i;:::-;7923:152;21432:453;;:::o;21987:112::-;22063:5;;:27;;-1:-1:-1;;;22063:27:0;;22079:10;22063:27;;;2164:51:1;22045:46:0;;22056:5;;-1:-1:-1;;;;;22063:5:0;;;;:15;;2137:18:1;;22063:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22045:46::-;21987:112;:::o;23224:255::-;23313:10;-1:-1:-1;;;;;23313:21:0;;;;:53;;-1:-1:-1;23360:5:0;;-1:-1:-1;;;;;23360:5:0;23338:10;:28;23313:53;23305:86;;;;-1:-1:-1;;;23305:86:0;;13686:2:1;23305:86:0;;;13668:21:1;13725:2;13705:18;;;13698:30;-1:-1:-1;;;13744:18:1;;;13737:50;13804:18;;23305:86:0;13484:344:1;23305:86:0;23402:5;;:31;;-1:-1:-1;;;23402:31:0;;23427:4;23402:31;;;2164:51:1;-1:-1:-1;;;;;23402:5:0;;;;:16;;2137:18:1;;23402:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23444:27;23455:7;23464:6;23444:10;:27::i;17838:94::-;17908:5;;:16;;;-1:-1:-1;;;17908:16:0;;;;17881:7;;-1:-1:-1;;;;;17908:5:0;;:14;;:16;;;;;;;;;;;;;;:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17901:23;;;;17838:94;:::o;22869:347::-;7951:1;7934:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;7963:20:0;7986:13;;;22923:10:::1;::::0;38289:483:::1;38306:12;:19:::0;38302:23;::::1;38289:483;;;38347:13;38363:12;38376:1;38363:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38363:15:0::1;::::0;-1:-1:-1;38434:21:0::1;38363:15:::0;38434:14:::1;:21::i;:::-;-1:-1:-1::0;;;;;38393:17:0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;:38:::1;:62:::0;38505:31:::1;38404:5:::0;38505:24:::1;:31::i;:::-;-1:-1:-1::0;;;;;38470:17:0;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:32:::1;;:66:::0;;;;38555:21;::::1;::::0;38551:210:::1;;38623:24;38632:7;38641:5;38623:8;:24::i;:::-;-1:-1:-1::0;;;;;38597:16:0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:23;;::::1;::::0;;;;;;;;;:50;;;;38707:10:::1;:17:::0;;;;;;:38:::1;::::0;38666:31;;;:22:::1;:31:::0;;;;;:38;;;;;;;;;;:79;38551:210:::1;-1:-1:-1::0;38327:3:0;::::1;::::0;::::1;:::i;:::-;;;;38289:483;;;;22953:6:::2;22948:238;22965:12;:19:::0;22961:23;::::2;22948:238;;;23006:21;23030:12;23043:1;23030:15;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;;;::::2;::::0;23086:10:::2;23078:19:::0;;;:7:::2;:19:::0;;;;;;-1:-1:-1;;;;;23030:15:0;;::::2;23078:34:::0;;;;;;;;;;;;23030:15;;-1:-1:-1;23127:47:0::2;::::0;23030:15;23078:34;23127:11:::2;:47::i;:::-;22991:195;;22986:3;;;;;:::i;:::-;;;;22948:238;;;;23196:12;:10;:12::i;:::-;;;8010:1:::1;8046:13:::0;;8030:12;:29;8022:45;;;;-1:-1:-1;;;8022:45:0;;;;;;;:::i;20769:187::-;38849:2;;;;;;;;;-1:-1:-1;;;;;38849:2:0;-1:-1:-1;;;;;38849:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38837:21:0;:10;-1:-1:-1;;;;;38837:21:0;;38829:39;;;;-1:-1:-1;;;38829:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20882:25:0;;::::1;;::::0;;;:10:::1;:25;::::0;;;;:66;;-1:-1:-1;;;;;;20882:66:0::1;::::0;;;::::1;;::::0;;20769:187::o;37979:205::-;38849:2;;;;;;;;;-1:-1:-1;;;;;38849:2:0;-1:-1:-1;;;;;38849:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38837:21:0;:10;-1:-1:-1;;;;;38837:21:0;;38829:39;;;;-1:-1:-1;;;38829:39:0;;;;;;;:::i;:::-;38076:3:::1;38071;:8;;38063:24;;;::::0;-1:-1:-1;;;38063:24:0;;14313:2:1;38063:24:0::1;::::0;::::1;14295:21:1::0;14352:1;14332:18;;;14325:29;-1:-1:-1;;;14370:18:1;;;14363:33;14413:18;;38063:24:0::1;14111:326:1::0;38063:24:0::1;38130:10;:16:::0;;;;38157:13:::1;:19:::0;37979:205::o;37351:86::-;38849:2;;;;;;;;;-1:-1:-1;;;;;38849:2:0;-1:-1:-1;;;;;38849:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38837:21:0;:10;-1:-1:-1;;;;;38837:21:0;;38829:39;;;;-1:-1:-1;;;38829:39:0;;;;;;;:::i;:::-;37415:8:::1;:14:::0;;-1:-1:-1;;;;;;37415:14:0::1;-1:-1:-1::0;;;;;37415:14:0;;;::::1;::::0;;;::::1;::::0;;37351:86::o;36842:171::-;38849:2;;;;;;;;;-1:-1:-1;;;;;38849:2:0;-1:-1:-1;;;;;38849:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38837:21:0;:10;-1:-1:-1;;;;;38837:21:0;;38829:39;;;;-1:-1:-1;;;38829:39:0;;;;;;;:::i;:::-;36923:7:::1;36919:87;36937:4;:11;36932:2;:16;36919:87;;;36971:23;36985:4;36990:2;36985:8;;;;;;;;:::i;:::-;;;;;;;36971:13;:23::i;:::-;36950:4:::0;::::1;::::0;::::1;:::i;:::-;;;;36919:87;;36123:711:::0;38849:2;;;;;;;;;-1:-1:-1;;;;;38849:2:0;-1:-1:-1;;;;;38849:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38837:21:0;:10;-1:-1:-1;;;;;38837:21:0;;38829:39;;;;-1:-1:-1;;;38829:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36197:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;;::::1;;:24;;:16:::0;:24:::1;36189:40;;;::::0;-1:-1:-1;;;36189:40:0;;14644:2:1;36189:40:0::1;::::0;::::1;14626:21:1::0;14683:1;14663:18;;;14656:29;-1:-1:-1;;;14701:18:1;;;14694:33;14744:18;;36189:40:0::1;14442:326:1::0;36189:40:0::1;36292:5;::::0;36265:37:::1;::::0;-1:-1:-1;;;36265:37:0;;-1:-1:-1;;;;;36265:18:0;;::::1;::::0;::::1;::::0;:37:::1;::::0;36292:5;;::::1;::::0;::::1;::::0;36265:37:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;36324:11:0::1;:18:::0;;;-1:-1:-1;;;;;36356:22:0;::::1;::::0;36368:5:::1;36372:1;36324:18:::0;36368:5:::1;:::i;:::-;36356:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;36356:18:0::1;:22;36353:418;;;36395:11;:17;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;36395:17:0;;;;;-1:-1:-1;;;;;;36395:17:0::1;::::0;;;;;;;;-1:-1:-1;;;;;36427:16:0;::::1;::::0;;:12:::1;:16:::0;;;;;:24;;-1:-1:-1;;36427:24:0::1;::::0;;36353:418:::1;;;36497:6;36493:267;36509:11;:18:::0;:22:::1;::::0;36530:1:::1;::::0;36509:22:::1;:::i;:::-;36505:1;:26;36493:267;;;36576:2;-1:-1:-1::0;;;;;36560:18:0::1;:11;36572:1;36560:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;36560:14:0::1;:18;36557:188;;;36620:11;36632:5;36636:1;36632:3:::0;:5:::1;:::i;:::-;36620:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;36603:11:::1;:14:::0;;-1:-1:-1;;;;;36620:18:0;;::::1;::::0;36615:1;;36603:14;::::1;;;;;:::i;:::-;;;;;;;;;:35;;;;;-1:-1:-1::0;;;;;36603:35:0::1;;;;;-1:-1:-1::0;;;;;36603:35:0::1;;;;;;36661:11;:17;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;36661:17:0;;;;;-1:-1:-1;;;;;;36661:17:0::1;::::0;;;;;;;;-1:-1:-1;;;;;36701:16:0;::::1;::::0;;:12:::1;:16:::0;;;;;:24;;-1:-1:-1;;36701:24:0::1;::::0;;36557:188:::1;36533:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36493:267;;;;36353:418;36812:5;::::0;36786:40:::1;::::0;36820:5:::1;::::0;-1:-1:-1;;;;;36812:5:0;;::::1;::::0;36786:40;;::::1;::::0;::::1;::::0;36820:5;;36786:40:::1;36178:656;36123:711:::0;:::o;37021:177::-;38849:2;;;;;;;;;-1:-1:-1;;;;;38849:2:0;-1:-1:-1;;;;;38849:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38837:21:0;:10;-1:-1:-1;;;;;38837:21:0;;38829:39;;;;-1:-1:-1;;;38829:39:0;;;;;;;:::i;:::-;37105:7:::1;37101:90;37119:4;:11;37114:2;:16;37101:90;;;37153:26;37170:4;37175:2;37170:8;;;;;;;;:::i;:::-;;;;;;;37153:16;:26::i;:::-;37132:4:::0;::::1;::::0;::::1;:::i;:::-;;;;37101:90;;18161:178:::0;-1:-1:-1;;;;;18292:25:0;;18239:7;18292:25;;;:10;:25;;;;;:38;;;18266:65;;18275:15;;18266:8;:65::i;14954:29::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14954:29:0;;-1:-1:-1;14954:29:0;:::o;22672:82::-;22734:10;22724:21;;;;:9;:21;;;;;;22715:31;;:8;:31::i;:::-;22672:82::o;34565:623::-;38849:2;;;;;;;;;-1:-1:-1;;;;;38849:2:0;-1:-1:-1;;;;;38849:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38837:21:0;:10;-1:-1:-1;;;;;38837:21:0;;38829:39;;;;-1:-1:-1;;;38829:39:0;;;;;;;:::i;:::-;34672:5:::1;::::0;-1:-1:-1;;;;;34654:24:0;;::::1;34672:5:::0;::::1;34654:24;34651:446;;;34984:12;::::0;34948:5:::1;::::0;:30:::1;::::0;-1:-1:-1;;;34948:30:0;;34972:4:::1;34948:30;::::0;::::1;2164:51:1::0;34931:13:0::1;::::0;34947:50:::1;::::0;34984:12;;-1:-1:-1;;;;;34948:5:0;;::::1;::::0;:15:::1;::::0;2137:18:1;;34948:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34947:50::-;34931:66;;35029:8;35021:4;:16;;35012:35;;;;-1:-1:-1::0;;;35012:35:0::1;;;;;;;:::i;:::-;34680:417;34651:446;35107:34;::::0;-1:-1:-1;;;35107:34:0;;-1:-1:-1;;;;;35107:23:0;::::1;::::0;::::1;::::0;:34:::1;::::0;35131:3;;35136:4;;35107:34:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35167:6;-1:-1:-1::0;;;;;35157:23:0::1;;35175:4;35157:23;;;;1199:25:1::0;;1187:2;1172:18;;1053:177;35157:23:0::1;;;;;;;;34565:623:::0;;;:::o;17699:131::-;17806:5;;:14;;;-1:-1:-1;;;17806:14:0;;;;17740:13;;-1:-1:-1;;;;;17806:5:0;;:12;;:14;;;;;:5;;:14;;;;;;;:5;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17806:14:0;;;;;;;;;;;;:::i;:::-;17780:41;;;;;;;;:::i;19625:315::-;-1:-1:-1;;;;;19725:25:0;;19685:4;19725:25;;;:10;:25;;;;;:38;;;19706:15;:57;19702:71;;-1:-1:-1;19772:1:0;;19625:315;-1:-1:-1;19625:315:0:o;19702:71::-;-1:-1:-1;;;;;19804:25:0;;19784:17;19804:25;;;:10;:25;;;;;:38;;;:59;;19847:15;19804:42;:59::i;:::-;-1:-1:-1;;;;;19895:25:0;;;;;;:10;:25;;;;;:36;;;19784:79;;-1:-1:-1;19881:51:0;;19784:79;;19881:13;:51::i;:::-;19874:58;19625:315;-1:-1:-1;;;19625:315:0:o;24707:2567::-;7951:1;7934:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;7963:20:0;7986:13;;;7963:20;38289:483:::1;38306:12;:19:::0;38302:23;::::1;38289:483;;;38347:13;38363:12;38376:1;38363:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38363:15:0::1;::::0;-1:-1:-1;38434:21:0::1;38363:15:::0;38434:14:::1;:21::i;:::-;-1:-1:-1::0;;;;;38393:17:0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;:38:::1;:62:::0;38505:31:::1;38404:5:::0;38505:24:::1;:31::i;:::-;-1:-1:-1::0;;;;;38470:17:0;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:32:::1;;:66:::0;;;;38555:21;::::1;::::0;38551:210:::1;;38623:24;38632:7;38641:5;38623:8;:24::i;:::-;-1:-1:-1::0;;;;;38597:16:0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:23;;::::1;::::0;;;;;;;;;:50;;;;38707:10:::1;:17:::0;;;;;;:38:::1;::::0;38666:31;;;:22:::1;:31:::0;;;;;:38;;;;;;;;;;:79;38551:210:::1;-1:-1:-1::0;38327:3:0;::::1;::::0;::::1;:::i;:::-;;;;38289:483;;;-1:-1:-1::0;24866:5:0::2;::::0;-1:-1:-1;;;;;24841:31:0;;::::2;24866:5:::0;::::2;24841:31;;24833:49;;;;-1:-1:-1::0;;;24833:49:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24945:23:0;::::2;;::::0;;;:8:::2;:23;::::0;;;;;::::2;;24937:51;;;::::0;-1:-1:-1;;;24937:51:0;;15951:2:1;24937:51:0::2;::::0;::::2;15933:21:1::0;15990:2;15970:18;;;15963:30;-1:-1:-1;;;16009:18:1;;;16002:44;16063:18;;24937:51:0::2;15749:338:1::0;24937:51:0::2;25020:1;25007:12;;:14;24999:37;;;::::0;-1:-1:-1;;;24999:37:0;;16294:2:1;24999:37:0::2;::::0;::::2;16276:21:1::0;16333:2;16313:18;;;16306:30;-1:-1:-1;;;16352:18:1;;;16345:41;16403:18;;24999:37:0::2;16092:335:1::0;24999:37:0::2;25255:12;:10;:12::i;:::-;-1:-1:-1::0;;25350:46:0::2;::::0;-1:-1:-1;;;25350:46:0;;25390:4:::2;25350:46;::::0;::::2;2164:51:1::0;25338:9:0::2;::::0;-1:-1:-1;;;;;25350:31:0;::::2;::::0;::::2;::::0;2137:18:1;;25350:46:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25338:58:::0;-1:-1:-1;25577:74:0::2;-1:-1:-1::0;;;;;25577:38:0;::::2;25616:10;25636:4;25643:7:::0;25577:38:::2;:74::i;:::-;25674:46;::::0;-1:-1:-1;;;25674:46:0;;25714:4:::2;25674:46;::::0;::::2;2164:51:1::0;25662:9:0::2;::::0;-1:-1:-1;;;;;25674:31:0;::::2;::::0;::::2;::::0;2137:18:1;;25674:46:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25662:58:::0;-1:-1:-1;25741:11:0::2;25748:4:::0;25662:58;25741:11:::2;:::i;:::-;25731:21;;25781:1;25771:7;:11;25763:26;;;::::0;-1:-1:-1;;;25763:26:0;;16634:2:1;25763:26:0::2;::::0;::::2;16616:21:1::0;16673:1;16653:18;;;16646:29;-1:-1:-1;;;16691:18:1;;;16684:32;16733:18;;25763:26:0::2;16432:325:1::0;25763:26:0::2;-1:-1:-1::0;;;;;25866:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;:38:::2;;::::0;25847:15:::2;:57;25843:1124;;-1:-1:-1::0;;;;;25972:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;:41:::2;;::::0;25960:54:::2;::::0;:7;;:11:::2;:54::i;:::-;-1:-1:-1::0;;;;;25921:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;:36:::2;;:93:::0;25843:1124:::2;;;-1:-1:-1::0;;;;;26138:25:0;::::2;26116:19;26138:25:::0;;;:10:::2;:25;::::0;;;;:36:::2;::::0;::::2;::::0;26209:38:::2;::::0;;::::2;::::0;26138:36;;26116:19;26209:59:::2;::::0;26252:15:::2;26209:42;:59::i;:::-;-1:-1:-1::0;;;;;26316:25:0;::::2;26283:16;26316:25:::0;;;:10:::2;:25;::::0;;;;:36:::2;;::::0;26189:79;;-1:-1:-1;26283:16:0;26302:51:::2;::::0;26189:79;;26302:13:::2;:51::i;:::-;-1:-1:-1::0;;;;;26433:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;:41:::2;;::::0;26283:70;;-1:-1:-1;26407:68:0::2;::::0;:21:::2;:7:::0;26283:70;26407:11:::2;:21::i;:68::-;-1:-1:-1::0;;;;;26368:25:0;;::::2;;::::0;;;:10:::2;:25;::::0;;;;:36:::2;::::0;;::::2;:107:::0;;;;26531:5;;::::2;26511:10;:26;;::::0;:103:::2;;-1:-1:-1::0;;;;;;26570:25:0;;::::2;;::::0;;;:10:::2;:25;::::0;;;;:44;::::2;26558:10;:56;;26511:103;:145;;;;26647:2;;;;;;;;;-1:-1:-1::0;;;;;26647:2:0::2;-1:-1:-1::0;;;;;26647:7:0::2;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26635:21:0::2;:10;-1:-1:-1::0;;;;;26635:21:0::2;;;26511:145;26490:466;;;-1:-1:-1::0;;;;;26748:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;:36:::2;;::::0;:54;-1:-1:-1;26748:54:0::2;::::0;:101:::2;;;26841:8;26831:7;:18;26748:101;26691:249;;;;-1:-1:-1::0;;;26691:249:0::2;;;;;;16964:2:1::0;16946:21;;;17003:1;16983:18;;;16976:29;-1:-1:-1;;;17036:2:1;17021:18;;17014:34;17080:2;17065:18;;16762:327;26691:249:0::2;26032:935;;;25843:1124;-1:-1:-1::0;;;;;26979:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;27022:15:::2;26979:40;::::0;::::2;:58:::0;;;27109:41:::2;::::0;;::::2;::::0;27089:62:::2;::::0;27022:15;27089:19:::2;:62::i;:::-;-1:-1:-1::0;;;;;27048:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;;;;;:38:::2;;:103:::0;;;;27167:47;1199:25:1;;;27194:10:0::2;::::0;27167:47:::2;::::0;1172:18:1;27167:47:0::2;;;;;;;-1:-1:-1::0;;;;;27225:30:0;::::2;;::::0;;;:15:::2;:30;::::0;;;;:41;;27259:7;;27225:30;:41:::2;::::0;27259:7;;27225:41:::2;:::i;:::-;;;;;;;;24822:2452;;8010:1:::1;8046:13:::0;;8030:12;:29;8022:45;;;;-1:-1:-1;;;8022:45:0;;;;;;;:::i;20964:460::-;7951:1;7934:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;7963:20:0;7986:13;38952:6:::1;::::0;-1:-1:-1;;;38952:6:0;::::1;;;38951:7;38943:25;;;::::0;-1:-1:-1;;;38943:25:0;;13164:2:1;38943:25:0::1;::::0;::::1;13146:21:1::0;13203:1;13183:18;;;13176:29;-1:-1:-1;;;13221:18:1;;;13214:35;13266:18;;38943:25:0::1;12962:328:1::0;38943:25:0::1;21040:10:::2;38294:6;38289:483;38306:12;:19:::0;38302:23;::::2;38289:483;;;38347:13;38363:12;38376:1;38363:15;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;::::2;::::0;-1:-1:-1;;;;;38363:15:0::2;::::0;-1:-1:-1;38434:21:0::2;38363:15:::0;38434:14:::2;:21::i;:::-;-1:-1:-1::0;;;;;38393:17:0;::::2;;::::0;;;:10:::2;:17;::::0;;;;;;;:38:::2;:62:::0;38505:31:::2;38404:5:::0;38505:24:::2;:31::i;:::-;-1:-1:-1::0;;;;;38470:17:0;;::::2;;::::0;;;:10:::2;:17;::::0;;;;:32:::2;;:66:::0;;;;38555:21;::::2;::::0;38551:210:::2;;38623:24;38632:7;38641:5;38623:8;:24::i;:::-;-1:-1:-1::0;;;;;38597:16:0;;::::2;;::::0;;;:7:::2;:16;::::0;;;;;;;:23;;::::2;::::0;;;;;;;;;:50;;;;38707:10:::2;:17:::0;;;;;;:38:::2;::::0;38666:31;;;:22:::2;:31:::0;;;;;:38;;;;;;;;;;:79;38551:210:::2;-1:-1:-1::0;38327:3:0;::::2;::::0;::::2;:::i;:::-;;;;38289:483;;;;21080:1:::3;21071:6;:10;21063:25;;;;-1:-1:-1::0;;;21063:25:0::3;;;;;;;:::i;:::-;21132:12;::::0;:24:::3;::::0;21149:6;21132:16:::3;:24::i;:::-;21117:12;:39:::0;21201:10:::3;21191:21;::::0;;;:9:::3;:21;::::0;;;;;:33:::3;::::0;21217:6;21191:25:::3;:33::i;:::-;21177:10;21167:21;::::0;;;:9:::3;:21;::::0;;;;:57;;;;21235:5:::3;::::0;:57:::3;::::0;-1:-1:-1;;;;;21235:5:0;;::::3;::::0;21278:4:::3;21285:6:::0;21235:22:::3;:57::i;:::-;21308:27;::::0;1199:25:1;;;21316:10:0::3;::::0;21308:27:::3;::::0;1187:2:1;1172:18;21308:27:0::3;;;;;;;21351:40;::::0;1199:25:1;;;21372:10:0::3;::::0;21368:1:::3;::::0;21351:40:::3;::::0;1187:2:1;1172:18;21351:40:0::3;1053:177:1::0;19423:194:0;-1:-1:-1;;;;;19567:25:0;;19499:7;19567:25;;;:10;:25;;;;;:41;;;;19526:36;;;;;:83;;:40;:83::i;33826:630::-;38849:2;;;;;;;;;-1:-1:-1;;;;;38849:2:0;-1:-1:-1;;;;;38849:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38837:21:0;:10;-1:-1:-1;;;;;38837:21:0;;38829:39;;;;-1:-1:-1;;;38829:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33973:23:0;::::1;;::::0;;;:8:::1;:23;::::0;;;;;::::1;;:32;::::0;::::1;:95;;-1:-1:-1::0;;;;;;34022:25:0;::::1;;::::0;;;:10:::1;:25;::::0;;;;:41:::1;;::::0;:46;33973:95:::1;33951:172;;;::::0;-1:-1:-1;;;33951:172:0;;17296:2:1;33951:172:0::1;::::0;::::1;17278:21:1::0;17335:1;17315:18;;;17308:29;-1:-1:-1;;;17353:18:1;;;17346:32;17395:18;;33951:172:0::1;17094:325:1::0;33951:172:0::1;34168:5;::::0;-1:-1:-1;;;;;34143:31:0;;::::1;34168:5:::0;::::1;34143:31;;34134:50;;;;-1:-1:-1::0;;;34134:50:0::1;;;;;;;:::i;:::-;34227:12;:32:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;34227:32:0;;::::1;-1:-1:-1::0;;;;;;34227:32:0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;34270:23:0;;;:8:::1;34227:32;34270:23:::0;;;;;;;:30;;-1:-1:-1;;34270:30:0::1;::::0;::::1;::::0;;34311:10:::1;:25:::0;;;;;;:66;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;34388:41;::::1;:60:::0;33826:630::o;27282:120::-;27334:13;27349;7951:1;7934:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;7963:20:0;7986:13;27382:12:::1;:10;:12::i;:::-;27375:19;;;;8046:13:::0;;8030:12;:29;8022:45;;;;-1:-1:-1;;;8022:45:0;;;;;;;:::i;:::-;7923:152;27282:120;;:::o;21893:86::-;21943:5;;:27;;-1:-1:-1;;;21943:27:0;;21959:10;21943:27;;;2164:51:1;21935:36:0;;-1:-1:-1;;;;;21943:5:0;;:15;;2137:18:1;;21943:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37530:441::-;37608:5;;-1:-1:-1;;;;;37608:5:0;37588:10;:26;37580:44;;;;-1:-1:-1;;;37580:44:0;;17626:2:1;37580:44:0;;;17608:21:1;17665:1;17645:18;;;17638:29;-1:-1:-1;;;17683:18:1;;;17676:35;17728:18;;37580:44:0;17424:328:1;37580:44:0;37675:5;;-1:-1:-1;;;;;37675:5:0;37653:11;37692:243;37705:11;:18;37703:20;;37692:243;;;37744:11;37758;37770:1;37758:14;;;;;;;;:::i;:::-;;;;;;;;;;37787:27;;-1:-1:-1;;;37787:27:0;;-1:-1:-1;;;;;37758:14:0;;;;-1:-1:-1;37758:14:0;;37787:19;;:27;;37807:3;;37787:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;37860:42:0;;-1:-1:-1;;;37860:42:0;;-1:-1:-1;;;;;37860:19:0;;;;;:42;;37880:2;;-1:-1:-1;;37884:17:0;37860:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37729:206;37724:3;;;;;:::i;:::-;;;;37692:243;;;-1:-1:-1;;37945:5:0;:18;;-1:-1:-1;;;;;;37945:18:0;-1:-1:-1;;;;;37945:18:0;;;;;;;;;;37530:441::o;22762:97::-;22817:10;22807:21;;;;:9;:21;;;;;;22798:31;;:8;:31::i;:::-;22840:11;:9;:11::i;18347:468::-;18415:7;18439:12;;18455:1;18439:17;18435:103;;;-1:-1:-1;;;;;;18480:25:0;;;;;:10;:25;;;;;;;;:46;;;18347:468::o;18435:103::-;18779:12;;-1:-1:-1;;;;;18727:25:0;;;;;;:10;:25;;;;;:36;;;;18681:40;;;;;18568:239;;18637:155;;18779:12;;18637:137;;18769:4;;18637:127;;18727:36;18637:127;;:39;18738:13;18637:24;:39::i;:85::-;:89;;:127::i;:155::-;-1:-1:-1;;;;;18568:25:0;;;;;;:10;:25;;;;;;;;:46;;;:50;:239::i;14990:28::-;;;;;;;;;;;;11964:191;12022:7;12055:1;12050;:6;;12042:32;;;;-1:-1:-1;;;12042:32:0;;17959:2:1;12042:32:0;;;17941:21:1;17998:2;17978:18;;;17971:30;-1:-1:-1;;;18017:18:1;;;18010:43;18070:18;;12042:32:0;17757:337:1;12042:32:0;12109:9;12121:5;12125:1;12121;:5;:::i;:::-;12109:17;11964:191;-1:-1:-1;;;;11964:191:0:o;12406:477::-;12464:7;12708:6;12704:47;;-1:-1:-1;12738:1:0;12731:8;;12704:47;12763:9;12775:5;12779:1;12775;:5;:::i;:::-;12763:17;-1:-1:-1;12808:1:0;12799:5;12803:1;12763:17;12799:5;:::i;:::-;:10;12791:36;;;;-1:-1:-1;;;12791:36:0;;18696:2:1;12791:36:0;;;18678:21:1;18735:2;18715:18;;;18708:30;-1:-1:-1;;;18754:18:1;;;18747:43;18807:18;;12791:36:0;18494:337:1;13351:339:0;13409:7;13508:1;13504;:5;13496:30;;;;-1:-1:-1;;;13496:30:0;;19038:2:1;13496:30:0;;;19020:21:1;19077:2;19057:18;;;19050:30;-1:-1:-1;;;19096:18:1;;;19089:42;19148:18;;13496:30:0;18836:336:1;13496:30:0;13557:9;13569:5;13573:1;13569;:5;:::i;11501:188::-;11559:7;;11591:5;11595:1;11591;:5;:::i;:::-;11579:17;;11620:1;11615;:6;;11607:32;;;;-1:-1:-1;;;11607:32:0;;19379:2:1;11607:32:0;;;19361:21:1;19418:2;19398:18;;;19391:30;-1:-1:-1;;;19437:18:1;;;19430:43;19490:18;;11607:32:0;19177:337:1;8176:176:0;8259:85;8278:5;8308:23;;;8333:2;8337:5;8285:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;8285:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;8285:58:0;-1:-1:-1;;;;;;8285:58:0;;;;;;;;;;8259:18;:85::i;8360:204::-;8487:68;;-1:-1:-1;;;;;19777:15:1;;;8487:68:0;;;19759:34:1;19829:15;;19809:18;;;19802:43;19861:18;;;19854:34;;;8461:95:0;;8480:5;;-1:-1:-1;;;8510:27:0;19694:18:1;;8487:68:0;19519:375:1;8461:95:0;8360:204;;;;:::o;23487:370::-;7951:1;7934:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;7963:20:0;7986:13;;;23585:7;;38289:483:::1;38306:12;:19:::0;38302:23;::::1;38289:483;;;38347:13;38363:12;38376:1;38363:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38363:15:0::1;::::0;-1:-1:-1;38434:21:0::1;38363:15:::0;38434:14:::1;:21::i;:::-;-1:-1:-1::0;;;;;38393:17:0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;:38:::1;:62:::0;38505:31:::1;38404:5:::0;38505:24:::1;:31::i;:::-;-1:-1:-1::0;;;;;38470:17:0;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:32:::1;;:66:::0;;;;38555:21;::::1;::::0;38551:210:::1;;38623:24;38632:7;38641:5;38623:8;:24::i;:::-;-1:-1:-1::0;;;;;38597:16:0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:23;;::::1;::::0;;;;;;;;;:50;;;;38707:10:::1;:17:::0;;;;;;:38:::1;::::0;38666:31;;;:22:::1;:31:::0;;;;;:38;;;;;;;;;;:79;38551:210:::1;-1:-1:-1::0;38327:3:0;::::1;::::0;::::1;:::i;:::-;;;;38289:483;;;;23610:6:::2;23605:222;23622:7;:14;23618:1;:18;23605:222;;;23658:21;23682:7;23690:1;23682:10;;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;;;;;-1:-1:-1;;;;;23725:16:0;;::::2;23707:15;23725:16:::0;;;:7:::2;:16:::0;;;;;;:31;;::::2;::::0;;;;;;;;;;23682:10;;-1:-1:-1;23771:44:0::2;23733:7:::0;23682:10;23725:31;23771:11:::2;:44::i;:::-;23643:184;;23638:3;;;;;:::i;:::-;;;;23605:222;;;;23837:12;:10;:12::i;:::-;;;8010:1:::1;8046:13:::0;;8030:12;:29;8022:45;;;;-1:-1:-1;;;8022:45:0;;;;;;;:::i;23865:834::-;23950:8;;23946:746;;-1:-1:-1;;;;;23975:13:0;;;23998:1;23975:13;;;:7;:13;;;;;;;;:20;;;;;;;;;;:24;;;;24026:10;;;;;24017:19;24014:535;;;24066:10;;24098:8;;24095:347;;24131:12;24146:27;24169:3;24148:14;:4;24157;24148:8;:14::i;24146:27::-;24196:2;;24224:13;;24196:48;;-1:-1:-1;;;24196:48:0;;;;;20101:25:1;;;20142:18;;;20135:34;;;;-1:-1:-1;;;;;20205:32:1;;;20185:18;;;20178:60;24131:42:0;;-1:-1:-1;24196:2:0;;;:18;;20074::1;;24196:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24267:51:0;24294:4;24300:17;:4;24309:7;24300:8;:17::i;:::-;-1:-1:-1;;;;;24267:26:0;;;:51;:26;:51::i;:::-;24108:230;24095:347;;;24384:38;-1:-1:-1;;;;;24384:26:0;;24411:4;24417;24384:26;:38::i;:::-;24038:419;24014:535;;;24495:38;-1:-1:-1;;;;;24495:26:0;;24522:4;24528;24495:26;:38::i;:::-;24588:4;-1:-1:-1;;;;;24568:31:0;24581:5;-1:-1:-1;;;;;24568:31:0;;24594:4;24568:31;;;;1199:25:1;;1187:2;1172:18;;1053:177;24568:31:0;;;;;;;;-1:-1:-1;;;;;24614:14:0;;;;;;:7;:14;;;;;:22;;24632:4;;24614:14;:22;;24632:4;;24614:22;:::i;:::-;;;;-1:-1:-1;;;;;;;24651:14:0;;;;;;;:8;:14;;;;;;;;:21;;;;;;;;;;;:29;;24676:4;;24651:14;:29;;24676:4;;24651:29;:::i;:::-;;;;-1:-1:-1;;23865:834:0;;;:::o;27410:6350::-;27450:13;27465;27492:10;27505:5;;;;;;;;;-1:-1:-1;;;;;27505:5:0;-1:-1:-1;;;;;27505:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27492:43;;27546:12;27569:1;27561:5;:9;:50;;27609:1;27561:50;;;27573:5;;;;;;;;;-1:-1:-1;;;;;27573:5:0;-1:-1:-1;;;;;27573:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27692:9;;27546:65;;-1:-1:-1;;;;27692:9:0;;;;27687:3280;;27945:11;:18;27934:8;27945:18;28000:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28000:17:0;;27975:42;;28029:23;28066:3;28055:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28055:15:0;;28029:41;;28086:7;28082:490;28100:3;28095:2;:8;28082:490;;;28148:11;28160:2;28148:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28148:15:0;28127:6;28134:2;28127:10;;;;;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;28127:38:0;;;-1:-1:-1;;;;;28127:38:0;;;;;28479:1;-1:-1:-1;;;;;28448:33:0;28456:6;28463:2;28456:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;28448:33:0;;:111;;28524:6;28531:2;28524:10;;;;;;;;:::i;:::-;;;;;;;;;;;:35;;-1:-1:-1;;;28524:35:0;;28553:4;28524:35;;;2164:51:1;-1:-1:-1;;;;;28524:20:0;;;;;;2137:18:1;;28524:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28448:111;;;28502:1;28448:111;28414:9;28424:2;28414:13;;;;;;;;:::i;:::-;;;;;;;;;;:145;28105:4;;;;:::i;:::-;;;;28082:490;;;-1:-1:-1;28604:5:0;;28590:33;;;-1:-1:-1;;;28590:33:0;;;;-1:-1:-1;;;;;28604:5:0;;;;28590:31;;:33;;;;;;;;;;;;;28604:5;;28590:33;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28590:33:0;;;;;;;;-1:-1:-1;;28590:33:0;;;;;;;;;;;;:::i;:::-;;;28586:2370;;-1:-1:-1;30935:1:0;;;;-1:-1:-1;27410:6350:0;-1:-1:-1;;;;;27410:6350:0:o;28586:2370::-;;;28867:7;28863:1923;28885:3;28880:2;:8;28863:1923;;;28982:7;29045:1;-1:-1:-1;;;;;29014:33:0;29022:6;29029:2;29022:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;29014:33:0;;:119;;29098:6;29105:2;29098:10;;;;;;;;:::i;:::-;;;;;;;;;;;:35;;-1:-1:-1;;;29098:35:0;;29127:4;29098:35;;;2164:51:1;-1:-1:-1;;;;;29098:20:0;;;;;;2137:18:1;;29098:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29014:119;;;29072:1;29014:119;28982:151;;29373:9;29383:2;29373:13;;;;;;;;:::i;:::-;;;;;;;29368:2;:18;29365:1339;;;29501:1;29495:3;29486:5;29469:9;29479:2;29469:13;;;;;;;;:::i;:::-;;;;;;;29464:2;:18;;;;:::i;:::-;29463:28;;;;:::i;:::-;29461:37;;;;:::i;:::-;:41;29457:370;;;29535:6;29542:2;29535:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;29535:19:0;;29555:4;29598:3;29589:5;29564:21;29571:9;29581:2;29571:13;;;;;;;;:::i;:::-;;;;;;;29564:2;:6;;:21;;;;:::i;:::-;29563:31;;;;:::i;:::-;29561:40;;;;:::i;:::-;29535:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29676:6;29683:2;29676:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;29639:89:0;29663:4;-1:-1:-1;;;;;29639:89:0;29652:10;-1:-1:-1;;;;;29639:89:0;;29724:3;29715:5;29690:21;29697:9;29707:2;29697:13;;;;;;;;:::i;:::-;;;;;;;29690:2;:6;;:21;;;;:::i;:::-;29689:31;;;;:::i;:::-;29688:39;;;;:::i;:::-;29639:89;;1199:25:1;;;1187:2;1172:18;29639:89:0;;;;;;;29764:6;29771:2;29764:10;;;;;;;;:::i;:::-;;;;;;;;;;;:35;;-1:-1:-1;;;29764:35:0;;29793:4;29764:35;;;2164:51:1;-1:-1:-1;;;;;29764:20:0;;;;;;2137:18:1;;29764:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29759:40;;29457:370;29906:8;;-1:-1:-1;;;;;29906:8:0;29902:779;;29961:5;;29995:10;;-1:-1:-1;;;;;29961:5:0;;;;:24;;29995:6;;30002:2;;29995:10;;;;;;:::i;:::-;;;;;;;30009:21;30016:9;30026:2;30016:13;;;;;;;;:::i;:::-;;;;;;;30009:2;:6;;:21;;;;:::i;:::-;29961:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30115:6;30122:2;30115:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;30069:81:0;30099:5;;;;;;;;;-1:-1:-1;;;;;30099:5:0;-1:-1:-1;;;;;30069:81:0;30079:10;-1:-1:-1;;;;;30069:81:0;-1:-1:-1;;;;;;;;;;;30134:9:0;30144:2;30134:13;;;;;;;;:::i;:::-;;;;;;;30129:2;:18;;;;:::i;:::-;30069:81;;1199:25:1;;;1187:2;1172:18;30069:81:0;;;;;;;30230:9;30240:2;30230:13;;;;;;;;:::i;:::-;;;;;;;30225:2;:18;;;;:::i;:::-;30181:16;:39;30207:6;30214:2;30207:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;30181:39:0;-1:-1:-1;;;;;30181:39:0;;;;;;;;;;;;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;29902:779:0;;-1:-1:-1;29902:779:0;;30393:6;30400:2;30393:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;30393:19:0;;30413:8;;;;;;;;;-1:-1:-1;;;;;30413:8:0;30424:21;30431:9;30441:2;30431:13;;;;;;;;:::i;30424:21::-;30393:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30524:6;30531:2;30524:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;30484:75:0;30506:8;;;;;;;;;-1:-1:-1;;;;;30506:8:0;-1:-1:-1;;;;;30484:75:0;30494:10;-1:-1:-1;;;;;30484:75:0;-1:-1:-1;;;;;;;;;;;30543:9:0;30553:2;30543:13;;;;;;;;:::i;:::-;;;;;;;30538:2;:18;;;;:::i;:::-;30484:75;;1199:25:1;;;1187:2;1172:18;30484:75:0;;;;;;;30639:9;30649:2;30639:13;;;;;;;;:::i;:::-;;;;;;;30634:2;:18;;;;:::i;:::-;30590:16;:39;30616:6;30623:2;30616:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;30590:39:0;-1:-1:-1;;;;;30590:39:0;;;;;;;;;;;;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29902:779:0;-1:-1:-1;28890:4:0;;;;:::i;:::-;;;;28863:1923;;;-1:-1:-1;30812:1:0;;;;-1:-1:-1;27410:6350:0;-1:-1:-1;;;;;;27410:6350:0:o;27687:3280::-;31134:5;;31120:30;;;-1:-1:-1;;;31120:30:0;;;;31084:15;;;;-1:-1:-1;;;;;31134:5:0;;;;31120:28;;:30;;;;;;;;;;;31084:15;31134:5;31120:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31231:40;;-1:-1:-1;;;31231:40:0;;31265:4;31231:40;;;2164:51:1;31083:67:0;;-1:-1:-1;31083:67:0;-1:-1:-1;31219:9:0;;-1:-1:-1;;;;;31231:25:0;;;;;2137:18:1;;31231:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31294;;-1:-1:-1;;;31294:40:0;;31328:4;31294:40;;;2164:51:1;31219:52:0;;-1:-1:-1;31282:9:0;;-1:-1:-1;;;;;31294:25:0;;;;;2137:18:1;;31294:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31397:5;;31383:33;;;-1:-1:-1;;;31383:33:0;;;;31282:52;;-1:-1:-1;;;;;;31397:5:0;;;;31383:31;;:33;;;;;;;;;;;;31397:5;;31383:33;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31383:33:0;;;;;;;;-1:-1:-1;;31383:33:0;;;;;;;;;;;;:::i;:::-;;;31379:2374;;-1:-1:-1;33736:1:0;;;;-1:-1:-1;27410:6350:0;-1:-1:-1;;;;;;27410:6350:0:o;31379:2374::-;-1:-1:-1;;31443:40:0;;-1:-1:-1;;;31443:40:0;;31477:4;31443:40;;;2164:51:1;31486:4:0;;-1:-1:-1;;;;;31443:25:0;;;;;2137:18:1;;31443:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;31516:40;;-1:-1:-1;;;31516:40:0;;31550:4;31516:40;;;2164:51:1;31432:58:0;;-1:-1:-1;31559:4:0;;-1:-1:-1;;;;;31516:25:0;;;;;2137:18:1;;31516:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;31505:58;-1:-1:-1;31719:1:0;31713:3;31693:16;31704:5;31693:8;:16;:::i;:::-;31691:25;;;;:::i;:::-;:29;31687:285;;;-1:-1:-1;;;;;31741:24:0;;;31766:4;31789:3;31773:14;31782:5;31773:8;:14;:::i;:::-;31772:20;;;;:::i;:::-;31741:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;31818:58:0;;;;;;31831:10;31818:58;31872:3;31856:14;31865:5;31856:8;:14;:::i;:::-;31855:20;;;;:::i;:::-;31818:58;;1199:25:1;;;1187:2;1172:18;31818:58:0;;;;;;;31906:40;;-1:-1:-1;;;31906:40:0;;31940:4;31906:40;;;2164:51:1;31906:50:0;;31951:4;;-1:-1:-1;;;;;31906:25:0;;;;;2137:18:1;;31906:40:0;1997:224:1;31906:50:0;31895:61;;31687:285;32018:1;32012:3;31992:16;32003:5;31992:8;:16;:::i;:::-;31990:25;;;;:::i;:::-;:29;31986:285;;;-1:-1:-1;;;;;32040:24:0;;;32065:4;32088:3;32072:14;32081:5;32072:8;:14;:::i;:::-;32071:20;;;;:::i;:::-;32040:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;32117:58:0;;;;;;32130:10;32117:58;32171:3;32155:14;32164:5;32155:8;:14;:::i;:::-;32154:20;;;;:::i;:::-;32117:58;;1199:25:1;;;1187:2;1172:18;32117:58:0;;;;;;;32205:40;;-1:-1:-1;;;32205:40:0;;32239:4;32205:40;;;2164:51:1;32205:50:0;;32250:4;;-1:-1:-1;;;;;32205:25:0;;;;;2137:18:1;;32205:40:0;1997:224:1;32205:50:0;32194:61;;31986:285;32322:8;;-1:-1:-1;;;;;32322:8:0;32318:1224;;32366:12;;32362:291;;32400:5;;:43;;-1:-1:-1;;;32400:43:0;;-1:-1:-1;;;;;32400:5:0;;;;:24;;:43;;32425:7;;32434:8;;32400:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;32463:27:0;;;;;;:16;:27;;;;;:39;;32494:8;;32463:27;:39;;32494:8;;32463:39;:::i;:::-;;;;-1:-1:-1;;32610:5:0;;32580:56;;1199:25:1;;;-1:-1:-1;;;;;32580:56:0;;;;32610:5;;32590:10;;-1:-1:-1;;;;;;;;;;;32580:56:0;1187:2:1;1172:18;32580:56:0;;;;;;;32362:291;32672:12;;32668:291;;32706:5;;:43;;-1:-1:-1;;;32706:43:0;;-1:-1:-1;;;;;32706:5:0;;;;:24;;:43;;32731:7;;32740:8;;32706:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;32769:27:0;;;;;;:16;:27;;;;;:39;;32800:8;;32769:27;:39;;32800:8;;32769:39;:::i;:::-;;;;-1:-1:-1;;32916:5:0;;32886:56;;1199:25:1;;;-1:-1:-1;;;;;32886:56:0;;;;32916:5;;32896:10;;-1:-1:-1;;;;;;;;;;;32886:56:0;1187:2:1;1172:18;32886:56:0;;;;;;;32668:291;32318:1224;;;33083:8;;33058:44;;-1:-1:-1;;;33058:44:0;;-1:-1:-1;;;;;33058:24:0;;;;;;:44;;33083:8;;;;33093;;33058:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;33143:8:0;;33118:44;;-1:-1:-1;;;33118:44:0;;-1:-1:-1;;;;;33118:24:0;;;;;;:44;;33143:8;;;;33153;;33118:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;33208:8:0;;33186:50;;1199:25:1;;;-1:-1:-1;;;;;33186:50:0;;;;33208:8;;33196:10;;-1:-1:-1;;;;;;;;;;;33186:50:0;1187:2:1;1172:18;33186:50:0;;;;;;;33282:8;;33260:50;;1199:25:1;;;-1:-1:-1;;;;;33260:50:0;;;;33282:8;;33270:10;;-1:-1:-1;;;;;;;;;;;33260:50:0;1187:2:1;1172:18;33260:50:0;;;;;;;-1:-1:-1;;;;;33329:27:0;;;;;;:16;:27;;;;;:39;;33360:8;;33329:27;:39;;33360:8;;33329:39;:::i;:::-;;;;-1:-1:-1;;;;;;;33437:27:0;;;;;;:16;:27;;;;;:39;;33468:8;;33437:27;:39;;33468:8;;33437:39;:::i;:::-;;;;-1:-1:-1;;32318:1224:0;33558:27;;;;;;27410:6350;;:::o;6755:106::-;6813:7;6844:1;6840;:5;:13;;6852:1;6840:13;;;-1:-1:-1;6848:1:0;;6755:106;-1:-1:-1;6755:106:0:o;10147:1092::-;-1:-1:-1;;;;;10751:25:0;;6423:20;10743:63;;;;-1:-1:-1;;;10743:63:0;;21091:2:1;10743:63:0;;;21073:21:1;21130:2;21110:18;;;21103:30;21169:25;21149:18;;;21142:53;21212:18;;10743:63:0;20889:347:1;10743:63:0;10880:12;10894:23;10929:5;-1:-1:-1;;;;;10921:19:0;10941:4;10921:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10879:67;;;;10965:7;10957:39;;;;-1:-1:-1;;;10957:39:0;;21722:2:1;10957:39:0;;;21704:21:1;21761:2;21741:18;;;21734:30;-1:-1:-1;;;21780:18:1;;;21773:49;21839:18;;10957:39:0;21520:343:1;10957:39:0;11035:17;;:21;11031:201;;11177:10;11166:30;;;;;;;;;;;;:::i;:::-;11158:62;;;;-1:-1:-1;;;11158:62:0;;22070:2:1;11158:62:0;;;22052:21:1;22109:2;22089:18;;;22082:30;-1:-1:-1;;;22128:18:1;;;22121:49;22187:18;;11158:62:0;21868:343:1;14:131;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:258::-;474:1;484:113;498:6;495:1;492:13;484:113;;;574:11;;;568:18;555:11;;;548:39;520:2;513:10;484:113;;;615:6;612:1;609:13;606:48;;;-1:-1:-1;;650:1:1;632:16;;625:27;402:258::o;665:383::-;814:2;803:9;796:21;777:4;846:6;840:13;889:6;884:2;873:9;869:18;862:34;905:66;964:6;959:2;948:9;944:18;939:2;931:6;927:15;905:66;:::i;:::-;1032:2;1011:15;-1:-1:-1;;1007:29:1;992:45;;;;1039:2;988:54;;665:383;-1:-1:-1;;665:383:1:o;1235:388::-;1303:6;1311;1364:2;1352:9;1343:7;1339:23;1335:32;1332:52;;;1380:1;1377;1370:12;1332:52;1419:9;1406:23;1438:31;1463:5;1438:31;:::i;:::-;1488:5;-1:-1:-1;1545:2:1;1530:18;;1517:32;1558:33;1517:32;1558:33;:::i;:::-;1610:7;1600:17;;;1235:388;;;;;:::o;1628:118::-;1714:5;1707:13;1700:21;1693:5;1690:32;1680:60;;1736:1;1733;1726:12;1751:241;1807:6;1860:2;1848:9;1839:7;1835:23;1831:32;1828:52;;;1876:1;1873;1866:12;1828:52;1915:9;1902:23;1934:28;1956:5;1934:28;:::i;2226:315::-;2294:6;2302;2355:2;2343:9;2334:7;2330:23;2326:32;2323:52;;;2371:1;2368;2361:12;2323:52;2410:9;2397:23;2429:31;2454:5;2429:31;:::i;:::-;2479:5;2531:2;2516:18;;;;2503:32;;-1:-1:-1;;;2226:315:1:o;2546:180::-;2605:6;2658:2;2646:9;2637:7;2633:23;2629:32;2626:52;;;2674:1;2671;2664:12;2626:52;-1:-1:-1;2697:23:1;;2546:180;-1:-1:-1;2546:180:1:o;2731:127::-;2792:10;2787:3;2783:20;2780:1;2773:31;2823:4;2820:1;2813:15;2847:4;2844:1;2837:15;2863:275;2934:2;2928:9;2999:2;2980:13;;-1:-1:-1;;2976:27:1;2964:40;;3034:18;3019:34;;3055:22;;;3016:62;3013:88;;;3081:18;;:::i;:::-;3117:2;3110:22;2863:275;;-1:-1:-1;2863:275:1:o;3143:787::-;3197:5;3250:3;3243:4;3235:6;3231:17;3227:27;3217:55;;3268:1;3265;3258:12;3217:55;3304:6;3291:20;3330:4;3353:18;3349:2;3346:26;3343:52;;;3375:18;;:::i;:::-;3421:2;3418:1;3414:10;3444:28;3468:2;3464;3460:11;3444:28;:::i;:::-;3506:15;;;3576;;;3572:24;;;3537:12;;;;3608:15;;;3605:35;;;3636:1;3633;3626:12;3605:35;3672:2;3664:6;3660:15;3649:26;;3684:217;3700:6;3695:3;3692:15;3684:217;;;3780:3;3767:17;3797:31;3822:5;3797:31;:::i;:::-;3841:18;;3717:12;;;;3879;;;;3684:217;;;3919:5;3143:787;-1:-1:-1;;;;;;;3143:787:1:o;3935:483::-;4028:6;4036;4089:2;4077:9;4068:7;4064:23;4060:32;4057:52;;;4105:1;4102;4095:12;4057:52;4144:9;4131:23;4163:31;4188:5;4163:31;:::i;:::-;4213:5;-1:-1:-1;4269:2:1;4254:18;;4241:32;4296:18;4285:30;;4282:50;;;4328:1;4325;4318:12;4282:50;4351:61;4404:7;4395:6;4384:9;4380:22;4351:61;:::i;:::-;4341:71;;;3935:483;;;;;:::o;4867:248::-;4935:6;4943;4996:2;4984:9;4975:7;4971:23;4967:32;4964:52;;;5012:1;5009;5002:12;4964:52;-1:-1:-1;;5035:23:1;;;5105:2;5090:18;;;5077:32;;-1:-1:-1;4867:248:1:o;6100:348::-;6184:6;6237:2;6225:9;6216:7;6212:23;6208:32;6205:52;;;6253:1;6250;6243:12;6205:52;6293:9;6280:23;6326:18;6318:6;6315:30;6312:50;;;6358:1;6355;6348:12;6312:50;6381:61;6434:7;6425:6;6414:9;6410:22;6381:61;:::i;6661:456::-;6738:6;6746;6754;6807:2;6795:9;6786:7;6782:23;6778:32;6775:52;;;6823:1;6820;6813:12;6775:52;6859:9;6846:23;6836:33;;6919:2;6908:9;6904:18;6891:32;6932:31;6957:5;6932:31;:::i;:::-;6982:5;-1:-1:-1;7039:2:1;7024:18;;7011:32;7052:33;7011:32;7052:33;:::i;:::-;7104:7;7094:17;;;6661:456;;;;;:::o;7122:::-;7199:6;7207;7215;7268:2;7256:9;7247:7;7243:23;7239:32;7236:52;;;7284:1;7281;7274:12;7236:52;7323:9;7310:23;7342:31;7367:5;7342:31;:::i;:::-;7392:5;-1:-1:-1;7449:2:1;7434:18;;7421:32;7462:33;7421:32;7462:33;:::i;:::-;7122:456;;7514:7;;-1:-1:-1;;;7568:2:1;7553:18;;;;7540:32;;7122:456::o;7836:251::-;7906:6;7959:2;7947:9;7938:7;7934:23;7930:32;7927:52;;;7975:1;7972;7965:12;7927:52;8007:9;8001:16;8026:31;8051:5;8026:31;:::i;8092:328::-;8294:2;8276:21;;;8333:1;8313:18;;;8306:29;-1:-1:-1;;;8366:2:1;8351:18;;8344:35;8411:2;8396:18;;8092:328::o;8756:::-;8958:2;8940:21;;;8997:1;8977:18;;;8970:29;-1:-1:-1;;;9030:2:1;9015:18;;9008:35;9075:2;9060:18;;8756:328::o;9089:274::-;-1:-1:-1;;;;;9281:32:1;;;;9263:51;;9345:2;9330:18;;9323:34;9251:2;9236:18;;9089:274::o;9368:245::-;9435:6;9488:2;9476:9;9467:7;9463:23;9459:32;9456:52;;;9504:1;9501;9494:12;9456:52;9536:9;9530:16;9555:28;9577:5;9555:28;:::i;9618:706::-;9698:6;9751:2;9739:9;9730:7;9726:23;9722:32;9719:52;;;9767:1;9764;9757:12;9719:52;9800:9;9794:16;9829:18;9870:2;9862:6;9859:14;9856:34;;;9886:1;9883;9876:12;9856:34;9924:6;9913:9;9909:22;9899:32;;9969:7;9962:4;9958:2;9954:13;9950:27;9940:55;;9991:1;9988;9981:12;9940:55;10020:2;10014:9;10042:2;10038;10035:10;10032:36;;;10048:18;;:::i;:::-;10090:53;10133:2;10114:13;;-1:-1:-1;;10110:27:1;10139:2;10106:36;10090:53;:::i;:::-;10077:66;;10166:2;10159:5;10152:17;10206:7;10201:2;10196;10192;10188:11;10184:20;10181:33;10178:53;;;10227:1;10224;10217:12;10178:53;10240:54;10291:2;10286;10279:5;10275:14;10270:2;10266;10262:11;10240:54;:::i;:::-;-1:-1:-1;10313:5:1;9618:706;-1:-1:-1;;;;9618:706:1:o;10329:439::-;-1:-1:-1;;;10586:3:1;10579:35;10561:3;10643:6;10637:13;10659:62;10714:6;10709:2;10704:3;10700:12;10693:4;10685:6;10681:17;10659:62;:::i;:::-;10741:16;;;;10759:2;10737:25;;10329:439;-1:-1:-1;;10329:439:1:o;11434:127::-;11495:10;11490:3;11486:20;11483:1;11476:31;11526:4;11523:1;11516:15;11550:4;11547:1;11540:15;11566:128;11606:3;11637:1;11633:6;11630:1;11627:13;11624:39;;;11643:18;;:::i;:::-;-1:-1:-1;11679:9:1;;11566:128::o;11699:127::-;11760:10;11755:3;11751:20;11748:1;11741:31;11791:4;11788:1;11781:15;11815:4;11812:1;11805:15;11831:135;11870:3;-1:-1:-1;;11891:17:1;;11888:43;;;11911:18;;:::i;:::-;-1:-1:-1;11958:1:1;11947:13;;11831:135::o;11971:325::-;12173:2;12155:21;;;12212:1;12192:18;;;12185:29;-1:-1:-1;;;12245:2:1;12230:18;;12223:32;12287:2;12272:18;;11971:325::o;12631:326::-;12833:2;12815:21;;;12872:1;12852:18;;;12845:29;-1:-1:-1;;;12905:2:1;12890:18;;12883:33;12948:2;12933:18;;12631:326::o;13295:184::-;13365:6;13418:2;13406:9;13397:7;13393:23;13389:32;13386:52;;;13434:1;13431;13424:12;13386:52;-1:-1:-1;13457:16:1;;13295:184;-1:-1:-1;13295:184:1:o;13833:273::-;13901:6;13954:2;13942:9;13933:7;13929:23;13925:32;13922:52;;;13970:1;13967;13960:12;13922:52;14002:9;13996:16;14052:4;14045:5;14041:16;14034:5;14031:27;14021:55;;14072:1;14069;14062:12;15060:125;15100:4;15128:1;15125;15122:8;15119:34;;;15133:18;;:::i;:::-;-1:-1:-1;15170:9:1;;15060:125::o;15190:127::-;15251:10;15246:3;15242:20;15239:1;15232:31;15282:4;15279:1;15272:15;15306:4;15303:1;15296:15;15322:422;-1:-1:-1;;;15579:3:1;15572:20;15554:3;15621:6;15615:13;15637:61;15691:6;15687:1;15682:3;15678:11;15671:4;15663:6;15659:17;15637:61;:::i;:::-;15718:16;;;;15736:1;15714:24;;15322:422;-1:-1:-1;;15322:422:1:o;18099:168::-;18139:7;18205:1;18201;18197:6;18193:14;18190:1;18187:21;18182:1;18175:9;18168:17;18164:45;18161:71;;;18212:18;;:::i;:::-;-1:-1:-1;18252:9:1;;18099:168::o;18272:217::-;18312:1;18338;18328:132;;18382:10;18377:3;18373:20;18370:1;18363:31;18417:4;18414:1;18407:15;18445:4;18442:1;18435:15;18328:132;-1:-1:-1;18474:9:1;;18272:217::o;20249:245::-;20328:6;20336;20389:2;20377:9;20368:7;20364:23;20360:32;20357:52;;;20405:1;20402;20395:12;20357:52;-1:-1:-1;;20428:16:1;;20484:2;20469:18;;;20463:25;20428:16;;20463:25;;-1:-1:-1;20249:245:1:o;20499:385::-;20578:6;20586;20639:2;20627:9;20618:7;20614:23;20610:32;20607:52;;;20655:1;20652;20645:12;20607:52;20687:9;20681:16;20706:31;20731:5;20706:31;:::i;:::-;20806:2;20791:18;;20785:25;20756:5;;-1:-1:-1;20819:33:1;20785:25;20819:33;:::i;21241:274::-;21370:3;21408:6;21402:13;21424:53;21470:6;21465:3;21458:4;21450:6;21446:17;21424:53;:::i;:::-;21493:16;;;;;21241:274;-1:-1:-1;;21241:274:1:o
Swarm Source
ipfs://23af05e3daf5c615cce81ab6e1bd9272b0e1895173ea9881729dfe513f056e83
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.