Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
DeFi
Overview
Max Total Supply
540,047,363.88123057620559237 SWAPP
Holders
3,491 ( 0.057%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
5 SWAPPValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SwappToken
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-04-20 */ // SPDX-License-Identifier: MIT pragma solidity =0.7.6; contract Context { /** * @dev returns address executing the method */ function _msgSender() internal view virtual returns (address payable) { return msg.sender; } /** * @dev returns data passed into the method */ function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract ERC20 is Context { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; string private _name; string private _symbol; uint8 private _decimals; uint256 private _totalSupply = 0.404 ether; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); constructor (string memory tokenName, string memory tokenSymbol) { _name = tokenName; _symbol = tokenSymbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the decimals of the token. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev Returns the total supply of the token. */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev Returns the token balance of specific address. */ function balanceOf(address account) public view returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public returns (bool) { _transfer(_msgSender(), recipient, amount ); return true; } /** * @dev Returns approved balance to be spent by another address * by using transferFrom method */ function allowance(address owner, address spender) public view returns (uint256) { return _allowances[owner][spender]; } /** * @dev Sets the token allowance to another spender */ function approve(address spender, uint256 amount) public returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev Allows to transfer tokens on senders behalf * based on allowance approved for the executer */ function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) { _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount)); _transfer(sender, recipient, amount); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * Emits a {Transfer} event. * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0x0)); require(recipient != address(0x0)); _balances[sender] = _balances[sender].sub(amount); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0x0)); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0x0), account, amount); } /** * @dev Allows to burn tokens if token sender * wants to reduce totalSupply() of the token */ function burn(uint256 amount) external { _burn(msg.sender, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0x0)); _balances[account] = _balances[account].sub(amount); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0x0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0x0)); require(spender != address(0x0)); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } } contract Events { event StakeStart( bytes16 indexed stakeID, address indexed stakerAddress, address indexed referralAddress, uint256 stakedAmount, uint256 stakesShares, uint256 referralShares, uint256 startDay, uint256 lockDays, uint256 daiEquivalent ); event StakeEnd( bytes16 indexed stakeID, address indexed stakerAddress, address indexed referralAddress, uint256 stakedAmount, uint256 stakesShares, uint256 referralShares, uint256 rewardAmount, uint256 closeDay, uint256 penaltyAmount ); event InterestScraped( bytes16 indexed stakeID, address indexed stakerAddress, uint256 scrapeAmount, uint256 scrapeDay, uint256 stakersPenalty, uint256 referrerPenalty, uint256 currentSwappDay ); event ReferralCollected( address indexed staker, bytes16 indexed stakeID, address indexed referrer, bytes16 referrerID, uint256 rewardAmount ); event NewGlobals( uint256 totalShares, uint256 totalStaked, uint256 shareRate, uint256 referrerShares, uint256 indexed currentSwappDay ); event NewSharePrice( uint256 newSharePrice, uint256 oldSharePrice, uint64 currentSwappDay ); event LiquidityGuardStatus( bool isActive ); } abstract contract Global is ERC20, Events { using SafeMath for uint256; struct Globals { uint256 totalStaked; uint256 totalShares; uint256 sharePrice; uint256 currentSwappDay; uint256 referralShares; uint256 liquidityShares; } Globals public globals; constructor() { globals.sharePrice = 100E15; } function _increaseGlobals( uint256 _staked, uint256 _shares, uint256 _rshares ) internal { globals.totalStaked = globals.totalStaked.add(_staked); globals.totalShares = globals.totalShares.add(_shares); if (_rshares > 0) { globals.referralShares = globals.referralShares.add(_rshares); } _logGlobals(); } function _decreaseGlobals( uint256 _staked, uint256 _shares, uint256 _rshares ) internal { globals.totalStaked = globals.totalStaked > _staked ? globals.totalStaked - _staked : 0; globals.totalShares = globals.totalShares > _shares ? globals.totalShares - _shares : 0; if (_rshares > 0) { globals.referralShares = globals.referralShares > _rshares ? globals.referralShares - _rshares : 0; } _logGlobals(); } function _logGlobals() private { emit NewGlobals( globals.totalShares, globals.totalStaked, globals.sharePrice, globals.referralShares, globals.currentSwappDay ); } } interface IUniswapV2Factory { function createPair( address tokenA, address tokenB ) external returns ( address pair ); } interface IUniswapRouterV2 { function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); } interface IUniswapV2Pair { function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function token1() external view returns (address); } interface ILiquidityGuard { function getInflation(uint32 _amount) external view returns (uint256); } interface TokenInterface { function transferFrom(address _from, address _to, uint256 _value) external returns (bool success); function approve(address _spender, uint256 _value) external returns (bool success); } abstract contract Declaration is Global { uint256 constant _decimals = 18; uint256 constant TESLAS_PER_SWAPP = 10 ** _decimals; uint32 constant SECONDS_IN_DAY = 86400 seconds; uint16 constant MIN_LOCK_DAYS = 1; uint16 constant FORMULA_DAY = 65; uint16 constant MAX_LOCK_DAYS = 15330; uint16 constant MAX_BONUS_DAYS_A = 1825; uint16 constant MAX_BONUS_DAYS_B = 13505; uint16 constant MIN_REFERRAL_DAYS = 365; uint32 constant MIN_STAKE_AMOUNT = 1000000; // TESLA uint32 constant REFERRALS_RATE = 366816973; // 1.000% (direct value, can be used right away) uint32 public INFLATION_RATE = 103000; // 3.000% (indirect -> checks throgh LiquidityGuard) uint64 constant PRECISION_RATE = 1E18; uint96 constant THRESHOLD_LIMIT = 10000E18; // $10,000 DAI uint96 constant DAILY_BONUS_A = 13698630136986302; // 25%:1825 = 0.01369863013 per day; uint96 constant DAILY_BONUS_B = 370233246945575; // 5%:13505 = 0.00037023324 per day; uint256 public LAUNCH_TIME; address constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F; address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; IUniswapRouterV2 public constant UNISWAP_ROUTER = IUniswapRouterV2( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); IUniswapV2Factory public constant UNISWAP_FACTORY = IUniswapV2Factory( 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f ); ILiquidityGuard public LIQUIDITY_GUARD = ILiquidityGuard( 0xECd13A6c13A97483deA1e31101e63718FcBd6b73 ); IUniswapV2Pair public UNISWAP_PAIR; bool public isLiquidityGuardActive; uint256 public latestDaiEquivalent; address[] internal _path = [address(this), WETH, DAI]; constructor() { LAUNCH_TIME = 1620518400; // 2021.05.09 GMT } function createPair() external { UNISWAP_PAIR = IUniswapV2Pair( UNISWAP_FACTORY.createPair( WETH, address(this) ) ); } struct Stake { uint256 stakesShares; uint256 stakedAmount; uint256 rewardAmount; uint64 startDay; uint64 lockDays; uint64 finalDay; uint64 closeDay; uint256 scrapeDay; uint256 daiEquivalent; uint256 referrerShares; address referrer; bool isActive; } struct ReferrerLink { address staker; bytes16 stakeID; uint256 rewardAmount; uint256 processedDays; bool isActive; } struct CriticalMass { uint256 totalAmount; uint256 activationDay; } mapping(address => uint256) public stakeCount; mapping(address => uint256) public referralCount; mapping(address => CriticalMass) public criticalMass; mapping(address => mapping(bytes16 => uint256)) public scrapes; mapping(address => mapping(bytes16 => Stake)) public stakes; mapping(address => mapping(bytes16 => ReferrerLink)) public referrerLinks; mapping(uint256 => uint256) public scheduledToEnd; mapping(uint256 => uint256) public referralSharesToEnd; mapping(uint256 => uint256) public totalPenalties; mapping(address => uint256) public userStakedAmount; } abstract contract Helper is Declaration { using SafeMath for uint256; function currentSwappDay() public view returns (uint64) { return getNow() >= LAUNCH_TIME ? _currentSwappDay() : 0; } function _currentSwappDay() internal view returns (uint64) { return swappDayFromStamp(getNow()); } function nextSwappDay() public view returns (uint64) { return _currentSwappDay() + 1; } function previousSwappDay() public view returns (uint64) { return _currentSwappDay() - 1; } function swappDayFromStamp(uint256 _timestamp) public view returns (uint64) { return uint64((_timestamp - LAUNCH_TIME) / SECONDS_IN_DAY); } function getNow() public view returns (uint256) { return block.timestamp; } function notContract(address _addr) internal view returns (bool) { uint32 size; assembly { size := extcodesize(_addr) } return (size == 0); } function toBytes16(uint256 x) internal pure returns (bytes16 b) { return bytes16(bytes32(x)); } function generateID(address x, uint256 y, bytes1 z) public pure returns (bytes16 b) { b = toBytes16(uint256(keccak256(abi.encodePacked(x, y, z)))); } function generateStakeID(address _staker) internal view returns (bytes16 stakeID) { return generateID(_staker, stakeCount[_staker], 0x01); } function generateReferralID(address _referrer) internal view returns (bytes16 referralID) { return generateID(_referrer, referralCount[_referrer], 0x02); } function stakesPagination( address _staker, uint256 _offset, uint256 _length ) external view returns (bytes16[] memory _stakes) { uint256 start = _offset > 0 && stakeCount[_staker] > _offset ? stakeCount[_staker] - _offset : stakeCount[_staker]; uint256 finish = _length > 0 && start > _length ? start - _length : 0; uint256 i; _stakes = new bytes16[](start - finish); for (uint256 _stakeIndex = start; _stakeIndex > finish; _stakeIndex--) { bytes16 _stakeID = generateID(_staker, _stakeIndex - 1, 0x01); if (stakes[_staker][_stakeID].stakedAmount > 0) { _stakes[i] = _stakeID; i++; } } } function referralsPagination( address _referrer, uint256 _offset, uint256 _length ) external view returns (bytes16[] memory _referrals) { uint256 start = _offset > 0 && referralCount[_referrer] > _offset ? referralCount[_referrer] - _offset : referralCount[_referrer]; uint256 finish = _length > 0 && start > _length ? start - _length : 0; uint256 i; _referrals = new bytes16[](start - finish); for (uint256 _rIndex = start; _rIndex > finish; _rIndex--) { bytes16 _rID = generateID(_referrer, _rIndex - 1, 0x02); if (_nonZeroAddress(referrerLinks[_referrer][_rID].staker)) { _referrals[i] = _rID; i++; } } } function latestStakeID(address _staker) external view returns (bytes16) { return stakeCount[_staker] == 0 ? bytes16(0) : generateID(_staker, stakeCount[_staker].sub(1), 0x01); } function latestReferralID(address _referrer) external view returns (bytes16) { return referralCount[_referrer] == 0 ? bytes16(0) : generateID(_referrer, referralCount[_referrer].sub(1), 0x02); } function _increaseStakeCount(address _staker) internal { stakeCount[_staker] = stakeCount[_staker] + 1; } function _increaseReferralCount(address _referrer) internal { referralCount[_referrer] = referralCount[_referrer] + 1; } function _isMatureStake(Stake memory _stake) internal view returns (bool) { return _stake.closeDay > 0 ? _stake.finalDay <= _stake.closeDay : _stake.finalDay <= _currentSwappDay(); } function _notCriticalMassReferrer(address _referrer) internal view returns (bool) { return criticalMass[_referrer].activationDay == 0; } function _stakeNotStarted(Stake memory _stake) internal view returns (bool) { return _stake.closeDay > 0 ? _stake.startDay > _stake.closeDay : _stake.startDay > _currentSwappDay(); } function _stakeEnded(Stake memory _stake) internal view returns (bool) { return _stake.isActive == false || _isMatureStake(_stake); } function _daysLeft(Stake memory _stake) internal view returns (uint256) { return _stake.isActive == false ? _daysDiff(_stake.closeDay, _stake.finalDay) : _daysDiff(_currentSwappDay(), _stake.finalDay); } function _daysDiff(uint256 _startDate, uint256 _endDate) internal pure returns (uint256) { return _startDate > _endDate ? 0 : _endDate.sub(_startDate); } function _calculationDay(Stake memory _stake) internal view returns (uint256) { return _stake.finalDay > globals.currentSwappDay ? globals.currentSwappDay : _stake.finalDay; } function _startingDay(Stake memory _stake) internal pure returns (uint256) { return _stake.scrapeDay == 0 ? _stake.startDay : _stake.scrapeDay; } function _notFuture(uint256 _day) internal view returns (bool) { return _day <= _currentSwappDay(); } function _notPast(uint256 _day) internal view returns (bool) { return _day >= _currentSwappDay(); } function _nonZeroAddress(address _address) internal pure returns (bool) { return _address != address(0x0); } function _getLockDays(Stake memory _stake) internal pure returns (uint256) { return _stake.lockDays > 1 ? _stake.lockDays - 1 : 1; } function _preparePath( address _tokenAddress, address _swappAddress ) internal pure returns (address[] memory _path) { _path = new address[](3); _path[0] = _tokenAddress; _path[1] = WETH; _path[2] = _swappAddress; } function safeTransfer( address token, address to, uint256 value ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool)))); } function safeTransferFrom( address token, address from, address to, uint value ) internal { (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0x23b872dd, from, to, value) ); require(success && (data.length == 0 || abi.decode(data, (bool)))); } } abstract contract Snapshot is Helper { using SafeMath for uint; // regular shares struct SnapShot { uint256 totalShares; uint256 inflationAmount; uint256 scheduledToEnd; } // referral shares struct rSnapShot { uint256 totalShares; uint256 inflationAmount; uint256 scheduledToEnd; } mapping(uint256 => SnapShot) public snapshots; mapping(uint256 => rSnapShot) public rsnapshots; modifier snapshotTrigger() { _dailySnapshotPoint(_currentSwappDay()); _; } /** * @notice allows to activate/deactivate * liquidity guard manually based on the * liquidity in UNISWAP pair contract */ function liquidityGuardTrigger() public { ( uint112 reserveA, uint112 reserveB, ) = UNISWAP_PAIR.getReserves(); uint256 onUniswap = UNISWAP_PAIR.token1() == WETH ? reserveA : reserveB; uint256 ratio = totalSupply() == 0 ? 0 : onUniswap .mul(200) .div(totalSupply()); if (ratio < 40 && isLiquidityGuardActive == false) enableLiquidityGuard(); if (ratio > 60 && isLiquidityGuardActive == true) disableLiquidityGuard(); emit LiquidityGuardStatus(isLiquidityGuardActive); } function enableLiquidityGuard() private { isLiquidityGuardActive = true; } function disableLiquidityGuard() private { isLiquidityGuardActive = false; } /** * @notice allows volunteer to offload snapshots * to save on gas during next start/end stake */ function manualDailySnapshot() external { _dailySnapshotPoint(_currentSwappDay()); } /** * @notice allows volunteer to offload snapshots * to save on gas during next start/end stake * in case manualDailySnapshot reach block limit */ function manualDailySnapshotPoint(uint64 _updateDay) external { require(_updateDay > 0 && _updateDay < _currentSwappDay()); require(_updateDay > globals.currentSwappDay); _dailySnapshotPoint(_updateDay); } /** * @notice internal function that offloads * global values to daily snapshots * updates globals.currentSwappDay */ function _dailySnapshotPoint(uint64 _updateDay) private { liquidityGuardTrigger(); uint256 scheduledToEndToday; uint256 totalStakedToday = globals.totalStaked; for (uint256 _day = globals.currentSwappDay; _day < _updateDay; _day++) { // ------------------------------------ // prepare snapshot for regular shares // reusing scheduledToEndToday variable scheduledToEndToday = scheduledToEnd[_day] + snapshots[_day - 1].scheduledToEnd; SnapShot memory snapshot = snapshots[_day]; snapshot.scheduledToEnd = scheduledToEndToday; snapshot.totalShares = globals.totalShares > scheduledToEndToday ? globals.totalShares - scheduledToEndToday : 0; snapshot.inflationAmount = snapshot.totalShares .mul(PRECISION_RATE) .div( _inflationAmount( totalStakedToday, totalSupply(), totalPenalties[_day], LIQUIDITY_GUARD.getInflation( INFLATION_RATE ) ) ); // store regular snapshot snapshots[_day] = snapshot; // ------------------------------------ // prepare snapshot for referrer shares // reusing scheduledToEndToday variable scheduledToEndToday = referralSharesToEnd[_day] + rsnapshots[_day - 1].scheduledToEnd; rSnapShot memory rsnapshot = rsnapshots[_day]; rsnapshot.scheduledToEnd = scheduledToEndToday; rsnapshot.totalShares = globals.referralShares > scheduledToEndToday ? globals.referralShares - scheduledToEndToday : 0; rsnapshot.inflationAmount = rsnapshot.totalShares .mul(PRECISION_RATE) .div( _referralInflation( totalStakedToday, totalSupply() ) ); // store referral snapshot rsnapshots[_day] = rsnapshot; adjustLiquidityRates(); globals.currentSwappDay++; } } /** * @notice moves inflation up and down by 0.006% * from regular shares to liquidity shares * if the liquidityGuard is active (visa-versa) */ function adjustLiquidityRates() private { if (isLiquidityGuardActive == true) { INFLATION_RATE = INFLATION_RATE - 6; return; } if (isLiquidityGuardActive == false) { INFLATION_RATE = INFLATION_RATE + 6; return; } } function _inflationAmount( uint256 _totalStaked, uint256 _totalSupply, uint256 _totalPenalties, uint256 _INFLATION_RATE ) private pure returns (uint256) { return (_totalStaked + _totalSupply) * 10000 / _INFLATION_RATE + _totalPenalties; } function _referralInflation( uint256 _totalStaked, uint256 _totalSupply ) private pure returns (uint256) { return (_totalStaked + _totalSupply) * 10000 / REFERRALS_RATE; } } abstract contract ReferralToken is Snapshot { using SafeMath for uint256; function _addReferrerSharesToEnd(uint256 _finalDay, uint256 _shares) internal { referralSharesToEnd[_finalDay] = referralSharesToEnd[_finalDay].add(_shares); } function _removeReferrerSharesToEnd(uint256 _finalDay, uint256 _shares) internal { if (_notPast(_finalDay)) { referralSharesToEnd[_finalDay] = referralSharesToEnd[_finalDay] > _shares ? referralSharesToEnd[_finalDay] - _shares : 0; } else { uint256 _day = previousSwappDay(); rsnapshots[_day].scheduledToEnd = rsnapshots[_day].scheduledToEnd > _shares ? rsnapshots[_day].scheduledToEnd - _shares : 0; } } function _belowThresholdLevel(address _referrer) private view returns (bool) { return criticalMass[_referrer].totalAmount < THRESHOLD_LIMIT; } function _addCriticalMass(address _referrer, uint256 _daiEquivalent) internal { criticalMass[_referrer].totalAmount = criticalMass[_referrer].totalAmount.add(_daiEquivalent); criticalMass[_referrer].activationDay = _determineActivationDay(_referrer); } function _removeCriticalMass( address _referrer, uint256 _daiEquivalent, uint256 _startDay ) internal { if ( _notFuture(_startDay) == false && _nonZeroAddress(_referrer) ) { criticalMass[_referrer].totalAmount = criticalMass[_referrer].totalAmount > _daiEquivalent ? criticalMass[_referrer].totalAmount - _daiEquivalent : 0; criticalMass[_referrer].activationDay = _determineActivationDay(_referrer); } } function _determineActivationDay(address _referrer) private view returns (uint256) { return _belowThresholdLevel(_referrer) ? 0 : _activationDay(_referrer); } function _activationDay(address _referrer) private view returns (uint256) { return criticalMass[_referrer].activationDay > 0 ? criticalMass[_referrer].activationDay : _currentSwappDay(); } function _updateDaiEquivalent() internal returns (uint256) { try UNISWAP_ROUTER.getAmountsOut( TESLAS_PER_SWAPP, _path ) returns (uint256[] memory results) { latestDaiEquivalent = results[2]; return latestDaiEquivalent; } catch Error(string memory) { return latestDaiEquivalent; } catch (bytes memory) { return latestDaiEquivalent; } } function referrerInterest( bytes16 _referralID, uint256 _scrapeDays ) external snapshotTrigger { _referrerInterest( msg.sender, _referralID, _scrapeDays ); } function referrerInterestBulk( bytes16[] memory _referralIDs, uint256[] memory _scrapeDays ) external snapshotTrigger { for(uint256 i = 0; i < _referralIDs.length; i++) { _referrerInterest( msg.sender, _referralIDs[i], _scrapeDays[i] ); } } function _referrerInterest( address _referrer, bytes16 _referralID, uint256 _processDays ) internal { ReferrerLink memory link = referrerLinks[_referrer][_referralID]; require(link.isActive == true); address staker = link.staker; bytes16 stakeID = link.stakeID; Stake memory stake = stakes[staker][stakeID]; uint256 startDay = _determineStartDay(stake, link); uint256 finalDay = _determineFinalDay(stake); if (_stakeEnded(stake)) { if ( _processDays > 0 && _processDays < _daysDiff(startDay, finalDay) ) { link.processedDays = link.processedDays.add(_processDays); finalDay = startDay.add(_processDays); } else { link.isActive = false; } } else { _processDays = _daysDiff(startDay, _currentSwappDay()); link.processedDays = link.processedDays.add(_processDays); finalDay = startDay.add(_processDays); } uint256 referralInterest = _checkReferralInterest( stake, startDay, finalDay ); link.rewardAmount = link.rewardAmount.add(referralInterest); referrerLinks[_referrer][_referralID] = link; _mint(_referrer, referralInterest); emit ReferralCollected( staker, stakeID, _referrer, _referralID, referralInterest ); } function checkReferralsByID( address _referrer, bytes16 _referralID ) external view returns ( address staker, bytes16 stakeID, uint256 referrerShares, uint256 referralInterest, bool isActiveReferral, bool isActiveStake, bool isMatureStake, bool isEndedStake ) { ReferrerLink memory link = referrerLinks[_referrer][_referralID]; staker = link.staker; stakeID = link.stakeID; isActiveReferral = link.isActive; Stake memory stake = stakes[staker][stakeID]; referrerShares = stake.referrerShares; referralInterest = _checkReferralInterest( stake, _determineStartDay(stake, link), _determineFinalDay(stake) ); isActiveStake = stake.isActive; isEndedStake = _stakeEnded(stake); isMatureStake = _isMatureStake(stake); } function _checkReferralInterest( Stake memory _stake, uint256 _startDay, uint256 _finalDay ) internal view returns (uint256 _referralInterest) { return _notCriticalMassReferrer(_stake.referrer) ? 0 : _getReferralInterest(_stake, _startDay, _finalDay); } function _getReferralInterest( Stake memory _stake, uint256 _startDay, uint256 _finalDay ) private view returns (uint256 _referralInterest) { for (uint256 _day = _startDay; _day < _finalDay; _day++) { _referralInterest += _stake.stakesShares * PRECISION_RATE / rsnapshots[_day].inflationAmount; } } function _determineStartDay( Stake memory _stake, ReferrerLink memory _link ) internal view returns (uint256) { return ( criticalMass[_stake.referrer].activationDay > _stake.startDay ? criticalMass[_stake.referrer].activationDay : _stake.startDay ).add(_link.processedDays); } function _determineFinalDay( Stake memory _stake ) internal view returns (uint256) { return _stake.closeDay > 0 ? _stake.closeDay : _calculationDay(_stake); } } abstract contract StakingToken is ReferralToken { using SafeMath for uint256; /** * @notice A method for a staker to create multiple stakes * @param _stakedAmount amount of SWAPP staked. * @param _lockDays amount of days it is locked for. * @param _referrer address of the referrer */ function createStakeBulk( uint256[] memory _stakedAmount, uint64[] memory _lockDays, address[] memory _referrer ) external { for(uint256 i = 0; i < _stakedAmount.length; i++) { createStake(_stakedAmount[i], _lockDays[i], _referrer[i]); } } /** * @notice A method for a staker to create a stake * @param _stakedAmount amount of SWAPP staked. * @param _lockDays amount of days it is locked for. * @param _referrer address of the referrer */ function createStake( uint256 _stakedAmount, uint64 _lockDays, address _referrer ) public returns (bytes16, uint256, bytes16 referralID) { require(msg.sender != _referrer && notContract(_referrer)); require(_lockDays >= MIN_LOCK_DAYS && _lockDays <= MAX_LOCK_DAYS); require(_stakedAmount >= MIN_STAKE_AMOUNT); ( Stake memory newStake, bytes16 stakeID, uint256 _startDay ) = _createStake(msg.sender, _stakedAmount, _lockDays, _referrer); if (newStake.referrerShares > 0) { ReferrerLink memory referrerLink; referrerLink.staker = msg.sender; referrerLink.stakeID = stakeID; referrerLink.isActive = true; referralID = generateReferralID(_referrer); referrerLinks[_referrer][referralID] = referrerLink; _increaseReferralCount(_referrer); _addReferrerSharesToEnd(newStake.finalDay, newStake.referrerShares); } stakes[msg.sender][stakeID] = newStake; _increaseStakeCount(msg.sender); _increaseGlobals( newStake.stakedAmount, newStake.stakesShares, newStake.referrerShares ); _addScheduledShares(newStake.finalDay, newStake.stakesShares); emit StakeStart( stakeID, msg.sender, _referrer, newStake.stakedAmount, newStake.stakesShares, newStake.referrerShares, newStake.startDay, newStake.lockDays, newStake.daiEquivalent ); return (stakeID, _startDay, referralID); } function getStakingShare( uint256 _stakedAmount, uint64 _lockDays, address _referrer ) external view returns (uint256 stakingShare) { return _stakesShares( _stakedAmount, _lockDays, _referrer, globals.sharePrice ); } /** * @notice A method for a staker to start a stake * @param _staker ... * @param _stakedAmount ... * @param _lockDays ... */ function _createStake( address _staker, uint256 _stakedAmount, uint64 _lockDays, address _referrer ) private returns (Stake memory _newStake, bytes16 _stakeID, uint64 _startDay) { _burn(_staker, _stakedAmount); userStakedAmount[_staker] = userStakedAmount[_staker].add(_stakedAmount); _startDay = nextSwappDay(); _stakeID = generateStakeID(_staker); _newStake.lockDays = _lockDays; _newStake.startDay = _startDay; _newStake.finalDay = _startDay + _lockDays; _newStake.isActive = true; _newStake.stakedAmount = _stakedAmount; _newStake.stakesShares = _stakesShares( _stakedAmount, _lockDays, _referrer, globals.sharePrice ); _updateDaiEquivalent(); _newStake.daiEquivalent = latestDaiEquivalent .mul(_newStake.stakedAmount) .div(TESLAS_PER_SWAPP); if (_nonZeroAddress(_referrer)) { _newStake.referrer = _referrer; _addCriticalMass(_newStake.referrer, _newStake.daiEquivalent); _newStake.referrerShares = _referrerShares( _stakedAmount, _lockDays, _referrer ); } } /** * @notice A method for a staker to remove a stake * belonging to his address by providing ID of a stake. * @param _stakeID unique bytes sequence reference to the stake */ function endStake(bytes16 _stakeID) snapshotTrigger external returns (uint256) { ( Stake memory endedStake, uint256 penaltyAmount ) = _endStake(msg.sender, _stakeID); _decreaseGlobals( endedStake.stakedAmount, endedStake.stakesShares, endedStake.referrerShares ); _removeScheduledShares(endedStake.finalDay, endedStake.stakesShares); _removeReferrerSharesToEnd(endedStake.finalDay, endedStake.referrerShares); _removeCriticalMass( endedStake.referrer, endedStake.daiEquivalent, endedStake.startDay ); _storePenalty(endedStake.closeDay, penaltyAmount); _sharePriceUpdate( endedStake.stakedAmount > penaltyAmount ? endedStake.stakedAmount - penaltyAmount : 0, endedStake.rewardAmount + scrapes[msg.sender][_stakeID], endedStake.referrer, endedStake.lockDays, endedStake.stakesShares ); emit StakeEnd( _stakeID, msg.sender, endedStake.referrer, endedStake.stakedAmount, endedStake.stakesShares, endedStake.referrerShares, endedStake.rewardAmount, endedStake.closeDay, penaltyAmount ); return endedStake.rewardAmount; } function _endStake( address _staker, bytes16 _stakeID ) private returns (Stake storage _stake, uint256 _penalty) { require(stakes[_staker][_stakeID].isActive); _stake = stakes[_staker][_stakeID]; _stake.closeDay = _currentSwappDay(); _stake.rewardAmount = _calculateRewardAmount(_stake); _penalty = _calculatePenaltyAmount(_stake); _stake.isActive = false; userStakedAmount[_staker] = userStakedAmount[_staker].sub(_stake.stakedAmount); _mint( _staker, _stake.stakedAmount > _penalty ? _stake.stakedAmount - _penalty : 0 ); _mint(_staker, _stake.rewardAmount); } /** * @notice alloes to scrape interest from active stake * @param _stakeID unique bytes sequence reference to the stake * @param _scrapeDays amount of days to proccess, 0 = all */ function scrapeInterest( bytes16 _stakeID, uint64 _scrapeDays ) external snapshotTrigger returns ( uint256 scrapeDay, uint256 scrapeAmount, uint256 remainingDays, uint256 stakersPenalty, uint256 referrerPenalty ) { require(stakes[msg.sender][_stakeID].isActive); Stake memory stake = stakes[msg.sender][_stakeID]; scrapeDay = _scrapeDays > 0 ? _startingDay(stake).add(_scrapeDays) : _calculationDay(stake); scrapeDay = scrapeDay > stake.finalDay ? _calculationDay(stake) : scrapeDay; scrapeAmount = _loopRewardAmount( stake.stakesShares, _startingDay(stake), scrapeDay ); if (_isMatureStake(stake) == false) { remainingDays = _daysLeft(stake); stakersPenalty = _stakesShares( scrapeAmount, remainingDays, msg.sender, globals.sharePrice ); stake.stakesShares = stake.stakesShares.sub(stakersPenalty); _removeScheduledShares(stake.finalDay, stakersPenalty); if (stake.referrerShares > 0) { referrerPenalty = _stakesShares( scrapeAmount, remainingDays, address(0x0), globals.sharePrice ); stake.referrerShares = stake.referrerShares.sub(referrerPenalty); _removeReferrerSharesToEnd(stake.finalDay, referrerPenalty); } _decreaseGlobals(0, stakersPenalty, referrerPenalty); _sharePriceUpdate( stake.stakedAmount, scrapeAmount, stake.referrer, stake.lockDays, stake.stakesShares ); } else { scrapes[msg.sender][_stakeID] = scrapes[msg.sender][_stakeID].add(scrapeAmount); _sharePriceUpdate( stake.stakedAmount, scrapes[msg.sender][_stakeID], stake.referrer, stake.lockDays, stake.stakesShares ); } stake.scrapeDay = scrapeDay; stakes[msg.sender][_stakeID] = stake; _mint(msg.sender, scrapeAmount); emit InterestScraped( _stakeID, msg.sender, scrapeAmount, scrapeDay, stakersPenalty, referrerPenalty, _currentSwappDay() ); } function _addScheduledShares(uint256 _finalDay, uint256 _shares) internal { scheduledToEnd[_finalDay] = scheduledToEnd[_finalDay].add(_shares); } function _removeScheduledShares(uint256 _finalDay, uint256 _shares) internal { if (_notPast(_finalDay)) { scheduledToEnd[_finalDay] = scheduledToEnd[_finalDay] > _shares ? scheduledToEnd[_finalDay] - _shares : 0; } else { uint256 _day = previousSwappDay(); snapshots[_day].scheduledToEnd = snapshots[_day].scheduledToEnd > _shares ? snapshots[_day].scheduledToEnd - _shares : 0; } } function _sharePriceUpdate( uint256 _stakedAmount, uint256 _rewardAmount, address _referrer, uint256 _lockDays, uint256 _stakeShares ) private { if (_stakeShares > 0 && _currentSwappDay() > FORMULA_DAY) { uint256 newSharePrice = _getNewSharePrice( _stakedAmount, _rewardAmount, _stakeShares, _lockDays, _referrer ); if (newSharePrice > globals.sharePrice) { newSharePrice = newSharePrice < globals.sharePrice.mul(110).div(100) ? newSharePrice : globals.sharePrice.mul(110).div(100); emit NewSharePrice( newSharePrice, globals.sharePrice, _currentSwappDay() ); globals.sharePrice = newSharePrice; } return; } if (_currentSwappDay() == FORMULA_DAY) { globals.sharePrice = 110E15; } } function _getNewSharePrice( uint256 _stakedAmount, uint256 _rewardAmount, uint256 _stakeShares, uint256 _lockDays, address _referrer ) private pure returns (uint256) { uint256 _bonusAmount = _getBonus( _lockDays, _nonZeroAddress(_referrer) ? 11E9 : 10E9 ); return _stakedAmount .add(_rewardAmount) .mul(_bonusAmount) .mul(1E8) .div(_stakeShares); } function checkMatureStake( address _staker, bytes16 _stakeID ) external view returns (bool isMature) { Stake memory stake = stakes[_staker][_stakeID]; isMature = _isMatureStake(stake); } function checkStakeByID(address _staker, bytes16 _stakeID) external view returns ( uint256 startDay, uint256 lockDays, uint256 finalDay, uint256 closeDay, uint256 scrapeDay, uint256 stakedAmount, uint256 stakesShares, uint256 rewardAmount, uint256 penaltyAmount, bool isActive, bool isMature ) { Stake memory stake = stakes[_staker][_stakeID]; startDay = stake.startDay; lockDays = stake.lockDays; finalDay = stake.finalDay; closeDay = stake.closeDay; scrapeDay = stake.scrapeDay; stakedAmount = stake.stakedAmount; stakesShares = stake.stakesShares; rewardAmount = _checkRewardAmount(stake); penaltyAmount = _calculatePenaltyAmount(stake); isActive = stake.isActive; isMature = _isMatureStake(stake); } function _stakesShares( uint256 _stakedAmount, uint256 _lockDays, address _referrer, uint256 _sharePrice ) private pure returns (uint256) { return _nonZeroAddress(_referrer) ? _sharesAmount(_stakedAmount, _lockDays, _sharePrice, 11E9) : _sharesAmount(_stakedAmount, _lockDays, _sharePrice, 10E9); } function _sharesAmount( uint256 _stakedAmount, uint256 _lockDays, uint256 _sharePrice, uint256 _extraBonus ) private pure returns (uint256) { return _baseAmount(_stakedAmount, _sharePrice) .mul(_getBonus(_lockDays, _extraBonus)) .div(10E9); } function _getBonus( uint256 _lockDays, uint256 _extraBonus ) private pure returns (uint256) { return _regularBonus(_lockDays, DAILY_BONUS_A, MAX_BONUS_DAYS_A) + _regularBonus( _lockDays > MAX_BONUS_DAYS_A ? _lockDays - MAX_BONUS_DAYS_A : 0, DAILY_BONUS_B, MAX_BONUS_DAYS_B ) + _extraBonus; } function _regularBonus( uint256 _lockDays, uint256 _daily, uint256 _maxDays ) private pure returns (uint256) { return ( _lockDays > _maxDays ? _maxDays.mul(_daily) : _lockDays.mul(_daily) ).div(10E9); } function _baseAmount( uint256 _stakedAmount, uint256 _sharePrice ) private pure returns (uint256) { return _stakedAmount.mul(PRECISION_RATE).div(_sharePrice); } function _referrerShares( uint256 _stakedAmount, uint256 _lockDays, address _referrer ) private view returns (uint256) { return _notCriticalMassReferrer(_referrer) || _lockDays < MIN_REFERRAL_DAYS ? 0 : _sharesAmount( _stakedAmount, _lockDays, globals.sharePrice, 10E9 ); } function _checkRewardAmount(Stake memory _stake) private view returns (uint256) { return _stake.isActive ? _detectReward(_stake) : _stake.rewardAmount; } function _detectReward(Stake memory _stake) private view returns (uint256) { return _stakeNotStarted(_stake) ? 0 : _calculateRewardAmount(_stake); } function _storePenalty(uint64 _storeDay, uint256 _penalty) private { if (_penalty > 0) { totalPenalties[_storeDay] = totalPenalties[_storeDay].add(_penalty); } } function _calculatePenaltyAmount(Stake memory _stake) private view returns (uint256) { return _stakeNotStarted(_stake) || _isMatureStake(_stake) ? 0 : _getPenalties(_stake); } function _getPenalties(Stake memory _stake) private view returns (uint256) { return _stake.stakedAmount * (100 + (800 * (_daysLeft(_stake) - 1) / (_getLockDays(_stake)))) / 1000; } function _calculateRewardAmount(Stake memory _stake) private view returns (uint256) { return _loopRewardAmount( _stake.stakesShares, _startingDay(_stake), _calculationDay(_stake) ); } function _loopRewardAmount( uint256 _stakeShares, uint256 _startDay, uint256 _finalDay ) private view returns (uint256 _rewardAmount) { for (uint256 _day = _startDay; _day < _finalDay; _day++) { _rewardAmount += _stakeShares * PRECISION_RATE / snapshots[_day].inflationAmount; } } } contract SwappToken is StakingToken { address public LIQUIDITY_TRANSFORMER; address public YIELD_FARM_STABLE; address public YIELD_FARM_LP; address public tokenMinterDefiner; modifier onlyMinter() { require( msg.sender == LIQUIDITY_TRANSFORMER || msg.sender == YIELD_FARM_STABLE || msg.sender == YIELD_FARM_LP, 'SWAPP: Invalid token minter' ); _; } constructor() ERC20("Swapp Token", "SWAPP") { tokenMinterDefiner = msg.sender; _mint(0x0d970a04d46c73B6d20d9a0B2B07C35F2495ca9c, 162500000E18); // SWAPP FOUNDATION - Contract Owner Wallet _mint(0x915D99375Ba8EDbbee46bE1AD045718a05A6655b, 3307862E18); // MM-PRESALE Investors Wallet _mint(0x7Db4456a73a9C94a381d244E9dfC76E83C05913E, 58364082E18); // Employee Pool Including Founders MM Wallet _mint(0x62F16a5bA06693B1E96a656d46e66A8CdaE17C69, 13328056E18); // Swapp Previous Investors MM Wallet _mint(0x94dc2f1823AbfdC2fb9BB8Ae10162b65D2Cf1c65, 250000000E18); // Rewards Wallet _mint(0x2a8eA8a4842DA268FA4180b1a99B7876f820ECC1, 35000000E18); // Future Development Wallet _mint(0x000baFB91ED6436ad2888C2418197aFDB85785C5, 5000000E18); // Reserved Funding Wallet _mint(0xd4041e1c24A54134Fb9657e8DA85e75001D7Ea44, 5000000E18); // Bounty, Advisors, Partnership Wallet } receive() external payable { revert(); } function setMinters( address _transformer, address _yieldFarmStable, address _yieldFarmLP ) external { require(tokenMinterDefiner == msg.sender); LIQUIDITY_TRANSFORMER = _transformer; YIELD_FARM_STABLE = _yieldFarmStable; YIELD_FARM_LP = _yieldFarmLP; } function burnMinterDefiner() external { require(tokenMinterDefiner == msg.sender); tokenMinterDefiner = address(0x0); } /** * @notice allows liquidityTransformer to mint supply * @dev executed from liquidityTransformer upon UNISWAP transfer * and during reservation payout to contributors and referrers * @param _investorAddress address for minting SWAPP tokens * @param _amount of tokens to mint for _investorAddress */ function mintSupply(address _investorAddress, uint256 _amount) external onlyMinter { _mint(_investorAddress, _amount); } /** * @notice allows to grant permission to CM referrer status * @dev called from liquidityTransformer if user referred 50 ETH * @param _referrer - address that becomes a CM reffer */ function giveStatus(address _referrer) external onlyMinter { criticalMass[_referrer].totalAmount = THRESHOLD_LIMIT; criticalMass[_referrer].activationDay = nextSwappDay(); } /** * @notice allows to create stake directly with ETH * if you don't have SWAPP tokens method will convert * and use amount returned from UNISWAP to open a stake * @param _lockDays amount of days it is locked for. * @param _referrer referrer address for +10% bonus */ function createStakeWithETH( uint64 _lockDays, address _referrer ) external payable returns (bytes16, uint256, bytes16 referralID) { address[] memory path = new address[](2); path[0] = WETH; path[1] = address(this); uint256[] memory amounts = UNISWAP_ROUTER.swapExactETHForTokens{value: msg.value}( 1, path, msg.sender, block.timestamp ); return createStake(amounts[1], _lockDays, _referrer); } /** * @notice allows to create stake with another token * if you don't have SWAPP tokens method will convert * and use amount returned from UNISWAP to open a stake * @dev the token must have WETH pair on UNISWAP * @param _tokenAddress any ERC20 token address * @param _tokenAmount amount to be converted to SWAPP * @param _lockDays amount of days it is locked for. * @param _referrer referrer address for +10% bonus */ function createStakeWithToken( address _tokenAddress, uint256 _tokenAmount, uint64 _lockDays, address _referrer ) external returns (bytes16, uint256, bytes16 referralID) { TokenInterface token = TokenInterface(_tokenAddress); token.transferFrom(msg.sender, address(this), _tokenAmount); token.approve(address(UNISWAP_ROUTER), _tokenAmount); address[] memory path = _preparePath(_tokenAddress, address(this)); uint256[] memory amounts = UNISWAP_ROUTER.swapExactTokensForTokens( _tokenAmount, 1, path, msg.sender, block.timestamp ); return createStake(amounts[2], _lockDays, _referrer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes16","name":"stakeID","type":"bytes16"},{"indexed":true,"internalType":"address","name":"stakerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"scrapeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"scrapeDay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakersPenalty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referrerPenalty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentSwappDay","type":"uint256"}],"name":"InterestScraped","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"}],"name":"LiquidityGuardStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalStaked","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shareRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referrerShares","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"currentSwappDay","type":"uint256"}],"name":"NewGlobals","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSharePrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldSharePrice","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"currentSwappDay","type":"uint64"}],"name":"NewSharePrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"bytes16","name":"stakeID","type":"bytes16"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"bytes16","name":"referrerID","type":"bytes16"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"ReferralCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes16","name":"stakeID","type":"bytes16"},{"indexed":true,"internalType":"address","name":"stakerAddress","type":"address"},{"indexed":true,"internalType":"address","name":"referralAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakesShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referralShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"closeDay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penaltyAmount","type":"uint256"}],"name":"StakeEnd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes16","name":"stakeID","type":"bytes16"},{"indexed":true,"internalType":"address","name":"stakerAddress","type":"address"},{"indexed":true,"internalType":"address","name":"referralAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakesShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referralShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startDay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockDays","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"daiEquivalent","type":"uint256"}],"name":"StakeStart","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"INFLATION_RATE","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LAUNCH_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITY_GUARD","outputs":[{"internalType":"contract ILiquidityGuard","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITY_TRANSFORMER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNISWAP_FACTORY","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNISWAP_PAIR","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNISWAP_ROUTER","outputs":[{"internalType":"contract IUniswapRouterV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"YIELD_FARM_LP","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"YIELD_FARM_STABLE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnMinterDefiner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"bytes16","name":"_stakeID","type":"bytes16"}],"name":"checkMatureStake","outputs":[{"internalType":"bool","name":"isMature","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"bytes16","name":"_referralID","type":"bytes16"}],"name":"checkReferralsByID","outputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"bytes16","name":"stakeID","type":"bytes16"},{"internalType":"uint256","name":"referrerShares","type":"uint256"},{"internalType":"uint256","name":"referralInterest","type":"uint256"},{"internalType":"bool","name":"isActiveReferral","type":"bool"},{"internalType":"bool","name":"isActiveStake","type":"bool"},{"internalType":"bool","name":"isMatureStake","type":"bool"},{"internalType":"bool","name":"isEndedStake","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"bytes16","name":"_stakeID","type":"bytes16"}],"name":"checkStakeByID","outputs":[{"internalType":"uint256","name":"startDay","type":"uint256"},{"internalType":"uint256","name":"lockDays","type":"uint256"},{"internalType":"uint256","name":"finalDay","type":"uint256"},{"internalType":"uint256","name":"closeDay","type":"uint256"},{"internalType":"uint256","name":"scrapeDay","type":"uint256"},{"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"internalType":"uint256","name":"stakesShares","type":"uint256"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint256","name":"penaltyAmount","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"bool","name":"isMature","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakedAmount","type":"uint256"},{"internalType":"uint64","name":"_lockDays","type":"uint64"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"createStake","outputs":[{"internalType":"bytes16","name":"","type":"bytes16"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes16","name":"referralID","type":"bytes16"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_stakedAmount","type":"uint256[]"},{"internalType":"uint64[]","name":"_lockDays","type":"uint64[]"},{"internalType":"address[]","name":"_referrer","type":"address[]"}],"name":"createStakeBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_lockDays","type":"uint64"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"createStakeWithETH","outputs":[{"internalType":"bytes16","name":"","type":"bytes16"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes16","name":"referralID","type":"bytes16"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"},{"internalType":"uint64","name":"_lockDays","type":"uint64"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"createStakeWithToken","outputs":[{"internalType":"bytes16","name":"","type":"bytes16"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes16","name":"referralID","type":"bytes16"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"criticalMass","outputs":[{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"activationDay","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSwappDay","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_stakeID","type":"bytes16"}],"name":"endStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"x","type":"address"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"bytes1","name":"z","type":"bytes1"}],"name":"generateID","outputs":[{"internalType":"bytes16","name":"b","type":"bytes16"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getNow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakedAmount","type":"uint256"},{"internalType":"uint64","name":"_lockDays","type":"uint64"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"getStakingShare","outputs":[{"internalType":"uint256","name":"stakingShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"}],"name":"giveStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"globals","outputs":[{"internalType":"uint256","name":"totalStaked","type":"uint256"},{"internalType":"uint256","name":"totalShares","type":"uint256"},{"internalType":"uint256","name":"sharePrice","type":"uint256"},{"internalType":"uint256","name":"currentSwappDay","type":"uint256"},{"internalType":"uint256","name":"referralShares","type":"uint256"},{"internalType":"uint256","name":"liquidityShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityGuardActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestDaiEquivalent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"}],"name":"latestReferralID","outputs":[{"internalType":"bytes16","name":"","type":"bytes16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"latestStakeID","outputs":[{"internalType":"bytes16","name":"","type":"bytes16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityGuardTrigger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualDailySnapshot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_updateDay","type":"uint64"}],"name":"manualDailySnapshotPoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_investorAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextSwappDay","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousSwappDay","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"referralSharesToEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_length","type":"uint256"}],"name":"referralsPagination","outputs":[{"internalType":"bytes16[]","name":"_referrals","type":"bytes16[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_referralID","type":"bytes16"},{"internalType":"uint256","name":"_scrapeDays","type":"uint256"}],"name":"referrerInterest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes16[]","name":"_referralIDs","type":"bytes16[]"},{"internalType":"uint256[]","name":"_scrapeDays","type":"uint256[]"}],"name":"referrerInterestBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"referrerLinks","outputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"bytes16","name":"stakeID","type":"bytes16"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint256","name":"processedDays","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rsnapshots","outputs":[{"internalType":"uint256","name":"totalShares","type":"uint256"},{"internalType":"uint256","name":"inflationAmount","type":"uint256"},{"internalType":"uint256","name":"scheduledToEnd","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"scheduledToEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_stakeID","type":"bytes16"},{"internalType":"uint64","name":"_scrapeDays","type":"uint64"}],"name":"scrapeInterest","outputs":[{"internalType":"uint256","name":"scrapeDay","type":"uint256"},{"internalType":"uint256","name":"scrapeAmount","type":"uint256"},{"internalType":"uint256","name":"remainingDays","type":"uint256"},{"internalType":"uint256","name":"stakersPenalty","type":"uint256"},{"internalType":"uint256","name":"referrerPenalty","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"scrapes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_transformer","type":"address"},{"internalType":"address","name":"_yieldFarmStable","type":"address"},{"internalType":"address","name":"_yieldFarmLP","type":"address"}],"name":"setMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"snapshots","outputs":[{"internalType":"uint256","name":"totalShares","type":"uint256"},{"internalType":"uint256","name":"inflationAmount","type":"uint256"},{"internalType":"uint256","name":"scheduledToEnd","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"stakesShares","type":"uint256"},{"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint64","name":"startDay","type":"uint64"},{"internalType":"uint64","name":"lockDays","type":"uint64"},{"internalType":"uint64","name":"finalDay","type":"uint64"},{"internalType":"uint64","name":"closeDay","type":"uint64"},{"internalType":"uint256","name":"scrapeDay","type":"uint256"},{"internalType":"uint256","name":"daiEquivalent","type":"uint256"},{"internalType":"uint256","name":"referrerShares","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_length","type":"uint256"}],"name":"stakesPagination","outputs":[{"internalType":"bytes16[]","name":"_stakes","type":"bytes16[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"swappDayFromStamp","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenMinterDefiner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalPenalties","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userStakedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
67059b4bdc09420000600555600c805463ffffffff191662019258179055600e80546001600160a01b03191673ecd13a6c13a97483dea1e31101e63718fcbd6b7317905560e060405230608090815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a052736b175474e89094c44da98b954eedeac495271d0f60c0526200008e906011906003620003b1565b503480156200009c57600080fd5b50604080518082018252600b81526a29bbb0b838102a37b5b2b760a91b602080830191825283518085019094526005845264053574150560dc1b908401528151919291620000ed916002916200041b565b508051620001039060039060208401906200041b565b50506004805460ff191660121790555067016345785d8a00006008556360972600600d55602180546001600160a01b0319163317905562000164730d970a04d46c73b6d20d9a0b2b07c35f2495ca9c6a866ab6a6c514d6b280000062000296565b6200018f73915d99375ba8edbbee46be1ad045718a05a6655b6a02bc778eeefc007f98000062000296565b620001ba737db4456a73a9c94a381d244e9dfc76e83c05913e6a304713399808baa388000062000296565b620001e57362f16a5ba06693b1e96a656d46e66a8cdae17c696a0b06535d0f04e307e0000062000296565b620002107394dc2f1823abfdc2fb9bb8ae10162b65d2cf1c656acecb8f27f4200f3a00000062000296565b6200023b732a8ea8a4842da268fa4180b1a99b7876f820ecc16a1cf389cd46047d0300000062000296565b62000265720bafb91ed6436ad2888c2418197afdb85785c56a0422ca8b0a00a42500000062000296565b6200029073d4041e1c24a54134fb9657e8da85e75001d7ea446a0422ca8b0a00a42500000062000296565b620004b5565b6001600160a01b038216620002aa57600080fd5b620002c6816005546200034f60201b620038721790919060201c565b6005556001600160a01b03821660009081526020818152604090912054620002f9918390620038726200034f821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600082820183811015620003aa576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b82805482825590600052602060002090810192821562000409579160200282015b828111156200040957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620003d2565b50620004179291506200049e565b5090565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000453576000855562000409565b82601f106200046e57805160ff191683800117855562000409565b8280016001018555821562000409579182015b828111156200040957825182559160200191906001019062000481565b5b808211156200041757600081556001016200049f565b61581580620004c56000396000f3fe6080604052600436106103d15760003560e01c80639e78fb4f116101fd578063c23d656411610118578063df2d02b1116100ab578063e7881cda1161007a578063e7881cda1461132c578063e8a407661461136b578063e8f5babe14611380578063f843d495146113aa578063fc527bf5146113bf576103db565b8063df2d02b1146111d7578063e1d033e91461121f578063e742806a146112de578063e769c3f814611317576103db565b8063d6565a2d116100e7578063d6565a2d1461112a578063d826492014611154578063db74559b14611169578063dd62ed3e1461119c576103db565b8063c23d656414611053578063c31245251461107d578063c74c0fac146110c5578063d1cf9098146110da576103db565b8063b543c4ba11610190578063be21ff701161015f578063be21ff7014610f48578063bf58f6d214610f72578063c172628e14610fbb578063c19f953c1461103e576103db565b8063b543c4ba14610eac578063b5ebdb6c14610ec1578063bba85e1f14610f09578063bbe4fd5014610f33576103db565b8063ae3d1de2116101cc578063ae3d1de214610df1578063afbad29214610e24578063b08dd75214610e39578063b381a81114610e7e576103db565b80639e78fb4f14610cd3578063a4ed055014610ce8578063a9059cbb14610d85578063a91b19f214610dbe576103db565b80634f47b16d116102ed578063779e2e18116102805780638e4647ee1161024f5780638e4647ee14610be957806395d89b4114610c1c57806399c2def414610c315780639b57ab1214610c65576103db565b8063779e2e1814610aac5780638649102b14610aef57806387da627414610b3757806389201d4e14610b4c576103db565b8063613fc9fd116102bc578063613fc9fd1461089d5780636ba631cf146108b257806370a08231146108c7578063763241d3146108fa576103db565b80634f47b16d146107cd5780635540989f146108075780635b2023871461081c57806360e4c6511461086c576103db565b806320429fac1161036557806333060d901161033457806333060d90146106ef5780633b58afe71461072257806342966c681461076e5780634dfc7a031461079a576103db565b806320429fac146105af57806323672d8a146105f257806323b872dd14610681578063313ce567146106c4576103db565b8063095ea7b3116103a1578063095ea7b3146104cf57806318160ddd146105085780631c0b37e11461051d5780631e2ef22d1461057e576103db565b80625ada7f146103e0578063022466b51461040757806302cbb2661461041c57806306fdde0314610445576103db565b366103db57600080fd5b600080fd5b3480156103ec57600080fd5b506103f56114ef565b60408051918252519081900360200190f35b34801561041357600080fd5b506103f56114f5565b34801561042857600080fd5b506104316114fb565b604080519115158252519081900360200190f35b34801561045157600080fd5b5061045a61150b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561049457818101518382015260200161047c565b50505050905090810190601f1680156104c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104db57600080fd5b50610431600480360360408110156104f257600080fd5b506001600160a01b03813516906020013561159f565b34801561051457600080fd5b506103f56115bd565b6105526004803603604081101561053357600080fd5b5080356001600160401b031690602001356001600160a01b03166115c3565b604080516001600160801b03199485168152602081019390935292168183015290519081900360600190f35b34801561058a57600080fd5b5061059361180e565b604080516001600160401b039092168252519081900360200190f35b3480156105bb57600080fd5b506103f5600480360360408110156105d257600080fd5b5080356001600160a01b031690602001356001600160801b031916611820565b3480156105fe57600080fd5b506106316004803603606081101561061557600080fd5b506001600160a01b03813516906020810135906040013561183d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561066d578181015183820152602001610655565b505050509050019250505060405180910390f35b34801561068d57600080fd5b50610431600480360360608110156106a457600080fd5b506001600160a01b038135811691602081013590911690604001356119aa565b3480156106d057600080fd5b506106d9611a19565b6040805160ff9092168252519081900360200190f35b3480156106fb57600080fd5b506103f56004803603602081101561071257600080fd5b50356001600160a01b0316611a22565b34801561072e57600080fd5b506107556004803603602081101561074557600080fd5b50356001600160a01b0316611a34565b6040805192835260208301919091528051918290030190f35b34801561077a57600080fd5b506107986004803603602081101561079157600080fd5b5035611a4d565b005b3480156107a657600080fd5b50610798600480360360208110156107bd57600080fd5b50356001600160a01b0316611a5a565b3480156107d957600080fd5b50610798600480360360408110156107f057600080fd5b506001600160801b03198135169060200135611b3d565b34801561081357600080fd5b50610593611b5c565b34801561082857600080fd5b5061084f6004803603602081101561083f57600080fd5b50356001600160a01b0316611b83565b604080516001600160801b03199092168252519081900360200190f35b34801561087857600080fd5b50610881611be2565b604080516001600160a01b039092168252519081900360200190f35b3480156108a957600080fd5b50610798611bf1565b3480156108be57600080fd5b50610881611bfe565b3480156108d357600080fd5b506103f5600480360360208110156108ea57600080fd5b50356001600160a01b0316611c0d565b34801561090657600080fd5b506107986004803603606081101561091d57600080fd5b810190602081018135600160201b81111561093757600080fd5b82018360208201111561094957600080fd5b803590602001918460208302840111600160201b8311171561096a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156109b957600080fd5b8201836020820111156109cb57600080fd5b803590602001918460208302840111600160201b831117156109ec57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610a3b57600080fd5b820183602082011115610a4d57600080fd5b803590602001918460208302840111600160201b83111715610a6e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611c28945050505050565b348015610ab857600080fd5b5061043160048036036040811015610acf57600080fd5b5080356001600160a01b031690602001356001600160801b031916611c89565b348015610afb57600080fd5b50610b1960048036036020811015610b1257600080fd5b5035611d6d565b60408051938452602084019290925282820152519081900360600190f35b348015610b4357600080fd5b50610798611d8e565b348015610b5857600080fd5b50610b8f60048036036040811015610b6f57600080fd5b5080356001600160a01b031690602001356001600160801b031916611f94565b604080516001600160a01b0390991689526001600160801b031990971660208901528787019590955260608701939093529015156080860152151560a0850152151560c0840152151560e083015251908190036101000190f35b348015610bf557600080fd5b506103f560048036036020811015610c0c57600080fd5b50356001600160a01b0316612286565b348015610c2857600080fd5b5061045a612298565b348015610c3d57600080fd5b506103f560048036036020811015610c5457600080fd5b50356001600160801b0319166122f9565b348015610c7157600080fd5b50610ca860048036036040811015610c8857600080fd5b5080356001600160801b03191690602001356001600160401b0316612556565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610cdf57600080fd5b506107986129ea565b348015610cf457600080fd5b50610d2b60048036036040811015610d0b57600080fd5b5080356001600160a01b031690602001356001600160801b031916612aa4565b604080519b8c5260208c019a909a528a8a019890985260608a0196909652608089019490945260a088019290925260c087015260e08601526101008501521515610120840152151561014083015251908190036101600190f35b348015610d9157600080fd5b5061043160048036036040811015610da857600080fd5b506001600160a01b038135169060200135612bd0565b348015610dca57600080fd5b5061079860048036036020811015610de157600080fd5b50356001600160401b0316612be4565b348015610dfd57600080fd5b5061084f60048036036020811015610e1457600080fd5b50356001600160a01b0316612c3e565b348015610e3057600080fd5b50610798612c90565b348015610e4557600080fd5b5061079860048036036060811015610e5c57600080fd5b506001600160a01b038135811691602081013582169160409091013516612cb9565b348015610e8a57600080fd5b50610e93612d0f565b6040805163ffffffff9092168252519081900360200190f35b348015610eb857600080fd5b50610881612d1b565b348015610ecd57600080fd5b506103f560048036036060811015610ee457600080fd5b5080359060208101356001600160401b031690604001356001600160a01b0316612d2a565b348015610f1557600080fd5b506103f560048036036020811015610f2c57600080fd5b5035612d46565b348015610f3f57600080fd5b506103f5612d58565b348015610f5457600080fd5b506103f560048036036020811015610f6b57600080fd5b5035612d5c565b348015610f7e57600080fd5b5061084f60048036036060811015610f9557600080fd5b5080356001600160a01b031690602081013590604001356001600160f81b031916612d6e565b348015610fc757600080fd5b50610ffe60048036036040811015610fde57600080fd5b5080356001600160a01b031690602001356001600160801b031916612dc9565b604080516001600160a01b0390961686526001600160801b0319909416602086015284840192909252606084015215156080830152519081900360a00190f35b34801561104a57600080fd5b50610881612e15565b34801561105f57600080fd5b506103f56004803603602081101561107657600080fd5b5035612e24565b34801561108957600080fd5b50611092612e36565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b3480156110d157600080fd5b50610881612e4b565b3480156110e657600080fd5b50610552600480360360808110156110fd57600080fd5b506001600160a01b0381358116916020810135916001600160401b03604083013516916060013516612e63565b34801561113657600080fd5b50610b196004803603602081101561114d57600080fd5b503561314a565b34801561116057600080fd5b5061088161316b565b34801561117557600080fd5b506103f56004803603602081101561118c57600080fd5b50356001600160a01b0316613183565b3480156111a857600080fd5b506103f5600480360360408110156111bf57600080fd5b506001600160a01b0381358116916020013516613195565b3480156111e357600080fd5b50610552600480360360608110156111fa57600080fd5b5080359060208101356001600160401b031690604001356001600160a01b03166131c0565b34801561122b57600080fd5b506112626004803603604081101561124257600080fd5b5080356001600160a01b031690602001356001600160801b03191661354f565b604080519c8d5260208d019b909b528b8b01999099526001600160401b0397881660608c015295871660808b015293861660a08a01529190941660c088015260e08701939093526101008601929092526101208501919091526001600160a01b0316610140840152151561016083015251908190036101800190f35b3480156112ea57600080fd5b506107986004803603604081101561130157600080fd5b506001600160a01b0381351690602001356135db565b34801561132357600080fd5b5061059361366e565b34801561133857600080fd5b506106316004803603606081101561134f57600080fd5b506001600160a01b038135169060208101359060400135613680565b34801561137757600080fd5b506108816137ea565b34801561138c57600080fd5b50610593600480360360208110156113a357600080fd5b50356137f9565b3480156113b657600080fd5b5061088161380e565b3480156113cb57600080fd5b50610798600480360360408110156113e257600080fd5b810190602081018135600160201b8111156113fc57600080fd5b82018360208201111561140e57600080fd5b803590602001918460208302840111600160201b8311171561142f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561147e57600080fd5b82018360208201111561149057600080fd5b803590602001918460208302840111600160201b831117156114b157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061381d945050505050565b60105481565b600d5481565b600f54600160a01b900460ff1681565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156115945780601f1061156957610100808354040283529160200191611594565b820191906000526020600020905b81548152906001019060200180831161157757829003601f168201915b505050505090505b90565b60006115b36115ac6138d3565b84846138d7565b5060015b92915050565b60055490565b60408051600280825260608201835260009283928392839260208301908036833701905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160008151811061160c57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061163a57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506000737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316637ff36ab53460018533426040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156116ef5781810151838201526020016116d7565b50505050905001955050505050506000604051808303818588803b15801561171657600080fd5b505af115801561172a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052602081101561175457600080fd5b8101908080516040519392919084600160201b82111561177357600080fd5b90830190602082018581111561178857600080fd5b82518660208202830111600160201b821117156117a457600080fd5b82525081516020918201928201910280838360005b838110156117d15781810151838201526020016117b9565b5050505090500160405250505090506117ff816001815181106117f057fe5b602002602001015188886131c0565b94509450945050509250925092565b6000600161181a61395f565b03905090565b601560209081526000928352604080842090915290825290205481565b60606000808411801561186757506001600160a01b03851660009081526012602052604090205484105b611889576001600160a01b0385166000908152601260205260409020546118a6565b6001600160a01b0385166000908152601260205260409020548490035b9050600080841180156118b857508382115b6118c35760006118c7565b8382035b905060008183036001600160401b03811180156118e357600080fd5b5060405190808252806020026020018201604052801561190d578160200160208202803683370190505b509350825b8281111561199f57600061192f896000198401600160f81b612d6e565b6001600160a01b038a1660009081526016602090815260408083206001600160801b03198516845290915290206001015490915015611995578086848151811061197557fe5b6001600160801b0319909216602092830291909101909101526001909201915b5060001901611912565b505050509392505050565b6000611a04846119b86138d3565b6001600160a01b03871660009081526001602052604081206119ff918791906119df6138d3565b6001600160a01b0316815260208101919091526040016000205490613971565b6138d7565b611a0f8484846139b3565b5060019392505050565b60045460ff1690565b60126020526000908152604090205481565b6014602052600090815260409020805460019091015482565b611a573382613a85565b50565b601e546001600160a01b0316331480611a7d5750601f546001600160a01b031633145b80611a9257506020546001600160a01b031633145b611ae3576040805162461bcd60e51b815260206004820152601b60248201527f53574150503a20496e76616c696420746f6b656e206d696e7465720000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260146020526040902069021e19e0c9bab24000009055611b1061366e565b6001600160a01b0390911660009081526014602052604090206001600160401b0391909116600190910155565b611b4d611b4861395f565b613b29565b611b58338383613d59565b5050565b6000600d54611b69612d58565b1015611b76576000611b7e565b611b7e61395f565b905090565b6001600160a01b03811660009081526013602052604081205415611bda576001600160a01b038216600090815260136020526040902054611bd5908390611bcb906001613971565b600160f91b612d6e565b6115b7565b600092915050565b601e546001600160a01b031681565b611bfc611b4861395f565b565b600f546001600160a01b031681565b6001600160a01b031660009081526020819052604090205490565b60005b8351811015611c8357611c78848281518110611c4357fe5b6020026020010151848381518110611c5757fe5b6020026020010151848481518110611c6b57fe5b60200260200101516131c0565b505050600101611c2b565b50505050565b6001600160a01b0382811660009081526016602090815260408083206001600160801b03198616845282528083208151610180810183528154815260018201549381019390935260028101549183019190915260038101546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b9091041660c0830152600481015460e08301526005810154610100830152600681015461012083015260070154928316610140820152600160a01b90920460ff16151561016083015290611d65816140d7565b949350505050565b601d6020526000908152604090208054600182015460029092015490919083565b600080600f60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611ddf57600080fd5b505afa158015611df3573d6000803e3d6000fd5b505050506040513d6060811015611e0957600080fd5b508051602091820151600f546040805163d21220a760e01b8152905193965091945060009373c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2936001600160a01b039092169263d21220a79260048083019392829003018186803b158015611e7157600080fd5b505afa158015611e85573d6000803e3d6000fd5b505050506040513d6020811015611e9b57600080fd5b50516001600160a01b031614611eb15781611eb3565b825b6dffffffffffffffffffffffffffff1690506000611ecf6115bd565b15611ef557611ef0611edf6115bd565b611eea8460c8614138565b90614191565b611ef8565b60005b9050602881108015611f145750600f54600160a01b900460ff16155b15611f2157611f216141d3565b603c81118015611f3f5750600f54600160a01b900460ff1615156001145b15611f4c57611f4c6141e8565b600f5460408051600160a01b90920460ff1615158252517fbbf65e071e5468fb599b01ba3b914ae6065cf10ad084e0efe2133f7eaa8979bd916020908290030190a150505050565b6000806000806000806000806000601760008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b6001600160801b0319166001600160801b03191681526020019081526020016000206040518060a00160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a900460801b6001600160801b0319166001600160801b031916815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152505090508060000151985080602001519750806080015194506000601660008b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a6001600160801b0319166001600160801b0319168152602001908152602001600020604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020016003820160089054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020016003820160109054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020016003820160189054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016007820160149054906101000a900460ff161515151581525050905080610120015197506122578161224983856141f7565b6122528461427c565b6142ac565b9650806101600151945061226a816142da565b9250612275816140d7565b935050509295985092959890939650565b601b6020526000908152604090205481565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115945780601f1061156957610100808354040283529160200191611594565b6000612306611b4861395f565b60008061231333856142f3565b6040805161018081018252835480825260018501546020830181905260028601549383019390935260038501546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b9091041660c0830152600485015460e08301526005850154610100830152600685015461012083018190526007909501546001600160a01b038116610140840152600160a01b900460ff1615156101608301529095509193506123d69290919061457f565b6123f18260a001516001600160401b031683600001516145dc565b61240d8260a001516001600160401b031683610120015161468f565b61242f82610140015183610100015184606001516001600160401b0316614742565b61243d8260c00151826147e7565b6124aa8183602001511161245257600061245a565b818360200151035b3360009081526015602090815260408083206001600160801b03198a16845290915290819020549085015161014086015160808701518751929093019290916001600160401b039091169061482d565b8161014001516001600160a01b0316336001600160a01b0316856001600160801b0319167f8cc66e48ebd8c008b36e03ee2f7c3f60a313a34a5bf1f3cb988a7936cd47f0d48560200151866000015187610120015188604001518960c001518960405180878152602001868152602001858152602001848152602001836001600160401b03168152602001828152602001965050505050505060405180910390a4506040015192915050565b6000806000806000612569611b4861395f565b3360009081526016602090815260408083206001600160801b03198b168452909152902060070154600160a01b900460ff166125a457600080fd5b3360009081526016602090815260408083206001600160801b03198b1684528252918290208251610180810184528154815260018201549281019290925260028101549282019290925260038201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b909104811660c0830152600483015460e0830152600583015461010083015260068301546101208301526007909201546001600160a01b038116610140830152600160a01b900460ff16151561016082015290871661268b5761268681614936565b6126a7565b6126a7876001600160401b03166126a18361496c565b90613872565b95508060a001516001600160401b031686116126c357856126cc565b6126cc81614936565b95506126e581600001516126df8361496c565b88614995565b94506126f0816140d7565b6127bf576126fd816149db565b9350612710858533600660020154614a34565b815190935061271f9084613971565b815260a0810151612739906001600160401b0316846145dc565b610120810151156127875761275685856000600660020154614a34565b6101208201519092506127699083613971565b61012082015260a0810151612787906001600160401b03168361468f565b6127936000848461457f565b6127ba81602001518683610140015184608001516001600160401b0316856000015161482d565b61283a565b3360009081526015602090815260408083206001600160801b03198c1684529091529020546127ee9086613872565b3360009081526015602090815260408083206001600160801b03198d16845282529091208290558201516101408301516080840151845161283a9492916001600160401b03169061482d565b60e081018681523360008181526016602090815260408083206001600160801b03198e168452825291829020855181559085015160018201559084015160028201556060840151600382018054608087015160a088015160c089015167ffffffffffffffff199093166001600160401b039586161767ffffffffffffffff60401b1916600160401b928616929092029190911767ffffffffffffffff60801b1916600160801b91851691909102176001600160c01b0316600160c01b93909116929092029190911790559151600483015561010083015160058301556101208301516006830155610140830151600790920180546101608501516001600160a01b03199091166001600160a01b039094169390931760ff60a01b1916600160a01b93151593909302929092179091556129739086614a73565b336001600160801b031989167f7b5d0995432c9ea1c8033b358af591013d0deff8dec5f4ae49612eba8bfafc0c878987876129ac61395f565b6040805195865260208601949094528484019290925260608401526001600160401b03166080830152519081900360a00190a3509295509295909350565b604080516364e329cb60e11b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201523060248201529051735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163c9c653969160448083019260209291908290030181600087803b158015612a5757600080fd5b505af1158015612a6b573d6000803e3d6000fd5b505050506040513d6020811015612a8157600080fd5b5051600f80546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0382811660009081526016602090815260408083206001600160801b03198616845282528083208151610180810183528154808252600183015494820185905260028301549382019390935260038201546001600160401b0380821660608401819052600160401b8304821660808501819052600160801b8404831660a08601819052600160c01b90940490921660c08501819052600486015460e0860181905260058701546101008701526006870154610120870152600790960154998a16610140860152600160a01b90990460ff161515610160850152979096919590949092909190819081908190612b9f81614b0f565b9450612baa81614b2e565b93508061016001519250612bbd816140d7565b9150509295989b509295989b9093969950565b60006115b3612bdd6138d3565b84846139b3565b6000816001600160401b0316118015612c155750612c0061395f565b6001600160401b0316816001600160401b0316105b612c1e57600080fd5b6009546001600160401b03821611612c3557600080fd5b611a5781613b29565b6001600160a01b03811660009081526012602052604081205415611bda576001600160a01b038216600090815260126020526040902054611bd5908390612c86906001613971565b600160f81b612d6e565b6021546001600160a01b03163314612ca757600080fd5b602180546001600160a01b0319169055565b6021546001600160a01b03163314612cd057600080fd5b601e80546001600160a01b039485166001600160a01b031991821617909155601f80549385169382169390931790925560208054919093169116179055565b600c5463ffffffff1681565b600e546001600160a01b031681565b6000611d6584846001600160401b031684600660020154614a34565b601a6020526000908152604090205481565b4290565b60196020526000908152604090205481565b604080516bffffffffffffffffffffffff19606086901b16602080830191909152603482018590526001600160f81b0319841660548301528251603581840301815260559092019092528051910120600090611d659061159c565b6017602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401546001600160a01b039093169360809290921b9290919060ff1685565b6021546001600160a01b031681565b60186020526000908152604090205481565b600654600754600854600954600a54600b5486565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b604080516323b872dd60e01b81523360048201523060248201526044810185905290516000918291829188916001600160a01b038316916323b872dd91606480830192602092919082900301818887803b158015612ec057600080fd5b505af1158015612ed4573d6000803e3d6000fd5b505050506040513d6020811015612eea57600080fd5b50506040805163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d60048201526024810189905290516001600160a01b0383169163095ea7b39160448083019260209291908290030181600087803b158015612f4f57600080fd5b505af1158015612f63573d6000803e3d6000fd5b505050506040513d6020811015612f7957600080fd5b5060009050612f888930614b55565b90506000737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398a60018533426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561302557818101518382015260200161300d565b505050509050019650505050505050600060405180830381600087803b15801561304e57600080fd5b505af1158015613062573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561308b57600080fd5b8101908080516040519392919084600160201b8211156130aa57600080fd5b9083019060208201858111156130bf57600080fd5b82518660208202830111600160201b821117156130db57600080fd5b82525081516020918201928201910280838360005b838110156131085781810151838201526020016130f0565b5050505090500160405250505090506131368160028151811061312757fe5b602002602001015189896131c0565b9550955095505050505b9450945094915050565b601c6020526000908152604090208054600182015460029092015490919083565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60136020526000908152604090205481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60008080336001600160a01b038516148015906131e157506131e184614c1b565b6131ea57600080fd5b60016001600160401b0386161080159061320f5750613be26001600160401b03861611155b61321857600080fd5b620f424086101561322857600080fd5b6000806000613239338a8a8a614c26565b6001600160401b0316925092509250600083610120015111156133305761325e615656565b3381526001600160801b0319831660208201526001608082015261328188614d56565b6001600160a01b0389811660009081526017602090815260408083206001600160801b0319868116855290835292819020865181546001600160a01b031916951694909417845590850151600184018054909316608091821c179092558401516002830155606084015160038301558301516004909101805460ff1916911515919091179055945061331288614d7f565b61332e8460a001516001600160401b0316856101200151614d9f565b505b3360008181526016602090815260408083206001600160801b031987168452825291829020865181559086015160018201559085015160028201556060850151600382018054608088015160a089015160c08a015167ffffffffffffffff199093166001600160401b039586161767ffffffffffffffff60401b1916600160401b928616929092029190911767ffffffffffffffff60801b1916600160801b91851691909102176001600160c01b0316600160c01b939091169290920291909117905560e0850151600482015561010085015160058201556101208501516006820155610140850151600790910180546101608701516001600160a01b03199091166001600160a01b039093169290921760ff60a01b1916600160a01b9215159290920291909117905561346390614dce565b61347b83602001518460000151856101200151614dee565b6134968360a001516001600160401b03168460000151614e21565b866001600160a01b0316336001600160a01b0316836001600160801b0319167f6619c8f19b39bf3558af16516f9ca110fcac4a7ab6d846d1b02a17b11f703a338660200151876000015188610120015189606001518a608001518b610100015160405180878152602001868152602001858152602001846001600160401b03168152602001836001600160401b03168152602001828152602001965050505050505060405180910390a490945092505093509350939050565b6016602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600586015460068701546007909701549596949593946001600160401b0380851695600160401b8604821695600160801b8104831695600160c01b909104909216939192906001600160a01b03811690600160a01b900460ff168c565b601e546001600160a01b03163314806135fe5750601f546001600160a01b031633145b8061361357506020546001600160a01b031633145b613664576040805162461bcd60e51b815260206004820152601b60248201527f53574150503a20496e76616c696420746f6b656e206d696e7465720000000000604482015290519081900360640190fd5b611b588282614a73565b600061367861395f565b600101905090565b6060600080841180156136aa57506001600160a01b03851660009081526013602052604090205484105b6136cc576001600160a01b0385166000908152601360205260409020546136e9565b6001600160a01b0385166000908152601360205260409020548490035b9050600080841180156136fb57508382115b61370657600061370a565b8382035b905060008183036001600160401b038111801561372657600080fd5b50604051908082528060200260200182016040528015613750578160200160208202803683370190505b509350825b8281111561199f576000613772896000198401600160f91b612d6e565b6001600160a01b03808b1660009081526017602090815260408083206001600160801b0319861684529091529020549192506137ae9116614e50565b156137e057808684815181106137c057fe5b6001600160801b0319909216602092830291909101909101526001909201915b5060001901613755565b601f546001600160a01b031681565b600d54600090620151809083035b0492915050565b6020546001600160a01b031681565b613828611b4861395f565b60005b825181101561386d576138653384838151811061384457fe5b602002602001015184848151811061385857fe5b6020026020010151613d59565b60010161382b565b505050565b6000828201838110156138cc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166138ea57600080fd5b6001600160a01b0382166138fd57600080fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000611b7e61396c612d58565b6137f9565b60006138cc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614e5e565b6001600160a01b0383166139c657600080fd5b6001600160a01b0382166139d957600080fd5b6001600160a01b0383166000908152602081905260409020546139fc9082613971565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613a2b9082613872565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b038216613a9857600080fd5b6001600160a01b038216600090815260208190526040902054613abb9082613971565b6001600160a01b038316600090815260208190526040902055600554613ae19082613971565b6005556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b613b31611d8e565b600654600954600091905b836001600160401b0316811015611c835760001981016000908152601c602081815260408084206002015485855260188352818520549383529381902081516060810183528154815260019091015492810192909252919092019082018190526007549094508410613baf576000613bb6565b6007548490035b8152613c6e613c5a84613bc76115bd565b6000868152601a602090815260409182902054600e54600c5484516330550a4b60e01b815263ffffffff9091166004820152935191936001600160a01b03909116926330550a4b92602480840193829003018186803b158015613c2957600080fd5b505afa158015613c3d573d6000803e3d6000fd5b505050506040513d6020811015613c5357600080fd5b5051614ef5565b8251611eea90670de0b6b3a7640000614138565b60208083019182526000848152601c825260408082208551815593516001808601919091558186015160029586015560001987018352601d80855282842090950154878452601985528284205495855292829020825160608101845281548152910154938101939093529201918101829052600a54919550908510613cf4576000613cfb565b600a548590035b8152613d11613c5a85613d0c6115bd565b614f12565b60208083019182526000858152601d9091526040908190208351815591516001830155820151600290910155613d45614f21565b505060098054600190810190915501613b3c565b6001600160a01b0380841660009081526017602090815260408083206001600160801b0319808816855290835292819020815160a08101835281549095168552600180820154608090811b90951693860193909352600281015491850191909152600381015460608501526004015460ff16151591830182905214613ddd57600080fd5b80516020808301516001600160a01b0380841660009081526016845260408082206001600160801b03198516835285528082208151610180810183528154815260018201549681019690965260028101549186019190915260038101546001600160401b038082166060880152600160401b820481166080880152600160801b8204811660a0880152600160c01b9091041660c0860152600481015460e08601526005810154610100860152600681015461012086015260070154918216610140850152600160a01b90910460ff161515610160840152909190613ec182866141f7565b90506000613ece8361427c565b9050613ed9836142da565b15613f2d57600087118015613ef65750613ef38282614f8e565b87105b15613f20576060860151613f0a9088613872565b6060870152613f198288613872565b9050613f28565b600060808701525b613f6b565b613f4782613f3961395f565b6001600160401b0316614f8e565b6060870151909750613f599088613872565b6060870152613f688288613872565b90505b6000613f788484846142ac565b6040880151909150613f8a9082613872565b87604001818152505086601760008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b6001600160801b0319166001600160801b031916815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160801b03021916908360801c0217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083151502179055509050506140738a82614a73565b604080516001600160801b03198b811682526020820184905282516001600160a01b03808f1694928a1693908b16927f5d13067bdc9e4d510839580df1e932220b31fb2bc7790b5bd35aae14f0303bed92918290030190a450505050505050505050565b6000808260c001516001600160401b031611614113576140f561395f565b6001600160401b03168260a001516001600160401b031611156115b7565b8160c001516001600160401b03168260a001516001600160401b031611159050919050565b600082614147575060006115b7565b8282028284828161415457fe5b04146138cc5760405162461bcd60e51b81526004018080602001828103825260218152602001806157bf6021913960400191505060405180910390fd5b60006138cc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614faf565b600f805460ff60a01b1916600160a01b179055565b600f805460ff60a01b19169055565b60006138cc826060015184606001516001600160401b0316601460008761014001516001600160a01b03166001600160a01b0316815260200190815260200160002060010154116142555784606001516001600160401b03166126a1565b6101408501516001600160a01b031660009081526014602052604090206001015490613872565b6000808260c001516001600160401b03161161429b57611bd582614936565b5060c001516001600160401b031690565b60006142bc846101400151615014565b6142d0576142cb848484615033565b611d65565b5060009392505050565b61016081015160009015806115b757506115b7826140d7565b6001600160a01b03821660009081526016602090815260408083206001600160801b0319851684529091528120600701548190600160a01b900460ff1661433957600080fd5b6001600160a01b03841660009081526016602090815260408083206001600160801b0319871684529091529020915061437061395f565b6003830180546001600160c01b0316600160c01b6001600160401b0393841681029190911791829055604080516101808101825286548152600187015460208201526002870154918101919091528284166060820152600160401b830484166080820152600160801b8304841660a0820152910490911660c0820152600483015460e08201526005830154610100820152600683015461012082015260078301546001600160a01b038116610140830152600160a01b900460ff16151561016082015261443c90615072565b60028301819055604080516101808101825284548152600185015460208201529081019190915260038301546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0820152600483015460e08201526005830154610100820152600683015461012082015260078301546001600160a01b038116610140830152600160a01b900460ff1615156101608201526144f290614b2e565b60078301805460ff60a01b1916905560018301546001600160a01b0386166000908152601b602052604090205491925061452c9190613971565b6001600160a01b0385166000908152601b6020526040902055600182015461456a908590831061455d576000614565565b828460010154035b614a73565b614578848360020154614a73565b9250929050565b600654831061458f576000614596565b6006548390035b60065560075482106145a95760006145b0565b6007548290035b60075580156145d457600a5481106145c95760006145d0565b600a548190035b600a555b61386d615093565b6145e5826150ea565b1561462d576000828152601860205260409020548110614606576000614619565b6000828152601860205260409020548190035b600083815260186020526040902055611b58565b600061463761180e565b6001600160401b03166000818152601c60205260409020600201549091508210614662576000614678565b6000818152601c60205260409020600201548290035b6000918252601c6020526040909120600201555050565b614698826150ea565b156146e05760008281526019602052604090205481106146b95760006146cc565b6000828152601960205260409020548190035b600083815260196020526040902055611b58565b60006146ea61180e565b6001600160401b03166000818152601d6020526040902060020154909150821061471557600061472b565b6000818152601d60205260409020600201548290035b6000918252601d6020526040909120600201555050565b61474b81615106565b15801561475c575061475c83614e50565b1561386d576001600160a01b03831660009081526014602052604090205482106147875760006147a4565b6001600160a01b0383166000908152601460205260409020548290035b6001600160a01b0384166000908152601460205260409020556147c683615122565b6001600160a01b038416600090815260146020526040902060010155505050565b8015611b58576001600160401b0382166000908152601a60205260409020546148109082613872565b6001600160401b0383166000908152601a60205260409020555050565b60008111801561484d5750604161484261395f565b6001600160401b0316115b15614909576000614861868684868861513a565b6008549091508111156149035760085461488390606490611eea90606e614138565b81106148a35760085461489e90606490611eea90606e614138565b6148a5565b805b90507fb52ab4a425c20017539fcd851fc4ddbb50d17546576353cd51a2d483d80a45b8816006600201546148d761395f565b6040805193845260208401929092526001600160401b031682820152519081900360600190a160088190555b5061492f565b604161491361395f565b6001600160401b0316141561492f57670186cc6acd4b00006008555b5050505050565b60006006600301548260a001516001600160401b031611614964578160a001516001600160401b03166115b7565b505060095490565b60008160e00151600014614984578160e001516115b7565b50606001516001600160401b031690565b6000825b828110156149d3576000818152601c6020526040902060010154670de0b6b3a76400008602816149c557fe5b049190910190600101614999565b509392505050565b61016081015160009015614a1057611bd56149f461395f565b6001600160401b03168360a001516001600160401b0316614f8e565b6115b78260c001516001600160401b03168360a001516001600160401b0316614f8e565b6000614a3f83614e50565b614a5957614a548585846402540be400615197565b614a6a565b614a6a85858464028fa6ae00615197565b95945050505050565b6001600160a01b038216614a8657600080fd5b600554614a939082613872565b6005556001600160a01b038216600090815260208190526040902054614ab99082613872565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000816101600151614b255781604001516115b7565b6115b7826151b9565b6000614b39826151d1565b80614b485750614b48826140d7565b611bda57611bd582615230565b604080516003808252608082019092526060916020820183803683370190505090508281600081518110614b8557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110614bc757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508181600281518110614bf557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505092915050565b3b63ffffffff161590565b614c2e615684565b600080614c3b8787613a85565b6001600160a01b0387166000908152601b6020526040902054614c5e9087613872565b6001600160a01b0388166000908152601b6020526040902055614c7f61366e565b9050614c8a87615266565b6001600160401b0380871660808601819052838216606087015283880190911660a0860152600161016086015260208501889052600854919350614cd2918891908790614a34565b8352614cdc61528f565b506020830151601054614cfc91670de0b6b3a764000091611eea91614138565b610100840152614d0b84614e50565b15613140576001600160a01b0384166101408401819052610100840151614d32919061547e565b614d4686866001600160401b0316866154e6565b6101208401529450945094915050565b6001600160a01b0381166000908152601360205260408120546115b7908390600160f91b612d6e565b6001600160a01b0316600090815260136020526040902080546001019055565b600082815260196020526040902054614db89082613872565b6000928352601960205260409092209190915550565b6001600160a01b0316600090815260126020526040902080546001019055565b600654614dfb9084613872565b600655600754614e0b9083613872565b60075580156145d457600a546145d09082613872565b600082815260186020526040902054614e3a9082613872565b6000928352601860205260409092209190915550565b6001600160a01b0316151590565b60008184841115614eed5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614eb2578181015183820152602001614e9a565b50505050905090810190601f168015614edf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082828587016127100281614f0757fe5b040195945050505050565b6315dd2ecd9101612710020490565b600f54600160a01b900460ff16151560011415614f5b57600c805463ffffffff19811663ffffffff91821660051901909116179055611bfc565b600f54600160a01b900460ff16611bfc57600c805463ffffffff19811663ffffffff918216600601909116179055611bfc565b6000818311614fa657614fa18284613971565b6138cc565b50600092915050565b60008183614ffe5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614eb2578181015183820152602001614e9a565b50600083858161500a57fe5b0495945050505050565b6001600160a01b03166000908152601460205260409020600101541590565b6000825b828110156149d3576000818152601d60205260409020600101548551670de0b6b3a7640000028161506457fe5b049190910190600101615037565b60006115b782600001516150858461496c565b61508e85614936565b614995565b600954600754600654600854600a54604080519485526020850193909352838301919091526060830152517fea8ce1d041020595d75f4f48ba3378787b84e61d101465836fa54f1b338a4db59181900360800190a2565b60006150f461395f565b6001600160401b031690911015919050565b600061511061395f565b6001600160401b031690911115919050565b600061512d82615517565b611bda57611bd58261553e565b60008061516c8461514a85614e50565b615159576402540be400615160565b64028fa6ae005b64ffffffffff16615593565b905061518c85611eea6305f5e10061518685818d8d613872565b90614138565b979650505050505050565b6000614a6a6402540be400611eea6151af8786615593565b61518689886155dd565b60006151c4826151d1565b611bda57611bd582615072565b6000808260c001516001600160401b03161161520c576151ef61395f565b6001600160401b031682606001516001600160401b0316116115b7565b8160c001516001600160401b031682606001516001600160401b0316119050919050565b60006103e861523e836155f5565b6001615249856149db565b03610320028161525557fe5b046064018360200151028161380757fe5b6001600160a01b0381166000908152601260205260408120546115b7908390600160f81b612d6e565b6040805163d06ca61f60e01b8152670de0b6b3a764000060048201818152602483019384526011805460448501819052600095737a250d5630b4cf539739df2c5dacb4c659f2488d9563d06ca61f9594926064909101908490801561531d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116152ff575b5050935050505060006040518083038186803b15801561533c57600080fd5b505afa9250505080156153fc57506040513d6000823e601f3d908101601f19168201604052602081101561536f57600080fd5b8101908080516040519392919084600160201b82111561538e57600080fd5b9083019060208201858111156153a357600080fd5b82518660208202830111600160201b821117156153bf57600080fd5b82525081516020918201928201910280838360005b838110156153ec5781810151838201526020016153d4565b5050505090500160405250505060015b6154585761540861571a565b80615413575061541d565b505060105461159c565b3d808015615447576040519150601f19603f3d011682016040523d82523d6000602084013e61544c565b606091505b5060105491505061159c565b8060028151811061546557fe5b602002602001015160108190555060105491505061159c565b6001600160a01b0382166000908152601460205260409020546154a19082613872565b6001600160a01b0383166000908152601460205260409020556154c382615122565b6001600160a01b0390921660009081526014602052604090206001019190915550565b60006154f182615014565b806154fd575061016d83105b6142d0576142cb84846006600201546402540be400615197565b6001600160a01b031660009081526014602052604090205469021e19e0c9bab24000001190565b6001600160a01b0381166000908152601460205260408120600101546155745761556661395f565b6001600160401b03166115b7565b506001600160a01b031660009081526014602052604090206001015490565b6000816155c061072185116155a95760006155b0565b6107201985015b660150b9a52b11276134c161562b565b6155d4856630aad4df397abe61072161562b565b01019392505050565b60006138cc82611eea85670de0b6b3a7640000614138565b6000600182608001516001600160401b03161161561357600161561c565b60018260800151035b6001600160401b031692915050565b6000611d656402540be40083861161564c576156478686614138565b611eea565b611eea8486614138565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180610180016040528060008152602001600081526020016000815260200160006001600160401b0316815260200160006001600160401b0316815260200160006001600160401b0316815260200160006001600160401b0316815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000151581525090565b60e01c90565b600060443d101561572a5761159c565b600481823e6308c379a061573e8251615714565b146157485761159c565b6040513d600319016004823e80513d6001600160401b038160248401118184111715615777575050505061159c565b82840192508251915080821115615791575050505061159c565b503d830160208284010111156157a95750505061159c565b601f01601f191681016020016040529150509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212205fc0fbf6b4e80d846430a2c2107e39abab2c58c4d585e46baae4b057c29057f764736f6c63430007060033
Deployed Bytecode
0x6080604052600436106103d15760003560e01c80639e78fb4f116101fd578063c23d656411610118578063df2d02b1116100ab578063e7881cda1161007a578063e7881cda1461132c578063e8a407661461136b578063e8f5babe14611380578063f843d495146113aa578063fc527bf5146113bf576103db565b8063df2d02b1146111d7578063e1d033e91461121f578063e742806a146112de578063e769c3f814611317576103db565b8063d6565a2d116100e7578063d6565a2d1461112a578063d826492014611154578063db74559b14611169578063dd62ed3e1461119c576103db565b8063c23d656414611053578063c31245251461107d578063c74c0fac146110c5578063d1cf9098146110da576103db565b8063b543c4ba11610190578063be21ff701161015f578063be21ff7014610f48578063bf58f6d214610f72578063c172628e14610fbb578063c19f953c1461103e576103db565b8063b543c4ba14610eac578063b5ebdb6c14610ec1578063bba85e1f14610f09578063bbe4fd5014610f33576103db565b8063ae3d1de2116101cc578063ae3d1de214610df1578063afbad29214610e24578063b08dd75214610e39578063b381a81114610e7e576103db565b80639e78fb4f14610cd3578063a4ed055014610ce8578063a9059cbb14610d85578063a91b19f214610dbe576103db565b80634f47b16d116102ed578063779e2e18116102805780638e4647ee1161024f5780638e4647ee14610be957806395d89b4114610c1c57806399c2def414610c315780639b57ab1214610c65576103db565b8063779e2e1814610aac5780638649102b14610aef57806387da627414610b3757806389201d4e14610b4c576103db565b8063613fc9fd116102bc578063613fc9fd1461089d5780636ba631cf146108b257806370a08231146108c7578063763241d3146108fa576103db565b80634f47b16d146107cd5780635540989f146108075780635b2023871461081c57806360e4c6511461086c576103db565b806320429fac1161036557806333060d901161033457806333060d90146106ef5780633b58afe71461072257806342966c681461076e5780634dfc7a031461079a576103db565b806320429fac146105af57806323672d8a146105f257806323b872dd14610681578063313ce567146106c4576103db565b8063095ea7b3116103a1578063095ea7b3146104cf57806318160ddd146105085780631c0b37e11461051d5780631e2ef22d1461057e576103db565b80625ada7f146103e0578063022466b51461040757806302cbb2661461041c57806306fdde0314610445576103db565b366103db57600080fd5b600080fd5b3480156103ec57600080fd5b506103f56114ef565b60408051918252519081900360200190f35b34801561041357600080fd5b506103f56114f5565b34801561042857600080fd5b506104316114fb565b604080519115158252519081900360200190f35b34801561045157600080fd5b5061045a61150b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561049457818101518382015260200161047c565b50505050905090810190601f1680156104c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104db57600080fd5b50610431600480360360408110156104f257600080fd5b506001600160a01b03813516906020013561159f565b34801561051457600080fd5b506103f56115bd565b6105526004803603604081101561053357600080fd5b5080356001600160401b031690602001356001600160a01b03166115c3565b604080516001600160801b03199485168152602081019390935292168183015290519081900360600190f35b34801561058a57600080fd5b5061059361180e565b604080516001600160401b039092168252519081900360200190f35b3480156105bb57600080fd5b506103f5600480360360408110156105d257600080fd5b5080356001600160a01b031690602001356001600160801b031916611820565b3480156105fe57600080fd5b506106316004803603606081101561061557600080fd5b506001600160a01b03813516906020810135906040013561183d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561066d578181015183820152602001610655565b505050509050019250505060405180910390f35b34801561068d57600080fd5b50610431600480360360608110156106a457600080fd5b506001600160a01b038135811691602081013590911690604001356119aa565b3480156106d057600080fd5b506106d9611a19565b6040805160ff9092168252519081900360200190f35b3480156106fb57600080fd5b506103f56004803603602081101561071257600080fd5b50356001600160a01b0316611a22565b34801561072e57600080fd5b506107556004803603602081101561074557600080fd5b50356001600160a01b0316611a34565b6040805192835260208301919091528051918290030190f35b34801561077a57600080fd5b506107986004803603602081101561079157600080fd5b5035611a4d565b005b3480156107a657600080fd5b50610798600480360360208110156107bd57600080fd5b50356001600160a01b0316611a5a565b3480156107d957600080fd5b50610798600480360360408110156107f057600080fd5b506001600160801b03198135169060200135611b3d565b34801561081357600080fd5b50610593611b5c565b34801561082857600080fd5b5061084f6004803603602081101561083f57600080fd5b50356001600160a01b0316611b83565b604080516001600160801b03199092168252519081900360200190f35b34801561087857600080fd5b50610881611be2565b604080516001600160a01b039092168252519081900360200190f35b3480156108a957600080fd5b50610798611bf1565b3480156108be57600080fd5b50610881611bfe565b3480156108d357600080fd5b506103f5600480360360208110156108ea57600080fd5b50356001600160a01b0316611c0d565b34801561090657600080fd5b506107986004803603606081101561091d57600080fd5b810190602081018135600160201b81111561093757600080fd5b82018360208201111561094957600080fd5b803590602001918460208302840111600160201b8311171561096a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156109b957600080fd5b8201836020820111156109cb57600080fd5b803590602001918460208302840111600160201b831117156109ec57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610a3b57600080fd5b820183602082011115610a4d57600080fd5b803590602001918460208302840111600160201b83111715610a6e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611c28945050505050565b348015610ab857600080fd5b5061043160048036036040811015610acf57600080fd5b5080356001600160a01b031690602001356001600160801b031916611c89565b348015610afb57600080fd5b50610b1960048036036020811015610b1257600080fd5b5035611d6d565b60408051938452602084019290925282820152519081900360600190f35b348015610b4357600080fd5b50610798611d8e565b348015610b5857600080fd5b50610b8f60048036036040811015610b6f57600080fd5b5080356001600160a01b031690602001356001600160801b031916611f94565b604080516001600160a01b0390991689526001600160801b031990971660208901528787019590955260608701939093529015156080860152151560a0850152151560c0840152151560e083015251908190036101000190f35b348015610bf557600080fd5b506103f560048036036020811015610c0c57600080fd5b50356001600160a01b0316612286565b348015610c2857600080fd5b5061045a612298565b348015610c3d57600080fd5b506103f560048036036020811015610c5457600080fd5b50356001600160801b0319166122f9565b348015610c7157600080fd5b50610ca860048036036040811015610c8857600080fd5b5080356001600160801b03191690602001356001600160401b0316612556565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610cdf57600080fd5b506107986129ea565b348015610cf457600080fd5b50610d2b60048036036040811015610d0b57600080fd5b5080356001600160a01b031690602001356001600160801b031916612aa4565b604080519b8c5260208c019a909a528a8a019890985260608a0196909652608089019490945260a088019290925260c087015260e08601526101008501521515610120840152151561014083015251908190036101600190f35b348015610d9157600080fd5b5061043160048036036040811015610da857600080fd5b506001600160a01b038135169060200135612bd0565b348015610dca57600080fd5b5061079860048036036020811015610de157600080fd5b50356001600160401b0316612be4565b348015610dfd57600080fd5b5061084f60048036036020811015610e1457600080fd5b50356001600160a01b0316612c3e565b348015610e3057600080fd5b50610798612c90565b348015610e4557600080fd5b5061079860048036036060811015610e5c57600080fd5b506001600160a01b038135811691602081013582169160409091013516612cb9565b348015610e8a57600080fd5b50610e93612d0f565b6040805163ffffffff9092168252519081900360200190f35b348015610eb857600080fd5b50610881612d1b565b348015610ecd57600080fd5b506103f560048036036060811015610ee457600080fd5b5080359060208101356001600160401b031690604001356001600160a01b0316612d2a565b348015610f1557600080fd5b506103f560048036036020811015610f2c57600080fd5b5035612d46565b348015610f3f57600080fd5b506103f5612d58565b348015610f5457600080fd5b506103f560048036036020811015610f6b57600080fd5b5035612d5c565b348015610f7e57600080fd5b5061084f60048036036060811015610f9557600080fd5b5080356001600160a01b031690602081013590604001356001600160f81b031916612d6e565b348015610fc757600080fd5b50610ffe60048036036040811015610fde57600080fd5b5080356001600160a01b031690602001356001600160801b031916612dc9565b604080516001600160a01b0390961686526001600160801b0319909416602086015284840192909252606084015215156080830152519081900360a00190f35b34801561104a57600080fd5b50610881612e15565b34801561105f57600080fd5b506103f56004803603602081101561107657600080fd5b5035612e24565b34801561108957600080fd5b50611092612e36565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b3480156110d157600080fd5b50610881612e4b565b3480156110e657600080fd5b50610552600480360360808110156110fd57600080fd5b506001600160a01b0381358116916020810135916001600160401b03604083013516916060013516612e63565b34801561113657600080fd5b50610b196004803603602081101561114d57600080fd5b503561314a565b34801561116057600080fd5b5061088161316b565b34801561117557600080fd5b506103f56004803603602081101561118c57600080fd5b50356001600160a01b0316613183565b3480156111a857600080fd5b506103f5600480360360408110156111bf57600080fd5b506001600160a01b0381358116916020013516613195565b3480156111e357600080fd5b50610552600480360360608110156111fa57600080fd5b5080359060208101356001600160401b031690604001356001600160a01b03166131c0565b34801561122b57600080fd5b506112626004803603604081101561124257600080fd5b5080356001600160a01b031690602001356001600160801b03191661354f565b604080519c8d5260208d019b909b528b8b01999099526001600160401b0397881660608c015295871660808b015293861660a08a01529190941660c088015260e08701939093526101008601929092526101208501919091526001600160a01b0316610140840152151561016083015251908190036101800190f35b3480156112ea57600080fd5b506107986004803603604081101561130157600080fd5b506001600160a01b0381351690602001356135db565b34801561132357600080fd5b5061059361366e565b34801561133857600080fd5b506106316004803603606081101561134f57600080fd5b506001600160a01b038135169060208101359060400135613680565b34801561137757600080fd5b506108816137ea565b34801561138c57600080fd5b50610593600480360360208110156113a357600080fd5b50356137f9565b3480156113b657600080fd5b5061088161380e565b3480156113cb57600080fd5b50610798600480360360408110156113e257600080fd5b810190602081018135600160201b8111156113fc57600080fd5b82018360208201111561140e57600080fd5b803590602001918460208302840111600160201b8311171561142f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561147e57600080fd5b82018360208201111561149057600080fd5b803590602001918460208302840111600160201b831117156114b157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061381d945050505050565b60105481565b600d5481565b600f54600160a01b900460ff1681565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156115945780601f1061156957610100808354040283529160200191611594565b820191906000526020600020905b81548152906001019060200180831161157757829003601f168201915b505050505090505b90565b60006115b36115ac6138d3565b84846138d7565b5060015b92915050565b60055490565b60408051600280825260608201835260009283928392839260208301908036833701905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160008151811061160c57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061163a57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506000737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316637ff36ab53460018533426040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156116ef5781810151838201526020016116d7565b50505050905001955050505050506000604051808303818588803b15801561171657600080fd5b505af115801561172a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052602081101561175457600080fd5b8101908080516040519392919084600160201b82111561177357600080fd5b90830190602082018581111561178857600080fd5b82518660208202830111600160201b821117156117a457600080fd5b82525081516020918201928201910280838360005b838110156117d15781810151838201526020016117b9565b5050505090500160405250505090506117ff816001815181106117f057fe5b602002602001015188886131c0565b94509450945050509250925092565b6000600161181a61395f565b03905090565b601560209081526000928352604080842090915290825290205481565b60606000808411801561186757506001600160a01b03851660009081526012602052604090205484105b611889576001600160a01b0385166000908152601260205260409020546118a6565b6001600160a01b0385166000908152601260205260409020548490035b9050600080841180156118b857508382115b6118c35760006118c7565b8382035b905060008183036001600160401b03811180156118e357600080fd5b5060405190808252806020026020018201604052801561190d578160200160208202803683370190505b509350825b8281111561199f57600061192f896000198401600160f81b612d6e565b6001600160a01b038a1660009081526016602090815260408083206001600160801b03198516845290915290206001015490915015611995578086848151811061197557fe5b6001600160801b0319909216602092830291909101909101526001909201915b5060001901611912565b505050509392505050565b6000611a04846119b86138d3565b6001600160a01b03871660009081526001602052604081206119ff918791906119df6138d3565b6001600160a01b0316815260208101919091526040016000205490613971565b6138d7565b611a0f8484846139b3565b5060019392505050565b60045460ff1690565b60126020526000908152604090205481565b6014602052600090815260409020805460019091015482565b611a573382613a85565b50565b601e546001600160a01b0316331480611a7d5750601f546001600160a01b031633145b80611a9257506020546001600160a01b031633145b611ae3576040805162461bcd60e51b815260206004820152601b60248201527f53574150503a20496e76616c696420746f6b656e206d696e7465720000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260146020526040902069021e19e0c9bab24000009055611b1061366e565b6001600160a01b0390911660009081526014602052604090206001600160401b0391909116600190910155565b611b4d611b4861395f565b613b29565b611b58338383613d59565b5050565b6000600d54611b69612d58565b1015611b76576000611b7e565b611b7e61395f565b905090565b6001600160a01b03811660009081526013602052604081205415611bda576001600160a01b038216600090815260136020526040902054611bd5908390611bcb906001613971565b600160f91b612d6e565b6115b7565b600092915050565b601e546001600160a01b031681565b611bfc611b4861395f565b565b600f546001600160a01b031681565b6001600160a01b031660009081526020819052604090205490565b60005b8351811015611c8357611c78848281518110611c4357fe5b6020026020010151848381518110611c5757fe5b6020026020010151848481518110611c6b57fe5b60200260200101516131c0565b505050600101611c2b565b50505050565b6001600160a01b0382811660009081526016602090815260408083206001600160801b03198616845282528083208151610180810183528154815260018201549381019390935260028101549183019190915260038101546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b9091041660c0830152600481015460e08301526005810154610100830152600681015461012083015260070154928316610140820152600160a01b90920460ff16151561016083015290611d65816140d7565b949350505050565b601d6020526000908152604090208054600182015460029092015490919083565b600080600f60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611ddf57600080fd5b505afa158015611df3573d6000803e3d6000fd5b505050506040513d6060811015611e0957600080fd5b508051602091820151600f546040805163d21220a760e01b8152905193965091945060009373c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2936001600160a01b039092169263d21220a79260048083019392829003018186803b158015611e7157600080fd5b505afa158015611e85573d6000803e3d6000fd5b505050506040513d6020811015611e9b57600080fd5b50516001600160a01b031614611eb15781611eb3565b825b6dffffffffffffffffffffffffffff1690506000611ecf6115bd565b15611ef557611ef0611edf6115bd565b611eea8460c8614138565b90614191565b611ef8565b60005b9050602881108015611f145750600f54600160a01b900460ff16155b15611f2157611f216141d3565b603c81118015611f3f5750600f54600160a01b900460ff1615156001145b15611f4c57611f4c6141e8565b600f5460408051600160a01b90920460ff1615158252517fbbf65e071e5468fb599b01ba3b914ae6065cf10ad084e0efe2133f7eaa8979bd916020908290030190a150505050565b6000806000806000806000806000601760008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b6001600160801b0319166001600160801b03191681526020019081526020016000206040518060a00160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a900460801b6001600160801b0319166001600160801b031916815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152505090508060000151985080602001519750806080015194506000601660008b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a6001600160801b0319166001600160801b0319168152602001908152602001600020604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020016003820160089054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020016003820160109054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020016003820160189054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016007820160149054906101000a900460ff161515151581525050905080610120015197506122578161224983856141f7565b6122528461427c565b6142ac565b9650806101600151945061226a816142da565b9250612275816140d7565b935050509295985092959890939650565b601b6020526000908152604090205481565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115945780601f1061156957610100808354040283529160200191611594565b6000612306611b4861395f565b60008061231333856142f3565b6040805161018081018252835480825260018501546020830181905260028601549383019390935260038501546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b9091041660c0830152600485015460e08301526005850154610100830152600685015461012083018190526007909501546001600160a01b038116610140840152600160a01b900460ff1615156101608301529095509193506123d69290919061457f565b6123f18260a001516001600160401b031683600001516145dc565b61240d8260a001516001600160401b031683610120015161468f565b61242f82610140015183610100015184606001516001600160401b0316614742565b61243d8260c00151826147e7565b6124aa8183602001511161245257600061245a565b818360200151035b3360009081526015602090815260408083206001600160801b03198a16845290915290819020549085015161014086015160808701518751929093019290916001600160401b039091169061482d565b8161014001516001600160a01b0316336001600160a01b0316856001600160801b0319167f8cc66e48ebd8c008b36e03ee2f7c3f60a313a34a5bf1f3cb988a7936cd47f0d48560200151866000015187610120015188604001518960c001518960405180878152602001868152602001858152602001848152602001836001600160401b03168152602001828152602001965050505050505060405180910390a4506040015192915050565b6000806000806000612569611b4861395f565b3360009081526016602090815260408083206001600160801b03198b168452909152902060070154600160a01b900460ff166125a457600080fd5b3360009081526016602090815260408083206001600160801b03198b1684528252918290208251610180810184528154815260018201549281019290925260028101549282019290925260038201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b909104811660c0830152600483015460e0830152600583015461010083015260068301546101208301526007909201546001600160a01b038116610140830152600160a01b900460ff16151561016082015290871661268b5761268681614936565b6126a7565b6126a7876001600160401b03166126a18361496c565b90613872565b95508060a001516001600160401b031686116126c357856126cc565b6126cc81614936565b95506126e581600001516126df8361496c565b88614995565b94506126f0816140d7565b6127bf576126fd816149db565b9350612710858533600660020154614a34565b815190935061271f9084613971565b815260a0810151612739906001600160401b0316846145dc565b610120810151156127875761275685856000600660020154614a34565b6101208201519092506127699083613971565b61012082015260a0810151612787906001600160401b03168361468f565b6127936000848461457f565b6127ba81602001518683610140015184608001516001600160401b0316856000015161482d565b61283a565b3360009081526015602090815260408083206001600160801b03198c1684529091529020546127ee9086613872565b3360009081526015602090815260408083206001600160801b03198d16845282529091208290558201516101408301516080840151845161283a9492916001600160401b03169061482d565b60e081018681523360008181526016602090815260408083206001600160801b03198e168452825291829020855181559085015160018201559084015160028201556060840151600382018054608087015160a088015160c089015167ffffffffffffffff199093166001600160401b039586161767ffffffffffffffff60401b1916600160401b928616929092029190911767ffffffffffffffff60801b1916600160801b91851691909102176001600160c01b0316600160c01b93909116929092029190911790559151600483015561010083015160058301556101208301516006830155610140830151600790920180546101608501516001600160a01b03199091166001600160a01b039094169390931760ff60a01b1916600160a01b93151593909302929092179091556129739086614a73565b336001600160801b031989167f7b5d0995432c9ea1c8033b358af591013d0deff8dec5f4ae49612eba8bfafc0c878987876129ac61395f565b6040805195865260208601949094528484019290925260608401526001600160401b03166080830152519081900360a00190a3509295509295909350565b604080516364e329cb60e11b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201523060248201529051735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163c9c653969160448083019260209291908290030181600087803b158015612a5757600080fd5b505af1158015612a6b573d6000803e3d6000fd5b505050506040513d6020811015612a8157600080fd5b5051600f80546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0382811660009081526016602090815260408083206001600160801b03198616845282528083208151610180810183528154808252600183015494820185905260028301549382019390935260038201546001600160401b0380821660608401819052600160401b8304821660808501819052600160801b8404831660a08601819052600160c01b90940490921660c08501819052600486015460e0860181905260058701546101008701526006870154610120870152600790960154998a16610140860152600160a01b90990460ff161515610160850152979096919590949092909190819081908190612b9f81614b0f565b9450612baa81614b2e565b93508061016001519250612bbd816140d7565b9150509295989b509295989b9093969950565b60006115b3612bdd6138d3565b84846139b3565b6000816001600160401b0316118015612c155750612c0061395f565b6001600160401b0316816001600160401b0316105b612c1e57600080fd5b6009546001600160401b03821611612c3557600080fd5b611a5781613b29565b6001600160a01b03811660009081526012602052604081205415611bda576001600160a01b038216600090815260126020526040902054611bd5908390612c86906001613971565b600160f81b612d6e565b6021546001600160a01b03163314612ca757600080fd5b602180546001600160a01b0319169055565b6021546001600160a01b03163314612cd057600080fd5b601e80546001600160a01b039485166001600160a01b031991821617909155601f80549385169382169390931790925560208054919093169116179055565b600c5463ffffffff1681565b600e546001600160a01b031681565b6000611d6584846001600160401b031684600660020154614a34565b601a6020526000908152604090205481565b4290565b60196020526000908152604090205481565b604080516bffffffffffffffffffffffff19606086901b16602080830191909152603482018590526001600160f81b0319841660548301528251603581840301815260559092019092528051910120600090611d659061159c565b6017602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401546001600160a01b039093169360809290921b9290919060ff1685565b6021546001600160a01b031681565b60186020526000908152604090205481565b600654600754600854600954600a54600b5486565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b604080516323b872dd60e01b81523360048201523060248201526044810185905290516000918291829188916001600160a01b038316916323b872dd91606480830192602092919082900301818887803b158015612ec057600080fd5b505af1158015612ed4573d6000803e3d6000fd5b505050506040513d6020811015612eea57600080fd5b50506040805163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d60048201526024810189905290516001600160a01b0383169163095ea7b39160448083019260209291908290030181600087803b158015612f4f57600080fd5b505af1158015612f63573d6000803e3d6000fd5b505050506040513d6020811015612f7957600080fd5b5060009050612f888930614b55565b90506000737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398a60018533426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561302557818101518382015260200161300d565b505050509050019650505050505050600060405180830381600087803b15801561304e57600080fd5b505af1158015613062573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561308b57600080fd5b8101908080516040519392919084600160201b8211156130aa57600080fd5b9083019060208201858111156130bf57600080fd5b82518660208202830111600160201b821117156130db57600080fd5b82525081516020918201928201910280838360005b838110156131085781810151838201526020016130f0565b5050505090500160405250505090506131368160028151811061312757fe5b602002602001015189896131c0565b9550955095505050505b9450945094915050565b601c6020526000908152604090208054600182015460029092015490919083565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60136020526000908152604090205481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60008080336001600160a01b038516148015906131e157506131e184614c1b565b6131ea57600080fd5b60016001600160401b0386161080159061320f5750613be26001600160401b03861611155b61321857600080fd5b620f424086101561322857600080fd5b6000806000613239338a8a8a614c26565b6001600160401b0316925092509250600083610120015111156133305761325e615656565b3381526001600160801b0319831660208201526001608082015261328188614d56565b6001600160a01b0389811660009081526017602090815260408083206001600160801b0319868116855290835292819020865181546001600160a01b031916951694909417845590850151600184018054909316608091821c179092558401516002830155606084015160038301558301516004909101805460ff1916911515919091179055945061331288614d7f565b61332e8460a001516001600160401b0316856101200151614d9f565b505b3360008181526016602090815260408083206001600160801b031987168452825291829020865181559086015160018201559085015160028201556060850151600382018054608088015160a089015160c08a015167ffffffffffffffff199093166001600160401b039586161767ffffffffffffffff60401b1916600160401b928616929092029190911767ffffffffffffffff60801b1916600160801b91851691909102176001600160c01b0316600160c01b939091169290920291909117905560e0850151600482015561010085015160058201556101208501516006820155610140850151600790910180546101608701516001600160a01b03199091166001600160a01b039093169290921760ff60a01b1916600160a01b9215159290920291909117905561346390614dce565b61347b83602001518460000151856101200151614dee565b6134968360a001516001600160401b03168460000151614e21565b866001600160a01b0316336001600160a01b0316836001600160801b0319167f6619c8f19b39bf3558af16516f9ca110fcac4a7ab6d846d1b02a17b11f703a338660200151876000015188610120015189606001518a608001518b610100015160405180878152602001868152602001858152602001846001600160401b03168152602001836001600160401b03168152602001828152602001965050505050505060405180910390a490945092505093509350939050565b6016602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600586015460068701546007909701549596949593946001600160401b0380851695600160401b8604821695600160801b8104831695600160c01b909104909216939192906001600160a01b03811690600160a01b900460ff168c565b601e546001600160a01b03163314806135fe5750601f546001600160a01b031633145b8061361357506020546001600160a01b031633145b613664576040805162461bcd60e51b815260206004820152601b60248201527f53574150503a20496e76616c696420746f6b656e206d696e7465720000000000604482015290519081900360640190fd5b611b588282614a73565b600061367861395f565b600101905090565b6060600080841180156136aa57506001600160a01b03851660009081526013602052604090205484105b6136cc576001600160a01b0385166000908152601360205260409020546136e9565b6001600160a01b0385166000908152601360205260409020548490035b9050600080841180156136fb57508382115b61370657600061370a565b8382035b905060008183036001600160401b038111801561372657600080fd5b50604051908082528060200260200182016040528015613750578160200160208202803683370190505b509350825b8281111561199f576000613772896000198401600160f91b612d6e565b6001600160a01b03808b1660009081526017602090815260408083206001600160801b0319861684529091529020549192506137ae9116614e50565b156137e057808684815181106137c057fe5b6001600160801b0319909216602092830291909101909101526001909201915b5060001901613755565b601f546001600160a01b031681565b600d54600090620151809083035b0492915050565b6020546001600160a01b031681565b613828611b4861395f565b60005b825181101561386d576138653384838151811061384457fe5b602002602001015184848151811061385857fe5b6020026020010151613d59565b60010161382b565b505050565b6000828201838110156138cc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166138ea57600080fd5b6001600160a01b0382166138fd57600080fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000611b7e61396c612d58565b6137f9565b60006138cc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614e5e565b6001600160a01b0383166139c657600080fd5b6001600160a01b0382166139d957600080fd5b6001600160a01b0383166000908152602081905260409020546139fc9082613971565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613a2b9082613872565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b038216613a9857600080fd5b6001600160a01b038216600090815260208190526040902054613abb9082613971565b6001600160a01b038316600090815260208190526040902055600554613ae19082613971565b6005556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b613b31611d8e565b600654600954600091905b836001600160401b0316811015611c835760001981016000908152601c602081815260408084206002015485855260188352818520549383529381902081516060810183528154815260019091015492810192909252919092019082018190526007549094508410613baf576000613bb6565b6007548490035b8152613c6e613c5a84613bc76115bd565b6000868152601a602090815260409182902054600e54600c5484516330550a4b60e01b815263ffffffff9091166004820152935191936001600160a01b03909116926330550a4b92602480840193829003018186803b158015613c2957600080fd5b505afa158015613c3d573d6000803e3d6000fd5b505050506040513d6020811015613c5357600080fd5b5051614ef5565b8251611eea90670de0b6b3a7640000614138565b60208083019182526000848152601c825260408082208551815593516001808601919091558186015160029586015560001987018352601d80855282842090950154878452601985528284205495855292829020825160608101845281548152910154938101939093529201918101829052600a54919550908510613cf4576000613cfb565b600a548590035b8152613d11613c5a85613d0c6115bd565b614f12565b60208083019182526000858152601d9091526040908190208351815591516001830155820151600290910155613d45614f21565b505060098054600190810190915501613b3c565b6001600160a01b0380841660009081526017602090815260408083206001600160801b0319808816855290835292819020815160a08101835281549095168552600180820154608090811b90951693860193909352600281015491850191909152600381015460608501526004015460ff16151591830182905214613ddd57600080fd5b80516020808301516001600160a01b0380841660009081526016845260408082206001600160801b03198516835285528082208151610180810183528154815260018201549681019690965260028101549186019190915260038101546001600160401b038082166060880152600160401b820481166080880152600160801b8204811660a0880152600160c01b9091041660c0860152600481015460e08601526005810154610100860152600681015461012086015260070154918216610140850152600160a01b90910460ff161515610160840152909190613ec182866141f7565b90506000613ece8361427c565b9050613ed9836142da565b15613f2d57600087118015613ef65750613ef38282614f8e565b87105b15613f20576060860151613f0a9088613872565b6060870152613f198288613872565b9050613f28565b600060808701525b613f6b565b613f4782613f3961395f565b6001600160401b0316614f8e565b6060870151909750613f599088613872565b6060870152613f688288613872565b90505b6000613f788484846142ac565b6040880151909150613f8a9082613872565b87604001818152505086601760008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b6001600160801b0319166001600160801b031916815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160801b03021916908360801c0217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083151502179055509050506140738a82614a73565b604080516001600160801b03198b811682526020820184905282516001600160a01b03808f1694928a1693908b16927f5d13067bdc9e4d510839580df1e932220b31fb2bc7790b5bd35aae14f0303bed92918290030190a450505050505050505050565b6000808260c001516001600160401b031611614113576140f561395f565b6001600160401b03168260a001516001600160401b031611156115b7565b8160c001516001600160401b03168260a001516001600160401b031611159050919050565b600082614147575060006115b7565b8282028284828161415457fe5b04146138cc5760405162461bcd60e51b81526004018080602001828103825260218152602001806157bf6021913960400191505060405180910390fd5b60006138cc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614faf565b600f805460ff60a01b1916600160a01b179055565b600f805460ff60a01b19169055565b60006138cc826060015184606001516001600160401b0316601460008761014001516001600160a01b03166001600160a01b0316815260200190815260200160002060010154116142555784606001516001600160401b03166126a1565b6101408501516001600160a01b031660009081526014602052604090206001015490613872565b6000808260c001516001600160401b03161161429b57611bd582614936565b5060c001516001600160401b031690565b60006142bc846101400151615014565b6142d0576142cb848484615033565b611d65565b5060009392505050565b61016081015160009015806115b757506115b7826140d7565b6001600160a01b03821660009081526016602090815260408083206001600160801b0319851684529091528120600701548190600160a01b900460ff1661433957600080fd5b6001600160a01b03841660009081526016602090815260408083206001600160801b0319871684529091529020915061437061395f565b6003830180546001600160c01b0316600160c01b6001600160401b0393841681029190911791829055604080516101808101825286548152600187015460208201526002870154918101919091528284166060820152600160401b830484166080820152600160801b8304841660a0820152910490911660c0820152600483015460e08201526005830154610100820152600683015461012082015260078301546001600160a01b038116610140830152600160a01b900460ff16151561016082015261443c90615072565b60028301819055604080516101808101825284548152600185015460208201529081019190915260038301546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0820152600483015460e08201526005830154610100820152600683015461012082015260078301546001600160a01b038116610140830152600160a01b900460ff1615156101608201526144f290614b2e565b60078301805460ff60a01b1916905560018301546001600160a01b0386166000908152601b602052604090205491925061452c9190613971565b6001600160a01b0385166000908152601b6020526040902055600182015461456a908590831061455d576000614565565b828460010154035b614a73565b614578848360020154614a73565b9250929050565b600654831061458f576000614596565b6006548390035b60065560075482106145a95760006145b0565b6007548290035b60075580156145d457600a5481106145c95760006145d0565b600a548190035b600a555b61386d615093565b6145e5826150ea565b1561462d576000828152601860205260409020548110614606576000614619565b6000828152601860205260409020548190035b600083815260186020526040902055611b58565b600061463761180e565b6001600160401b03166000818152601c60205260409020600201549091508210614662576000614678565b6000818152601c60205260409020600201548290035b6000918252601c6020526040909120600201555050565b614698826150ea565b156146e05760008281526019602052604090205481106146b95760006146cc565b6000828152601960205260409020548190035b600083815260196020526040902055611b58565b60006146ea61180e565b6001600160401b03166000818152601d6020526040902060020154909150821061471557600061472b565b6000818152601d60205260409020600201548290035b6000918252601d6020526040909120600201555050565b61474b81615106565b15801561475c575061475c83614e50565b1561386d576001600160a01b03831660009081526014602052604090205482106147875760006147a4565b6001600160a01b0383166000908152601460205260409020548290035b6001600160a01b0384166000908152601460205260409020556147c683615122565b6001600160a01b038416600090815260146020526040902060010155505050565b8015611b58576001600160401b0382166000908152601a60205260409020546148109082613872565b6001600160401b0383166000908152601a60205260409020555050565b60008111801561484d5750604161484261395f565b6001600160401b0316115b15614909576000614861868684868861513a565b6008549091508111156149035760085461488390606490611eea90606e614138565b81106148a35760085461489e90606490611eea90606e614138565b6148a5565b805b90507fb52ab4a425c20017539fcd851fc4ddbb50d17546576353cd51a2d483d80a45b8816006600201546148d761395f565b6040805193845260208401929092526001600160401b031682820152519081900360600190a160088190555b5061492f565b604161491361395f565b6001600160401b0316141561492f57670186cc6acd4b00006008555b5050505050565b60006006600301548260a001516001600160401b031611614964578160a001516001600160401b03166115b7565b505060095490565b60008160e00151600014614984578160e001516115b7565b50606001516001600160401b031690565b6000825b828110156149d3576000818152601c6020526040902060010154670de0b6b3a76400008602816149c557fe5b049190910190600101614999565b509392505050565b61016081015160009015614a1057611bd56149f461395f565b6001600160401b03168360a001516001600160401b0316614f8e565b6115b78260c001516001600160401b03168360a001516001600160401b0316614f8e565b6000614a3f83614e50565b614a5957614a548585846402540be400615197565b614a6a565b614a6a85858464028fa6ae00615197565b95945050505050565b6001600160a01b038216614a8657600080fd5b600554614a939082613872565b6005556001600160a01b038216600090815260208190526040902054614ab99082613872565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000816101600151614b255781604001516115b7565b6115b7826151b9565b6000614b39826151d1565b80614b485750614b48826140d7565b611bda57611bd582615230565b604080516003808252608082019092526060916020820183803683370190505090508281600081518110614b8557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110614bc757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508181600281518110614bf557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505092915050565b3b63ffffffff161590565b614c2e615684565b600080614c3b8787613a85565b6001600160a01b0387166000908152601b6020526040902054614c5e9087613872565b6001600160a01b0388166000908152601b6020526040902055614c7f61366e565b9050614c8a87615266565b6001600160401b0380871660808601819052838216606087015283880190911660a0860152600161016086015260208501889052600854919350614cd2918891908790614a34565b8352614cdc61528f565b506020830151601054614cfc91670de0b6b3a764000091611eea91614138565b610100840152614d0b84614e50565b15613140576001600160a01b0384166101408401819052610100840151614d32919061547e565b614d4686866001600160401b0316866154e6565b6101208401529450945094915050565b6001600160a01b0381166000908152601360205260408120546115b7908390600160f91b612d6e565b6001600160a01b0316600090815260136020526040902080546001019055565b600082815260196020526040902054614db89082613872565b6000928352601960205260409092209190915550565b6001600160a01b0316600090815260126020526040902080546001019055565b600654614dfb9084613872565b600655600754614e0b9083613872565b60075580156145d457600a546145d09082613872565b600082815260186020526040902054614e3a9082613872565b6000928352601860205260409092209190915550565b6001600160a01b0316151590565b60008184841115614eed5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614eb2578181015183820152602001614e9a565b50505050905090810190601f168015614edf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082828587016127100281614f0757fe5b040195945050505050565b6315dd2ecd9101612710020490565b600f54600160a01b900460ff16151560011415614f5b57600c805463ffffffff19811663ffffffff91821660051901909116179055611bfc565b600f54600160a01b900460ff16611bfc57600c805463ffffffff19811663ffffffff918216600601909116179055611bfc565b6000818311614fa657614fa18284613971565b6138cc565b50600092915050565b60008183614ffe5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614eb2578181015183820152602001614e9a565b50600083858161500a57fe5b0495945050505050565b6001600160a01b03166000908152601460205260409020600101541590565b6000825b828110156149d3576000818152601d60205260409020600101548551670de0b6b3a7640000028161506457fe5b049190910190600101615037565b60006115b782600001516150858461496c565b61508e85614936565b614995565b600954600754600654600854600a54604080519485526020850193909352838301919091526060830152517fea8ce1d041020595d75f4f48ba3378787b84e61d101465836fa54f1b338a4db59181900360800190a2565b60006150f461395f565b6001600160401b031690911015919050565b600061511061395f565b6001600160401b031690911115919050565b600061512d82615517565b611bda57611bd58261553e565b60008061516c8461514a85614e50565b615159576402540be400615160565b64028fa6ae005b64ffffffffff16615593565b905061518c85611eea6305f5e10061518685818d8d613872565b90614138565b979650505050505050565b6000614a6a6402540be400611eea6151af8786615593565b61518689886155dd565b60006151c4826151d1565b611bda57611bd582615072565b6000808260c001516001600160401b03161161520c576151ef61395f565b6001600160401b031682606001516001600160401b0316116115b7565b8160c001516001600160401b031682606001516001600160401b0316119050919050565b60006103e861523e836155f5565b6001615249856149db565b03610320028161525557fe5b046064018360200151028161380757fe5b6001600160a01b0381166000908152601260205260408120546115b7908390600160f81b612d6e565b6040805163d06ca61f60e01b8152670de0b6b3a764000060048201818152602483019384526011805460448501819052600095737a250d5630b4cf539739df2c5dacb4c659f2488d9563d06ca61f9594926064909101908490801561531d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116152ff575b5050935050505060006040518083038186803b15801561533c57600080fd5b505afa9250505080156153fc57506040513d6000823e601f3d908101601f19168201604052602081101561536f57600080fd5b8101908080516040519392919084600160201b82111561538e57600080fd5b9083019060208201858111156153a357600080fd5b82518660208202830111600160201b821117156153bf57600080fd5b82525081516020918201928201910280838360005b838110156153ec5781810151838201526020016153d4565b5050505090500160405250505060015b6154585761540861571a565b80615413575061541d565b505060105461159c565b3d808015615447576040519150601f19603f3d011682016040523d82523d6000602084013e61544c565b606091505b5060105491505061159c565b8060028151811061546557fe5b602002602001015160108190555060105491505061159c565b6001600160a01b0382166000908152601460205260409020546154a19082613872565b6001600160a01b0383166000908152601460205260409020556154c382615122565b6001600160a01b0390921660009081526014602052604090206001019190915550565b60006154f182615014565b806154fd575061016d83105b6142d0576142cb84846006600201546402540be400615197565b6001600160a01b031660009081526014602052604090205469021e19e0c9bab24000001190565b6001600160a01b0381166000908152601460205260408120600101546155745761556661395f565b6001600160401b03166115b7565b506001600160a01b031660009081526014602052604090206001015490565b6000816155c061072185116155a95760006155b0565b6107201985015b660150b9a52b11276134c161562b565b6155d4856630aad4df397abe61072161562b565b01019392505050565b60006138cc82611eea85670de0b6b3a7640000614138565b6000600182608001516001600160401b03161161561357600161561c565b60018260800151035b6001600160401b031692915050565b6000611d656402540be40083861161564c576156478686614138565b611eea565b611eea8486614138565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180610180016040528060008152602001600081526020016000815260200160006001600160401b0316815260200160006001600160401b0316815260200160006001600160401b0316815260200160006001600160401b0316815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000151581525090565b60e01c90565b600060443d101561572a5761159c565b600481823e6308c379a061573e8251615714565b146157485761159c565b6040513d600319016004823e80513d6001600160401b038160248401118184111715615777575050505061159c565b82840192508251915080821115615791575050505061159c565b503d830160208284010111156157a95750505061159c565b601f01601f191681016020016040529150509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212205fc0fbf6b4e80d846430a2c2107e39abab2c58c4d585e46baae4b057c29057f764736f6c63430007060033
Deployed Bytecode Sourcemap
52060:4982:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53534:8;;;52060:4982;;;;13305:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12641:26;;;;;;;;;;;;;:::i;13262:34::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2740:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4022:154;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4022:154:0;;;;;;;;:::i;3217:91::-;;;;;;;;;;;;;:::i;55253:532::-;;;;;;;;;;;;;;;;-1:-1:-1;55253:532:0;;-1:-1:-1;;;;;55253:532:0;;;;;-1:-1:-1;;;;;55253:532:0;;:::i;:::-;;;;-1:-1:-1;;;;;;55253:532:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15395:105;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;15395:105:0;;;;;;;;;;;;;;14493:62;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14493:62:0;;-1:-1:-1;;;;;14493:62:0;;;;;-1:-1:-1;;;;;;14493:62:0;;:::i;16573:795::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16573:795:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4312:262;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4312:262:0;;;;;;;;;;;;;;;;;:::i;3056:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14325:45;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14325:45:0;-1:-1:-1;;;;;14325:45:0;;:::i;14434:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14434:52:0;-1:-1:-1;;;;;14434:52:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5947:83;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5947:83:0;;:::i;:::-;;54739:196;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54739:196:0;-1:-1:-1;;;;;54739:196:0;;:::i;30456:242::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;30456:242:0;;;;;;;;:::i;15028:130::-;;;;;;;;;;;;;:::i;18397:208::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18397:208:0;-1:-1:-1;;;;;18397:208:0;;:::i;:::-;;;;-1:-1:-1;;;;;;18397:208:0;;;;;;;;;;;;;;52103:36;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;52103:36:0;;;;;;;;;;;;;;23685:98;;;;;;;;;;;;;:::i;13221:34::-;;;;;;;;;;;;;:::i;3394:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3394:110:0;-1:-1:-1;;;;;3394:110:0;;:::i;35338:307::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35338:307:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35338:307:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35338:307:0;;;;;;;;-1:-1:-1;35338:307:0;;-1:-1:-1;;;;;35338:307:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35338:307:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35338:307:0;;;;;;;;-1:-1:-1;35338:307:0;;-1:-1:-1;;;;;35338:307:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35338:307:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35338:307:0;;-1:-1:-1;35338:307:0;;-1:-1:-1;;;;;35338:307:0:i;47124:232::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47124:232:0;;-1:-1:-1;;;;;47124:232:0;;;;;-1:-1:-1;;;;;;47124:232:0;;:::i;22385:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22385:47:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;22703:657;;;;;;;;;;;;;:::i;32779:963::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32779:963:0;;-1:-1:-1;;;;;32779:963:0;;;;;-1:-1:-1;;;;;;32779:963:0;;:::i;:::-;;;;-1:-1:-1;;;;;32779:963:0;;;;;-1:-1:-1;;;;;;32779:963:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14885:51;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14885:51:0;-1:-1:-1;;;;;14885:51:0;;:::i;2895:87::-;;;;;;;;;;;;;:::i;39683:1459::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39683:1459:0;-1:-1:-1;;;;;;39683:1459:0;;:::i;42093:2703::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42093:2703:0;;-1:-1:-1;;;;;;42093:2703:0;;;;;-1:-1:-1;;;;;42093:2703:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13491:184;;;;;;;;;;;;;:::i;47364:982::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47364:982:0;;-1:-1:-1;;;;;47364:982:0;;;;;-1:-1:-1;;;;;;47364:982:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3512:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3512:161:0;;;;;;;;:::i;23968:239::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23968:239:0;-1:-1:-1;;;;;23968:239:0;;:::i;18198:191::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18198:191:0;-1:-1:-1;;;;;18198:191:0;;:::i;53892:142::-;;;;;;;;;;;;;:::i;53558:326::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;53558:326:0;;;;;;;;;;;;;;;;;;;:::i;12242:37::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13096:116;;;;;;;;;;;;;:::i;37649:323::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37649:323:0;;;;;;;-1:-1:-1;;;;;37649:323:0;;;;;-1:-1:-1;;;;;37649:323:0;;:::i;14827:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14827:49:0;;:::i;15669:89::-;;;;;;;;;;;;;:::i;14766:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14766:54:0;;:::i;16063:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16063:163:0;;-1:-1:-1;;;;;16063:163:0;;;;;;;;;;-1:-1:-1;;;;;;16063:163:0;;:::i;14628:73::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14628:73:0;;-1:-1:-1;;;;;14628:73:0;;;;;-1:-1:-1;;;;;;14628:73:0;;:::i;:::-;;;;-1:-1:-1;;;;;14628:73:0;;;;;-1:-1:-1;;;;;;14628:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52220:33;;;;;;;;;;;;;:::i;14710:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14710:49:0;;:::i;9059:22::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12958:129;;;;;;;;;;;;;:::i;56271:768::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;56271:768:0;;;;;;;;;;-1:-1:-1;;;;;56271:768:0;;;;;;;;;;;:::i;22333:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22333:45:0;;:::i;12823:126::-;;;;;;;;;;;;;:::i;14377:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14377:48:0;-1:-1:-1;;;;;14377:48:0;;:::i;3805:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3805:134:0;;;;;;;;;;:::i;35887:1754::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35887:1754:0;;;;;;;-1:-1:-1;;;;;35887:1754:0;;;;;-1:-1:-1;;;;;35887:1754:0;;:::i;14562:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14562:59:0;;-1:-1:-1;;;;;14562:59:0;;;;;-1:-1:-1;;;;;;14562:59:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14562:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14562:59:0;;;;;;;;;;;;;;;;;;;;54384:134;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;54384:134:0;;;;;;;;:::i;15286:101::-;;;;;;;;;;;;;:::i;17376:814::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17376:814:0;;;;;;;;;;;;;:::i;52146:32::-;;;;;;;;;;;;;:::i;15508:153::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15508:153:0;;:::i;52185:28::-;;;;;;;;;;;;;:::i;30706:363::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30706:363:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30706:363:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30706:363:0;;;;;;;;-1:-1:-1;30706:363:0;;-1:-1:-1;;;;;30706:363:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30706:363:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30706:363:0;;-1:-1:-1;30706:363:0;;-1:-1:-1;;;;;30706:363:0:i;13305:34::-;;;;:::o;12641:26::-;;;;:::o;13262:34::-;;;-1:-1:-1;;;13262:34:0;;;;;:::o;2740:83::-;2810:5;2803:12;;;;;;;-1:-1:-1;;2803:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2777:13;;2803:12;;2810:5;;2803:12;;2810:5;2803:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2740:83;;:::o;4022:154::-;4088:4;4105:39;4114:12;:10;:12::i;:::-;4128:7;4137:6;4105:8;:39::i;:::-;-1:-1:-1;4164:4:0;4022:154;;;;;:::o;3217:91::-;3288:12;;3217:91;:::o;55253:532::-;55442:16;;;55456:1;55442:16;;;;;;;;55369:7;;;;;;;;55442:16;;;;;;;;;;-1:-1:-1;55442:16:0;55418:40;;12772:42;55469:4;55474:1;55469:7;;;;;;;;;;;;;:14;-1:-1:-1;;;;;55469:14:0;;;-1:-1:-1;;;;;55469:14:0;;;;;55512:4;55494;55499:1;55494:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;55494:23:0;;;-1:-1:-1;;;;;55494:23:0;;;;;55530:24;12900:42;-1:-1:-1;;;;;55557:36:0;;55601:9;55626:1;55642:4;55661:10;55686:15;55557:155;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;55557:155:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;55557:155:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;55557:155:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;55557:155:0;;;;;;;;;;;;-1:-1:-1;55557:155:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55530:182;;55732:45;55744:7;55752:1;55744:10;;;;;;;;;;;;;;55756:9;55767;55732:11;:45::i;:::-;55725:52;;;;;;;;55253:532;;;;;:::o;15395:105::-;15444:6;15491:1;15470:18;:16;:18::i;:::-;:22;15463:29;;15395:105;:::o;14493:62::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;16573:795::-;16707:24;16744:13;16770:1;16760:7;:11;:57;;;;-1:-1:-1;;;;;;16788:19:0;;;;;;:10;:19;;;;;;:29;-1:-1:-1;16760:57:0;:124;;-1:-1:-1;;;;;16865:19:0;;;;;;:10;:19;;;;;;16760:124;;;-1:-1:-1;;;;;16833:19:0;;;;;;:10;:19;;;;;;:29;;;16760:124;16744:140;;16897:14;16924:1;16914:7;:11;:43;;;;;16950:7;16942:5;:15;16914:43;:78;;16991:1;16914:78;;;16981:7;16973:5;:15;16914:78;16897:95;;17005:9;17059:6;17051:5;:14;-1:-1:-1;;;;;17037:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17037:29:0;-1:-1:-1;17027:39:0;-1:-1:-1;17106:5:0;17079:282;17127:6;17113:11;:20;17079:282;;;17165:16;17184:42;17195:7;-1:-1:-1;;17204:15:0;;-1:-1:-1;;;17184:10:0;:42::i;:::-;-1:-1:-1;;;;;17245:15:0;;17286:1;17245:15;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;17245:25:0;;;;;;;;;:38;;;17165:61;;-1:-1:-1;17245:42:0;17241:109;;17321:8;17308:7;17316:1;17308:10;;;;;;;;-1:-1:-1;;;;;;17308:21:0;;;:10;;;;;;;;;;;:21;17331:3;;;;;17241:109;-1:-1:-1;;;17135:13:0;17079:282;;;;16573:795;;;;;;;;:::o;4312:262::-;4401:4;4418:77;4427:6;4435:12;:10;:12::i;:::-;-1:-1:-1;;;;;4449:19:0;;;;;;:11;:19;;;;;:45;;4487:6;;4449:19;4469:12;:10;:12::i;:::-;-1:-1:-1;;;;;4449:33:0;;;;;;;;;;;;-1:-1:-1;4449:33:0;;;:37;:45::i;:::-;4418:8;:77::i;:::-;4506:36;4516:6;4524:9;4535:6;4506:9;:36::i;:::-;-1:-1:-1;4562:4:0;4312:262;;;;;:::o;3056:83::-;3122:9;;;;3056:83;:::o;14325:45::-;;;;;;;;;;;;;:::o;14434:52::-;;;;;;;;;;;;;;;;;;;:::o;5947:83::-;5997:25;6003:10;6015:6;5997:5;:25::i;:::-;5947:83;:::o;54739:196::-;52331:21;;-1:-1:-1;;;;;52331:21:0;52317:10;:35;;:83;;-1:-1:-1;52383:17:0;;-1:-1:-1;;;;;52383:17:0;52369:10;:31;52317:83;:127;;;-1:-1:-1;52431:13:0;;-1:-1:-1;;;;;52431:13:0;52417:10;:27;52317:127;52295:204;;;;;-1:-1:-1;;;52295:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54809:23:0;::::1;;::::0;;;:12:::1;:23;::::0;;;;12421:8:::1;54809:53:::0;;54913:14:::1;:12;:14::i;:::-;-1:-1:-1::0;;;;;54873:23:0;;::::1;;::::0;;;:12:::1;:23;::::0;;;;-1:-1:-1;;;;;54873:54:0;;;::::1;:37;::::0;;::::1;:54:::0;54739:196::o;30456:242::-;22483:39;22503:18;:16;:18::i;:::-;22483:19;:39::i;:::-;30585:105:::1;30617:10;30642:11;30668;30585:17;:105::i;:::-;30456:242:::0;;:::o;15028:130::-;15076:6;15114:11;;15102:8;:6;:8::i;:::-;:23;;:48;;15149:1;15102:48;;;15128:18;:16;:18::i;:::-;15095:55;;15028:130;:::o;18397:208::-;-1:-1:-1;;;;;18492:24:0;;18465:7;18492:24;;;:13;:24;;;;;;:29;:105;;-1:-1:-1;;;;;18559:24:0;;;;;;:13;:24;;;;;;18537:60;;18548:9;;18559:31;;18588:1;18559:28;:31::i;:::-;-1:-1:-1;;;18537:10:0;:60::i;:::-;18492:105;;;18532:1;18485:112;18397:208;-1:-1:-1;;18397:208:0:o;52103:36::-;;;-1:-1:-1;;;;;52103:36:0;;:::o;23685:98::-;23736:39;23756:18;:16;:18::i;23736:39::-;23685:98::o;13221:34::-;;;-1:-1:-1;;;;;13221:34:0;;:::o;3394:110::-;-1:-1:-1;;;;;3478:18:0;3451:7;3478:18;;;;;;;;;;;;3394:110::o;35338:307::-;35508:9;35504:134;35527:13;:20;35523:1;:24;35504:134;;;35569:57;35581:13;35595:1;35581:16;;;;;;;;;;;;;;35599:9;35609:1;35599:12;;;;;;;;;;;;;;35613:9;35623:1;35613:12;;;;;;;;;;;;;;35569:11;:57::i;:::-;-1:-1:-1;;;35549:3:0;;35504:134;;;;35338:307;;;:::o;47124:232::-;-1:-1:-1;;;;;47280:15:0;;;47233:13;47280:15;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;47280:25:0;;;;;;;;;47259:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47259:46:0;;;;;;;-1:-1:-1;;;47259:46:0;;;;;;;;-1:-1:-1;;;47259:46:0;;;;;;;;-1:-1:-1;;;47259:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;47259:46:0;;;;;;;;;;;47233:13;47327:21;47259:46;47327:14;:21::i;:::-;47316:32;47124:232;-1:-1:-1;;;;47124:232:0:o;22385:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22703:657::-;22769:16;22800;22831:12;;;;;;;;;-1:-1:-1;;;;;22831:12:0;-1:-1:-1;;;;;22831:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22831:26:0;;;;;;;22890:12;;22831:26;22890:21;;-1:-1:-1;;;22890:21:0;;;;22831:26;;-1:-1:-1;22831:26:0;;-1:-1:-1;22870:17:0;;12772:42;;-1:-1:-1;;;;;22890:12:0;;;;:19;;:21;;;;;22831:26;22890:21;;;;;:12;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22890:21:0;-1:-1:-1;;;;;22890:29:0;;:77;;22959:8;22890:77;;;22935:8;22890:77;22870:97;;;;22980:13;22996;:11;:13::i;:::-;:18;:124;;23047:73;23106:13;:11;:13::i;:::-;23047:36;:9;23079:3;23047:31;:36::i;:::-;:58;;:73::i;:::-;22996:124;;;23030:1;22996:124;22980:140;;23145:2;23137:5;:10;:45;;;;-1:-1:-1;23151:22:0;;-1:-1:-1;;;23151:22:0;;;;:31;23137:45;23133:73;;;23184:22;:20;:22::i;:::-;23229:2;23221:5;:10;:44;;;;-1:-1:-1;23235:22:0;;-1:-1:-1;;;23235:22:0;;;;:30;;23261:4;23235:30;23221:44;23217:73;;;23267:23;:21;:23::i;:::-;23329:22;;23308:44;;;-1:-1:-1;;;23329:22:0;;;;;23308:44;;;;;;;;;;;;;;;22703:657;;;;:::o;32779:963::-;32905:14;32930:15;32956:22;32989:24;33024:21;33056:18;33085;33114:17;33150:24;33177:13;:24;33191:9;-1:-1:-1;;;;;33177:24:0;-1:-1:-1;;;;;33177:24:0;;;;;;;;;;;;:37;33202:11;-1:-1:-1;;;;;33177:37:0;;-1:-1:-1;;;;;33177:37:0;;;;;;;;;;;;;33150:64;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33150:64:0;-1:-1:-1;;;;;33150:64:0;-1:-1:-1;;;;;33150:64:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33150:64:0;;-1:-1:-1;;;;;33150:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33236:4;:11;;;33227:20;;33268:4;:12;;;33258:22;;33310:4;:13;;;33291:32;;33336:18;33357:6;:14;33364:6;-1:-1:-1;;;;;33357:14:0;-1:-1:-1;;;;;33357:14:0;;;;;;;;;;;;:23;33372:7;-1:-1:-1;;;;;33357:23:0;;-1:-1:-1;;;;;33357:23:0;;;;;;;;;;;;;33336:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33336:44:0;-1:-1:-1;;;;;33336:44:0;-1:-1:-1;;;;;33336:44:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33336:44:0;-1:-1:-1;;;;;33336:44:0;-1:-1:-1;;;;;33336:44:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33336:44:0;-1:-1:-1;;;;;33336:44:0;-1:-1:-1;;;;;33336:44:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33336:44:0;-1:-1:-1;;;;;33336:44:0;-1:-1:-1;;;;;33336:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33336:44:0;-1:-1:-1;;;;;33336:44:0;-1:-1:-1;;;;;33336:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33408:5;:20;;;33391:37;;33460:139;33497:5;33517:31;33536:5;33543:4;33517:18;:31::i;:::-;33563:25;33582:5;33563:18;:25::i;:::-;33460:22;:139::i;:::-;33441:158;;33628:5;:14;;;33612:30;;33668:18;33680:5;33668:11;:18::i;:::-;33653:33;;33713:21;33728:5;33713:14;:21::i;:::-;33697:37;;32779:963;;;;;;;;;;;;;:::o;14885:51::-;;;;;;;;;;;;;:::o;2895:87::-;2967:7;2960:14;;;;;;;;-1:-1:-1;;2960:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2934:13;;2960:14;;2967:7;;2960:14;;2967:7;2960:14;;;;;;;;;;;;;;;;;;;;;;;;39683:1459;39753:7;22483:39;22503:18;:16;:18::i;22483:39::-;39788:23:::1;39826:21:::0;39861:31:::1;39871:10;39883:8;39861:9;:31::i;:::-;39773:119;::::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;39773:119:0;;::::1;::::0;;;;-1:-1:-1;;;39773:119:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;39773:119:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;39773:119:0;;::::1;;::::0;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;39773:119:0;::::1;::::0;;;;-1:-1:-1;;;39773:119:0;::::1;;;;;::::0;;;;;;-1:-1:-1;39773:119:0;;-1:-1:-1;39905:143:0::1;::::0;39773:119;;;39905:16:::1;:143::i;:::-;40061:68;40084:10;:19;;;-1:-1:-1::0;;;;;40061:68:0::1;40105:10;:23;;;40061:22;:68::i;:::-;40140:74;40167:10;:19;;;-1:-1:-1::0;;;;;40140:74:0::1;40188:10;:25;;;40140:26;:74::i;:::-;40227:137;40261:10;:19;;;40295:10;:24;;;40334:10;:19;;;-1:-1:-1::0;;;;;40227:137:0::1;:19;:137::i;:::-;40377:49;40391:10;:19;;;40412:13;40377;:49::i;:::-;40439:317;40497:13;40471:10;:23;;;:39;:98;;40568:1;40471:98;;;40552:13;40526:10;:23;;;:39;40471:98;40618:10;40610:19;::::0;;;:7:::1;:19;::::0;;;;;;;-1:-1:-1;;;;;;40610:29:0;::::1;::::0;;;;;;;;;;40584:23;;::::1;::::0;40654:19:::1;::::0;::::1;::::0;40688::::1;::::0;::::1;::::0;40722:23;;40584:55;;;::::1;::::0;40654:19;;-1:-1:-1;;;;;40439:317:0;;::::1;::::0;:17:::1;:317::i;:::-;40845:10;:19;;;-1:-1:-1::0;;;;;40774:317:0::1;40820:10;-1:-1:-1::0;;;;;40774:317:0::1;40797:8;-1:-1:-1::0;;;;;40774:317:0::1;;;40879:10;:23;;;40917:10;:23;;;40955:10;:25;;;40995:10;:23;;;41033:10;:19;;;41067:13;40774:317;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;40774:317:0::1;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;41111:23:0::1;;::::0;;39683:1459;-1:-1:-1;;39683:1459:0:o;42093:2703::-;42224:17;42252:20;42283:21;42315:22;42348:23;22483:39;22503:18;:16;:18::i;22483:39::-;42405:10:::1;42398:18;::::0;;;:6:::1;:18;::::0;;;;;;;-1:-1:-1;;;;;;42398:28:0;::::1;::::0;;;;;;;:37:::1;;::::0;-1:-1:-1;;;42398:37:0;::::1;;;42390:46;;;::::0;::::1;;42477:10;42449:18;42470::::0;;;:6:::1;:18;::::0;;;;;;;-1:-1:-1;;;;;;42470:28:0;::::1;::::0;;;;;;;;42449:49;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;42449:49:0;;::::1;::::0;;;;-1:-1:-1;;;42449:49:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42449:49:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42449:49:0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;42449:49:0;::::1;::::0;;;;-1:-1:-1;;;42449:49:0;::::1;;;;;::::0;;;;;42523:15;::::1;:105;;42606:22;42622:5;42606:15;:22::i;:::-;42523:105;;;42554:36;42578:11;-1:-1:-1::0;;;;;42554:36:0::1;:19;42567:5;42554:12;:19::i;:::-;:23:::0;::::1;:36::i;:::-;42511:117;;42665:5;:14;;;-1:-1:-1::0;;;;;42653:26:0::1;:9;:26;:89;;42733:9;42653:89;;;42695:22;42711:5;42695:15;:22::i;:::-;42641:101;;42770:119;42802:5;:18;;;42835:19;42848:5;42835:12;:19::i;:::-;42869:9;42770:17;:119::i;:::-;42755:134;;42906:21;42921:5;42906:14;:21::i;:::-;42902:1521;;42971:16;42981:5;42971:9;:16::i;:::-;42955:32;;43021:157;43053:12;43084:13;43116:10;43145:7;:18;;;43021:13;:157::i;:::-;43216:18:::0;;43004:174;;-1:-1:-1;43216:38:0::1;::::0;43004:174;43216:22:::1;:38::i;:::-;43195:59:::0;;43294:14:::1;::::0;::::1;::::0;43271:54:::1;::::0;-1:-1:-1;;;;;43271:54:0::1;43310:14:::0;43271:22:::1;:54::i;:::-;43346:20;::::0;::::1;::::0;:24;43342:425:::1;;43409:179;43445:12;43480:13;43524:3;43551:7;:18;;;43409:13;:179::i;:::-;43632:20;::::0;::::1;::::0;43391:197;;-1:-1:-1;43632:41:0::1;::::0;43391:197;43632:24:::1;:41::i;:::-;43609:20;::::0;::::1;:64:::0;43719:14:::1;::::0;::::1;::::0;43692:59:::1;::::0;-1:-1:-1;;;;;43692:59:0::1;43735:15:::0;43692:26:::1;:59::i;:::-;43783:52;43800:1;43803:14;43819:15;43783:16;:52::i;:::-;43852:203;43888:5;:18;;;43925:12;43956:5;:14;;;43989:5;:14;;;-1:-1:-1::0;;;;;43852:203:0::1;44022:5;:18;;;43852:17;:203::i;:::-;42902:1521;;;44137:10;44129:19;::::0;;;:7:::1;:19;::::0;;;;;;;-1:-1:-1;;;;;;44129:29:0;::::1;::::0;;;;;;;;:47:::1;::::0;44163:12;44129:33:::1;:47::i;:::-;44105:10;44097:19;::::0;;;:7:::1;:19;::::0;;;;;;;-1:-1:-1;;;;;;44097:29:0;::::1;::::0;;;;;;;:79;;;44227:18;::::1;::::0;44312:14:::1;::::0;::::1;::::0;44345::::1;::::0;::::1;::::0;44378:18;;44191:220:::1;::::0;44097:79;44312:14;-1:-1:-1;;;;;44191:220:0::1;::::0;:17:::1;:220::i;:::-;44435:15;::::0;::::1;:27:::0;;;44480:10:::1;44473:18;::::0;;;:6:::1;:18;::::0;;;;;;;-1:-1:-1;;;;;;44473:28:0;::::1;::::0;;;;;;;;:36;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;44473:36:0;;::::1;-1:-1:-1::0;;;;;44473:36:0;;::::1;;-1:-1:-1::0;;;;44473:36:0::1;-1:-1:-1::0;;;44473:36:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;44473:36:0::1;-1:-1:-1::0;;;44473:36:0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;44473:36:0::1;-1:-1:-1::0;;;44473:36:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;;44473:36:0;;::::1;-1:-1:-1::0;;;;;44473:36:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;44473:36:0::1;-1:-1:-1::0;;;44473:36:0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;44522:31:::1;::::0;44540:12;44522:5:::1;:31::i;:::-;44624:10;-1:-1:-1::0;;;;;;44571:217:0;::::1;;44649:12:::0;44676:9;44700:14;44729:15;44759:18:::1;:16;:18::i;:::-;44571:217;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;44571:217:0::1;::::0;;;;;;;;;;;;::::1;22533:1;42093:2703:::0;;;;;;;;:::o;13491:184::-;13577:79;;;-1:-1:-1;;;13577:79:0;;12772:42;13577:79;;;;13636:4;13577:79;;;;;;13038:42;;13577:26;;:79;;;;;;;;;;;;;;-1:-1:-1;13038:42:0;13577:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13577:79:0;13533:12;:134;;-1:-1:-1;;;;;;13533:134:0;-1:-1:-1;;;;;13533:134:0;;;;;;;;;13491:184::o;47364:982::-;-1:-1:-1;;;;;47856:15:0;;;47469:16;47856:15;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;47856:25:0;;;;;;;;;47835:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47835:46:0;;;;;;;;;-1:-1:-1;;;47835:46:0;;;;;;;;;;-1:-1:-1;;;47835:46:0;;;;;;;;;;-1:-1:-1;;;47835:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;47835:46:0;;;;;;;;;;;;;;;;;;;;;;47469:16;;;;;;;48177:25;47835:46;48177:18;:25::i;:::-;48162:40;;48229:30;48253:5;48229:23;:30::i;:::-;48213:46;;48281:5;:14;;;48270:25;;48317:21;48332:5;48317:14;:21::i;:::-;48306:32;;47364:982;;;;;;;;;;;;;;;:::o;3512:161::-;3581:4;3598:43;3608:12;:10;:12::i;:::-;3622:9;3633:6;3598:9;:43::i;23968:239::-;24062:1;24049:10;-1:-1:-1;;;;;24049:14:0;;:49;;;;;24080:18;:16;:18::i;:::-;-1:-1:-1;;;;;24067:31:0;:10;-1:-1:-1;;;;;24067:31:0;;24049:49;24041:58;;;;;;24131:23;;-1:-1:-1;;;;;24118:36:0;;;24110:45;;;;;;24168:31;24188:10;24168:19;:31::i;18198:191::-;-1:-1:-1;;;;;18288:19:0;;18261:7;18288:19;;;:10;:19;;;;;;:24;:93;;-1:-1:-1;;;;;18348:19:0;;;;;;:10;:19;;;;;;18328:53;;18339:7;;18348:26;;18372:1;18348:23;:26::i;:::-;-1:-1:-1;;;18328:10:0;:53::i;53892:142::-;53949:18;;-1:-1:-1;;;;;53949:18:0;53971:10;53949:32;53941:41;;;;;;53993:18;:33;;-1:-1:-1;;;;;;53993:33:0;;;53892:142::o;53558:326::-;53710:18;;-1:-1:-1;;;;;53710:18:0;53732:10;53710:32;53702:41;;;;;;53754:21;:36;;-1:-1:-1;;;;;53754:36:0;;;-1:-1:-1;;;;;;53754:36:0;;;;;;;53801:17;:36;;;;;;;;;;;;;;;53848:13;:28;;;;;;;;;;;53558:326::o;12242:37::-;;;;;;:::o;13096:116::-;;;-1:-1:-1;;;;;13096:116:0;;:::o;37649:323::-;37791:20;37831:133;37859:13;37887:9;-1:-1:-1;;;;;37831:133:0;37911:9;37935:7;:18;;;37831:13;:133::i;14827:49::-;;;;;;;;;;;;;:::o;15669:89::-;15735:15;15669:89;:::o;14766:54::-;;;;;;;;;;;;;:::o;16063:163::-;16190:25;;;-1:-1:-1;;16190:25:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16190:25:0;;;;;;;;;;;;;;;;;;;;;;16180:36;;;;;16136:9;;16162:56;;:9;:56::i;14628:73::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14628:73:0;;;;;;;;;;;;;;;;:::o;52220:33::-;;;-1:-1:-1;;;;;52220:33:0;;:::o;14710:49::-;;;;;;;;;;;;;:::o;9059:22::-;;;;;;;;;;;;;;:::o;12958:129::-;13038:42;12958:129;:::o;56271:768::-;56558:59;;;-1:-1:-1;;;56558:59:0;;56577:10;56558:59;;;;56597:4;56558:59;;;;;;;;;;;;56444:7;;;;;;56531:13;;-1:-1:-1;;;;;56558:18:0;;;;;:59;;;;;;;;;;;;;;56444:7;56558:18;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;56628:52:0;;;-1:-1:-1;;;56628:52:0;;12900:42;56628:52;;;;;;;;;;;;-1:-1:-1;;;;;56628:13:0;;;;;:52;;;;;56558:59;;56628:52;;;;;;;-1:-1:-1;56628:13:0;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56693:21:0;;-1:-1:-1;56717:42:0;56730:13;56753:4;56717:12;:42::i;:::-;56693:66;;56772:24;12900:42;-1:-1:-1;;;;;56799:39:0;;56853:12;56880:1;56896:4;56915:10;56940:15;56799:167;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56799:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;56799:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;56799:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;56799:167:0;;;;;;;;;;;;-1:-1:-1;56799:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56772:194;;56986:45;56998:7;57006:1;56998:10;;;;;;;;;;;;;;57010:9;57021;56986:11;:45::i;:::-;56979:52;;;;;;;;;56271:768;;;;;;;;;:::o;22333:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12823:126::-;12900:42;12823:126;:::o;14377:48::-;;;;;;;;;;;;;:::o;3805:134::-;-1:-1:-1;;;;;3904:18:0;;;3877:7;3904:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3805:134::o;35887:1754::-;36019:7;;;36076:10;-1:-1:-1;;;;;36076:23:0;;;;;;:49;;;36103:22;36115:9;36103:11;:22::i;:::-;36068:58;;;;;;11852:1;-1:-1:-1;;;;;36145:26:0;;;;;;:56;;-1:-1:-1;11931:5:0;-1:-1:-1;;;;;36175:26:0;;;;36145:56;36137:65;;;;;;12119:7;36221:33;;;36213:42;;;;;;36283:21;36319:15;36349:17;36380:61;36393:10;36405:13;36420:9;36431;36380:12;:61::i;:::-;-1:-1:-1;;;;;36268:173:0;;;;;;;36484:1;36458:8;:23;;;:27;36454:488;;;36504:32;;:::i;:::-;36575:10;36553:32;;-1:-1:-1;;;;;;36600:30:0;;:20;;;:30;36669:4;36645:21;;;:28;36703:29;36722:9;36703:18;:29::i;:::-;-1:-1:-1;;;;;36747:24:0;;;;;;;:13;:24;;;;;;;;-1:-1:-1;;;;;;36747:36:0;;;;;;;;;;;;:51;;;;-1:-1:-1;;;;;;36747:51:0;;;;;;;;;;;;;-1:-1:-1;36747:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36747:51:0;;;;;;;;;;:36;-1:-1:-1;36815:33:0;36747:24;36815:22;:33::i;:::-;36863:67;36887:8;:17;;;-1:-1:-1;;;;;36863:67:0;36906:8;:23;;;36863;:67::i;:::-;36454:488;;36961:10;36954:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;;36954:27:0;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36954:38:0;;;-1:-1:-1;;;;;36954:38:0;;;;-1:-1:-1;;;;36954:38:0;-1:-1:-1;;;36954:38:0;;;;;;;;;;;-1:-1:-1;;;;36954:38:0;-1:-1:-1;;;36954:38:0;;;;;;;;-1:-1:-1;;;;;36954:38:0;-1:-1:-1;;;36954:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36954:38:0;;;-1:-1:-1;;;;;36954:38:0;;;;;;;-1:-1:-1;;;;36954:38:0;-1:-1:-1;;;36954:38:0;;;;;;;;;;;;;37005:31;;:19;:31::i;:::-;37049:137;37080:8;:21;;;37116:8;:21;;;37152:8;:23;;;37049:16;:137::i;:::-;37199:61;37219:8;:17;;;-1:-1:-1;;;;;37199:61:0;37238:8;:21;;;37199:19;:61::i;:::-;37350:9;-1:-1:-1;;;;;37278:303:0;37325:10;-1:-1:-1;;;;;37278:303:0;37303:7;-1:-1:-1;;;;;37278:303:0;;;37374:8;:21;;;37410:8;:21;;;37446:8;:23;;;37484:8;:17;;;37516:8;:17;;;37548:8;:22;;;37278:303;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37278:303:0;;;;;;-1:-1:-1;;;;;37278:303:0;;;;;;;;;;;;;;;;;;;;;;;;;37602:7;;-1:-1:-1;37611:9:0;-1:-1:-1;;35887:1754:0;;;;;;;:::o;14562:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14562:59:0;;;;-1:-1:-1;;;14562:59:0;;;;;-1:-1:-1;;;14562:59:0;;;;;-1:-1:-1;;;14562:59:0;;;;;;;;;;-1:-1:-1;;;;;14562:59:0;;;-1:-1:-1;;;14562:59:0;;;;;:::o;54384:134::-;52331:21;;-1:-1:-1;;;;;52331:21:0;52317:10;:35;;:83;;-1:-1:-1;52383:17:0;;-1:-1:-1;;;;;52383:17:0;52369:10;:31;52317:83;:127;;;-1:-1:-1;52431:13:0;;-1:-1:-1;;;;;52431:13:0;52417:10;:27;52317:127;52295:204;;;;;-1:-1:-1;;;52295:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;54478:32:::1;54484:16;54502:7;54478:5;:32::i;15286:101::-:0;15331:6;15357:18;:16;:18::i;:::-;15378:1;15357:22;15350:29;;15286:101;:::o;17376:814::-;17515:27;17555:13;17581:1;17571:7;:11;:62;;;;-1:-1:-1;;;;;;17599:24:0;;;;;;:13;:24;;;;;;:34;-1:-1:-1;17571:62:0;:139;;-1:-1:-1;;;;;17686:24:0;;;;;;:13;:24;;;;;;17571:139;;;-1:-1:-1;;;;;17649:24:0;;;;;;:13;:24;;;;;;:34;;;17571:139;17555:155;;17723:14;17750:1;17740:7;:11;:43;;;;;17776:7;17768:5;:15;17740:43;:78;;17817:1;17740:78;;;17807:7;17799:5;:15;17740:78;17723:95;;17831:9;17888:6;17880:5;:14;-1:-1:-1;;;;;17866:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17866:29:0;-1:-1:-1;17853:42:0;-1:-1:-1;17931:5:0;17908:275;17948:6;17938:7;:16;17908:275;;;17982:12;17997:40;18008:9;-1:-1:-1;;18019:11:0;;-1:-1:-1;;;17997:10:0;:40::i;:::-;-1:-1:-1;;;;;18072:24:0;;;;;;;:13;:24;;;;;;;;-1:-1:-1;;;;;;18072:30:0;;;;;;;;;:37;17982:55;;-1:-1:-1;18056:54:0;;18072:37;18056:15;:54::i;:::-;18052:120;;;18147:4;18131:10;18142:1;18131:13;;;;;;;;-1:-1:-1;;;;;;18131:20:0;;;:13;;;;;;;;;;;:20;18153:3;;;;;18052:120;-1:-1:-1;;;17956:9:0;17908:275;;52146:32;;;-1:-1:-1;;;;;52146:32:0;;:::o;15508:153::-;15623:11;;15576:6;;11800:13;;15610:24;;15609:43;;;15508:153;-1:-1:-1;;15508:153:0:o;52185:28::-;;;-1:-1:-1;;;;;52185:28:0;;:::o;30706:363::-;22483:39;22503:18;:16;:18::i;22483:39::-;30862:9:::1;30858:204;30881:12;:19;30877:1;:23;30858:204;;;30922:128;30958:10;30987:12;31000:1;30987:15;;;;;;;;;;;;;;31021:11;31033:1;31021:14;;;;;;;;;;;;;;30922:17;:128::i;:::-;30902:3;;30858:204;;;;30706:363:::0;;:::o;480:181::-;538:7;570:5;;;594:6;;;;586:46;;;;;-1:-1:-1;;;586:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;652:1;480:181;-1:-1:-1;;;480:181:0:o;154:106::-;242:10;154:106;:::o;6926:274::-;-1:-1:-1;;;;;7028:21:0;;7020:30;;;;;;-1:-1:-1;;;;;7069:23:0;;7061:32;;;;;;-1:-1:-1;;;;;7106:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7160:32;;;;;;;;;;;;;;;;;6926:274;;;:::o;15166:112::-;15217:6;15243:27;15261:8;:6;:8::i;:::-;15243:17;:27::i;669:136::-;727:7;754:43;758:1;761;754:43;;;;;;;;;;;;;;;;;:3;:43::i;4895:363::-;-1:-1:-1;;;;;5001:22:0;;4993:31;;;;;;-1:-1:-1;;;;;5043:25:0;;5035:34;;;;;;-1:-1:-1;;;;;5102:17:0;;:9;:17;;;;;;;;;;;:29;;5124:6;5102:21;:29::i;:::-;-1:-1:-1;;;;;5082:17:0;;;:9;:17;;;;;;;;;;;:49;;;;5165:20;;;;;;;:32;;5190:6;5165:24;:32::i;:::-;-1:-1:-1;;;;;5142:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;5215:35;;;;;;;5142:20;;5215:35;;;;;;;;;;;;;4895:363;;;:::o;6363:287::-;-1:-1:-1;;;;;6447:23:0;;6439:32;;;;;;-1:-1:-1;;;;;6505:18:0;;:9;:18;;;;;;;;;;;:30;;6528:6;6505:22;:30::i;:::-;-1:-1:-1;;;;;6484:18:0;;:9;:18;;;;;;;;;;:51;6561:12;;:24;;6578:6;6561:16;:24::i;:::-;6546:12;:39;6603;;;;;;;;6629:3;;-1:-1:-1;;;;;6603:39:0;;;;;;;;;;;;6363:287;;:::o;24362:2386::-;24429:23;:21;:23::i;:::-;24530:7;:19;24582:23;;24465:27;;24530:19;24562:2179;24614:10;-1:-1:-1;;;;;24607:17:0;:4;:17;24562:2179;;;-1:-1:-1;;24866:8:0;;24856:19;;;;:9;:19;;;;;;;;:34;;;24833:20;;;:14;:20;;;;;;24934:15;;;;;;;24907:42;;;;;;;;;;;24873:1;24907:42;;;;;;;;;;;24833:57;;;;24907:42;;;24964:45;;;25066:19;;24833:57;;-1:-1:-1;;;25066:106:0;;25171:1;25066:106;;;25127:19;;:41;;;25066:106;25026:146;;25217:418;25320:296;25363:16;25406:13;:11;:13::i;:::-;25446:20;;;;:14;:20;;;;;;;;;;25493:15;;25552:14;;25493:100;;-1:-1:-1;;;25493:100:0;;25552:14;;;;25493:100;;;;;;25446:20;;-1:-1:-1;;;;;25493:15:0;;;;:28;;:100;;;;;;;;;;:15;:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25493:100:0;25320:16;:296::i;:::-;25217:20;;:58;;12374:4;25217:42;:58::i;:418::-;25189:24;;;;:446;;;25691:15;;;;:9;:15;;;;;;:26;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25956:8:0;;25945:20;;:10;:20;;;;;;:35;;;;25917:25;;;:19;:25;;;;;;26026:16;;;;;;;25997:45;;;;;;;;;;;;;;;;;;;;;25917:63;;25997:45;;;26057:46;;;26161:22;;25917:63;;-1:-1:-1;25997:45:0;26161:44;-1:-1:-1;26161:112:0;;26272:1;26161:112;;;26225:22;;:44;;;26161:112;26120:153;;26318:247;26422:124;26467:16;26510:13;:11;:13::i;:::-;26422:18;:124::i;26318:247::-;26290:25;;;;:275;;;26622:16;;;;:10;:16;;;;;;;;:28;;;;;;;;;;;;;;;;;;26667:22;:20;:22::i;:::-;-1:-1:-1;;26704:23:0;:25;;;;;;;;;24626:6;24562:2179;;31077:1694;-1:-1:-1;;;;;31256:24:0;;;31220;31256;;;:13;:24;;;;;;;;-1:-1:-1;;;;;;31256:37:0;;;;;;;;;;;;31220:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31314:21;31306:30;;;;;;31366:11;;31406:12;;;;;-1:-1:-1;;;;;31452:14:0;;;31349;31452;;;:6;:14;;;;;;-1:-1:-1;;;;;;31452:23:0;;;;;;;;;31431:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31431:44:0;;;;;;;-1:-1:-1;;;31431:44:0;;;;;;;;-1:-1:-1;;;31431:44:0;;;;;;;;-1:-1:-1;;;31431:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31431:44:0;;;;;;;;;;;31406:12;;31431:44;31507:31;31431:44;31366:11;31507:18;:31::i;:::-;31488:50;;31549:16;31568:25;31587:5;31568:18;:25::i;:::-;31549:44;;31610:18;31622:5;31610:11;:18::i;:::-;31606:673;;;31682:1;31667:12;:16;:81;;;;;31719:29;31729:8;31739;31719:9;:29::i;:::-;31704:12;:44;31667:81;31645:382;;;31838:18;;;;:36;;31861:12;31838:22;:36::i;:::-;31800:18;;;:74;31923:26;:8;31936:12;31923;:26::i;:::-;31895:54;;31645:382;;;32006:5;31990:13;;;:21;31645:382;31606:673;;;32074:39;32084:8;32094:18;:16;:18::i;:::-;-1:-1:-1;;;;;32074:39:0;:9;:39::i;:::-;32164:18;;;;32059:54;;-1:-1:-1;32164:36:0;;32059:54;32164:22;:36::i;:::-;32130:18;;;:70;32241:26;:8;32254:12;32241;:26::i;:::-;32217:50;;31606:673;32291:24;32318:99;32355:5;32375:8;32398;32318:22;:99::i;:::-;32450:17;;;;32291:126;;-1:-1:-1;32450:39:0;;32291:126;32450:21;:39::i;:::-;32430:4;:17;;:59;;;;;32542:4;32502:13;:24;32516:9;-1:-1:-1;;;;;32502:24:0;-1:-1:-1;;;;;32502:24:0;;;;;;;;;;;;:37;32527:11;-1:-1:-1;;;;;32502:37:0;;-1:-1:-1;;;;;32502:37:0;;;;;;;;;;;;;:44;;;;;;;;;;;;;-1:-1:-1;;;;;32502:44:0;;;;;-1:-1:-1;;;;;32502:44:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32502:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32559:34;32565:9;32576:16;32559:5;:34::i;:::-;32611:152;;;-1:-1:-1;;;;;;32611:152:0;;;;;;;;;;;;;-1:-1:-1;;;;;32611:152:0;;;;;;;;;;;;;;;;;;;;;31077:1694;;;;;;;;;;:::o;18882:222::-;18950:4;18992:1;18974:6;:15;;;-1:-1:-1;;;;;18974:19:0;;:122;;19078:18;:16;:18::i;:::-;-1:-1:-1;;;;;19059:37:0;:6;:15;;;-1:-1:-1;;;;;19059:37:0;;;18974:122;;;19028:6;:15;;;-1:-1:-1;;;;;19009:34:0;:6;:15;;;-1:-1:-1;;;;;19009:34:0;;;18967:129;;18882:222;;;:::o;1013:250::-;1071:7;1095:6;1091:47;;-1:-1:-1;1125:1:0;1118:8;;1091:47;1162:5;;;1166:1;1162;:5;:1;1186:5;;;;;:10;1178:56;;;;-1:-1:-1;;;1178:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1271:132;1329:7;1356:39;1360:1;1363;1356:39;;;;;;;;;;;;;;;;;:3;:39::i;23368:88::-;23419:22;:29;;-1:-1:-1;;;;23419:29:0;-1:-1:-1;;;23419:29:0;;;23368:88::o;23464:90::-;23516:22;:30;;-1:-1:-1;;;;23516:30:0;;;23464:90::o;34431:348::-;34555:7;34582:189;34751:5;:19;;;34643:6;:15;;;-1:-1:-1;;;;;34597:61:0;:12;:29;34610:6;:15;;;-1:-1:-1;;;;;34597:29:0;-1:-1:-1;;;;;34597:29:0;;;;;;;;;;;;:43;;;:61;:138;;34720:6;:15;;;-1:-1:-1;;;;;34597:138:0;;;;34687:15;;;;-1:-1:-1;;;;;34674:29:0;;;;;:12;:29;;;;;:43;;;34582:168;;:189::i;34787:212::-;34875:7;34933:1;34915:6;:15;;;-1:-1:-1;;;;;34915:19:0;;:76;;34968:23;34984:6;34968:15;:23::i;34915:76::-;-1:-1:-1;34950:15:0;;;-1:-1:-1;;;;;34915:76:0;;34787:212::o;33750:299::-;33898:25;33943:41;33968:6;:15;;;33943:24;:41::i;:::-;:98;;33991:50;34012:6;34020:9;34031;33991:20;:50::i;:::-;33943:98;;;-1:-1:-1;33987:1:0;;33750:299;-1:-1:-1;;;33750:299:0:o;19500:147::-;19589:15;;;;19565:4;;19589:24;;:50;;;19617:22;19632:6;19617:14;:22::i;41150:729::-;-1:-1:-1;;;;;41305:15:0;;41246:20;41305:15;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;41305:25:0;;;;;;;;;:34;;;41246:20;;-1:-1:-1;;;41305:34:0;;;;41297:43;;;;;;-1:-1:-1;;;;;41362:15:0;;;;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;41362:25:0;;;;;;;;;;-1:-1:-1;41416:18:0;:16;:18::i;:::-;41398:15;;;:36;;-1:-1:-1;;;;;41398:36:0;-1:-1:-1;;;;;;;;41398:36:0;;;;;;;;;;;;;41467:30;;;;;;;;;;;;-1:-1:-1;41467:30:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;41467:30:0;;;;;;;;-1:-1:-1;;;41467:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41398:36;41467:30;;;;;;;;;;;;;;;-1:-1:-1;;;;;41467:30:0;;;;;;-1:-1:-1;;;41467:30:0;;;;;;;;;;;;:22;:30::i;:::-;41445:19;;;:52;;;41519:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41519:31:0;;;;;;;-1:-1:-1;;;41519:31:0;;;;;;;;-1:-1:-1;;;41519:31:0;;;;;;;;-1:-1:-1;;;41519:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41519:31:0;;;;;;-1:-1:-1;;;41519:31:0;;;;;;;;;;;;:23;:31::i;:::-;41563:15;;;:23;;-1:-1:-1;;;;41563:23:0;;;;41657:19;;;-1:-1:-1;;;;;41627:25:0;;41581:5;41627:25;;;:16;:25;;;;;;41508:42;;-1:-1:-1;41627:50:0;;:25;:29;:50::i;:::-;-1:-1:-1;;;;;41599:25:0;;;;;;:16;:25;;;;;:78;41732:19;;;;41690:133;;41616:7;;41732:30;-1:-1:-1;41732:80:0;;41811:1;41732:80;;;41800:8;41778:6;:19;;;:30;41732:80;41690:5;:133::i;:::-;41836:35;41842:7;41851:6;:19;;;41836:5;:35::i;:::-;41150:729;;;;;:::o;9569:506::-;9723:7;:19;:29;-1:-1:-1;9723:65:0;;9787:1;9723:65;;;9755:7;:19;:29;;;9723:65;9701:7;:87;9821:19;;:29;-1:-1:-1;9821:65:0;;9885:1;9821:65;;;9853:19;;:29;;;9821:65;9799:19;:87;9903:12;;9899:143;;9957:22;;:33;-1:-1:-1;9957:73:0;;10029:1;9957:73;;;9993:22;;:33;;;9957:73;9932:22;:98;9899:143;10054:13;:11;:13::i;44971:505::-;45063:19;45072:9;45063:8;:19::i;:::-;45059:410;;;45140:25;;;;:14;:25;;;;;;:35;-1:-1:-1;45140:90:0;;45229:1;45140:90;;;45191:25;;;;:14;:25;;;;;;:35;;;45140:90;45099:25;;;;:14;:25;;;;;:131;45059:410;;;45263:12;45278:18;:16;:18::i;:::-;-1:-1:-1;;;;;45263:33:0;45357:15;;;;:9;:15;;;;;:30;;;45263:33;;-1:-1:-1;45357:40:0;-1:-1:-1;45357:100:0;;45456:1;45357:100;;;45413:15;;;;:9;:15;;;;;:30;;;:40;;;45357:100;45311:15;;;;:9;:15;;;;;;:30;;:146;44971:505;;:::o;28037:527::-;28133:19;28142:9;28133:8;:19::i;:::-;28129:428;;;28215:30;;;;:19;:30;;;;;;:40;-1:-1:-1;28215:100:0;;28314:1;28215:100;;;28271:30;;;;:19;:30;;;;;;:40;;;28215:100;28169:30;;;;:19;:30;;;;;:146;28129:428;;;28348:12;28363:18;:16;:18::i;:::-;-1:-1:-1;;;;;28348:33:0;28443:16;;;;:10;:16;;;;;:31;;;28348:33;;-1:-1:-1;28443:41:0;-1:-1:-1;28443:102:0;;28544:1;28443:102;;;28500:16;;;;:10;:16;;;;;:31;;;:41;;;28443:102;28396:16;;;;:10;:16;;;;;;:31;;:149;28037:527;;:::o;29028:546::-;29191:21;29202:9;29191:10;:21::i;:::-;:30;;;:73;;;29238:26;29254:9;29238:15;:26::i;:::-;29173:394;;;-1:-1:-1;;;;;29342:23:0;;;;;;:12;:23;;;;;:35;:52;-1:-1:-1;29342:124:0;;29465:1;29342:124;;;-1:-1:-1;;;;;29410:23:0;;;;;;:12;:23;;;;;:35;:52;;;29342:124;-1:-1:-1;;;;;29291:23:0;;;;;;:12;:23;;;;;:175;29521:34;29304:9;29521:23;:34::i;:::-;-1:-1:-1;;;;;29481:23:0;;;;;;:12;:23;;;;;:37;;:74;29028:546;;;:::o;50835:210::-;50917:12;;50913:125;;-1:-1:-1;;;;;50987:25:0;;;;;;:14;:25;;;;;;:39;;51017:8;50987:29;:39::i;:::-;-1:-1:-1;;;;;50946:25:0;;;;;;:14;:25;;;;;:80;50835:210;;:::o;45484:1097::-;45707:1;45692:12;:16;:52;;;;-1:-1:-1;11890:2:0;45712:18;:16;:18::i;:::-;-1:-1:-1;;;;;45712:32:0;;45692:52;45688:781;;;45761:21;45785:183;45821:13;45853;45885:12;45916:9;45944;45785:17;:183::i;:::-;46005:18;;45761:207;;-1:-1:-1;45989:34:0;;45985:450;;;46076:18;;:36;;46108:3;;46076:27;;46099:3;46076:22;:27::i;:36::-;46060:13;:52;:128;;46152:18;;:36;;46184:3;;46152:27;;46175:3;46152:22;:27::i;:36::-;46060:128;;;46136:13;46060:128;46044:144;;46214:150;46250:13;46286:7;:18;;;46327;:16;:18::i;:::-;46214:150;;;;;;;;;;;;;-1:-1:-1;;;;;46214:150:0;;;;;;;;;;;;;;46385:18;:34;;;45985:450;46451:7;;;45688:781;11890:2;46485:18;:16;:18::i;:::-;-1:-1:-1;;;;;46485:33:0;;46481:93;;;46556:6;46535:18;:27;46481:93;45484:1097;;;;;:::o;20081:189::-;20150:7;20195;:23;;;20177:6;:15;;;-1:-1:-1;;;;;20177:41:0;;:85;;20247:6;:15;;;-1:-1:-1;;;;;20177:85:0;;;;-1:-1:-1;;20221:23:0;;;20081:189::o;20278:159::-;20344:7;20371:6;:16;;;20391:1;20371:21;:58;;20413:6;:16;;;20371:58;;;-1:-1:-1;20395:15:0;;;-1:-1:-1;;;;;20371:58:0;;20278:159::o;51705:348::-;51848:21;51902:9;51882:164;51920:9;51913:4;:16;51882:164;;;52003:15;;;;:9;:15;;;;;:31;;;12374:4;51971:29;;52003:31;51971:63;;;;;51954:80;;;;;51931:6;;51882:164;;;;51705:348;;;;;:::o;19655:243::-;19745:15;;;;19718:7;;19745:24;:145;;19844:46;19854:18;:16;:18::i;:::-;-1:-1:-1;;;;;19844:46:0;19874:6;:15;;;-1:-1:-1;;;;;19844:46:0;:9;:46::i;19745:145::-;19785:43;19795:6;:15;;;-1:-1:-1;;;;;19785:43:0;19812:6;:15;;;-1:-1:-1;;;;;19785:43:0;:9;:43::i;48354:379::-;48524:7;48551:26;48567:9;48551:15;:26::i;:::-;:174;;48667:58;48681:13;48696:9;48707:11;48720:4;48667:13;:58::i;:::-;48551:174;;;48593:58;48607:13;48622:9;48633:11;48646:4;48593:13;:58::i;:::-;48544:181;48354:379;-1:-1:-1;;;;;48354:379:0:o;5532:287::-;-1:-1:-1;;;;;5616:23:0;;5608:32;;;;;;5668:12;;:24;;5685:6;5668:16;:24::i;:::-;5653:12;:39;-1:-1:-1;;;;;5724:18:0;;:9;:18;;;;;;;;;;;:30;;5747:6;5724:22;:30::i;:::-;-1:-1:-1;;;;;5703:18:0;;:9;:18;;;;;;;;;;;:51;;;;5772:39;;;;;;;5703:18;;:9;;5772:39;;;;;;;;;;5532:287;;:::o;50490:167::-;50561:7;50588:6;:15;;;:61;;50630:6;:19;;;50588:61;;;50606:21;50620:6;50606:13;:21::i;51053:189::-;51129:7;51156:24;51173:6;51156:16;:24::i;:::-;:50;;;;51184:22;51199:6;51184:14;:22::i;:::-;51156:78;;51213:21;51227:6;51213:13;:21::i;20999:279::-;21158:16;;;21172:1;21158:16;;;;;;;;;21115:22;;21158:16;;;21115:22;;21158:16;;;;;-1:-1:-1;21158:16:0;21150:24;;21196:13;21185:5;21191:1;21185:8;;;;;;;;;;;;;:24;-1:-1:-1;;;;;21185:24:0;;;-1:-1:-1;;;;;21185:24:0;;;;;12772:42;21220:5;21226:1;21220:8;;;;;;;;;;;;;:15;-1:-1:-1;;;;;21220:15:0;;;-1:-1:-1;;;;;21220:15:0;;;;;21257:13;21246:5;21252:1;21246:8;;;;;;;;;;;;;:24;-1:-1:-1;;;;;21246:24:0;;;-1:-1:-1;;;;;21246:24:0;;;;;20999:279;;;;:::o;15766:173::-;15883:18;15921:9;;;;15766:173::o;38137:1338::-;38296:22;;:::i;:::-;38320:16;38338;38367:29;38373:7;38382:13;38367:5;:29::i;:::-;-1:-1:-1;;;;;38437:25:0;;;;;;:16;:25;;;;;;:44;;38467:13;38437:29;:44::i;:::-;-1:-1:-1;;;;;38409:25:0;;;;;;:16;:25;;;;;:72;38506:14;:12;:14::i;:::-;38494:26;;38542:24;38558:7;38542:15;:24::i;:::-;-1:-1:-1;;;;;38579:30:0;;;:18;;;:30;;;38620;;;:18;;;:30;38682:21;;;38661:42;;;:18;;;:42;38735:4;38714:18;;;:25;-1:-1:-1;38752:22:0;;:38;;;38930:18;;38531:35;;-1:-1:-1;38826:133:0;;38777:13;;38579:30;38906:9;;38826:13;:133::i;:::-;38801:158;;38972:22;:20;:22::i;:::-;-1:-1:-1;39071:22:0;;;;39033:19;;:97;;11743:15;;39033:61;;:37;:61::i;:97::-;39007:23;;;:123;39147:26;39163:9;39147:15;:26::i;:::-;39143:325;;;-1:-1:-1;;;;;39190:30:0;;:18;;;:30;;;39272:23;;;;39235:61;;39190:30;39235:16;:61::i;:::-;39338:118;39372:13;39404:9;-1:-1:-1;;;;;39338:118:0;39432:9;39338:15;:118::i;:::-;39311:24;;;:145;38137:1338;;;;;;;;:::o;16396:169::-;-1:-1:-1;;;;;16526:24:0;;16466:18;16526:24;;;:13;:24;;;;;;16504:53;;16515:9;;-1:-1:-1;;;16504:10:0;:53::i;18740:134::-;-1:-1:-1;;;;;18838:24:0;;;;;:13;:24;;;;;;;18865:1;18838:28;18811:55;;18740:134::o;27847:182::-;27978:30;;;;:19;:30;;;;;;:43;;28013:7;27978:34;:43::i;:::-;27936:30;;;;:19;:30;;;;;;:85;;;;-1:-1:-1;27847:182:0:o;18613:119::-;-1:-1:-1;;;;;18701:19:0;;;;;:10;:19;;;;;;;18723:1;18701:23;18679:45;;18613:119::o;9158:403::-;9312:7;:19;:32;;9336:7;9312:23;:32::i;:::-;9290:7;:54;9377:19;;:32;;9401:7;9377:23;:32::i;:::-;9355:19;:54;9426:12;;9422:106;;9480:22;;:36;;9507:8;9480:26;:36::i;44804:159::-;44917:25;;;;:14;:25;;;;;;:38;;44947:7;44917:29;:38::i;:::-;44889:25;;;;:14;:25;;;;;;:66;;;;-1:-1:-1;44804:159:0:o;20689:122::-;-1:-1:-1;;;;;20779:24:0;;;;20689:122::o;813:192::-;899:7;935:12;927:6;;;;919:29;;;;-1:-1:-1;;;919:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;971:5:0;;;813:192::o;27245:293::-;27430:7;27515:15;27497;27473:12;27458;:27;27489:5;27457:37;:55;;;;;;:73;;27245:293;-1:-1:-1;;;;;27245:293:0:o;27546:208::-;12175:9;27693:27;;27724:5;27692:37;:54;;27546:208::o;26929:308::-;26984:22;;-1:-1:-1;;;26984:22:0;;;;:31;;27011:4;26984:31;26980:120;;;27049:14;;;-1:-1:-1;;27032:35:0;;27049:14;;;;-1:-1:-1;;27049:18:0;27032:35;;;;;;27082:7;;26980:120;27114:22;;-1:-1:-1;;;27114:22:0;;;;27110:120;;27179:14;;;-1:-1:-1;;27162:35:0;;27179:14;;;;27196:1;27179:18;27162:35;;;;;;27212:7;;19906:167;19986:7;20026:8;20013:10;:21;:52;;20041:24;:8;20054:10;20041:12;:24::i;:::-;20013:52;;;-1:-1:-1;20037:1:0;;19906:167;-1:-1:-1;;19906:167:0:o;1411:278::-;1497:7;1532:12;1525:5;1517:28;;;;-1:-1:-1;;;1517:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1556:9;1572:1;1568;:5;;;;;;;1411:278;-1:-1:-1;;;;;1411:278:0:o;19112:150::-;-1:-1:-1;;;;;19212:23:0;19188:4;19212:23;;;:12;:23;;;;;:37;;;:42;;19112:150::o;34057:366::-;34202:25;34260:9;34240:176;34278:9;34271:4;:16;34240:176;;;34372:16;;;;:10;:16;;;;;:32;;;34333:19;;12374:4;34333:36;34372:32;34333:71;;;;;34312:92;;;;;34289:6;;34240:176;;51452:245;51527:7;51554:135;51586:6;:19;;;51620:20;51633:6;51620:12;:20::i;:::-;51655:23;51671:6;51655:15;:23::i;:::-;51554:17;:135::i;10083:252::-;10293:23;;10155:19;;10293:7;10189:19;10223:18;;10256:22;;10130:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10083:252::o;20568:113::-;20623:4;20655:18;:16;:18::i;:::-;-1:-1:-1;;;;;20647:26:0;;;;;;20568:113;-1:-1:-1;20568:113:0:o;20445:115::-;20502:4;20534:18;:16;:18::i;:::-;-1:-1:-1;;;;;20526:26:0;;;;;;20445:115;-1:-1:-1;20445:115:0:o;29582:172::-;29656:7;29683:31;29704:9;29683:20;:31::i;:::-;:63;;29721:25;29736:9;29721:14;:25::i;46589:527::-;46796:7;46816:20;46839:86;46863:9;46874:26;46890:9;46874:15;:26::i;:::-;:40;;46910:4;46874:40;;;46903:4;46874:40;46839:86;;:9;:86::i;:::-;46816:109;-1:-1:-1;46959:149:0;47095:12;46959:113;47068:3;46959:86;46816:109;46959:86;:13;46995;46959:35;:50::i;:::-;:72;;:86::i;:149::-;46938:170;46589:527;-1:-1:-1;;;;;;;46589:527:0:o;48741:323::-;48913:7;48940:116;49051:4;48940:92;48998:33;49008:9;49019:11;48998:9;:33::i;:::-;48940:39;48952:13;48967:11;48940;:39::i;50665:162::-;50731:7;50758:24;50775:6;50758:16;:24::i;:::-;:61;;50789:30;50812:6;50789:22;:30::i;19270:222::-;19340:4;19382:1;19364:6;:15;;;-1:-1:-1;;;;;19364:19:0;;:120;;19466:18;:16;:18::i;:::-;-1:-1:-1;;;;;19448:36:0;:6;:15;;;-1:-1:-1;;;;;19448:36:0;;19364:120;;;19417:6;:15;;;-1:-1:-1;;;;;19399:33:0;:6;:15;;;-1:-1:-1;;;;;19399:33:0;;19357:127;;19270:222;;;:::o;51250:194::-;51316:7;51432:4;51406:20;51419:6;51406:12;:20::i;:::-;51400:1;51380:17;51390:6;51380:9;:17::i;:::-;:21;51373:3;:29;:54;;;;;;51366:3;:62;51343:6;:19;;;:86;:93;;;;16234:154;-1:-1:-1;;;;;16354:19:0;;16299:15;16354:19;;;:10;:19;;;;;;16334:46;;16345:7;;-1:-1:-1;;;16334:10:0;:46::i;29998:450::-;30072:77;;;-1:-1:-1;;;30072:77:0;;11743:15;30072:77;;;;;;;;;;;;30133:5;30072:77;;;;;;;;30048:7;;12900:42;;30072:28;;11743:15;30072:77;;;;;;30133:5;;30072:77;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30072:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30072:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30072:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30072:77:0;;;;;;;;;;;;-1:-1:-1;30072:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30068:373;;;;:::i;:::-;;;;;;;;-1:-1:-1;;30335:19:0;;30328:26;;30068:373;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30410:19;;30403:26;;;;;30068:373;30222:7;30230:1;30222:10;;;;;;;;;;;;;;30200:19;:32;;;;30254:19;;30247:26;;;;;28736:284;-1:-1:-1;;;;;28872:23:0;;;;;;:12;:23;;;;;:35;:55;;28912:14;28872:39;:55::i;:::-;-1:-1:-1;;;;;28825:23:0;;;;;;:12;:23;;;;;:102;28978:34;28838:9;28978:23;:34::i;:::-;-1:-1:-1;;;;;28938:23:0;;;;;;;:12;:23;;;;;:37;;:74;;;;-1:-1:-1;28736:284:0:o;50002:480::-;50144:7;50184:35;50209:9;50184:24;:35::i;:::-;:81;;;-1:-1:-1;12072:3:0;50236:29;;50184:81;:290;;50306:168;50342:13;50378:9;50410:7;:18;;;50451:4;50306:13;:168::i;28572:156::-;-1:-1:-1;;;;;28667:23:0;28643:4;28667:23;;;:12;:23;;;;;:35;12421:8;-1:-1:-1;;28572:156:0:o;29762:228::-;-1:-1:-1;;;;;29867:23:0;;29827:7;29867:23;;;:12;:23;;;;;:37;;;:115;;29964:18;:16;:18::i;:::-;-1:-1:-1;;;;;29867:115:0;;;;-1:-1:-1;;;;;;29924:23:0;;;;;:12;:23;;;;;:37;;;;29762:228::o;49072:401::-;49178:7;49454:11;49291:160;11978:4;49323:28;;:80;;49402:1;49323:80;;;-1:-1:-1;;49371:28:0;;49323:80;12578:15;12024:5;49291:13;:160::i;:::-;49218:57;49232:9;12485:17;11978:4;49218:13;:57::i;:::-;:233;:247;;49072:401;-1:-1:-1;;;49072:401:0:o;49797:197::-;49909:7;49936:50;49974:11;49936:33;:13;12374:4;49936:17;:33::i;20819:172::-;20885:7;20943:1;20925:6;:15;;;-1:-1:-1;;;;;20925:19:0;;:58;;20982:1;20925:58;;;20978:1;20960:6;:15;;;:19;20925:58;-1:-1:-1;;;;;20905:78:0;;20819:172;-1:-1:-1;;20819:172:0:o;49481:308::-;49613:7;49640:141;49776:4;49667:8;49655:9;:20;:101;;49735:21;:9;49749:6;49735:13;:21::i;:::-;49655:101;;;49695:20;:8;49708:6;49695:12;:20::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:88:1:-;89:3;85:15;;71:31::o;107:764::-;;188:4;170:16;167:26;164:2;;;196:5;;164:2;237:1;232:3;227;212:27;299:10;261:36;292:3;286:10;261:36;:::i;:::-;258:52;248:2;;314:5;;248:2;348;342:9;388:16;-1:-1:-1;;384:29:1;381:1;342:9;360:54;443:4;437:11;467:16;-1:-1:-1;;;;;573:2:1;566:4;558:6;554:17;551:25;546:2;538:6;535:14;532:45;529:2;;;580:5;;;;;;529:2;617:6;611:4;607:17;596:28;;653:3;647:10;633:24;;680:2;672:6;669:14;666:2;;;686:5;;;;;;666:2;;747:16;741:4;737:27;730:4;721:6;716:3;712:16;708:27;705:60;702:2;;;768:5;;;;;702:2;833;812:15;-1:-1:-1;;808:29:1;799:39;;840:4;795:50;791:2;784:62;803:3;-1:-1:-1;;154:717:1;:::o
Swarm Source
ipfs://5fc0fbf6b4e80d846430a2c2107e39abab2c58c4d585e46baae4b057c29057f7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.