Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 12913020 | 1279 days ago | IN | 0 ETH | 0.00254813 | ||||
User_burn | 12912959 | 1279 days ago | IN | 0 ETH | 0.0022552 | ||||
Stake | 12912945 | 1279 days ago | IN | 0.001 ETH | 0.02039201 | ||||
Withdraw | 12883305 | 1283 days ago | IN | 0 ETH | 0.00336977 | ||||
Withdraw | 12883278 | 1283 days ago | IN | 0 ETH | 0.00357477 | ||||
Stake | 12883217 | 1283 days ago | IN | 0 ETH | 0.01570787 | ||||
Set Referees | 12883184 | 1283 days ago | IN | 0 ETH | 0.00219537 | ||||
Stake | 12883069 | 1283 days ago | IN | 0 ETH | 0.02048611 | ||||
Set Secret Signe... | 12882735 | 1284 days ago | IN | 0 ETH | 0.00069462 | ||||
Set Lp Address | 12882726 | 1284 days ago | IN | 0 ETH | 0.00070722 | ||||
Set Lp Address | 12882721 | 1284 days ago | IN | 0 ETH | 0.00070722 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12913020 | 1279 days ago | 0.001 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
StakePool
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.5.0; pragma experimental ABIEncoderV2; //import "./Base.sol"; import "./StakeSet.sol"; import "./SafeERC20.sol"; import "./Ownable.sol"; // contract Blog{ // function burnFrom(address account, uint256 amount) public; // } contract StakePool is Ownable{ using SafeMath for uint; using SafeERC20 for IERC20; using StakeSet for StakeSet.Set; ///////////////////////////////// constant ///////////////////////////////// //uint constant DECIMALS = 10 ** 18; uint[4] STAKE_PER = [20, 30, 50, 100]; uint[4] STAKE_POWER_RATE = [100, 120, 150, 200]; //mainnet:'0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', //ropsten:'0xc778417E063141139Fce010982780140Aa0cD5Ab', //rinkeby:'0xc778417E063141139Fce010982780140Aa0cD5Ab', //goerli:'0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6', //kovan:'0xd0A1E359811322d97991E03f863a0C30C2cF029C' // todo: wethToken address address constant wethToken = address(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); address public payToken =address(0xdAC17F958D2ee523a2206206994597C13D831ec7); address public aToken = address(0x9e2a3340D92d7f24E78a061614b3042422944d75); address public secretSigner; ///////////////////////////////// storage ///////////////////////////////// uint private _totalStakeToken; uint private _totalStakeEth; uint private _totalStakeUsdt; bool private _isOnlyToken; uint public currentId; uint private _totalOrders; uint private _totalWeight; // uint private _total_dynamic_hashrate; mapping(address => uint) private _userOrders; mapping(address => uint) private _weights; mapping(address => uint) private _withdrawalAmount; mapping (address => uint256) private _bypass; mapping(address => StakeSet.Set) private _stakeOf; mapping(uint => bool) public withdrawRewardIdOf; // tokenAddress => lpAddress mapping(address => address) public lpAddress; event Stake(address indexed user, uint indexed stakeType, uint indexed stakeId, uint payTokenAmount, uint amount); event Withdraw(address indexed user, uint indexed stakeId, uint payTokenAmount, uint amount); event WithdrawReward(address indexed _to, uint amount); function totalStakeUsdt() public view returns (uint) { return _totalStakeUsdt; } function totalStakeToken() public view returns (uint) { return _totalStakeToken; } function totalStakeEth() public view returns (uint) { return _totalStakeEth; } function userOrders(address account) public view returns (uint) { return _userOrders[account]; } function isOnlyToken() public view returns (bool) { return _isOnlyToken; } function totalOrders() public view returns (uint) { return _totalOrders; } function withdrawalAmount(address account) public view returns (uint) { return _withdrawalAmount[account]; } function bypass(address user) public view returns (uint) { return _bypass[user]; } function setPayToken(address _payToken) external onlyOwner returns (bool) { payToken = _payToken; return true; } function setAToken(address _aToken) external onlyOwner returns (bool) { aToken = _aToken; return true; } function setIsOnlyToken(bool _IsOnly) external onlyOwner returns (bool) { _isOnlyToken = _IsOnly; return true; } function setBypass(address user ,uint256 mode) public onlyOwner returns (bool) { _bypass[user]=mode; return true; } /** * @dev set swap pair address (aka. Lp Token address) */ function setLpAddress(address _token, address _lp) external onlyOwner returns (bool) { lpAddress[_token] = _lp; return true; } function totalWeight() public view returns (uint) { return _totalWeight; } // function totalDynamicHashrate() public view returns (uint) { // return _total_dynamic_hashrate; // } function weightOf(address account) public view returns (uint) { return _weights[account]; } function setSecretSigner(address _secretSigner) onlyOwner external { require(_secretSigner != address(0), "address invalid"); secretSigner = _secretSigner; } /** * @dev get stake item by '_account' and '_index' */ function getStakeOf(address _account, uint _index) external view returns (StakeSet.Item memory) { require(_stakeOf[_account].length() > _index, "getStakeOf: _stakeOf[_account].length() > _index"); return _stakeOf[_account].at(_index); } /** * @dev get '_account' stakes by page */ function getStakes(address _account, uint _index, uint _offset) external view returns (StakeSet.Item[] memory items) { uint totalSize = userOrders(_account); require(0 < totalSize && totalSize > _index, "getStakes: 0 < totalSize && totalSize > _index"); uint offset = _offset; if (totalSize < _index + offset) { offset = totalSize - _index; } items = new StakeSet.Item[](offset); for (uint i = 0; i < offset; i++) { items[i] = _stakeOf[_account].at(_index + i); } } /** * @dev stake * @param _stakeType type of stake rate 1: 8/2, 2: 7/3, 3: 5/5 (payTokenAmount/aTokenAmount) * @param _amount aToken amount */ function stake(uint _stakeType, uint _amount) external payable { require(0 < _stakeType && _stakeType <= 4, "stake: 0 < _stakeType && _stakeType <= 4"); require(0 < _amount, "stake: 0 < _amount"); uint256 tokenprice = getUSDTPrice(aToken); uint256 ethprice; uint256 tokenAmount; //address payTokenAddr; uint256 coinType; if(_stakeType==4){ if(!_isOnlyToken){ require(_bypass[msg.sender]==1, "stake: Temporarily not opened"); IERC20(aToken).safeTransferFrom(msg.sender, address(this), _amount); }else{ IERC20(aToken).safeTransferFrom(msg.sender, address(this), _amount); } tokenAmount=_amount; _totalStakeToken = _totalStakeToken.add(_amount); //payTokenAddr=address(0); }else{ ethprice = getUSDTPrice(wethToken); if (0 < msg.value) { // pay with ETH 25 // transfer to this require(msg.value>=(10**12)*4,"stake: msg.value>=(10**12)*4"); tokenAmount = ethprice.mul(msg.value).mul(STAKE_PER[_stakeType - 1]).div(uint(100).sub(STAKE_PER[_stakeType - 1])).div(tokenprice).div(10**12); IERC20(aToken).safeTransferFrom(msg.sender, address(this), tokenAmount); //payTokenAddr = wethToken; coinType =1; _totalStakeEth = _totalStakeEth.add(msg.value); _totalStakeToken = _totalStakeToken.add(tokenAmount); } else { // pay with USDT // transfer to this require(4 <= _amount, "stake: 4 <= _amount"); tokenAmount = _amount.mul(10**6).mul(STAKE_PER[_stakeType - 1]).div(uint(100).sub(STAKE_PER[_stakeType - 1])).div(tokenprice); IERC20(payToken).safeTransferFrom(msg.sender, address(this), _amount); IERC20(aToken).safeTransferFrom(msg.sender, address(this), tokenAmount); //payTokenAddr = payToken; coinType =2; _totalStakeUsdt = _totalStakeUsdt.add(_amount); _totalStakeToken = _totalStakeToken.add(tokenAmount); } } StakeSet.Item memory item; // calculate power uint aTokenValue = tokenprice.mul(tokenAmount).div(10**6); uint payTokenValue; if(coinType==2){ payTokenValue = _amount; item.payTokenAmount = _amount; }else if(coinType==1){ payTokenValue = ethprice.mul(msg.value).div(10**18); item.payTokenAmount = msg.value; }else{ item.payTokenAmount = 0; } uint power = (aTokenValue.add(payTokenValue)).mul(STAKE_POWER_RATE[_stakeType - 1]).div(100); _totalOrders = _totalOrders.add(1); _userOrders[msg.sender] = _userOrders[msg.sender].add(1); _userOrders[address(0)] = _userOrders[address(0)].add(1); _totalWeight = _totalWeight.add(power); _weights[msg.sender] = _weights[msg.sender].add(power); // update _stakeOf // StakeSet.Item memory item; item.id = ++currentId; item.createTime = block.timestamp; item.aTokenAmount = tokenAmount; // item.payTokenAddr = payTokenAddr; item.useraddress = msg.sender; item.power = power; item.stakeType = _stakeType; item.coinType=coinType; // if(getReferees(msg.sender)==address(0)&&msg.sender!=owner()&&getReferees(owner())!=msg.sender){ // setReferees(owner()); // } //calcDynamicHashrate(power,msg.sender); // item.dpower = getDynamicHashrate(msg.sender); _stakeOf[msg.sender].add(item); _stakeOf[address(0)].add(item); emit Stake(msg.sender, _stakeType, item.id, item.payTokenAmount, _amount); } /** * @dev withdraw stake * @param _stakeId stakeId */ function withdraw(uint _stakeId) external { require(currentId >= _stakeId, "withdraw: currentId >= _stakeId"); // get _stakeOf StakeSet.Item memory item = _stakeOf[msg.sender].idAt(_stakeId); // transfer to msg.sender uint aTokenAmount = item.aTokenAmount; uint payTokenAmount = item.payTokenAmount; uint _totalToken; uint _totalEth; uint _totalUsdt; // todo: 7 days if (15 minutes > block.timestamp - item.createTime) { //if (7 days > block.timestamp - item.createTime) { aTokenAmount = aTokenAmount.mul(95).div(100); payTokenAmount = payTokenAmount.mul(95).div(100); _totalToken = _totalToken.add(item.aTokenAmount.mul(5).div(100)); if (1 == item.coinType){ _totalEth = _totalEth.add(item.payTokenAmount.mul(5).div(100)); }else{ _totalUsdt = _totalUsdt.add(item.payTokenAmount.mul(5).div(100)); } } if (1 == item.coinType) { // pay with ETH msg.sender.transfer(payTokenAmount); IERC20(aToken).safeTransfer(msg.sender, aTokenAmount); _totalStakeEth = _totalStakeEth.sub(item.payTokenAmount); _totalStakeToken = _totalStakeToken.sub(item.aTokenAmount); } else if (2 == item.coinType){ // pay with USDT IERC20(payToken).safeTransfer(msg.sender, payTokenAmount); IERC20(aToken).safeTransfer(msg.sender, aTokenAmount); _totalStakeUsdt = _totalStakeUsdt.sub(item.payTokenAmount); _totalStakeToken = _totalStakeToken.sub(item.aTokenAmount); }else{ IERC20(aToken).safeTransfer(msg.sender, aTokenAmount); _totalStakeToken = _totalStakeToken.sub(item.aTokenAmount); } if(_totalToken>0){ IERC20(aToken).safeTransfer(owner(), _totalToken); } if(_totalUsdt>0){ IERC20(payToken).safeTransfer(owner(), _totalUsdt); } if(_totalEth>0){ address(uint160(owner())).transfer(_totalEth); } _totalOrders = _totalOrders.sub(1); _userOrders[msg.sender] = _userOrders[msg.sender].sub(1); _userOrders[address(0)] = _userOrders[address(0)].sub(1); _totalWeight = _totalWeight.sub(item.power); _weights[msg.sender] = _weights[msg.sender].sub(item.power); // update _stakeOf _stakeOf[msg.sender].remove(item); _stakeOf[address(0)].remove(item); emit Withdraw(msg.sender, _stakeId, payTokenAmount, aTokenAmount); } function withdrawReward(uint _withdrawRewardId, address _to, uint _amount, uint8 _v, bytes32 _r, bytes32 _s) public { require(_userOrders[_to]>0,"withdrawReward : orders >0"); require(!withdrawRewardIdOf[_withdrawRewardId], "withdrawReward: invalid withdrawRewardId"); require(address(0) != _to, "withdrawReward: address(0) != _to"); require(0 < _amount, "withdrawReward: 0 < _amount"); require(address(0) != secretSigner, "withdrawReward: address(0) != secretSigner"); bytes32 msgHash = keccak256(abi.encodePacked(_withdrawRewardId, _to, _amount)); require(ecrecover(msgHash, _v, _r, _s) == secretSigner, "withdrawReward: incorrect signer"); require(_withdrawal_balances.sub(_amount)>0,"withdrawReward: Withdrawal is beyond"); // transfer reward token _withdrawal_balances = _withdrawal_balances.sub(_amount); IERC20(aToken).safeTransfer(_to, _amount.mul(97).div(100)); IERC20(aToken).safeTransfer(owner(), _amount.mul(3).div(100)); // update _withdrawRewardId withdrawRewardIdOf[_withdrawRewardId] = true; _withdrawalAmount[_to]=_withdrawalAmount[_to].add(_amount); emit WithdrawReward(_to, _amount); } // todo: get token usdt price from swap function getUSDTPrice(address _token) public view returns (uint) { if (payToken == _token) {return 1 ether;} (bool success, bytes memory returnData) = lpAddress[_token].staticcall(abi.encodeWithSignature("getReserves()")); if (success) { (uint112 reserve0, uint112 reserve1, ) = abi.decode(returnData, (uint112, uint112, uint32)); uint DECIMALS = 10**18; if(_token==aToken){ DECIMALS = 10**6; //return uint(reserve1).mul(DECIMALS).div(uint(reserve0)); } //return uint(reserve0).mul(DECIMALS).div(uint(reserve1)); return uint(reserve1).mul(DECIMALS).div(uint(reserve0)); } return 0; } function () external payable {} ///////////////////////////////////////////////////////////////////////////////////////// mapping (address => address) private _referees; mapping (address => address[]) private _mygeneration; mapping (address => uint256) private _vip; //mapping (address => uint256) private _dynamic_hashrate; uint256 private _withdrawal_balances=14400000000; uint256 private _lastUpdated = now; function fiveMinutesHavePassed() public view returns (bool) { return (now >= (_lastUpdated + 1 days)); } function getReferees(address user) public view returns (address) { return _referees[user]; } function mygeneration(address user) public view returns (address[] memory) { return _mygeneration[user]; } function getVip(address account) public view returns (uint256) { return _vip[account]; } function getWithdrawalBalances() public view returns (uint256) { return _withdrawal_balances; } function addWithdrawalBalances() public returns (bool) { require(fiveMinutesHavePassed(),"addWithdrawalBalances:It can only be added once a day"); uint256 amounnt; if(_totalWeight<=1000000*10**6&&_totalWeight>0){ amounnt = 1440*10**6; }else if(_totalWeight>1000000*10**6&&_totalWeight<10000000*10**6){ amounnt = _totalWeight.mul(1440).div(100000000); }else if(_totalWeight>=10000000*10**6){ amounnt = 14400*10**6; } _lastUpdated = now; _withdrawal_balances = _withdrawal_balances.add(amounnt); return true; } // function getDynamicHashrate(address user) public view returns (uint256) { // return _dynamic_hashrate[user]; // } function isSetRef(address my,address myreferees) public view returns (bool) { if(myreferees == address(0) || myreferees==my){ return false; } if(_referees[my]!=address(0)){ return false; } if(_mygeneration[my].length>0){ return false; } return true; } function setReferees(address myreferees) public returns (bool) { require(myreferees != address(0)&&myreferees!=_msgSender(), "ERC20: myreferees from the zero address or Not for myself"); require(_referees[_msgSender()]==address(0), "ERC20: References have been given"); require(_mygeneration[_msgSender()].length==0, "ERC20: Recommended to each other"); // require(_referees[myreferees]!=_msgSender(), "ERC20: Recommended to each other"); _referees[_msgSender()] = myreferees; address[] storage arr=_mygeneration[myreferees]; arr.push(_msgSender()); return true; } // function getHashrate(uint256 staticHashrate,uint m) private pure returns (uint256 hashrate) { // if(m==0){ // hashrate = staticHashrate.mul(18).div(100); // }else if(m==1){ // hashrate = staticHashrate.mul(16).div(100); // }else if(m==2){ // hashrate = staticHashrate.mul(14).div(100); // }else if(m==3){ // hashrate = staticHashrate.mul(12).div(100); // }else if(m==4){ // hashrate = staticHashrate.mul(10).div(100); // }else if(4<m&&m<=8){ // hashrate = staticHashrate.mul(5).div(100); // }else if(8<m&&m<=12){ // hashrate = staticHashrate.mul(2).div(100); // } // return hashrate; // } // function calcDynamicHashrate(uint256 staticHashrate,address user) private returns (bool) { // address[] memory arr = new address[](13); // uint i = 0; // while(_referees[user]!=address(0)&&i<13){ // arr[i]=_referees[user]; // user = _referees[user]; // i++; // } // uint m = 0; // uint256 totalHtate; // while(arr[m]!=address(0)&&m<13){ // if(userOrders(arr[m])>0){ // uint256 hrate = getHashrate(staticHashrate,m); // _dynamic_hashrate[arr[m]]=_dynamic_hashrate[arr[m]].add(hrate); // totalHtate = totalHtate.add(hrate); // address[] memory mygenerationarr=_mygeneration[arr[m]]; // for(uint n = 0;n<mygenerationarr.length;n++){ // if(_vip[mygenerationarr[n]]==3){ // _dynamic_hashrate[mygenerationarr[n]]=_dynamic_hashrate[mygenerationarr[n]].add(hrate.mul(5).div(100)); // totalHtate = totalHtate.add(hrate.mul(5).div(100)); // }else if(_vip[mygenerationarr[n]]==4){ // _dynamic_hashrate[mygenerationarr[n]]=_dynamic_hashrate[mygenerationarr[n]].add(hrate.mul(6).div(100)); // totalHtate = totalHtate.add(hrate.mul(6).div(100)); // }else if(_vip[mygenerationarr[n]]==5){ // _dynamic_hashrate[mygenerationarr[n]]=_dynamic_hashrate[mygenerationarr[n]].add(hrate.mul(7).div(100)); // totalHtate = totalHtate.add(hrate.mul(7).div(100)); // }else if(_vip[mygenerationarr[n]]==6){ // _dynamic_hashrate[mygenerationarr[n]]=_dynamic_hashrate[mygenerationarr[n]].add(hrate.mul(8).div(100)); // totalHtate = totalHtate.add(hrate.mul(8).div(100)); // } // } // } // m++; // } // _total_dynamic_hashrate= _total_dynamic_hashrate.add(totalHtate); // return true; // } function levelCostU(uint256 value,uint256 vip) public pure returns(uint256 u) { require(value<=6&&value>vip, "levelCostU: vip false"); if(value==1){ u=100; }else if(value==2){ if(vip==0){ u=300; }else{ u=200; } }else if(value==3){ if(vip==0){ u=500; }else if(vip==1){ u=400; }else{ u=200; } }else if(value==4){ if(vip==0){ u=700; }else if(vip==1){ u=600; }else if(vip==2){ u=400; }else{ u=200; } }else if(value==5){ if(vip==0){ u=1000; }else if(vip==1){ u=900; }else if(vip==2){ u=700; }else if(vip==3){ u=500; }else{ u=300; } }else{ if(vip==0){ u=1500; }else if(vip==1){ u=1400; }else if(vip==2){ u=1200; }else if(vip==3){ u=1000; }else if(vip==4){ u=800; }else{ u=500; } } } function user_burn(uint256 value) public returns(bool) { require(value<=6&&value>_vip[_msgSender()], "user_burn: vip false"); uint256 u = levelCostU(value,_vip[_msgSender()]); uint256 price = getUSDTPrice(aToken); require(price>=0, "user_burn: need token price"); uint256 burnTokenAmount = u.mul(10**12).div(price); //blog.burnFrom(_msgSender(),burnTokenAmount); IERC20(aToken).safeBurnFrom(_msgSender(), burnTokenAmount); _vip[_msgSender()]=value; return true; } }
pragma solidity ^0.5.5; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } }
pragma solidity ^0.5.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function burnFrom(address sender, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
pragma solidity ^0.5.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } ////////////////////////////////////////////////////////////////////////////// // mapping(address => bool) blacklist; // event LockUser(address indexed who); // event UnlockUser(address indexed who); // modifier permissionCheck { // require(!blacklist[_msgSender()],"transfer is not enabeled now!"); // _; // } // function setLockUser(address who) public onlyOwner { // blacklist[who] = true; // emit LockUser(who); // } // function unlockUser(address who) public onlyOwner { // blacklist[who] = false; // emit UnlockUser(who); // } }
pragma solidity ^0.5.0; import "./IERC20.sol"; import "./SafeMath.sol"; import "./Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ 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 safeBurnFrom(IERC20 token, address from, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.burnFrom.selector, from,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: approve from non-zero to non-zero allowance" ); 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, "SafeERC20: decreased allowance below zero"); 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: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.5.0; library StakeSet { struct Item { uint id; uint createTime; uint power; uint aTokenAmount; uint payTokenAmount; uint stakeType; uint coinType; //uint dpower; //address payTokenAddr; address useraddress; } struct Set { Item[] _values; // id => index mapping (uint => uint) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Set storage set, Item memory value) internal returns (bool) { if (!contains(set, value.id)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value.id] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Set storage set, Item memory value) internal returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value.id]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. Item memory lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue.id] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value.id]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Set storage set, uint valueId) internal view returns (bool) { return set._indexes[valueId] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function length(Set storage set) internal view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Set storage set, uint256 index) internal view returns (Item memory) { require(set._values.length > index, "StakeSet: index out of bounds"); return set._values[index]; } function idAt(Set storage set, uint256 valueId) internal view returns (Item memory) { require(set._indexes[valueId] != 0, "StakeSet: set._indexes[valueId] != 0"); uint index = set._indexes[valueId] - 1; require(set._values.length > index, "StakeSet: index out of bounds"); return set._values[index]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"stakeType","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawReward","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"aToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"addWithdrawalBalances","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"bypass","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fiveMinutesHavePassed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getReferees","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getStakeOf","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"createTime","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"aTokenAmount","type":"uint256"},{"internalType":"uint256","name":"payTokenAmount","type":"uint256"},{"internalType":"uint256","name":"stakeType","type":"uint256"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"address","name":"useraddress","type":"address"}],"internalType":"struct StakeSet.Item","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_offset","type":"uint256"}],"name":"getStakes","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"createTime","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"aTokenAmount","type":"uint256"},{"internalType":"uint256","name":"payTokenAmount","type":"uint256"},{"internalType":"uint256","name":"stakeType","type":"uint256"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"address","name":"useraddress","type":"address"}],"internalType":"struct StakeSet.Item[]","name":"items","type":"tuple[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getUSDTPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVip","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getWithdrawalBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOnlyToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"my","type":"address"},{"internalType":"address","name":"myreferees","type":"address"}],"name":"isSetRef","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"vip","type":"uint256"}],"name":"levelCostU","outputs":[{"internalType":"uint256","name":"u","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"mygeneration","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"payToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secretSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_aToken","type":"address"}],"name":"setAToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"mode","type":"uint256"}],"name":"setBypass","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_IsOnly","type":"bool"}],"name":"setIsOnlyToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_lp","type":"address"}],"name":"setLpAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_payToken","type":"address"}],"name":"setPayToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"myreferees","type":"address"}],"name":"setReferees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_secretSigner","type":"address"}],"name":"setSecretSigner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_stakeType","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"totalOrders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStakeEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStakeToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStakeUsdt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"userOrders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"user_burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"weightOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_stakeId","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_withdrawRewardId","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"withdrawReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawRewardIdOf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawalAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
61010060405260146080908152601e60a052603260c052606460e0526200002b90600190600462000121565b5060408051608081018252606481526078602082015260969181019190915260c860608201526200006190600590600462000121565b50600980546001600160a01b031990811673dac17f958d2ee523a2206206994597c13d831ec717909155600a8054909116739e2a3340d92d7f24e78a061614b3042422944d7517905564035a4e9000601d5542601e556000620000cc6001600160e01b036200011c16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000186565b335b90565b826004810192821562000157579160200282015b8281111562000157578251829060ff1690559160200191906001019062000135565b506200016592915062000169565b5090565b6200011e91905b8082111562000165576000815560010162000170565b61390c80620001966000396000f3fe6080604052600436106102515760003560e01c80637b0472f011610139578063af2f3ebf116100b6578063d702087f1161007a578063d702087f14610678578063daa91f2e14610698578063dd4bc101146106b8578063e00dd161146106d8578063e328fa36146106ed578063f2fde38b1461070d57610251565b8063af2f3ebf146105e1578063b36dee23146105f6578063d359ff9214610616578063d499bc8514610643578063d4dcb54f1461066357610251565b806396336b30116100fd57806396336b301461056257806396c82e5714610577578063a0c1f15e1461058c578063a3e9b01b146105a1578063a3f49d00146105c157610251565b80637b0472f0146104f05780637efe9797146105035780638da5cb5b146105185780638f32d59b1461052d578063945edc0f1461054257610251565b80633a570a98116101d257806355221ddf1161019657806355221ddf1461042e5780635f09d84c1461045b5780635f6048471461047b5780636a6615a61461049b5780636f96e99c146104bb578063715018a6146104db57610251565b80633a570a98146103af5780633c7a8fc9146103c4578063427baaf2146103e45780634d61537f14610404578063535ca70d1461041957610251565b80632c34fd08116102195780632c34fd08146103005780632da496e3146103205780632e1a7d4d1461034d57806335f87e9f1461036d578063382c82711461039a57610251565b8063053695ba1461025357806315645dd31461028957806317ab27bc146102b65780631af84f87146102cb5780631d834409146102eb575b005b34801561025f57600080fd5b5061027361026e3660046128b8565b61072d565b60405161028091906137b2565b60405180910390f35b34801561029557600080fd5b506102a96102a4366004612a0c565b61074c565b6040516102809190613556565b3480156102c257600080fd5b50610273610883565b3480156102d757600080fd5b506102736102e6366004612ab1565b610889565b3480156102f757600080fd5b50610273610a03565b34801561030c57600080fd5b5061027361031b3660046128b8565b610a09565b34801561032c57600080fd5b5061034061033b366004612940565b610a24565b6040516102809190613545565b34801561035957600080fd5b50610251610368366004612a0c565b610b09565b34801561037957600080fd5b5061038d6103883660046128b8565b610fa1565b60405161028091906134e3565b3480156103a657600080fd5b506102a9610fbc565b3480156103bb57600080fd5b506102a9610fca565b3480156103d057600080fd5b506102a96103df3660046128b8565b61109c565b3480156103f057600080fd5b506102516103ff366004612a2a565b611205565b34801561041057600080fd5b5061038d6114c4565b34801561042557600080fd5b506102a96114d3565b34801561043a57600080fd5b5061044e6104493660046128b8565b6114dc565b6040516102809190613534565b34801561046757600080fd5b506102a96104763660046128b8565b611552565b34801561048757600080fd5b506102a96104963660046128d6565b61159d565b3480156104a757600080fd5b506102a96104b6366004612a0c565b61162a565b3480156104c757600080fd5b506102a96104d63660046128b8565b61163f565b3480156104e757600080fd5b5061025161168a565b6102516104fe366004612ab1565b6116f8565b34801561050f57600080fd5b50610273611c20565b34801561052457600080fd5b5061038d611c26565b34801561053957600080fd5b506102a9611c35565b34801561054e57600080fd5b506102a961055d36600461298d565b611c59565b34801561056e57600080fd5b5061038d611c96565b34801561058357600080fd5b50610273611ca5565b34801561059857600080fd5b5061038d611cab565b3480156105ad57600080fd5b506102a96105bc3660046128d6565b611cba565b3480156105cd57600080fd5b506102a96105dc366004612910565b611d12565b3480156105ed57600080fd5b50610273611d59565b34801561060257600080fd5b506102736106113660046128b8565b611d5f565b34801561062257600080fd5b50610636610631366004612910565b611d7a565b60405161028091906137a3565b34801561064f57600080fd5b5061038d61065e3660046128b8565b611df1565b34801561066f57600080fd5b50610273611e0f565b34801561068457600080fd5b506102516106933660046128b8565b611e15565b3480156106a457600080fd5b506102736106b33660046128b8565b611e81565b3480156106c457600080fd5b506102736106d33660046128b8565b611e9c565b3480156106e457600080fd5b50610273611eb7565b3480156106f957600080fd5b506102736107083660046128b8565b611ebd565b34801561071957600080fd5b506102516107283660046128b8565b611fff565b6001600160a01b0381166000908152601360205260409020545b919050565b60006006821115801561078a5750601c600061076661202f565b6001600160a01b03166001600160a01b031681526020019081526020016000205482115b6107af5760405162461bcd60e51b81526004016107a6906136e3565b60405180910390fd5b60006107e783601c60006107c161202f565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610889565b600a54909150600090610802906001600160a01b0316611ebd565b9050600061082b8261081f8564e8d4a5100063ffffffff61203316565b9063ffffffff61206d16565b905061085161083861202f565b600a546001600160a01b0316908363ffffffff6120af16565b84601c600061085e61202f565b6001600160a01b03168152602081019190915260400160002055506001949350505050565b601d5490565b60006006831115801561089b57508183115b6108b75760405162461bcd60e51b81526004016107a690613693565b82600114156108c8575060646109fd565b82600214156108e857816108df575061012c6108e3565b5060c85b6109fd565b826003141561091157816108ff57506101f46108e3565b81600114156108df57506101906108e3565b826004141561094c578161092857506102bc6108e3565b816001141561093a57506102586108e3565b81600214156108df57506101906108e3565b82600514156109a2578161096357506103e86108e3565b816001141561097557506103846108e3565b816002141561098757506102bc6108e3565b816003141561099957506101f46108e3565b5061012c6109fd565b816109b057506105dc6109fd565b81600114156109c257506105786109fd565b81600214156109d457506104b06109fd565b81600314156109e657506103e86109fd565b81600414156109f857506103206109fd565b506101f45b92915050565b60115490565b6001600160a01b031660009081526016602052604090205490565b60606000610a318561072d565b9050806000108015610a4257508381115b610a5e5760405162461bcd60e51b81526004016107a6906136c3565b82848101821015610a6e57508381035b80604051908082528060200260200182016040528015610aa857816020015b610a9561281d565b815260200190600190039081610a8d5790505b50925060005b81811015610aff576001600160a01b0387166000908152601760205260409020610ae09087830163ffffffff61210d16565b848281518110610aec57fe5b6020908102919091010152600101610aae565b5050509392505050565b806010541015610b2b5760405162461bcd60e51b81526004016107a6906136b3565b610b3361281d565b336000908152601760205260409020610b52908363ffffffff6121bf16565b90506000816060015190506000826080015190506000806000856020015142036103841115610c4b57610b91606461081f87605f63ffffffff61203316565b9450610ba9606461081f86605f63ffffffff61203316565b9350610bd8610bcb606461081f60058a6060015161203390919063ffffffff16565b849063ffffffff6122b716565b92508560c0015160011415610c1b57610c14610c07606461081f60058a6080015161203390919063ffffffff16565b839063ffffffff6122b716565b9150610c4b565b610c48610c3b606461081f60058a6080015161203390919063ffffffff16565b829063ffffffff6122b716565b90505b8560c0015160011415610cdc57604051339085156108fc029086906000818181858888f19350505050158015610c85573d6000803e3d6000fd5b50600a54610ca3906001600160a01b0316338763ffffffff6122dc16565b6080860151600d54610cba9163ffffffff6122fe16565b600d556060860151600c54610cd49163ffffffff6122fe16565b600c55610d8c565b8560c0015160021415610d5457600954610d06906001600160a01b0316338663ffffffff6122dc16565b600a54610d23906001600160a01b0316338763ffffffff6122dc16565b6080860151600e54610d3a9163ffffffff6122fe16565b600e556060860151600c54610cd49163ffffffff6122fe16565b600a54610d71906001600160a01b0316338763ffffffff6122dc16565b6060860151600c54610d889163ffffffff6122fe16565b600c555b8215610db657610db6610d9d611c26565b600a546001600160a01b0316908563ffffffff6122dc16565b8015610de057610de0610dc7611c26565b6009546001600160a01b0316908363ffffffff6122dc16565b8115610e2857610dee611c26565b6001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015610e26573d6000803e3d6000fd5b505b601154610e3c90600163ffffffff6122fe16565b60115533600090815260136020526040902054610e6090600163ffffffff6122fe16565b3360009081526013602052604081209190915580526000805160206138aa83398151915254610e9690600163ffffffff6122fe16565b6000805260136020526000805160206138aa833981519152556040860151601254610ec69163ffffffff6122fe16565b60125560408087015133600090815260146020529190912054610eee9163ffffffff6122fe16565b336000908152601460209081526040808320939093556017905220610f19908763ffffffff61234016565b50600080526017602052610f537fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b8763ffffffff61234016565b5086336001600160a01b03167f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca948688604051610f909291906137c0565b60405180910390a350505050505050565b6019602052600090815260409020546001600160a01b031681565b601e54620151800142101590565b6000610fd4610fbc565b610ff05760405162461bcd60e51b81526004016107a690613713565b600064e8d4a510006012541115801561100b57506000601254115b1561101b57506355d4a80061107a565b64e8d4a5100060125411801561103857506509184e72a000601254105b156110635761105c6305f5e10061081f6105a060125461203390919063ffffffff16565b905061107a565b6509184e72a0006012541061107a575064035a4e90005b42601e55601d54611091908263ffffffff6122b716565b601d55506001905090565b60006001600160a01b038216158015906110cf57506110b961202f565b6001600160a01b0316826001600160a01b031614155b6110eb5760405162461bcd60e51b81526004016107a6906135e3565b6000601a816110f861202f565b6001600160a01b03908116825260208201929092526040016000205416146111325760405162461bcd60e51b81526004016107a6906135b3565b601b600061113e61202f565b6001600160a01b03168152602081019190915260400160002054156111755760405162461bcd60e51b81526004016107a690613683565b81601a600061118261202f565b6001600160a01b0390811682526020808301939093526040918201600090812080546001600160a01b0319169583169590951790945585168352601b9091529020806111cc61202f565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b03929092169190911790559392505050565b6001600160a01b03851660009081526013602052604090205461123a5760405162461bcd60e51b81526004016107a690613623565b60008681526018602052604090205460ff16156112695760405162461bcd60e51b81526004016107a6906135d3565b6001600160a01b03851661128f5760405162461bcd60e51b81526004016107a690613723565b836000106112af5760405162461bcd60e51b81526004016107a6906136a3565b600b546001600160a01b03166112d75760405162461bcd60e51b81526004016107a690613753565b60008686866040516020016112ee939291906134ac565b60408051601f198184030181528282528051602091820120600b5460008552939091019182905292506001600160a01b0390911690600190611337908490889088908890613564565b6020604051602081039080840390855afa158015611359573d6000803e3d6000fd5b505050602060405103516001600160a01b0316146113895760405162461bcd60e51b81526004016107a690613743565b601d5460009061139f908763ffffffff6122fe16565b116113bc5760405162461bcd60e51b81526004016107a690613733565b601d546113cf908663ffffffff6122fe16565b601d55611405866113ec606461081f89606163ffffffff61203316565b600a546001600160a01b0316919063ffffffff6122dc16565b611426611410611c26565b6113ec606461081f89600363ffffffff61203316565b6000878152601860209081526040808320805460ff191660011790556001600160a01b03891683526015909152902054611466908663ffffffff6122b716565b6001600160a01b038716600081815260156020526040908190209290925590517fbc84835063c693975166f00cffb19f01a94c2db55b1bf259238c5da3594e5066906114b39088906137b2565b60405180910390a250505050505050565b600b546001600160a01b031681565b600f5460ff1690565b6001600160a01b0381166000908152601b602090815260409182902080548351818402810184019094528084526060939283018282801561154657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611528575b50505050509050919050565b600061155c611c35565b6115785760405162461bcd60e51b81526004016107a690613703565b50600a80546001600160a01b0383166001600160a01b03199091161790556001919050565b60006001600160a01b03821615806115c65750826001600160a01b0316826001600160a01b0316145b156115d3575060006109fd565b6001600160a01b038381166000908152601a602052604090205416156115fb575060006109fd565b6001600160a01b0383166000908152601b602052604090205415611621575060006109fd565b50600192915050565b60186020526000908152604090205460ff1681565b6000611649611c35565b6116655760405162461bcd60e51b81526004016107a690613703565b50600980546001600160a01b0383166001600160a01b03199091161790556001919050565b611692611c35565b6116ae5760405162461bcd60e51b81526004016107a690613703565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b816000108015611709575060048211155b6117255760405162461bcd60e51b81526004016107a690613673565b806000106117455760405162461bcd60e51b81526004016107a6906135f3565b600a5460009061175d906001600160a01b0316611ebd565b90506000806000856004141561180557600f5460ff166117c957336000908152601660205260409020546001146117a65760405162461bcd60e51b81526004016107a690613643565b600a546117c4906001600160a01b031633308863ffffffff61251e16565b6117e7565b600a546117e7906001600160a01b031633308863ffffffff61251e16565b600c548592506117fd908363ffffffff6122b716565b600c556119d1565b61182273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2611ebd565b92503415611900576503a3529440003410156118505760405162461bcd60e51b81526004016107a690613653565b6118b264e8d4a5100061081f8661081f6118826001808d036004811061187257fe5b015460649063ffffffff6122fe16565b61081f6001808e036004811061189457fe5b01546118a68b3463ffffffff61203316565b9063ffffffff61203316565b600a549092506118d3906001600160a01b031633308563ffffffff61251e16565b50600d546001906118ea903463ffffffff6122b716565b600d55600c546117fd908363ffffffff6122b716565b84600411156119215760405162461bcd60e51b81526004016107a6906135c3565b6119618461081f61193a6001808b036004811061187257fe5b61081f6001808c036004811061194c57fe5b01546118a68b620f424063ffffffff61203316565b600954909250611982906001600160a01b031633308863ffffffff61251e16565b600a546119a0906001600160a01b031633308563ffffffff61251e16565b50600e546002906119b7908663ffffffff6122b716565b600e55600c546119cd908363ffffffff6122b716565b600c555b6119d961281d565b60006119f2620f424061081f888763ffffffff61203316565b905060008360021415611a0d57506080820187905286611a47565b8360011415611a3f57611a32670de0b6b3a764000061081f883463ffffffff61203316565b3460808501529050611a47565b600060808401525b6000611a73606461081f600560018e0360048110611a6157fe5b01546118a6878763ffffffff6122b716565b601154909150611a8a90600163ffffffff6122b716565b60115533600090815260136020526040902054611aae90600163ffffffff6122b716565b3360009081526013602052604081209190915580526000805160206138aa83398151915254611ae490600163ffffffff6122b716565b6000805260136020526000805160206138aa83398151915255601254611b10908263ffffffff6122b716565b60125533600090815260146020526040902054611b33908263ffffffff6122b716565b33600081815260146020908152604080832094909455601080546001019081905588524288820152606088018a905260e0880183905287840185905260a088018e905260c08801899052918152601790915220611b96908563ffffffff61254816565b50600080526017602052611bd07fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b8563ffffffff61254816565b50835160808501516040518c9133917f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde28291611c0c918f906137c0565b60405180910390a450505050505050505050565b600c5490565b6000546001600160a01b031690565b600080546001600160a01b0316611c4a61202f565b6001600160a01b031614905090565b6000611c63611c35565b611c7f5760405162461bcd60e51b81526004016107a690613703565b50600f805460ff1916911515919091179055600190565b6009546001600160a01b031681565b60125490565b600a546001600160a01b031681565b6000611cc4611c35565b611ce05760405162461bcd60e51b81526004016107a690613703565b506001600160a01b03918216600090815260196020526040902080546001600160a01b03191691909216179055600190565b6000611d1c611c35565b611d385760405162461bcd60e51b81526004016107a690613703565b506001600160a01b0391909116600090815260166020526040902055600190565b600e5490565b6001600160a01b03166000908152601c602052604090205490565b611d8261281d565b6001600160a01b03831660009081526017602052604090208290611da5906125fc565b11611dc25760405162461bcd60e51b81526004016107a690613613565b6001600160a01b0383166000908152601760205260409020611dea908363ffffffff61210d16565b9392505050565b6001600160a01b039081166000908152601a60205260409020541690565b600d5490565b611e1d611c35565b611e395760405162461bcd60e51b81526004016107a690613703565b6001600160a01b038116611e5f5760405162461bcd60e51b81526004016107a690613763565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526015602052604090205490565b6001600160a01b031660009081526014602052604090205490565b60105481565b6009546000906001600160a01b0383811691161415611ee55750670de0b6b3a7640000610747565b6001600160a01b0380831660009081526019602090815260408083205481516004815260248101835292830180516001600160e01b0316630240bc6b60e21b17905290519293606093911691611f3a916134a0565b600060405180830381855afa9150503d8060008114611f75576040519150601f19603f3d011682016040523d82523d6000602084013e611f7a565b606091505b50915091508115611ff55760008082806020019051611f9c91908101906129c9565b50600a549193509150670de0b6b3a7640000906001600160a01b0388811691161415611fc85750620f42405b611fe96001600160701b038085169061081f9085168463ffffffff61203316565b95505050505050610747565b5060009392505050565b612007611c35565b6120235760405162461bcd60e51b81526004016107a690613703565b61202c81612600565b50565b3390565b600082612042575060006109fd565b8282028284828161204f57fe5b0414611dea5760405162461bcd60e51b81526004016107a6906136f3565b6000611dea83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612681565b60405161210890849063079cc67960e41b906120d19086908690602401613519565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526126b8565b505050565b61211561281d565b825482106121355760405162461bcd60e51b81526004016107a690613793565b82600001828154811061214457fe5b600091825260209182902060408051610100810182526008909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e0820152905092915050565b6121c761281d565b60008281526001840160205260409020546121f45760405162461bcd60e51b81526004016107a6906136d3565b6000828152600184016020526040902054835460001990910190811061222c5760405162461bcd60e51b81526004016107a690613793565b83600001818154811061223b57fe5b600091825260209182902060408051610100810182526008909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e082015291505092915050565b600082820183811015611dea5760405162461bcd60e51b81526004016107a690613633565b60405161210890849063a9059cbb60e01b906120d19086908690602401613519565b6000611dea83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279d565b805160009081526001830160205260408120548015612514578354600019808301910161236b61281d565b86600001828154811061237a57fe5b600091825260209182902060408051610100810182526008909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e08201528754909150819088908590811061240057fe5b60009182526020808320845160089390930201918255838101516001808401919091556040808601516002850155606086015160038501556080860151600485015560a0860151600585015560c0860151600685015560e090950151600790930180546001600160a01b0319166001600160a01b0390941693909317909255845183528a820190529190209084019055865487908061249b57fe5b6000828152602080822060086000199094019384020182815560018181018490556002820184905560038201849055600482018490556005820184905560068201849055600790910180546001600160a01b03191690559290935588518152898201909252604082209190915594506109fd9350505050565b60009150506109fd565b6040516125429085906323b872dd60e01b906120d1908790879087906024016134f1565b50505050565b60006125588383600001516127c9565b6125f4575081546001808201845560008481526020808220855160089095020184815585820151818501556040808701516002830155606087015160038301556080870151600483015560a0870151600583015560c0870151600683015560e0870151600790920180546001600160a01b0319166001600160a01b039093169290921790915586549483528387019091529020919091556109fd565b5060006109fd565b5490565b6001600160a01b0381166126265760405162461bcd60e51b81526004016107a690613603565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081836126a25760405162461bcd60e51b81526004016107a691906135a2565b5060008385816126ae57fe5b0495945050505050565b6126ca826001600160a01b03166127e1565b6126e65760405162461bcd60e51b81526004016107a690613783565b60006060836001600160a01b03168360405161270291906134a0565b6000604051808303816000865af19150503d806000811461273f576040519150601f19603f3d011682016040523d82523d6000602084013e612744565b606091505b5091509150816127665760405162461bcd60e51b81526004016107a690613663565b805115612542578080602001905161278191908101906129ab565b6125425760405162461bcd60e51b81526004016107a690613773565b600081848411156127c15760405162461bcd60e51b81526004016107a691906135a2565b505050900390565b60009081526001919091016020526040902054151590565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061281557508115155b949350505050565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b80356109fd81613868565b80356109fd8161387c565b80516109fd8161387c565b80356109fd81613885565b80516109fd8161388e565b80516109fd81613897565b80356109fd816138a0565b6000602082840312156128ca57600080fd5b6000612815848461286b565b600080604083850312156128e957600080fd5b60006128f5858561286b565b92505060206129068582860161286b565b9150509250929050565b6000806040838503121561292357600080fd5b600061292f858561286b565b92505060206129068582860161288c565b60008060006060848603121561295557600080fd5b6000612961868661286b565b93505060206129728682870161288c565b92505060406129838682870161288c565b9150509250925092565b60006020828403121561299f57600080fd5b60006128158484612876565b6000602082840312156129bd57600080fd5b60006128158484612881565b6000806000606084860312156129de57600080fd5b60006129ea8686612897565b93505060206129fb86828701612897565b9250506040612983868287016128a2565b600060208284031215612a1e57600080fd5b6000612815848461288c565b60008060008060008060c08789031215612a4357600080fd5b6000612a4f898961288c565b9650506020612a6089828a0161286b565b9550506040612a7189828a0161288c565b9450506060612a8289828a016128ad565b9350506080612a9389828a0161288c565b92505060a0612aa489828a0161288c565b9150509295509295509295565b60008060408385031215612ac457600080fd5b600061292f858561288c565b6000612adc8383612af9565b505060200190565b6000612af083836133ef565b50506101000190565b612b02816137e1565b82525050565b612b02612b14826137e1565b613847565b6000612b24826137d4565b612b2e81856137d8565b9350612b39836137ce565b8060005b83811015612b67578151612b518882612ad0565b9750612b5c836137ce565b925050600101612b3d565b509495945050505050565b6000612b7d826137d4565b612b8781856137d8565b9350612b92836137ce565b8060005b83811015612b67578151612baa8882612ae4565b9750612bb5836137ce565b925050600101612b96565b612b02816137ec565b612b02816137f1565b6000612bdd826137d4565b612be78185610747565b9350612bf781856020860161381b565b9290920192915050565b6000612c0c826137d4565b612c1681856137d8565b9350612c2681856020860161381b565b612c2f81613858565b9093019392505050565b6000612c466021836137d8565b7f45524332303a205265666572656e6365732068617665206265656e20676976658152603760f91b602082015260400192915050565b6000612c896013836137d8565b721cdd185ad94e880d080f0f4817d85b5bdd5b9d606a1b815260200192915050565b6000612cb86028836137d8565b7f77697468647261775265776172643a20696e76616c696420776974686472617781526714995dd85c99125960c21b602082015260400192915050565b6000612d026039836137d8565b7f45524332303a206d7972656665726565732066726f6d20746865207a65726f2081527f61646472657373206f72204e6f7420666f72206d7973656c6600000000000000602082015260400192915050565b6000612d616012836137d8565b711cdd185ad94e880c080f0817d85b5bdd5b9d60721b815260200192915050565b6000612d8f6026836137d8565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000612dd76030836137d8565b7f6765745374616b654f663a205f7374616b654f665b5f6163636f756e745d2e6c81526f0cadccee8d05052407c40bed2dcc8caf60831b602082015260400192915050565b6000612e29601a836137d8565b7f7769746864726177526577617264203a206f7264657273203e30000000000000815260200192915050565b6000612e62601b836137d8565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000612e9b601d836137d8565b7f7374616b653a2054656d706f726172696c79206e6f74206f70656e6564000000815260200192915050565b6000612ed4601c836137d8565b7f7374616b653a206d73672e76616c75653e3d2831302a2a3132292a3400000000815260200192915050565b6000612f0d6020836137d8565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000612f466028836137d8565b7f7374616b653a2030203c205f7374616b6554797065202626205f7374616b65548152671e5c19480f0f480d60c21b602082015260400192915050565b6000612f906020836137d8565b7f45524332303a205265636f6d6d656e64656420746f2065616368206f74686572815260200192915050565b6000612fc96015836137d8565b746c6576656c436f7374553a207669702066616c736560581b815260200192915050565b6000612ffa601b836137d8565b7f77697468647261775265776172643a2030203c205f616d6f756e740000000000815260200192915050565b6000613033601f836137d8565b7f77697468647261773a2063757272656e744964203e3d205f7374616b65496400815260200192915050565b600061306c602e836137d8565b7f6765745374616b65733a2030203c20746f74616c53697a6520262620746f746181526d0d8a6d2f4ca407c40bed2dcc8caf60931b602082015260400192915050565b60006130bc6024836137d8565b7f5374616b655365743a207365742e5f696e64657865735b76616c756549645d208152630213d20360e41b602082015260400192915050565b60006131026014836137d8565b73757365725f6275726e3a207669702066616c736560601b815260200192915050565b60006131326021836137d8565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006131756020836137d8565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006131ae6035836137d8565b7f6164645769746864726177616c42616c616e6365733a49742063616e206f6e6c81527479206265206164646564206f6e636520612064617960581b602082015260400192915050565b60006132056021836137d8565b7f77697468647261775265776172643a206164647265737328302920213d205f748152606f60f81b602082015260400192915050565b60006132486024836137d8565b7f77697468647261775265776172643a205769746864726177616c2069732062658152631e5bdb9960e21b602082015260400192915050565b600061328e6020836137d8565b7f77697468647261775265776172643a20696e636f7272656374207369676e6572815260200192915050565b60006132c7602a836137d8565b7f77697468647261775265776172643a206164647265737328302920213d20736581526931b932ba29b4b3b732b960b11b602082015260400192915050565b6000613313600f836137d8565b6e1859191c995cdcc81a5b9d985b1a59608a1b815260200192915050565b600061333e602a836137d8565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b600061338a601f836137d8565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b60006133c3601d836137d8565b7f5374616b655365743a20696e646578206f7574206f6620626f756e6473000000815260200192915050565b80516101008301906134018482612bc9565b5060208201516134146020850182612bc9565b5060408201516134276040850182612bc9565b50606082015161343a6060850182612bc9565b50608082015161344d6080850182612bc9565b5060a082015161346060a0850182612bc9565b5060c082015161347360c0850182612bc9565b5060e082015161254260e0850182612af9565b612b02613492826137f1565b6137f1565b612b0281613815565b6000611dea8284612bd2565b60006134b88286613486565b6020820191506134c88285612b08565b6014820191506134d88284613486565b506020019392505050565b602081016109fd8284612af9565b606081016134ff8286612af9565b61350c6020830185612af9565b6128156040830184612bc9565b604081016135278285612af9565b611dea6020830184612bc9565b60208082528101611dea8184612b19565b60208082528101611dea8184612b72565b602081016109fd8284612bc0565b608081016135728287612bc9565b61357f6020830186613497565b61358c6040830185612bc9565b6135996060830184612bc9565b95945050505050565b60208082528101611dea8184612c01565b602080825281016109fd81612c39565b602080825281016109fd81612c7c565b602080825281016109fd81612cab565b602080825281016109fd81612cf5565b602080825281016109fd81612d54565b602080825281016109fd81612d82565b602080825281016109fd81612dca565b602080825281016109fd81612e1c565b602080825281016109fd81612e55565b602080825281016109fd81612e8e565b602080825281016109fd81612ec7565b602080825281016109fd81612f00565b602080825281016109fd81612f39565b602080825281016109fd81612f83565b602080825281016109fd81612fbc565b602080825281016109fd81612fed565b602080825281016109fd81613026565b602080825281016109fd8161305f565b602080825281016109fd816130af565b602080825281016109fd816130f5565b602080825281016109fd81613125565b602080825281016109fd81613168565b602080825281016109fd816131a1565b602080825281016109fd816131f8565b602080825281016109fd8161323b565b602080825281016109fd81613281565b602080825281016109fd816132ba565b602080825281016109fd81613306565b602080825281016109fd81613331565b602080825281016109fd8161337d565b602080825281016109fd816133b6565b61010081016109fd82846133ef565b602081016109fd8284612bc9565b604081016135278285612bc9565b60200190565b5190565b90815260200190565b60006109fd82613800565b151590565b90565b6001600160701b031690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b60005b8381101561383657818101518382015260200161381e565b838111156125425750506000910152565b60006109fd8260006109fd82613862565b601f01601f191690565b60601b90565b613871816137e1565b811461202c57600080fd5b613871816137ec565b613871816137f1565b613871816137f4565b6138718161380c565b6138718161381556fe8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6ca365627a7a7231582011c3f472bd3f6bcf5f70e66bf5eeb7787c4d980b16d6836e2e6fd37a3e53f4656c6578706572696d656e74616cf564736f6c63430005110040
Deployed Bytecode
0x6080604052600436106102515760003560e01c80637b0472f011610139578063af2f3ebf116100b6578063d702087f1161007a578063d702087f14610678578063daa91f2e14610698578063dd4bc101146106b8578063e00dd161146106d8578063e328fa36146106ed578063f2fde38b1461070d57610251565b8063af2f3ebf146105e1578063b36dee23146105f6578063d359ff9214610616578063d499bc8514610643578063d4dcb54f1461066357610251565b806396336b30116100fd57806396336b301461056257806396c82e5714610577578063a0c1f15e1461058c578063a3e9b01b146105a1578063a3f49d00146105c157610251565b80637b0472f0146104f05780637efe9797146105035780638da5cb5b146105185780638f32d59b1461052d578063945edc0f1461054257610251565b80633a570a98116101d257806355221ddf1161019657806355221ddf1461042e5780635f09d84c1461045b5780635f6048471461047b5780636a6615a61461049b5780636f96e99c146104bb578063715018a6146104db57610251565b80633a570a98146103af5780633c7a8fc9146103c4578063427baaf2146103e45780634d61537f14610404578063535ca70d1461041957610251565b80632c34fd08116102195780632c34fd08146103005780632da496e3146103205780632e1a7d4d1461034d57806335f87e9f1461036d578063382c82711461039a57610251565b8063053695ba1461025357806315645dd31461028957806317ab27bc146102b65780631af84f87146102cb5780631d834409146102eb575b005b34801561025f57600080fd5b5061027361026e3660046128b8565b61072d565b60405161028091906137b2565b60405180910390f35b34801561029557600080fd5b506102a96102a4366004612a0c565b61074c565b6040516102809190613556565b3480156102c257600080fd5b50610273610883565b3480156102d757600080fd5b506102736102e6366004612ab1565b610889565b3480156102f757600080fd5b50610273610a03565b34801561030c57600080fd5b5061027361031b3660046128b8565b610a09565b34801561032c57600080fd5b5061034061033b366004612940565b610a24565b6040516102809190613545565b34801561035957600080fd5b50610251610368366004612a0c565b610b09565b34801561037957600080fd5b5061038d6103883660046128b8565b610fa1565b60405161028091906134e3565b3480156103a657600080fd5b506102a9610fbc565b3480156103bb57600080fd5b506102a9610fca565b3480156103d057600080fd5b506102a96103df3660046128b8565b61109c565b3480156103f057600080fd5b506102516103ff366004612a2a565b611205565b34801561041057600080fd5b5061038d6114c4565b34801561042557600080fd5b506102a96114d3565b34801561043a57600080fd5b5061044e6104493660046128b8565b6114dc565b6040516102809190613534565b34801561046757600080fd5b506102a96104763660046128b8565b611552565b34801561048757600080fd5b506102a96104963660046128d6565b61159d565b3480156104a757600080fd5b506102a96104b6366004612a0c565b61162a565b3480156104c757600080fd5b506102a96104d63660046128b8565b61163f565b3480156104e757600080fd5b5061025161168a565b6102516104fe366004612ab1565b6116f8565b34801561050f57600080fd5b50610273611c20565b34801561052457600080fd5b5061038d611c26565b34801561053957600080fd5b506102a9611c35565b34801561054e57600080fd5b506102a961055d36600461298d565b611c59565b34801561056e57600080fd5b5061038d611c96565b34801561058357600080fd5b50610273611ca5565b34801561059857600080fd5b5061038d611cab565b3480156105ad57600080fd5b506102a96105bc3660046128d6565b611cba565b3480156105cd57600080fd5b506102a96105dc366004612910565b611d12565b3480156105ed57600080fd5b50610273611d59565b34801561060257600080fd5b506102736106113660046128b8565b611d5f565b34801561062257600080fd5b50610636610631366004612910565b611d7a565b60405161028091906137a3565b34801561064f57600080fd5b5061038d61065e3660046128b8565b611df1565b34801561066f57600080fd5b50610273611e0f565b34801561068457600080fd5b506102516106933660046128b8565b611e15565b3480156106a457600080fd5b506102736106b33660046128b8565b611e81565b3480156106c457600080fd5b506102736106d33660046128b8565b611e9c565b3480156106e457600080fd5b50610273611eb7565b3480156106f957600080fd5b506102736107083660046128b8565b611ebd565b34801561071957600080fd5b506102516107283660046128b8565b611fff565b6001600160a01b0381166000908152601360205260409020545b919050565b60006006821115801561078a5750601c600061076661202f565b6001600160a01b03166001600160a01b031681526020019081526020016000205482115b6107af5760405162461bcd60e51b81526004016107a6906136e3565b60405180910390fd5b60006107e783601c60006107c161202f565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610889565b600a54909150600090610802906001600160a01b0316611ebd565b9050600061082b8261081f8564e8d4a5100063ffffffff61203316565b9063ffffffff61206d16565b905061085161083861202f565b600a546001600160a01b0316908363ffffffff6120af16565b84601c600061085e61202f565b6001600160a01b03168152602081019190915260400160002055506001949350505050565b601d5490565b60006006831115801561089b57508183115b6108b75760405162461bcd60e51b81526004016107a690613693565b82600114156108c8575060646109fd565b82600214156108e857816108df575061012c6108e3565b5060c85b6109fd565b826003141561091157816108ff57506101f46108e3565b81600114156108df57506101906108e3565b826004141561094c578161092857506102bc6108e3565b816001141561093a57506102586108e3565b81600214156108df57506101906108e3565b82600514156109a2578161096357506103e86108e3565b816001141561097557506103846108e3565b816002141561098757506102bc6108e3565b816003141561099957506101f46108e3565b5061012c6109fd565b816109b057506105dc6109fd565b81600114156109c257506105786109fd565b81600214156109d457506104b06109fd565b81600314156109e657506103e86109fd565b81600414156109f857506103206109fd565b506101f45b92915050565b60115490565b6001600160a01b031660009081526016602052604090205490565b60606000610a318561072d565b9050806000108015610a4257508381115b610a5e5760405162461bcd60e51b81526004016107a6906136c3565b82848101821015610a6e57508381035b80604051908082528060200260200182016040528015610aa857816020015b610a9561281d565b815260200190600190039081610a8d5790505b50925060005b81811015610aff576001600160a01b0387166000908152601760205260409020610ae09087830163ffffffff61210d16565b848281518110610aec57fe5b6020908102919091010152600101610aae565b5050509392505050565b806010541015610b2b5760405162461bcd60e51b81526004016107a6906136b3565b610b3361281d565b336000908152601760205260409020610b52908363ffffffff6121bf16565b90506000816060015190506000826080015190506000806000856020015142036103841115610c4b57610b91606461081f87605f63ffffffff61203316565b9450610ba9606461081f86605f63ffffffff61203316565b9350610bd8610bcb606461081f60058a6060015161203390919063ffffffff16565b849063ffffffff6122b716565b92508560c0015160011415610c1b57610c14610c07606461081f60058a6080015161203390919063ffffffff16565b839063ffffffff6122b716565b9150610c4b565b610c48610c3b606461081f60058a6080015161203390919063ffffffff16565b829063ffffffff6122b716565b90505b8560c0015160011415610cdc57604051339085156108fc029086906000818181858888f19350505050158015610c85573d6000803e3d6000fd5b50600a54610ca3906001600160a01b0316338763ffffffff6122dc16565b6080860151600d54610cba9163ffffffff6122fe16565b600d556060860151600c54610cd49163ffffffff6122fe16565b600c55610d8c565b8560c0015160021415610d5457600954610d06906001600160a01b0316338663ffffffff6122dc16565b600a54610d23906001600160a01b0316338763ffffffff6122dc16565b6080860151600e54610d3a9163ffffffff6122fe16565b600e556060860151600c54610cd49163ffffffff6122fe16565b600a54610d71906001600160a01b0316338763ffffffff6122dc16565b6060860151600c54610d889163ffffffff6122fe16565b600c555b8215610db657610db6610d9d611c26565b600a546001600160a01b0316908563ffffffff6122dc16565b8015610de057610de0610dc7611c26565b6009546001600160a01b0316908363ffffffff6122dc16565b8115610e2857610dee611c26565b6001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015610e26573d6000803e3d6000fd5b505b601154610e3c90600163ffffffff6122fe16565b60115533600090815260136020526040902054610e6090600163ffffffff6122fe16565b3360009081526013602052604081209190915580526000805160206138aa83398151915254610e9690600163ffffffff6122fe16565b6000805260136020526000805160206138aa833981519152556040860151601254610ec69163ffffffff6122fe16565b60125560408087015133600090815260146020529190912054610eee9163ffffffff6122fe16565b336000908152601460209081526040808320939093556017905220610f19908763ffffffff61234016565b50600080526017602052610f537fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b8763ffffffff61234016565b5086336001600160a01b03167f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca948688604051610f909291906137c0565b60405180910390a350505050505050565b6019602052600090815260409020546001600160a01b031681565b601e54620151800142101590565b6000610fd4610fbc565b610ff05760405162461bcd60e51b81526004016107a690613713565b600064e8d4a510006012541115801561100b57506000601254115b1561101b57506355d4a80061107a565b64e8d4a5100060125411801561103857506509184e72a000601254105b156110635761105c6305f5e10061081f6105a060125461203390919063ffffffff16565b905061107a565b6509184e72a0006012541061107a575064035a4e90005b42601e55601d54611091908263ffffffff6122b716565b601d55506001905090565b60006001600160a01b038216158015906110cf57506110b961202f565b6001600160a01b0316826001600160a01b031614155b6110eb5760405162461bcd60e51b81526004016107a6906135e3565b6000601a816110f861202f565b6001600160a01b03908116825260208201929092526040016000205416146111325760405162461bcd60e51b81526004016107a6906135b3565b601b600061113e61202f565b6001600160a01b03168152602081019190915260400160002054156111755760405162461bcd60e51b81526004016107a690613683565b81601a600061118261202f565b6001600160a01b0390811682526020808301939093526040918201600090812080546001600160a01b0319169583169590951790945585168352601b9091529020806111cc61202f565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b03929092169190911790559392505050565b6001600160a01b03851660009081526013602052604090205461123a5760405162461bcd60e51b81526004016107a690613623565b60008681526018602052604090205460ff16156112695760405162461bcd60e51b81526004016107a6906135d3565b6001600160a01b03851661128f5760405162461bcd60e51b81526004016107a690613723565b836000106112af5760405162461bcd60e51b81526004016107a6906136a3565b600b546001600160a01b03166112d75760405162461bcd60e51b81526004016107a690613753565b60008686866040516020016112ee939291906134ac565b60408051601f198184030181528282528051602091820120600b5460008552939091019182905292506001600160a01b0390911690600190611337908490889088908890613564565b6020604051602081039080840390855afa158015611359573d6000803e3d6000fd5b505050602060405103516001600160a01b0316146113895760405162461bcd60e51b81526004016107a690613743565b601d5460009061139f908763ffffffff6122fe16565b116113bc5760405162461bcd60e51b81526004016107a690613733565b601d546113cf908663ffffffff6122fe16565b601d55611405866113ec606461081f89606163ffffffff61203316565b600a546001600160a01b0316919063ffffffff6122dc16565b611426611410611c26565b6113ec606461081f89600363ffffffff61203316565b6000878152601860209081526040808320805460ff191660011790556001600160a01b03891683526015909152902054611466908663ffffffff6122b716565b6001600160a01b038716600081815260156020526040908190209290925590517fbc84835063c693975166f00cffb19f01a94c2db55b1bf259238c5da3594e5066906114b39088906137b2565b60405180910390a250505050505050565b600b546001600160a01b031681565b600f5460ff1690565b6001600160a01b0381166000908152601b602090815260409182902080548351818402810184019094528084526060939283018282801561154657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611528575b50505050509050919050565b600061155c611c35565b6115785760405162461bcd60e51b81526004016107a690613703565b50600a80546001600160a01b0383166001600160a01b03199091161790556001919050565b60006001600160a01b03821615806115c65750826001600160a01b0316826001600160a01b0316145b156115d3575060006109fd565b6001600160a01b038381166000908152601a602052604090205416156115fb575060006109fd565b6001600160a01b0383166000908152601b602052604090205415611621575060006109fd565b50600192915050565b60186020526000908152604090205460ff1681565b6000611649611c35565b6116655760405162461bcd60e51b81526004016107a690613703565b50600980546001600160a01b0383166001600160a01b03199091161790556001919050565b611692611c35565b6116ae5760405162461bcd60e51b81526004016107a690613703565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b816000108015611709575060048211155b6117255760405162461bcd60e51b81526004016107a690613673565b806000106117455760405162461bcd60e51b81526004016107a6906135f3565b600a5460009061175d906001600160a01b0316611ebd565b90506000806000856004141561180557600f5460ff166117c957336000908152601660205260409020546001146117a65760405162461bcd60e51b81526004016107a690613643565b600a546117c4906001600160a01b031633308863ffffffff61251e16565b6117e7565b600a546117e7906001600160a01b031633308863ffffffff61251e16565b600c548592506117fd908363ffffffff6122b716565b600c556119d1565b61182273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2611ebd565b92503415611900576503a3529440003410156118505760405162461bcd60e51b81526004016107a690613653565b6118b264e8d4a5100061081f8661081f6118826001808d036004811061187257fe5b015460649063ffffffff6122fe16565b61081f6001808e036004811061189457fe5b01546118a68b3463ffffffff61203316565b9063ffffffff61203316565b600a549092506118d3906001600160a01b031633308563ffffffff61251e16565b50600d546001906118ea903463ffffffff6122b716565b600d55600c546117fd908363ffffffff6122b716565b84600411156119215760405162461bcd60e51b81526004016107a6906135c3565b6119618461081f61193a6001808b036004811061187257fe5b61081f6001808c036004811061194c57fe5b01546118a68b620f424063ffffffff61203316565b600954909250611982906001600160a01b031633308863ffffffff61251e16565b600a546119a0906001600160a01b031633308563ffffffff61251e16565b50600e546002906119b7908663ffffffff6122b716565b600e55600c546119cd908363ffffffff6122b716565b600c555b6119d961281d565b60006119f2620f424061081f888763ffffffff61203316565b905060008360021415611a0d57506080820187905286611a47565b8360011415611a3f57611a32670de0b6b3a764000061081f883463ffffffff61203316565b3460808501529050611a47565b600060808401525b6000611a73606461081f600560018e0360048110611a6157fe5b01546118a6878763ffffffff6122b716565b601154909150611a8a90600163ffffffff6122b716565b60115533600090815260136020526040902054611aae90600163ffffffff6122b716565b3360009081526013602052604081209190915580526000805160206138aa83398151915254611ae490600163ffffffff6122b716565b6000805260136020526000805160206138aa83398151915255601254611b10908263ffffffff6122b716565b60125533600090815260146020526040902054611b33908263ffffffff6122b716565b33600081815260146020908152604080832094909455601080546001019081905588524288820152606088018a905260e0880183905287840185905260a088018e905260c08801899052918152601790915220611b96908563ffffffff61254816565b50600080526017602052611bd07fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b8563ffffffff61254816565b50835160808501516040518c9133917f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde28291611c0c918f906137c0565b60405180910390a450505050505050505050565b600c5490565b6000546001600160a01b031690565b600080546001600160a01b0316611c4a61202f565b6001600160a01b031614905090565b6000611c63611c35565b611c7f5760405162461bcd60e51b81526004016107a690613703565b50600f805460ff1916911515919091179055600190565b6009546001600160a01b031681565b60125490565b600a546001600160a01b031681565b6000611cc4611c35565b611ce05760405162461bcd60e51b81526004016107a690613703565b506001600160a01b03918216600090815260196020526040902080546001600160a01b03191691909216179055600190565b6000611d1c611c35565b611d385760405162461bcd60e51b81526004016107a690613703565b506001600160a01b0391909116600090815260166020526040902055600190565b600e5490565b6001600160a01b03166000908152601c602052604090205490565b611d8261281d565b6001600160a01b03831660009081526017602052604090208290611da5906125fc565b11611dc25760405162461bcd60e51b81526004016107a690613613565b6001600160a01b0383166000908152601760205260409020611dea908363ffffffff61210d16565b9392505050565b6001600160a01b039081166000908152601a60205260409020541690565b600d5490565b611e1d611c35565b611e395760405162461bcd60e51b81526004016107a690613703565b6001600160a01b038116611e5f5760405162461bcd60e51b81526004016107a690613763565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526015602052604090205490565b6001600160a01b031660009081526014602052604090205490565b60105481565b6009546000906001600160a01b0383811691161415611ee55750670de0b6b3a7640000610747565b6001600160a01b0380831660009081526019602090815260408083205481516004815260248101835292830180516001600160e01b0316630240bc6b60e21b17905290519293606093911691611f3a916134a0565b600060405180830381855afa9150503d8060008114611f75576040519150601f19603f3d011682016040523d82523d6000602084013e611f7a565b606091505b50915091508115611ff55760008082806020019051611f9c91908101906129c9565b50600a549193509150670de0b6b3a7640000906001600160a01b0388811691161415611fc85750620f42405b611fe96001600160701b038085169061081f9085168463ffffffff61203316565b95505050505050610747565b5060009392505050565b612007611c35565b6120235760405162461bcd60e51b81526004016107a690613703565b61202c81612600565b50565b3390565b600082612042575060006109fd565b8282028284828161204f57fe5b0414611dea5760405162461bcd60e51b81526004016107a6906136f3565b6000611dea83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612681565b60405161210890849063079cc67960e41b906120d19086908690602401613519565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526126b8565b505050565b61211561281d565b825482106121355760405162461bcd60e51b81526004016107a690613793565b82600001828154811061214457fe5b600091825260209182902060408051610100810182526008909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e0820152905092915050565b6121c761281d565b60008281526001840160205260409020546121f45760405162461bcd60e51b81526004016107a6906136d3565b6000828152600184016020526040902054835460001990910190811061222c5760405162461bcd60e51b81526004016107a690613793565b83600001818154811061223b57fe5b600091825260209182902060408051610100810182526008909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e082015291505092915050565b600082820183811015611dea5760405162461bcd60e51b81526004016107a690613633565b60405161210890849063a9059cbb60e01b906120d19086908690602401613519565b6000611dea83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279d565b805160009081526001830160205260408120548015612514578354600019808301910161236b61281d565b86600001828154811061237a57fe5b600091825260209182902060408051610100810182526008909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e08201528754909150819088908590811061240057fe5b60009182526020808320845160089390930201918255838101516001808401919091556040808601516002850155606086015160038501556080860151600485015560a0860151600585015560c0860151600685015560e090950151600790930180546001600160a01b0319166001600160a01b0390941693909317909255845183528a820190529190209084019055865487908061249b57fe5b6000828152602080822060086000199094019384020182815560018181018490556002820184905560038201849055600482018490556005820184905560068201849055600790910180546001600160a01b03191690559290935588518152898201909252604082209190915594506109fd9350505050565b60009150506109fd565b6040516125429085906323b872dd60e01b906120d1908790879087906024016134f1565b50505050565b60006125588383600001516127c9565b6125f4575081546001808201845560008481526020808220855160089095020184815585820151818501556040808701516002830155606087015160038301556080870151600483015560a0870151600583015560c0870151600683015560e0870151600790920180546001600160a01b0319166001600160a01b039093169290921790915586549483528387019091529020919091556109fd565b5060006109fd565b5490565b6001600160a01b0381166126265760405162461bcd60e51b81526004016107a690613603565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081836126a25760405162461bcd60e51b81526004016107a691906135a2565b5060008385816126ae57fe5b0495945050505050565b6126ca826001600160a01b03166127e1565b6126e65760405162461bcd60e51b81526004016107a690613783565b60006060836001600160a01b03168360405161270291906134a0565b6000604051808303816000865af19150503d806000811461273f576040519150601f19603f3d011682016040523d82523d6000602084013e612744565b606091505b5091509150816127665760405162461bcd60e51b81526004016107a690613663565b805115612542578080602001905161278191908101906129ab565b6125425760405162461bcd60e51b81526004016107a690613773565b600081848411156127c15760405162461bcd60e51b81526004016107a691906135a2565b505050900390565b60009081526001919091016020526040902054151590565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061281557508115155b949350505050565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b80356109fd81613868565b80356109fd8161387c565b80516109fd8161387c565b80356109fd81613885565b80516109fd8161388e565b80516109fd81613897565b80356109fd816138a0565b6000602082840312156128ca57600080fd5b6000612815848461286b565b600080604083850312156128e957600080fd5b60006128f5858561286b565b92505060206129068582860161286b565b9150509250929050565b6000806040838503121561292357600080fd5b600061292f858561286b565b92505060206129068582860161288c565b60008060006060848603121561295557600080fd5b6000612961868661286b565b93505060206129728682870161288c565b92505060406129838682870161288c565b9150509250925092565b60006020828403121561299f57600080fd5b60006128158484612876565b6000602082840312156129bd57600080fd5b60006128158484612881565b6000806000606084860312156129de57600080fd5b60006129ea8686612897565b93505060206129fb86828701612897565b9250506040612983868287016128a2565b600060208284031215612a1e57600080fd5b6000612815848461288c565b60008060008060008060c08789031215612a4357600080fd5b6000612a4f898961288c565b9650506020612a6089828a0161286b565b9550506040612a7189828a0161288c565b9450506060612a8289828a016128ad565b9350506080612a9389828a0161288c565b92505060a0612aa489828a0161288c565b9150509295509295509295565b60008060408385031215612ac457600080fd5b600061292f858561288c565b6000612adc8383612af9565b505060200190565b6000612af083836133ef565b50506101000190565b612b02816137e1565b82525050565b612b02612b14826137e1565b613847565b6000612b24826137d4565b612b2e81856137d8565b9350612b39836137ce565b8060005b83811015612b67578151612b518882612ad0565b9750612b5c836137ce565b925050600101612b3d565b509495945050505050565b6000612b7d826137d4565b612b8781856137d8565b9350612b92836137ce565b8060005b83811015612b67578151612baa8882612ae4565b9750612bb5836137ce565b925050600101612b96565b612b02816137ec565b612b02816137f1565b6000612bdd826137d4565b612be78185610747565b9350612bf781856020860161381b565b9290920192915050565b6000612c0c826137d4565b612c1681856137d8565b9350612c2681856020860161381b565b612c2f81613858565b9093019392505050565b6000612c466021836137d8565b7f45524332303a205265666572656e6365732068617665206265656e20676976658152603760f91b602082015260400192915050565b6000612c896013836137d8565b721cdd185ad94e880d080f0f4817d85b5bdd5b9d606a1b815260200192915050565b6000612cb86028836137d8565b7f77697468647261775265776172643a20696e76616c696420776974686472617781526714995dd85c99125960c21b602082015260400192915050565b6000612d026039836137d8565b7f45524332303a206d7972656665726565732066726f6d20746865207a65726f2081527f61646472657373206f72204e6f7420666f72206d7973656c6600000000000000602082015260400192915050565b6000612d616012836137d8565b711cdd185ad94e880c080f0817d85b5bdd5b9d60721b815260200192915050565b6000612d8f6026836137d8565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000612dd76030836137d8565b7f6765745374616b654f663a205f7374616b654f665b5f6163636f756e745d2e6c81526f0cadccee8d05052407c40bed2dcc8caf60831b602082015260400192915050565b6000612e29601a836137d8565b7f7769746864726177526577617264203a206f7264657273203e30000000000000815260200192915050565b6000612e62601b836137d8565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000612e9b601d836137d8565b7f7374616b653a2054656d706f726172696c79206e6f74206f70656e6564000000815260200192915050565b6000612ed4601c836137d8565b7f7374616b653a206d73672e76616c75653e3d2831302a2a3132292a3400000000815260200192915050565b6000612f0d6020836137d8565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000612f466028836137d8565b7f7374616b653a2030203c205f7374616b6554797065202626205f7374616b65548152671e5c19480f0f480d60c21b602082015260400192915050565b6000612f906020836137d8565b7f45524332303a205265636f6d6d656e64656420746f2065616368206f74686572815260200192915050565b6000612fc96015836137d8565b746c6576656c436f7374553a207669702066616c736560581b815260200192915050565b6000612ffa601b836137d8565b7f77697468647261775265776172643a2030203c205f616d6f756e740000000000815260200192915050565b6000613033601f836137d8565b7f77697468647261773a2063757272656e744964203e3d205f7374616b65496400815260200192915050565b600061306c602e836137d8565b7f6765745374616b65733a2030203c20746f74616c53697a6520262620746f746181526d0d8a6d2f4ca407c40bed2dcc8caf60931b602082015260400192915050565b60006130bc6024836137d8565b7f5374616b655365743a207365742e5f696e64657865735b76616c756549645d208152630213d20360e41b602082015260400192915050565b60006131026014836137d8565b73757365725f6275726e3a207669702066616c736560601b815260200192915050565b60006131326021836137d8565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006131756020836137d8565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006131ae6035836137d8565b7f6164645769746864726177616c42616c616e6365733a49742063616e206f6e6c81527479206265206164646564206f6e636520612064617960581b602082015260400192915050565b60006132056021836137d8565b7f77697468647261775265776172643a206164647265737328302920213d205f748152606f60f81b602082015260400192915050565b60006132486024836137d8565b7f77697468647261775265776172643a205769746864726177616c2069732062658152631e5bdb9960e21b602082015260400192915050565b600061328e6020836137d8565b7f77697468647261775265776172643a20696e636f7272656374207369676e6572815260200192915050565b60006132c7602a836137d8565b7f77697468647261775265776172643a206164647265737328302920213d20736581526931b932ba29b4b3b732b960b11b602082015260400192915050565b6000613313600f836137d8565b6e1859191c995cdcc81a5b9d985b1a59608a1b815260200192915050565b600061333e602a836137d8565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b600061338a601f836137d8565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b60006133c3601d836137d8565b7f5374616b655365743a20696e646578206f7574206f6620626f756e6473000000815260200192915050565b80516101008301906134018482612bc9565b5060208201516134146020850182612bc9565b5060408201516134276040850182612bc9565b50606082015161343a6060850182612bc9565b50608082015161344d6080850182612bc9565b5060a082015161346060a0850182612bc9565b5060c082015161347360c0850182612bc9565b5060e082015161254260e0850182612af9565b612b02613492826137f1565b6137f1565b612b0281613815565b6000611dea8284612bd2565b60006134b88286613486565b6020820191506134c88285612b08565b6014820191506134d88284613486565b506020019392505050565b602081016109fd8284612af9565b606081016134ff8286612af9565b61350c6020830185612af9565b6128156040830184612bc9565b604081016135278285612af9565b611dea6020830184612bc9565b60208082528101611dea8184612b19565b60208082528101611dea8184612b72565b602081016109fd8284612bc0565b608081016135728287612bc9565b61357f6020830186613497565b61358c6040830185612bc9565b6135996060830184612bc9565b95945050505050565b60208082528101611dea8184612c01565b602080825281016109fd81612c39565b602080825281016109fd81612c7c565b602080825281016109fd81612cab565b602080825281016109fd81612cf5565b602080825281016109fd81612d54565b602080825281016109fd81612d82565b602080825281016109fd81612dca565b602080825281016109fd81612e1c565b602080825281016109fd81612e55565b602080825281016109fd81612e8e565b602080825281016109fd81612ec7565b602080825281016109fd81612f00565b602080825281016109fd81612f39565b602080825281016109fd81612f83565b602080825281016109fd81612fbc565b602080825281016109fd81612fed565b602080825281016109fd81613026565b602080825281016109fd8161305f565b602080825281016109fd816130af565b602080825281016109fd816130f5565b602080825281016109fd81613125565b602080825281016109fd81613168565b602080825281016109fd816131a1565b602080825281016109fd816131f8565b602080825281016109fd8161323b565b602080825281016109fd81613281565b602080825281016109fd816132ba565b602080825281016109fd81613306565b602080825281016109fd81613331565b602080825281016109fd8161337d565b602080825281016109fd816133b6565b61010081016109fd82846133ef565b602081016109fd8284612bc9565b604081016135278285612bc9565b60200190565b5190565b90815260200190565b60006109fd82613800565b151590565b90565b6001600160701b031690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b60005b8381101561383657818101518382015260200161381e565b838111156125425750506000910152565b60006109fd8260006109fd82613862565b601f01601f191690565b60601b90565b613871816137e1565b811461202c57600080fd5b613871816137ec565b613871816137f1565b613871816137f4565b6138718161380c565b6138718161381556fe8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6ca365627a7a7231582011c3f472bd3f6bcf5f70e66bf5eeb7787c4d980b16d6836e2e6fd37a3e53f4656c6578706572696d656e74616cf564736f6c63430005110040
Deployed Bytecode Sourcemap
295:22362:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2654:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2654:110:6;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22100:549;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22100:549:6;;;;;;;;:::i;:::-;;;;;;;;15469:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15469:109:6;;;:::i;20444:1644::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20444:1644:6;;;;;;;;:::i;2876:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2876:88:6;;;:::i;3110:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3110:96:6;;;;;;;;:::i;4954:570::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4954:570:6;;;;;;;;:::i;:::-;;;;;;;;9734:2673;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9734:2673:6;;;;;;;;:::i;1997:44::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1997:44:6;;;;;;;;:::i;:::-;;;;;;;;14951:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14951:116:6;;;:::i;15596:635::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15596:635:6;;;:::i;16770:643::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16770:643:6;;;;;;;;:::i;12419:1253::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12419:1253:6;;;;;;;;:::i;1247:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1247:27:6;;;:::i;2776:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2776:88:6;;;:::i;15207:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15207:120:6;;;;;;;;:::i;:::-;;;;;;;;3357:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3357:127:6;;;;;;;;:::i;16391:361::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16391:361:6;;;;;;;;:::i;1901:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1901:47:6;;;;;;;;:::i;3214:135::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3214:135:6;;;;;;;;:::i;1679:137:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1679:137:3;;;:::i;5719:3928:6:-;;;;;;;;;:::i;2442:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2442:96:6;;;:::i;894:77:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;894:77:3;;;:::i;1245:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1245:92:3;;;:::i;3496:135:6:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3496:135:6;;;;;;;;:::i;1082:76::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1082:76:6;;;:::i;4023:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4023:88:6;;;:::i;1165:75::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1165:75:6;;;:::i;3866:149::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3866:149:6;;;;;;;;:::i;3643:138::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3643:138:6;;;;;;;;:::i;2340:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2340:94:6;;;:::i;15339:112::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15339:112:6;;;;;;;;:::i;4626:259::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4626:259:6;;;;;;;;:::i;:::-;;;;;;;;15083:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15083:106:6;;;;;;;;:::i;2550:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2550:92:6;;;:::i;4365:180::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4365:180:6;;;;;;;;:::i;2976:122::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2976:122:6;;;;;;;;:::i;4248:105::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4248:105:6;;;;;;;;:::i;1501:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1501:21:6;;;:::i;13727:749::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13727:749:6;;;;;;;;:::i;1965:107:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1965:107:3;;;;;;;;:::i;2654:110:6:-;-1:-1:-1;;;;;2736:20:6;;2712:4;2736:20;;;:11;:20;;;;;;2654:110;;;;:::o;22100:549::-;22150:4;22182:1;22175:5;:8;;:34;;;;;22191:4;:18;22196:12;:10;:12::i;:::-;-1:-1:-1;;;;;22191:18:6;-1:-1:-1;;;;;22191:18:6;;;;;;;;;;;;;22185:5;:24;22175:34;22167:67;;;;-1:-1:-1;;;22167:67:6;;;;;;;;;;;;;;;;;22245:9;22257:36;22268:5;22274:4;:18;22279:12;:10;:12::i;:::-;-1:-1:-1;;;;;22274:18:6;-1:-1:-1;;;;;22274:18:6;;;;;;;;;;;;;22257:10;:36::i;:::-;22333:6;;22245:48;;-1:-1:-1;22304:13:6;;22320:20;;-1:-1:-1;;;;;22333:6:6;22320:12;:20::i;:::-;22304:36;-1:-1:-1;22410:23:6;22436:24;22454:5;22436:13;:1;22442:6;22436:13;:5;:13;:::i;:::-;:17;:24;:17;:24;:::i;:::-;22410:50;;22527:58;22555:12;:10;:12::i;:::-;22534:6;;-1:-1:-1;;;;;22534:6:6;;22569:15;22527:58;:27;:58;:::i;:::-;22616:5;22597:4;:18;22602:12;:10;:12::i;:::-;-1:-1:-1;;;;;22597:18:6;;;;;;;;;;;;-1:-1:-1;22597:18:6;:24;-1:-1:-1;22637:4:6;;22100:549;-1:-1:-1;;;;22100:549:6:o;15469:109::-;15550:20;;15469:109;:::o;20444:1644::-;20511:9;20548:1;20541:5;:8;;:19;;;;;20557:3;20551:5;:9;20541:19;20533:53;;;;-1:-1:-1;;;20533:53:6;;;;;;;;;20604:5;20611:1;20604:8;20601:1480;;;-1:-1:-1;20634:3:6;20601:1480;;;20661:5;20668:1;20661:8;20658:1423;;;20692:6;20689:110;;-1:-1:-1;20724:3:6;20689:110;;;-1:-1:-1;20776:3:6;20689:110;20658:1423;;;20822:5;20829:1;20822:8;20819:1262;;;20853:6;20850:173;;-1:-1:-1;20885:3:6;20850:173;;;20916:3;20921:1;20916:6;20913:110;;;-1:-1:-1;20948:3:6;20913:110;;20819:1262;21046:5;21053:1;21046:8;21043:1038;;;21077:6;21074:236;;-1:-1:-1;21109:3:6;21074:236;;;21140:3;21145:1;21140:6;21137:173;;;-1:-1:-1;21172:3:6;21137:173;;;21203:3;21208:1;21203:6;21200:110;;;-1:-1:-1;21235:3:6;21200:110;;21043:1038;21333:5;21340:1;21333:8;21330:751;;;21364:6;21361:300;;-1:-1:-1;21396:4:6;21361:300;;;21428:3;21433:1;21428:6;21425:236;;;-1:-1:-1;21460:3:6;21425:236;;;21491:3;21496:1;21491:6;21488:173;;;-1:-1:-1;21523:3:6;21488:173;;;21554:3;21559:1;21554:6;21551:110;;;-1:-1:-1;21586:3:6;21551:110;;;-1:-1:-1;21638:3:6;21330:751;;;21702:6;21699:367;;-1:-1:-1;21734:4:6;21699:367;;;21766:3;21771:1;21766:6;21763:303;;;-1:-1:-1;21798:4:6;21763:303;;;21830:3;21835:1;21830:6;21827:239;;;-1:-1:-1;21862:4:6;21827:239;;;21894:3;21899:1;21894:6;21891:175;;;-1:-1:-1;21926:4:6;21891:175;;;21958:3;21963:1;21958:6;21955:111;;;-1:-1:-1;21990:3:6;21955:111;;;-1:-1:-1;22043:3:6;21955:111;20444:1644;;;;:::o;2876:88::-;2944:12;;2876:88;:::o;3110:96::-;-1:-1:-1;;;;;3185:13:6;3161:4;3185:13;;;:7;:13;;;;;;;3110:96::o;4954:570::-;5041:28;5082:14;5099:20;5110:8;5099:10;:20::i;:::-;5082:37;;5142:9;5138:1;:13;:35;;;;;5167:6;5155:9;:18;5138:35;5130:94;;;;-1:-1:-1;;;5130:94:6;;;;;;;;;5249:7;5283:15;;;5271:27;;5267:87;;;-1:-1:-1;5324:18:6;;;5267:87;5394:6;5374:27;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;5366:35:6;-1:-1:-1;5417:6:6;5412:105;5433:6;5429:1;:10;5412:105;;;-1:-1:-1;;;;;5472:18:6;;;;;;:8;:18;;;;;:33;;5494:10;;;5472:33;:21;:33;:::i;:::-;5461:5;5467:1;5461:8;;;;;;;;;;;;;;;;;:44;5441:3;;5412:105;;;;4954:570;;;;;;;:::o;9734:2673::-;9808:8;9795:9;;:21;;9787:65;;;;-1:-1:-1;;;9787:65:6;;;;;;;;;9890:25;;:::i;:::-;9927:10;9918:20;;;;:8;:20;;;;;:35;;9944:8;9918:35;:25;:35;:::i;:::-;9890:63;;9999:17;10019:4;:17;;;9999:37;;10047:19;10069:4;:19;;;10047:41;;10099:16;10126:14;10151:15;10237:4;:15;;;10219;:33;10206:10;:46;10202:563;;;10345:29;10370:3;10345:20;:12;10362:2;10345:20;:16;:20;:::i;:29::-;10330:44;-1:-1:-1;10406:31:6;10433:3;10406:22;:14;10425:2;10406:22;:18;:22;:::i;:31::-;10389:48;;10466:50;10482:33;10511:3;10482:24;10504:1;10482:4;:17;;;:21;;:24;;;;:::i;:33::-;10466:11;;:50;:15;:50;:::i;:::-;10452:64;;10540:4;:13;;;10535:1;:18;10531:223;;;10585:50;10599:35;10630:3;10599:26;10623:1;10599:4;:19;;;:23;;:26;;;;:::i;:35::-;10585:9;;:50;:13;:50;:::i;:::-;10573:62;;10531:223;;;10687:51;10702:35;10733:3;10702:26;10726:1;10702:4;:19;;;:23;;:26;;;;:::i;:35::-;10687:10;;:51;:14;:51;:::i;:::-;10674:64;;10531:223;10784:4;:13;;;10779:1;:18;10775:815;;;10830:35;;:10;;:35;;;;;10850:14;;10830:35;;;;10850:14;10830:10;:35;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;10887:6:6;;10880:53;;-1:-1:-1;;;;;10887:6:6;10908:10;10920:12;10880:53;:27;:53;:::i;:::-;10984:19;;;;10965:14;;:39;;;:18;:39;:::i;:::-;10948:14;:56;11059:17;;;;11038:16;;:39;;;:20;:39;:::i;:::-;11019:16;:58;10775:815;;;11104:4;:13;;;11099:1;:18;11095:495;;;11157:8;;11150:57;;-1:-1:-1;;;;;11157:8:6;11180:10;11192:14;11150:57;:29;:57;:::i;:::-;11229:6;;11222:53;;-1:-1:-1;;;;;11229:6:6;11250:10;11262:12;11222:53;:27;:53;:::i;:::-;11328:19;;;;11308:15;;:40;;;:19;:40;:::i;:::-;11290:15;:58;11403:17;;;;11382:16;;:39;;;:20;:39;:::i;11095:495::-;11459:6;;11452:53;;-1:-1:-1;;;;;11459:6:6;11480:10;11492:12;11452:53;:27;:53;:::i;:::-;11560:17;;;;11539:16;;:39;;;:20;:39;:::i;:::-;11520:16;:58;11095:495;11603:13;;11600:93;;11632:49;11660:7;:5;:7::i;:::-;11639:6;;-1:-1:-1;;;;;11639:6:6;;11669:11;11632:49;:27;:49;:::i;:::-;11706:12;;11703:93;;11734:50;11764:7;:5;:7::i;:::-;11741:8;;-1:-1:-1;;;;;11741:8:6;;11773:10;11734:50;:29;:50;:::i;:::-;11809:11;;11806:87;;11852:7;:5;:7::i;:::-;-1:-1:-1;;;;;11836:34:6;:45;11871:9;11836:45;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11836:45:6;11806:87;11928:12;;:19;;11945:1;11928:19;:16;:19;:::i;:::-;11913:12;:34;11996:10;11984:23;;;;:11;:23;;;;;;:30;;12012:1;11984:30;:27;:30;:::i;:::-;11970:10;11958:23;;;;:11;:23;;;;;:56;;;;12051:23;;-1:-1:-1;;;;;;;;;;;12051:23:6;:30;;12079:1;12051:30;:27;:30;:::i;:::-;12025:23;;;:11;:23;;-1:-1:-1;;;;;;;;;;;12025:56:6;:23;12124:10;;;12107:12;;:28;;;:16;:28;:::i;:::-;12092:12;:43;12194:10;;;;;12178;12169:20;;;;:8;:20;;;;;;;:36;;;:24;:36;:::i;:::-;12155:10;12146:20;;;;:8;:20;;;;;;;;:59;;;;12246:8;:20;;;:33;;12274:4;12246:33;:27;:33;:::i;:::-;-1:-1:-1;12290:20:6;;;:8;:20;;:33;:20;12318:4;12290:33;:27;:33;:::i;:::-;;12360:8;12348:10;-1:-1:-1;;;;;12339:60:6;;12370:14;12386:12;12339:60;;;;;;;;;;;;;;;;9734:2673;;;;;;;:::o;1997:44::-;;;;;;;;;;;;-1:-1:-1;;;;;1997:44:6;;:::o;14951:116::-;15036:12;;15051:6;15036:21;15028:3;:30;;14951:116;:::o;15596:635::-;15646:4;15671:23;:21;:23::i;:::-;15663:88;;;;-1:-1:-1;;;15663:88:6;;;;;;;;;15762:15;15805:13;15791:12;;:27;;:43;;;;;15833:1;15820:12;;:14;15791:43;15788:317;;;-1:-1:-1;15860:10:6;15788:317;;;15903:13;15890:12;;:26;:55;;;;;15931:14;15918:12;;:27;15890:55;15887:218;;;15971:37;15998:9;15971:22;15988:4;15971:12;;:16;;:22;;;;:::i;:37::-;15961:47;;15887:218;;;16042:14;16028:12;;:28;16025:80;;-1:-1:-1;16082:11:6;16025:80;16131:3;16116:12;:18;16168:20;;:33;;16193:7;16168:33;:24;:33;:::i;:::-;16145:20;:56;-1:-1:-1;16219:4:6;;-1:-1:-1;15596:635:6;:::o;16770:643::-;16828:4;-1:-1:-1;;;;;16853:24:6;;;;;;:50;;;16891:12;:10;:12::i;:::-;-1:-1:-1;;;;;16879:24:6;:10;-1:-1:-1;;;;;16879:24:6;;;16853:50;16845:120;;;;-1:-1:-1;;;16845:120:6;;;;;;;;;17017:1;16984:9;17017:1;16994:12;:10;:12::i;:::-;-1:-1:-1;;;;;16984:23:6;;;;;;;;;;;;;;-1:-1:-1;16984:23:6;;;:35;16976:81;;;;-1:-1:-1;;;16976:81:6;;;;;;;;;17076:13;:27;17090:12;:10;:12::i;:::-;-1:-1:-1;;;;;17076:27:6;;;;;;;;;;;;-1:-1:-1;17076:27:6;:34;:37;17068:82;;;;-1:-1:-1;;;17068:82:6;;;;;;;;;17281:10;17255:9;:23;17265:12;:10;:12::i;:::-;-1:-1:-1;;;;;17255:23:6;;;;;;;;;;;;;;;;;-1:-1:-1;17255:23:6;;;:36;;-1:-1:-1;;;;;;17255:36:6;;;;;;;;;;;17324:25;;;;:13;:25;;;;;;17369:12;:10;:12::i;:::-;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;17360:22:6;;;;;;;;;;-1:-1:-1;;;;;;17360:22:6;-1:-1:-1;;;;;17360:22:6;;;;;;;;;;39:1:-1;16770:643:6;-1:-1:-1;;;16770:643:6:o;12419:1253::-;-1:-1:-1;;;;;12554:16:6;;12571:1;12554:16;;;:11;:16;;;;;;12546:56;;;;-1:-1:-1;;;12546:56:6;;;;;;;;;12622:37;;;;:18;:37;;;;;;;;12621:38;12613:91;;;;-1:-1:-1;;;12613:91:6;;;;;;;;;-1:-1:-1;;;;;12723:17:6;;12715:63;;;;-1:-1:-1;;;12715:63:6;;;;;;;;;12801:7;12797:1;:11;12789:51;;;;-1:-1:-1;;;12789:51:6;;;;;;;;;12873:12;;-1:-1:-1;;;;;12873:12:6;12851:81;;;;-1:-1:-1;;;12851:81:6;;;;;;;;;12943:15;12988:17;13007:3;13012:7;12971:49;;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;12971::6;;;12961:60;;49:4:-1;12961:60:6;;;;13074:12;;;13040:30;;;;;;;;;;12961:60;-1:-1:-1;;;;;;13074:12:6;;;;;;13040:30;;12961:60;;13059:2;;13063;;13067;;13040:30;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13040:30:6;;;;;;;;-1:-1:-1;;;;;13040:46:6;;13032:91;;;;-1:-1:-1;;;13032:91:6;;;;;;;;;13142:20;;13176:1;;13142:33;;13167:7;13142:33;:24;:33;:::i;:::-;:35;13134:83;;;;-1:-1:-1;;;13134:83:6;;;;;;;;;13285:20;;:33;;13310:7;13285:33;:24;:33;:::i;:::-;13262:20;:56;13329:58;13357:3;13362:24;13382:3;13362:15;:7;13374:2;13362:15;:11;:15;:::i;:24::-;13336:6;;-1:-1:-1;;;;;13336:6:6;;13329:58;;:27;:58;:::i;:::-;13398:61;13426:7;:5;:7::i;:::-;13435:23;13454:3;13435:14;:7;13447:1;13435:14;:11;:14;:::i;13398:61::-;13507:37;;;;:18;:37;;;;;;;;:44;;-1:-1:-1;;13507:44:6;13547:4;13507:44;;;-1:-1:-1;;;;;13585:22:6;;;;:17;:22;;;;;;:35;;13612:7;13585:35;:26;:35;:::i;:::-;-1:-1:-1;;;;;13562:22:6;;;;;;:17;:22;;;;;;;:58;;;;13636:28;;;;;;13656:7;;13636:28;;;;;;;;;;12419:1253;;;;;;;:::o;1247:27::-;;;-1:-1:-1;;;;;1247:27:6;;:::o;2776:88::-;2844:12;;;;2776:88;:::o;15207:120::-;-1:-1:-1;;;;;15300:19:6;;;;;;:13;:19;;;;;;;;;15293:26;;;;;;;;;;;;;;;;;15264:16;;15293:26;;;15300:19;15293:26;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15293:26:6;;;;;;;;;;;;;;;;;;;;;;;15207:120;;;:::o;3357:127::-;3421:4;1098:9:3;:7;:9::i;:::-;1090:54;;;;-1:-1:-1;;;1090:54:3;;;;;;;;;-1:-1:-1;3438:6:6;:16;;-1:-1:-1;;;;;3438:16:6;;-1:-1:-1;;;;;;3438:16:6;;;;;;;3357:127;;;:::o;16391:361::-;16461:4;-1:-1:-1;;;;;16481:24:6;;;;:42;;;16521:2;-1:-1:-1;;;;;16509:14:6;:10;-1:-1:-1;;;;;16509:14:6;;16481:42;16478:86;;;-1:-1:-1;16546:5:6;16539:12;;16478:86;-1:-1:-1;;;;;16577:13:6;;;16600:1;16577:13;;;:9;:13;;;;;;;:25;16574:69;;-1:-1:-1;16625:5:6;16618:12;;16574:69;-1:-1:-1;;;;;16656:17:6;;16681:1;16656:17;;;:13;:17;;;;;:24;:26;16653:70;;-1:-1:-1;16705:5:6;16698:12;;16653:70;-1:-1:-1;16740:4:6;16391:361;;;;:::o;1901:47::-;;;;;;;;;;;;;;;:::o;3214:135::-;3282:4;1098:9:3;:7;:9::i;:::-;1090:54;;;;-1:-1:-1;;;1090:54:3;;;;;;;;;-1:-1:-1;3299:8:6;:20;;-1:-1:-1;;;;;3299:20:6;;-1:-1:-1;;;;;;3299:20:6;;;;;;;3214:135;;;:::o;1679:137:3:-;1098:9;:7;:9::i;:::-;1090:54;;;;-1:-1:-1;;;1090:54:3;;;;;;;;;1777:1;1761:6;;1740:40;;-1:-1:-1;;;;;1761:6:3;;;;1740:40;;1777:1;;1740:40;1807:1;1790:19;;-1:-1:-1;;;;;;1790:19:3;;;1679:137::o;5719:3928:6:-;5805:10;5801:1;:14;:33;;;;;5833:1;5819:10;:15;;5801:33;5793:86;;;;-1:-1:-1;;;5793:86:6;;;;;;;;;5902:7;5898:1;:11;5890:42;;;;-1:-1:-1;;;5890:42:6;;;;;;;;;5977:6;;5943:18;;5964:20;;-1:-1:-1;;;;;5977:6:6;5964:12;:20::i;:::-;5943:41;;5995:16;6022:19;6085:16;6115:10;6127:1;6115:13;6112:1840;;;6148:12;;;;6144:308;;6196:10;6188:19;;;;:7;:19;;;;;;6209:1;6188:22;6180:64;;;;-1:-1:-1;;;6180:64:6;;;;;;;;;6270:6;;6263:67;;-1:-1:-1;;;;;6270:6:6;6295:10;6315:4;6322:7;6263:67;:31;:67;:::i;:::-;6144:308;;;6376:6;;6369:67;;-1:-1:-1;;;;;6376:6:6;6401:10;6421:4;6428:7;6369:67;:31;:67;:::i;:::-;6519:16;;6478:7;;-1:-1:-1;6519:29:6;;6478:7;6519:29;:20;:29;:::i;:::-;6500:16;:48;6112:1840;;;6630:23;1032:42;6630:12;:23::i;:::-;6619:34;-1:-1:-1;6676:9:6;6672:13;6668:1273;;6774:10;6763:9;:21;;6755:61;;;;-1:-1:-1;;;6755:61:6;;;;;;;;;6845:128;6966:6;6845:116;6950:10;6845:100;6904:40;6918:9;6941:1;6928:10;:14;6918:25;;;;;;;;;6909:3;;6904:40;:13;:40;:::i;:::-;6845:54;6873:9;6896:1;6883:10;:14;6873:25;;;;;;;;;6845:23;:8;6858:9;6845:23;:12;:23;:::i;:::-;:27;:54;:27;:54;:::i;:128::-;6995:6;;6831:142;;-1:-1:-1;6988:71:6;;-1:-1:-1;;;;;6995:6:6;7020:10;7040:4;6831:142;6988:71;:31;:71;:::i;:::-;-1:-1:-1;7158:14:6;;7125:1;;7158:29;;7177:9;7158:29;:18;:29;:::i;:::-;7141:14;:46;7221:16;;:33;;7242:11;7221:33;:20;:33;:::i;6668:1273::-;7362:7;7357:1;:12;;7349:44;;;;-1:-1:-1;;;7349:44:6;;;;;;;;;7426:111;7526:10;7426:95;7480:40;7494:9;7517:1;7504:10;:14;7494:25;;;;;;7480:40;7426:49;7449:9;7472:1;7459:10;:14;7449:25;;;;;;;;;7426:18;:7;7438:5;7426:18;:11;:18;:::i;:111::-;7563:8;;7412:125;;-1:-1:-1;7556:69:6;;-1:-1:-1;;;;;7563:8:6;7590:10;7610:4;7617:7;7556:69;:33;:69;:::i;:::-;7651:6;;7644:71;;-1:-1:-1;;;;;7651:6:6;7676:10;7696:4;7703:11;7644:71;:31;:71;:::i;:::-;-1:-1:-1;7826:15:6;;7788:1;;7826:28;;7846:7;7826:28;:19;:28;:::i;:::-;7808:15;:46;7892:16;;:33;;7913:11;7892:33;:20;:33;:::i;:::-;7873:16;:52;6668:1273;7962:25;;:::i;:::-;8026:16;8045:38;8077:5;8045:27;:10;8060:11;8045:27;:14;:27;:::i;:38::-;8026:57;;8094:18;8126:8;8136:1;8126:11;8123:307;;;-1:-1:-1;8191:19:6;;;:29;;;8169:7;8123:307;;;8240:8;8250:1;8240:11;8237:193;;;8283:35;8311:6;8283:23;:8;8296:9;8283:23;:12;:23;:::i;:35::-;8355:9;8333:19;;;:31;8267:51;-1:-1:-1;8237:193:6;;;8417:1;8395:19;;;:23;8237:193;8440:10;8453:79;8528:3;8453:70;8490:16;8520:1;8507:10;:14;8490:32;;;;;;;;;8454:30;:11;8470:13;8454:30;:15;:30;:::i;8453:79::-;8560:12;;8440:92;;-1:-1:-1;8560:19:6;;8577:1;8560:19;:16;:19;:::i;:::-;8545:12;:34;8628:10;8616:23;;;;:11;:23;;;;;;:30;;8644:1;8616:30;:27;:30;:::i;:::-;8602:10;8590:23;;;;:11;:23;;;;;:56;;;;8683:23;;-1:-1:-1;;;;;;;;;;;8683:23:6;:30;;8711:1;8683:30;:27;:30;:::i;:::-;8657:23;;;:11;:23;;-1:-1:-1;;;;;;;;;;;8657:56:6;8739:12;;:23;;8756:5;8739:23;:16;:23;:::i;:::-;8724:12;:38;8805:10;8796:20;;;;:8;:20;;;;;;:31;;8821:5;8796:31;:24;:31;:::i;:::-;8782:10;8773:20;;;;:8;:20;;;;;;;;:54;;;;8918:9;8916:11;;;;;;;;8906:21;;8956:15;8938;;;:33;8982:17;;;:31;;;9070:16;;;:29;;;9110:10;;;:18;;;-1:-1:-1;9139:14:6;;:27;;;9177:13;;;:22;;;9482:20;;;:8;:20;;;;:30;;8906:4;9482:30;:24;:30;:::i;:::-;-1:-1:-1;9523:20:6;;;:8;:20;;:30;:20;9548:4;9523:30;:24;:30;:::i;:::-;-1:-1:-1;9601:7:6;;9610:19;;;;9571:68;;9589:10;;9577;;9571:68;;;;9631:7;;9571:68;;;;;;;;;;5719:3928;;;;;;;;;;:::o;2442:96::-;2514:16;;2442:96;:::o;894:77:3:-;932:7;958:6;-1:-1:-1;;;;;958:6:3;894:77;:::o;1245:92::-;1285:4;1324:6;;-1:-1:-1;;;;;1324:6:3;1308:12;:10;:12::i;:::-;-1:-1:-1;;;;;1308:22:3;;1301:29;;1245:92;:::o;3496:135:6:-;3562:4;1098:9:3;:7;:9::i;:::-;1090:54;;;;-1:-1:-1;;;1090:54:3;;;;;;;;;-1:-1:-1;3579:12:6;:22;;-1:-1:-1;;3579:22:6;;;;;;;;;;-1:-1:-1;;3496:135:6:o;1082:76::-;;;-1:-1:-1;;;;;1082:76:6;;:::o;4023:88::-;4091:12;;4023:88;:::o;1165:75::-;;;-1:-1:-1;;;;;1165:75:6;;:::o;3866:149::-;3945:4;1098:9:3;:7;:9::i;:::-;1090:54;;;;-1:-1:-1;;;1090:54:3;;;;;;;;;-1:-1:-1;;;;;;3962:17:6;;;;;;;:9;:17;;;;;:23;;-1:-1:-1;;;;;;3962:23:6;;;;;;;;-1:-1:-1;;3866:149:6:o;3643:138::-;3716:4;1098:9:3;:7;:9::i;:::-;1090:54;;;;-1:-1:-1;;;1090:54:3;;;;;;;;;-1:-1:-1;;;;;;3733:13:6;;;;;;;;:7;:13;;;;;:18;3769:4;;3643:138::o;2340:94::-;2411:15;;2340:94;:::o;15339:112::-;-1:-1:-1;;;;;15420:13:6;15393:7;15420:13;;;:4;:13;;;;;;;15339:112::o;4626:259::-;4700:20;;:::i;:::-;-1:-1:-1;;;;;4741:18:6;;;;;;:8;:18;;;;;4771:6;;4741:27;;:25;:27::i;:::-;:36;4733:97;;;;-1:-1:-1;;;4733:97:6;;;;;;;;;-1:-1:-1;;;;;4848:18:6;;;;;;:8;:18;;;;;:29;;4870:6;4848:29;:21;:29;:::i;:::-;4841:36;4626:259;-1:-1:-1;;;4626:259:6:o;15083:106::-;-1:-1:-1;;;;;15166:15:6;;;15139:7;15166:15;;;:9;:15;;;;;;;;15083:106::o;2550:92::-;2620:14;;2550:92;:::o;4365:180::-;1098:9:3;:7;:9::i;:::-;1090:54;;;;-1:-1:-1;;;1090:54:3;;;;;;;;;-1:-1:-1;;;;;4451:27:6;;4443:55;;;;-1:-1:-1;;;4443:55:6;;;;;;;;;4509:12;:28;;-1:-1:-1;;;;;;4509:28:6;-1:-1:-1;;;;;4509:28:6;;;;;;;;;;4365:180::o;2976:122::-;-1:-1:-1;;;;;3064:26:6;3040:4;3064:26;;;:17;:26;;;;;;;2976:122::o;4248:105::-;-1:-1:-1;;;;;4328:17:6;4304:4;4328:17;;;:8;:17;;;;;;;4248:105::o;1501:21::-;;;;:::o;13727:749::-;13809:8;;13786:4;;-1:-1:-1;;;;;13809:18:6;;;:8;;:18;13805:41;;;-1:-1:-1;13837:7:6;13830:14;;13805:41;-1:-1:-1;;;;;13898:17:6;;;13857:12;13898:17;;;:9;:17;;;;;;;;;13927:40;;22:32:-1;6:49;;13927:40:6;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;13898:70:6;;13857:12;;13871:23;;13898:17;;;:70;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;13856:112:6;;;;13983:7;13979:469;;;14008:16;14026;14059:10;14048:50;;;;;;;;;;;;;;-1:-1:-1;14161:6:6;;14007:91;;-1:-1:-1;14007:91:6;-1:-1:-1;14129:6:6;;-1:-1:-1;;;;;14153:14:6;;;14161:6;;14153:14;14150:145;;;-1:-1:-1;14198:5:6;14150:145;14388:48;-1:-1:-1;;;;;14421:14:6;;;;14388:28;;:14;;14407:8;14388:28;:18;:28;:::i;:48::-;14381:55;;;;;;;;;13979:469;-1:-1:-1;14467:1:6;;13727:749;-1:-1:-1;;;13727:749:6:o;1965:107:3:-;1098:9;:7;:9::i;:::-;1090:54;;;;-1:-1:-1;;;1090:54:3;;;;;;;;;2037:28;2056:8;2037:18;:28::i;:::-;1965:107;:::o;788:96:1:-;867:10;788:96;:::o;2159:459:5:-;2217:7;2458:6;2454:45;;-1:-1:-1;2487:1:5;2480:8;;2454:45;2521:5;;;2525:1;2521;:5;:1;2544:5;;;;;:10;2536:56;;;;-1:-1:-1;;;2536:56:5;;;;;;;;3073:130;3131:7;3157:39;3161:1;3164;3157:39;;;;;;;;;;;;;;;;;:3;:39::i;1039:177:4:-;1149:59;;1123:86;;1142:5;;-1:-1:-1;;;1172:23:4;1149:59;;1197:4;;1202:5;;1149:59;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;1149:59:4;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;1149:59:4;;;179:29:-1;;;;160:49;;;1123:18:4;:86::i;:::-;1039:177;;;:::o;3482:200:7:-;3549:11;;:::i;:::-;3580:18;;:26;-1:-1:-1;3572:68:7;;;;-1:-1:-1;;;3572:68:7;;;;;;;;;3657:3;:11;;3669:5;3657:18;;;;;;;;;;;;;;;;;3650:25;;;;;;;;3657:18;;;;;;;3650:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3650:25:7;;;;;;-1:-1:-1;3482:200:7;;;;:::o;3688:337::-;3759:11;;:::i;:::-;3790:21;;;;:12;;;:21;;;;;;3782:75;;;;-1:-1:-1;;;3782:75:7;;;;;;;;;3867:10;3880:21;;;3904:1;3880:12;;:21;;;;;;3923:18;;-1:-1:-1;;3880:25:7;;;;3923:26;-1:-1:-1;3915:68:7;;;;-1:-1:-1;;;3915:68:7;;;;;;;;;4000:3;:11;;4012:5;4000:18;;;;;;;;;;;;;;;;;3993:25;;;;;;;;4000:18;;;;;;;3993:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3993:25:7;;;;;;-1:-1:-1;;3688:337:7;;;;:::o;834:176:5:-;892:7;923:5;;;946:6;;;;938:46;;;;-1:-1:-1;;;938:46:5;;;;;;;;647:174:4;755:58;;729:85;;748:5;;-1:-1:-1;;;778:23:4;755:58;;803:2;;807:5;;755:58;;;;1274:134:5;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;1214:1529:7:-;1434:8;;1284:4;1421:22;;;:12;;;:22;;;;;;1458:15;;1454:1283;;1887:18;;-1:-1:-1;;1839:14:7;;;;1887:22;2149:21;;:::i;:::-;2173:3;:11;;2185:9;2173:22;;;;;;;;;;;;;;;;;2149:46;;;;;;;;2173:22;;;;;;;2149:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2149:46:7;;;;;2287:26;;2149:46;;-1:-1:-1;2149:46:7;;2287:3;;2299:13;;2287:26;;;;;;;;;;;;;;:38;;:26;;;;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2287:38:7;-1:-1:-1;;;;;2287:38:7;;;;;;;;;;2404:12;;2391:26;;:12;;;:26;;;;;2420:17;;;2391:46;;2543:17;;2391:12;;2543:17;;;;;;;;;;;;;;-1:-1:-1;;2543:17:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2543:17:7;;;;;;;2648:8;;2635:22;;:12;;;:22;;;;;;2628:29;;;;2543:17;-1:-1:-1;2672:11:7;;-1:-1:-1;;;;2672:11:7;1454:1283;2721:5;2714:12;;;;;827:202:4;953:68;;927:95;;946:5;;-1:-1:-1;;;976:27:4;953:68;;1005:4;;1011:2;;1015:5;;953:68;;;;927:95;827:202;;;;:::o;633:413:7:-;700:4;721:23;730:3;735:5;:8;;;721;:23::i;:::-;716:324;;-1:-1:-1;27:10;;39:1;23:18;;;45:23;;-1:-1;760:23:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;760:23:7;-1:-1:-1;;;;;760:23:7;;;;;;;;;;943:18;;918:22;;;:12;;;:22;;;;;:43;;;;975:11;;716:324;-1:-1:-1;1024:5:7;1017:12;;3033:107;3115:18;;3033:107::o;2173:225:3:-;-1:-1:-1;;;;;2246:22:3;;2238:73;;;;-1:-1:-1;;;2238:73:3;;;;;;;;;2347:6;;;2326:38;;-1:-1:-1;;;;;2326:38:3;;;;2347:6;;;2326:38;;;2374:6;:17;;-1:-1:-1;;;;;;2374:17:3;-1:-1:-1;;;;;2374:17:3;;;;;;;;;;2173:225::o;3718:338:5:-;3804:7;3904:12;3897:5;3889:28;;;;-1:-1:-1;;;3889:28:5;;;;;;;;;;;3927:9;3943:1;3939;:5;;;;;;;3718:338;-1:-1:-1;;;;;3718:338:5:o;2838:1095:4:-;3433:27;3441:5;-1:-1:-1;;;;;3433:25:4;;:27::i;:::-;3425:71;;;;-1:-1:-1;;;3425:71:4;;;;;;;;;3567:12;3581:23;3616:5;-1:-1:-1;;;;;3608:19:4;3628:4;3608:25;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;3566:67:4;;;;3651:7;3643:52;;;;-1:-1:-1;;;3643:52:4;;;;;;;;;3710:17;;:21;3706:221;;3850:10;3839:30;;;;;;;;;;;;;;3831:85;;;;-1:-1:-1;;;3831:85:4;;;;;;;;1732:187:5;1818:7;1853:12;1845:6;;;;1837:29;;;;-1:-1:-1;;;1837:29:5;;;;;;;;;;-1:-1:-1;;;1888:5:5;;;1732:187::o;2824:128:7:-;2896:4;2919:21;;;:12;;;;;:21;;;;;;:26;;;2824:128::o;686:610:0:-;746:4;1207:20;;1052:66;1246:23;;;;;;:42;;-1:-1:-1;1273:15:0;;;1246:42;1238:51;686:610;-1:-1:-1;;;;686:610:0:o;295:22362:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;295:22362:6;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:124;206:20;;231:30;206:20;231:30;;273:128;348:13;;366:30;348:13;366:30;;408:130;475:20;;500:33;475:20;500:33;;545:134;623:13;;641:33;623:13;641:33;;823:132;900:13;;918:32;900:13;918:32;;962:126;1027:20;;1052:31;1027:20;1052:31;;1095:241;;1199:2;1187:9;1178:7;1174:23;1170:32;1167:2;;;1215:1;1212;1205:12;1167:2;1250:1;1267:53;1312:7;1292:9;1267:53;;1343:366;;;1464:2;1452:9;1443:7;1439:23;1435:32;1432:2;;;1480:1;1477;1470:12;1432:2;1515:1;1532:53;1577:7;1557:9;1532:53;;;1522:63;;1494:97;1622:2;1640:53;1685:7;1676:6;1665:9;1661:22;1640:53;;;1630:63;;1601:98;1426:283;;;;;;1716:366;;;1837:2;1825:9;1816:7;1812:23;1808:32;1805:2;;;1853:1;1850;1843:12;1805:2;1888:1;1905:53;1950:7;1930:9;1905:53;;;1895:63;;1867:97;1995:2;2013:53;2058:7;2049:6;2038:9;2034:22;2013:53;;2089:491;;;;2227:2;2215:9;2206:7;2202:23;2198:32;2195:2;;;2243:1;2240;2233:12;2195:2;2278:1;2295:53;2340:7;2320:9;2295:53;;;2285:63;;2257:97;2385:2;2403:53;2448:7;2439:6;2428:9;2424:22;2403:53;;;2393:63;;2364:98;2493:2;2511:53;2556:7;2547:6;2536:9;2532:22;2511:53;;;2501:63;;2472:98;2189:391;;;;;;2587:235;;2688:2;2676:9;2667:7;2663:23;2659:32;2656:2;;;2704:1;2701;2694:12;2656:2;2739:1;2756:50;2798:7;2778:9;2756:50;;2829:257;;2941:2;2929:9;2920:7;2916:23;2912:32;2909:2;;;2957:1;2954;2947:12;2909:2;2992:1;3009:61;3062:7;3042:9;3009:61;;3093:533;;;;3241:2;3229:9;3220:7;3216:23;3212:32;3209:2;;;3257:1;3254;3247:12;3209:2;3292:1;3309:64;3365:7;3345:9;3309:64;;;3299:74;;3271:108;3410:2;3428:64;3484:7;3475:6;3464:9;3460:22;3428:64;;;3418:74;;3389:109;3529:2;3547:63;3602:7;3593:6;3582:9;3578:22;3547:63;;3633:241;;3737:2;3725:9;3716:7;3712:23;3708:32;3705:2;;;3753:1;3750;3743:12;3705:2;3788:1;3805:53;3850:7;3830:9;3805:53;;3881:865;;;;;;;4068:3;4056:9;4047:7;4043:23;4039:33;4036:2;;;4085:1;4082;4075:12;4036:2;4120:1;4137:53;4182:7;4162:9;4137:53;;;4127:63;;4099:97;4227:2;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;;;4235:63;;4206:98;4335:2;4353:53;4398:7;4389:6;4378:9;4374:22;4353:53;;;4343:63;;4314:98;4443:2;4461:51;4504:7;4495:6;4484:9;4480:22;4461:51;;;4451:61;;4422:96;4549:3;4568:53;4613:7;4604:6;4593:9;4589:22;4568:53;;;4558:63;;4528:99;4658:3;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;;;4667:63;;4637:99;4030:716;;;;;;;;;4753:366;;;4874:2;4862:9;4853:7;4849:23;4845:32;4842:2;;;4890:1;4887;4880:12;4842:2;4925:1;4942:53;4987:7;4967:9;4942:53;;5127:173;;5214:46;5256:3;5248:6;5214:46;;;-1:-1;;5289:4;5280:14;;5207:93;5309:251;;5432:86;5514:3;5506:6;5432:86;;;-1:-1;;5547:6;5538:16;;5425:135;5568:103;5641:24;5659:5;5641:24;;;5636:3;5629:37;5623:48;;;5798:152;5899:45;5919:24;5937:5;5919:24;;;5899:45;;5988:690;;6133:54;6181:5;6133:54;;;6200:86;6279:6;6274:3;6200:86;;;6193:93;;6307:56;6357:5;6307:56;;;6383:7;6411:1;6396:260;6421:6;6418:1;6415:13;6396:260;;;6488:6;6482:13;6509:63;6568:3;6553:13;6509:63;;;6502:70;;6589:60;6642:6;6589:60;;;6579:70;-1:-1;;6443:1;6436:9;6396:260;;;-1:-1;6669:3;;6112:566;-1:-1;;;;;6112:566;6743:834;;6924:72;6990:5;6924:72;;;7009:104;7106:6;7101:3;7009:104;;;7002:111;;7134:74;7202:5;7134:74;;;7228:7;7256:1;7241:314;7266:6;7263:1;7260:13;7241:314;;;7333:6;7327:13;7354:99;7449:3;7434:13;7354:99;;;7347:106;;7470:78;7541:6;7470:78;;;7460:88;-1:-1;;7288:1;7281:9;7241:314;;7585:104;7662:21;7677:5;7662:21;;7696:113;7779:24;7797:5;7779:24;;7816:356;;7944:38;7976:5;7944:38;;;7994:88;8075:6;8070:3;7994:88;;;7987:95;;8087:52;8132:6;8127:3;8120:4;8113:5;8109:16;8087:52;;;8151:16;;;;;7924:248;-1:-1;;7924:248;8179:347;;8291:39;8324:5;8291:39;;;8342:71;8406:6;8401:3;8342:71;;;8335:78;;8418:52;8463:6;8458:3;8451:4;8444:5;8440:16;8418:52;;;8491:29;8513:6;8491:29;;;8482:39;;;;8271:255;-1:-1;;;8271:255;8534:370;;8694:67;8758:2;8753:3;8694:67;;;8794:34;8774:55;;-1:-1;;;8858:2;8849:12;;8842:25;8895:2;8886:12;;8680:224;-1:-1;;8680:224;8913:319;;9073:67;9137:2;9132:3;9073:67;;;-1:-1;;;9153:42;;9223:2;9214:12;;9059:173;-1:-1;;9059:173;9241:377;;9401:67;9465:2;9460:3;9401:67;;;9501:34;9481:55;;-1:-1;;;9565:2;9556:12;;9549:32;9609:2;9600:12;;9387:231;-1:-1;;9387:231;9627:394;;9787:67;9851:2;9846:3;9787:67;;;9887:34;9867:55;;9956:27;9951:2;9942:12;;9935:49;10012:2;10003:12;;9773:248;-1:-1;;9773:248;10030:318;;10190:67;10254:2;10249:3;10190:67;;;-1:-1;;;10270:41;;10339:2;10330:12;;10176:172;-1:-1;;10176:172;10357:375;;10517:67;10581:2;10576:3;10517:67;;;10617:34;10597:55;;-1:-1;;;10681:2;10672:12;;10665:30;10723:2;10714:12;;10503:229;-1:-1;;10503:229;10741:385;;10901:67;10965:2;10960:3;10901:67;;;11001:34;10981:55;;-1:-1;;;11065:2;11056:12;;11049:40;11117:2;11108:12;;10887:239;-1:-1;;10887:239;11135:326;;11295:67;11359:2;11354:3;11295:67;;;11395:28;11375:49;;11452:2;11443:12;;11281:180;-1:-1;;11281:180;11470:327;;11630:67;11694:2;11689:3;11630:67;;;11730:29;11710:50;;11788:2;11779:12;;11616:181;-1:-1;;11616:181;11806:329;;11966:67;12030:2;12025:3;11966:67;;;12066:31;12046:52;;12126:2;12117:12;;11952:183;-1:-1;;11952:183;12144:328;;12304:67;12368:2;12363:3;12304:67;;;12404:30;12384:51;;12463:2;12454:12;;12290:182;-1:-1;;12290:182;12481:332;;12641:67;12705:2;12700:3;12641:67;;;12741:34;12721:55;;12804:2;12795:12;;12627:186;-1:-1;;12627:186;12822:377;;12982:67;13046:2;13041:3;12982:67;;;13082:34;13062:55;;-1:-1;;;13146:2;13137:12;;13130:32;13190:2;13181:12;;12968:231;-1:-1;;12968:231;13208:332;;13368:67;13432:2;13427:3;13368:67;;;13468:34;13448:55;;13531:2;13522:12;;13354:186;-1:-1;;13354:186;13549:321;;13709:67;13773:2;13768:3;13709:67;;;-1:-1;;;13789:44;;13861:2;13852:12;;13695:175;-1:-1;;13695:175;13879:327;;14039:67;14103:2;14098:3;14039:67;;;14139:29;14119:50;;14197:2;14188:12;;14025:181;-1:-1;;14025:181;14215:331;;14375:67;14439:2;14434:3;14375:67;;;14475:33;14455:54;;14537:2;14528:12;;14361:185;-1:-1;;14361:185;14555:383;;14715:67;14779:2;14774:3;14715:67;;;14815:34;14795:55;;-1:-1;;;14879:2;14870:12;;14863:38;14929:2;14920:12;;14701:237;-1:-1;;14701:237;14947:373;;15107:67;15171:2;15166:3;15107:67;;;15207:34;15187:55;;-1:-1;;;15271:2;15262:12;;15255:28;15311:2;15302:12;;15093:227;-1:-1;;15093:227;15329:320;;15489:67;15553:2;15548:3;15489:67;;;-1:-1;;;15569:43;;15640:2;15631:12;;15475:174;-1:-1;;15475:174;15994:370;;16154:67;16218:2;16213:3;16154:67;;;16254:34;16234:55;;-1:-1;;;16318:2;16309:12;;16302:25;16355:2;16346:12;;16140:224;-1:-1;;16140:224;16373:332;;16533:67;16597:2;16592:3;16533:67;;;16633:34;16613:55;;16696:2;16687:12;;16519:186;-1:-1;;16519:186;16714:390;;16874:67;16938:2;16933:3;16874:67;;;16974:34;16954:55;;-1:-1;;;17038:2;17029:12;;17022:45;17095:2;17086:12;;16860:244;-1:-1;;16860:244;17113:370;;17273:67;17337:2;17332:3;17273:67;;;17373:34;17353:55;;-1:-1;;;17437:2;17428:12;;17421:25;17474:2;17465:12;;17259:224;-1:-1;;17259:224;17492:373;;17652:67;17716:2;17711:3;17652:67;;;17752:34;17732:55;;-1:-1;;;17816:2;17807:12;;17800:28;17856:2;17847:12;;17638:227;-1:-1;;17638:227;17874:332;;18034:67;18098:2;18093:3;18034:67;;;18134:34;18114:55;;18197:2;18188:12;;18020:186;-1:-1;;18020:186;18215:379;;18375:67;18439:2;18434:3;18375:67;;;18475:34;18455:55;;-1:-1;;;18539:2;18530:12;;18523:34;18585:2;18576:12;;18361:233;-1:-1;;18361:233;18603:315;;18763:67;18827:2;18822:3;18763:67;;;-1:-1;;;18843:38;;18909:2;18900:12;;18749:169;-1:-1;;18749:169;18927:379;;19087:67;19151:2;19146:3;19087:67;;;19187:34;19167:55;;-1:-1;;;19251:2;19242:12;;19235:34;19297:2;19288:12;;19073:233;-1:-1;;19073:233;19315:331;;19475:67;19539:2;19534:3;19475:67;;;19575:33;19555:54;;19637:2;19628:12;;19461:185;-1:-1;;19461:185;19655:329;;19815:67;19879:2;19874:3;19815:67;;;19915:31;19895:52;;19975:2;19966:12;;19801:183;-1:-1;;19801:183;20043:1435;20246:23;;20180:6;20171:16;;;20275:63;20175:3;20246:23;20275:63;;;20202:142;20423:4;20416:5;20412:16;20406:23;20435:63;20492:4;20487:3;20483:14;20469:12;20435:63;;;20354:150;20578:4;20571:5;20567:16;20561:23;20590:63;20647:4;20642:3;20638:14;20624:12;20590:63;;;20514:145;20740:4;20733:5;20729:16;20723:23;20752:63;20809:4;20804:3;20800:14;20786:12;20752:63;;;20669:152;20904:4;20897:5;20893:16;20887:23;20916:63;20973:4;20968:3;20964:14;20950:12;20916:63;;;20831:154;21063:4;21056:5;21052:16;21046:23;21075:63;21132:4;21127:3;21123:14;21109:12;21075:63;;;20995:149;21221:4;21214:5;21210:16;21204:23;21233:63;21290:4;21285:3;21281:14;21267:12;21233:63;;;21154:148;21382:4;21375:5;21371:16;21365:23;21394:63;21451:4;21446:3;21442:14;21428:12;21394:63;;23194:152;23295:45;23315:24;23333:5;23315:24;;;23295:45;;23353:107;23432:22;23448:5;23432:22;;23467:262;;23611:93;23700:3;23691:6;23611:93;;23736:522;;23911:75;23982:3;23973:6;23911:75;;;24008:2;24003:3;23999:12;23992:19;;24022:75;24093:3;24084:6;24022:75;;;24119:2;24114:3;24110:12;24103:19;;24133:75;24204:3;24195:6;24133:75;;;-1:-1;24230:2;24221:12;;23899:359;-1:-1;;;23899:359;24265:213;24383:2;24368:18;;24397:71;24372:9;24441:6;24397:71;;24485:435;24659:2;24644:18;;24673:71;24648:9;24717:6;24673:71;;;24755:72;24823:2;24812:9;24808:18;24799:6;24755:72;;;24838;24906:2;24895:9;24891:18;24882:6;24838:72;;24927:324;25073:2;25058:18;;25087:71;25062:9;25131:6;25087:71;;;25169:72;25237:2;25226:9;25222:18;25213:6;25169:72;;25258:361;25426:2;25440:47;;;25411:18;;25501:108;25411:18;25595:6;25501:108;;25626:433;25830:2;25844:47;;;25815:18;;25905:144;25815:18;26035:6;25905:144;;26066:201;26178:2;26163:18;;26192:65;26167:9;26230:6;26192:65;;26274:539;26472:3;26457:19;;26487:71;26461:9;26531:6;26487:71;;;26569:68;26633:2;26622:9;26618:18;26609:6;26569:68;;;26648:72;26716:2;26705:9;26701:18;26692:6;26648:72;;;26731;26799:2;26788:9;26784:18;26775:6;26731:72;;;26443:370;;;;;;;;26820:301;26958:2;26972:47;;;26943:18;;27033:78;26943:18;27097:6;27033:78;;27128:407;27319:2;27333:47;;;27304:18;;27394:131;27304:18;27394:131;;27542:407;27733:2;27747:47;;;27718:18;;27808:131;27718:18;27808:131;;27956:407;28147:2;28161:47;;;28132:18;;28222:131;28132:18;28222:131;;28370:407;28561:2;28575:47;;;28546:18;;28636:131;28546:18;28636:131;;28784:407;28975:2;28989:47;;;28960:18;;29050:131;28960:18;29050:131;;29198:407;29389:2;29403:47;;;29374:18;;29464:131;29374:18;29464:131;;29612:407;29803:2;29817:47;;;29788:18;;29878:131;29788:18;29878:131;;30026:407;30217:2;30231:47;;;30202:18;;30292:131;30202:18;30292:131;;30440:407;30631:2;30645:47;;;30616:18;;30706:131;30616:18;30706:131;;30854:407;31045:2;31059:47;;;31030:18;;31120:131;31030:18;31120:131;;31268:407;31459:2;31473:47;;;31444:18;;31534:131;31444:18;31534:131;;31682:407;31873:2;31887:47;;;31858:18;;31948:131;31858:18;31948:131;;32096:407;32287:2;32301:47;;;32272:18;;32362:131;32272:18;32362:131;;32510:407;32701:2;32715:47;;;32686:18;;32776:131;32686:18;32776:131;;32924:407;33115:2;33129:47;;;33100:18;;33190:131;33100:18;33190:131;;33338:407;33529:2;33543:47;;;33514:18;;33604:131;33514:18;33604:131;;33752:407;33943:2;33957:47;;;33928:18;;34018:131;33928:18;34018:131;;34166:407;34357:2;34371:47;;;34342:18;;34432:131;34342:18;34432:131;;34580:407;34771:2;34785:47;;;34756:18;;34846:131;34756:18;34846:131;;34994:407;35185:2;35199:47;;;35170:18;;35260:131;35170:18;35260:131;;35822:407;36013:2;36027:47;;;35998:18;;36088:131;35998:18;36088:131;;36236:407;36427:2;36441:47;;;36412:18;;36502:131;36412:18;36502:131;;36650:407;36841:2;36855:47;;;36826:18;;36916:131;36826:18;36916:131;;37064:407;37255:2;37269:47;;;37240:18;;37330:131;37240:18;37330:131;;37478:407;37669:2;37683:47;;;37654:18;;37744:131;37654:18;37744:131;;37892:407;38083:2;38097:47;;;38068:18;;38158:131;38068:18;38158:131;;38306:407;38497:2;38511:47;;;38482:18;;38572:131;38482:18;38572:131;;38720:407;38911:2;38925:47;;;38896:18;;38986:131;38896:18;38986:131;;39134:407;39325:2;39339:47;;;39310:18;;39400:131;39310:18;39400:131;;39548:407;39739:2;39753:47;;;39724:18;;39814:131;39724:18;39814:131;;39962:407;40153:2;40167:47;;;40138:18;;40228:131;40138:18;40228:131;;40376:302;40538:3;40523:19;;40553:115;40527:9;40641:6;40553:115;;40685:213;40803:2;40788:18;;40817:71;40792:9;40861:6;40817:71;;40905:324;41051:2;41036:18;;41065:71;41040:9;41109:6;41065:71;;41236:151;41360:4;41351:14;;41308:79;41570:137;41673:12;;41644:63;42382:178;42500:19;;;42549:4;42540:14;;42493:67;43098:91;;43160:24;43178:5;43160:24;;43196:85;43262:13;43255:21;;43238:43;43288:72;43350:5;43333:27;43367:109;-1:-1;;;;;43429:42;;43412:64;43483:121;-1:-1;;;;;43545:54;;43528:76;43690:88;43762:10;43751:22;;43734:44;43785:81;43856:4;43845:16;;43828:38;43874:268;43939:1;43946:101;43960:6;43957:1;43954:13;43946:101;;;44027:11;;;44021:18;44008:11;;;44001:39;43982:2;43975:10;43946:101;;;44062:6;44059:1;44056:13;44053:2;;;-1:-1;;44127:1;44109:16;;44102:27;43923:219;44150:95;;44214:26;44234:5;44252:89;44316:20;44330:5;44316:20;;44429:97;44517:2;44497:14;-1:-1;;44493:28;;44477:49;44534:94;44608:2;44604:14;;44576:52;44636:117;44705:24;44723:5;44705:24;;;44698:5;44695:35;44685:2;;44744:1;44741;44734:12;44760:111;44826:21;44841:5;44826:21;;44878:117;44947:24;44965:5;44947:24;;45002:117;45071:24;45089:5;45071:24;;45250:115;45318:23;45335:5;45318:23;;45372:113;45439:22;45455:5;45439:22;
Swarm Source
bzzr://11c3f472bd3f6bcf5f70e66bf5eeb7787c4d980b16d6836e2e6fd37a3e53f465
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.