More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 155 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Ether | 11625342 | 1514 days ago | IN | 0 ETH | 0.00188366 | ||||
Withdraw Ether | 11625335 | 1514 days ago | IN | 0 ETH | 0.00188293 | ||||
Withdraw Ether | 11625334 | 1514 days ago | IN | 0 ETH | 0.00188293 | ||||
Withdraw Ether | 11625328 | 1514 days ago | IN | 0 ETH | 0.00188293 | ||||
Withdraw Ether | 8614050 | 1987 days ago | IN | 0 ETH | 0.00125004 | ||||
Withdraw Ether | 8614045 | 1987 days ago | IN | 0 ETH | 0.00053473 | ||||
Withdraw Ether | 8614041 | 1987 days ago | IN | 0 ETH | 0.00053473 | ||||
Withdraw Ether | 8614024 | 1987 days ago | IN | 0 ETH | 0.00053473 | ||||
Withdraw Ether | 8613986 | 1987 days ago | IN | 0 ETH | 0.00069863 | ||||
Withdraw Ether | 8613978 | 1987 days ago | IN | 0 ETH | 0.00069863 | ||||
Withdraw Ether | 8455359 | 2012 days ago | IN | 0 ETH | 0.00124863 | ||||
Withdraw Ether | 8455345 | 2012 days ago | IN | 0 ETH | 0.00074951 | ||||
Withdraw Ether | 8455130 | 2012 days ago | IN | 0 ETH | 0.00070004 | ||||
Withdraw Ether | 8455027 | 2012 days ago | IN | 0 ETH | 0.00069863 | ||||
Transfer | 8310565 | 2034 days ago | IN | 0 ETH | 0.00002349 | ||||
Set Ether Price | 8296430 | 2037 days ago | IN | 0 ETH | 0.00005747 | ||||
Transfer | 8295031 | 2037 days ago | IN | 5 ETH | 0.00370864 | ||||
Transfer | 8290265 | 2038 days ago | IN | 5.3 ETH | 0.00893966 | ||||
Transfer | 8283571 | 2039 days ago | IN | 5 ETH | 0.00446983 | ||||
Transfer | 8283168 | 2039 days ago | IN | 1 ETH | 0.00292387 | ||||
Transfer | 8283108 | 2039 days ago | IN | 1 ETH | 0.00485908 | ||||
Transfer | 8277229 | 2040 days ago | IN | 5 ETH | 0.00370864 | ||||
Transfer | 8242968 | 2045 days ago | IN | 5 ETH | 0.00446983 | ||||
Transfer | 8219967 | 2048 days ago | IN | 5.3 ETH | 0.00042718 | ||||
Transfer | 8217020 | 2049 days ago | IN | 5 ETH | 0.00370864 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
11625342 | 1514 days ago | 0.495 ETH | ||||
11625335 | 1514 days ago | 0.00505 ETH | ||||
11625334 | 1514 days ago | 0.00505 ETH | ||||
11625328 | 1514 days ago | 0.056158 ETH | ||||
8614050 | 1987 days ago | 31 ETH | ||||
8613986 | 1987 days ago | 10 ETH | ||||
8613978 | 1987 days ago | 1 ETH | ||||
8455359 | 2012 days ago | 1 ETH | ||||
8455130 | 2012 days ago | 50 ETH | ||||
8455027 | 2012 days ago | 0.1 ETH | ||||
8295031 | 2037 days ago | 2.49 ETH | ||||
8295031 | 2037 days ago | 0.2 ETH | ||||
8295031 | 2037 days ago | 0.3 ETH | ||||
8295031 | 2037 days ago | 0.3 ETH | ||||
8290265 | 2038 days ago | 2.63 ETH | ||||
8290265 | 2038 days ago | 0.212 ETH | ||||
8290265 | 2038 days ago | 0.318 ETH | ||||
8290265 | 2038 days ago | 0.318 ETH | ||||
8283571 | 2039 days ago | 2.49 ETH | ||||
8283571 | 2039 days ago | 0.2 ETH | ||||
8283571 | 2039 days ago | 0.3 ETH | ||||
8283571 | 2039 days ago | 0.3 ETH | ||||
8283168 | 2039 days ago | 0.5 ETH | ||||
8283168 | 2039 days ago | 0.04 ETH | ||||
8283168 | 2039 days ago | 0.06 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
WesionPublicSale
Compiler Version
v0.5.7+commit.6da8b019
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-06-27 */ /** *Submitted for verification at Etherscan.io on 2019-06-20 */ pragma solidity ^0.5.7; // WESION Public Sale /** * @title SafeMath for uint256 * @dev Unsigned math operations with safety checks that revert on error. */ library SafeMath256 { /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, * reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return a / b; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } /** * @title SafeMath for uint16 * @dev Unsigned math operations with safety checks that revert on error. */ library SafeMath16 { /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint16 a, uint16 b) internal pure returns (uint16 c) { c = a + b; assert(c >= a); return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint16 a, uint16 b) internal pure returns (uint16) { assert(b <= a); return a - b; } /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint16 a, uint16 b) internal pure returns (uint16 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, * reverts on division by zero. */ function div(uint16 a, uint16 b) internal pure returns (uint16) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return a / b; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint16 a, uint16 b) internal pure returns (uint16) { require(b != 0); return a % b; } } /** * @title Ownable */ contract Ownable { address private _owner; address payable internal _receiver; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event ReceiverChanged(address indexed previousReceiver, address indexed newReceiver); /** * @dev The Ownable constructor sets the original `owner` of the contract * to the sender account. */ constructor () internal { _owner = msg.sender; _receiver = msg.sender; } /** * @return The address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == _owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0)); address __previousOwner = _owner; _owner = newOwner; emit OwnershipTransferred(__previousOwner, newOwner); } /** * @dev Change receiver. */ function changeReceiver(address payable newReceiver) external onlyOwner { require(newReceiver != address(0)); address __previousReceiver = _receiver; _receiver = newReceiver; emit ReceiverChanged(__previousReceiver, newReceiver); } /** * @dev Rescue compatible ERC20 Token * * @param tokenAddr ERC20 The address of the ERC20 token contract * @param receiver The address of the receiver * @param amount uint256 */ function rescueTokens(address tokenAddr, address receiver, uint256 amount) external onlyOwner { IERC20 _token = IERC20(tokenAddr); require(receiver != address(0)); uint256 balance = _token.balanceOf(address(this)); require(balance >= amount); assert(_token.transfer(receiver, amount)); } /** * @dev Withdraw ether */ function withdrawEther(address payable to, uint256 amount) external onlyOwner { require(to != address(0)); uint256 balance = address(this).balance; require(balance >= amount); to.transfer(amount); } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { bool private _paused; event Paused(address account); event Unpaused(address account); constructor () internal { _paused = false; } /** * @return Returns true if the contract is paused, false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!_paused, "Paused."); _; } /** * @dev Called by a pauser to pause, triggers stopped state. */ function setPaused(bool state) external onlyOwner { if (_paused && !state) { _paused = false; emit Unpaused(msg.sender); } else if (!_paused && state) { _paused = true; emit Paused(msg.sender); } } } /** * @title ERC20 interface * @dev see https://eips.ethereum.org/EIPS/eip-20 */ interface IERC20 { function balanceOf(address owner) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); } /** * @title WESION interface */ interface IWesion { function balanceOf(address owner) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function inWhitelist(address account) external view returns (bool); function referrer(address account) external view returns (address); function refCount(address account) external view returns (uint256); } /** * @title WESION Public Sale */ contract WesionPublicSale is Ownable, Pausable{ using SafeMath16 for uint16; using SafeMath256 for uint256; // WESION IWesion public WESION = IWesion(0x2c1564A74F07757765642ACef62a583B38d5A213); // Start timestamp uint32 _startTimestamp; // Audit ether price uint256 private _etherPrice; // 1 Ether = xx.xxxxxx USD, with 6 decimals // Referral rewards, 35% for 15 levels uint16 private WHITELIST_REF_REWARDS_PCT_SUM = 35; uint16[15] private WHITELIST_REF_REWARDS_PCT = [ 6, // 6% for Level.1 6, // 6% for Level.2 5, // 5% for Level.3 4, // 4% for Level.4 3, // 3% for Level.5 2, // 2% for Level.6 1, // 1% for Level.7 1, // 1% for Level.8 1, // 1% for Level.9 1, // 1% for Level.10 1, // 1% for Level.11 1, // 1% for Level.12 1, // 1% for Level.13 1, // 1% for Level.14 1 // 1% for Level.15 ]; // Wei & Gas uint72 private WEI_MIN = 0.1 ether; // 0.1 Ether Minimum uint72 private WEI_MAX = 100 ether; // 100 Ether Maximum uint72 private WEI_BONUS = 10 ether; // >10 Ether for Bonus uint24 private GAS_MIN = 3000000; // 3.0 Mwei gas Mininum uint24 private GAS_EX = 1500000; // 1.5 Mwei gas for ex // Price uint256 private WESION_USD_PRICE_START = 1000; // $ 0.00100 USD uint256 private WESION_USD_PRICE_STEP = 10; // $ + 0.00001 USD uint256 private STAGE_USD_CAP_START = 100000000; // $ 100 USD uint256 private STAGE_USD_CAP_STEP = 1000000; // $ +1 USD uint256 private STAGE_USD_CAP_MAX = 15100000000; // $ 15,100 USD uint256 private _WESIONUsdPrice = WESION_USD_PRICE_START; // Progress uint16 private STAGE_MAX = 60000; // 60,000 stages total uint16 private SEASON_MAX = 100; // 100 seasons total uint16 private SEASON_STAGES = 600; // each 600 stages is a season uint16 private _stage; uint16 private _season; // Sum uint256 private _txs; uint256 private _WESIONTxs; uint256 private _WESIONBonusTxs; uint256 private _WESIONWhitelistTxs; uint256 private _WESIONIssued; uint256 private _WESIONBonus; uint256 private _WESIONWhitelist; uint256 private _weiSold; uint256 private _weiRefRewarded; uint256 private _weiTopSales; uint256 private _weiTeam; uint256 private _weiPending; uint256 private _weiPendingTransfered; // Top-Sales uint256 private TOP_SALES_RATIO_START = 15000000; // 15%, with 8 decimals uint256 private TOP_SALES_RATIO_DISTANCE = 50000000; // 50%, with 8 decimals uint256 private _topSalesRatio = TOP_SALES_RATIO_START; // 15% + 50% x(_stage/_stageMax) // During tx bool private _inWhitelist_; uint256 private _pending_ = WHITELIST_REF_REWARDS_PCT_SUM; uint16[] private _rewards_; address[] private _referrers_; // Audit ether price auditor mapping (address => bool) private _etherPriceAuditors; // Stage mapping (uint16 => uint256) private _stageUsdSold; mapping (uint16 => uint256) private _stageWESIONIssued; // Season mapping (uint16 => uint256) private _seasonWeiSold; mapping (uint16 => uint256) private _seasonWeiTopSales; mapping (uint16 => uint256) private _seasonWeiTopSalesTransfered; // Account mapping (address => uint256) private _accountWESIONIssued; mapping (address => uint256) private _accountWESIONBonus; mapping (address => uint256) private _accountWESIONWhitelisted; mapping (address => uint256) private _accountWeiPurchased; mapping (address => uint256) private _accountWeiRefRewarded; // Ref mapping (uint16 => address[]) private _seasonRefAccounts; mapping (uint16 => mapping (address => bool)) private _seasonHasRefAccount; mapping (uint16 => mapping (address => uint256)) private _usdSeasonAccountPurchased; mapping (uint16 => mapping (address => uint256)) private _usdSeasonAccountRef; // Events event AuditEtherPriceChanged(uint256 value, address indexed account); event AuditEtherPriceAuditorChanged(address indexed account, bool state); event WESIONBonusTransfered(address indexed to, uint256 amount); event WESIONWhitelistTransfered(address indexed to, uint256 amount); event WESIONIssuedTransfered(uint16 stageIndex, address indexed to, uint256 WESIONAmount, uint256 auditEtherPrice, uint256 weiUsed); event StageClosed(uint256 _stageNumber, address indexed account); event SeasonClosed(uint16 _seasonNumber, address indexed account); event SeasonTopSalesWeiTransfered(uint16 seasonNumber, address indexed to, uint256 amount); event TeamWeiTransfered(address indexed to, uint256 amount); event PendingWeiTransfered(address indexed to, uint256 amount); /** * @dev Start timestamp. */ function startTimestamp() public view returns (uint32) { return _startTimestamp; } /** * @dev Set start timestamp. */ function setStartTimestamp(uint32 timestamp) external onlyOwner { _startTimestamp = timestamp; } /** * @dev Throws if not ether price auditor. */ modifier onlyEtherPriceAuditor() { require(_etherPriceAuditors[msg.sender]); _; } /** * @dev Set audit ether price. */ function setEtherPrice(uint256 value) external onlyEtherPriceAuditor { _etherPrice = value; emit AuditEtherPriceChanged(value, msg.sender); } /** * @dev Get ether price auditor state. */ function etherPriceAuditor(address account) public view returns (bool) { return _etherPriceAuditors[account]; } /** * @dev Get ether price auditor state. */ function setEtherPriceAuditor(address account, bool state) external onlyOwner { _etherPriceAuditors[account] = state; emit AuditEtherPriceAuditorChanged(account, state); } /** * @dev Stage WESION price in USD, by stage index. */ function stageWESIONUsdPrice(uint16 stageIndex) private view returns (uint256) { return WESION_USD_PRICE_START.add(WESION_USD_PRICE_STEP.mul(stageIndex)); } /** * @dev wei => USD */ function wei2usd(uint256 amount) private view returns (uint256) { return amount.mul(_etherPrice).div(1 ether); } /** * @dev USD => wei */ function usd2wei(uint256 amount) private view returns (uint256) { return amount.mul(1 ether).div(_etherPrice); } /** * @dev USD => WESION */ function usd2WESION(uint256 usdAmount) private view returns (uint256) { return usdAmount.mul(1000000).div(_WESIONUsdPrice); } /** * @dev USD => WESION */ function usd2WESIONByStage(uint256 usdAmount, uint16 stageIndex) public view returns (uint256) { return usdAmount.mul(1000000).div(stageWESIONUsdPrice(stageIndex)); } /** * @dev Calculate season number, by stage index. */ function calcSeason(uint16 stageIndex) private view returns (uint16) { if (stageIndex > 0) { uint16 __seasonNumber = stageIndex.div(SEASON_STAGES); if (stageIndex.mod(SEASON_STAGES) > 0) { return __seasonNumber.add(1); } return __seasonNumber; } return 1; } /** * @dev Transfer Top-Sales wei, by season number. */ function transferTopSales(uint16 seasonNumber, address payable to) external onlyOwner { uint256 __weiRemain = seasonTopSalesRemain(seasonNumber); require(to != address(0)); _seasonWeiTopSalesTransfered[seasonNumber] = _seasonWeiTopSalesTransfered[seasonNumber].add(__weiRemain); emit SeasonTopSalesWeiTransfered(seasonNumber, to, __weiRemain); to.transfer(__weiRemain); } /** * @dev Pending remain, in wei. */ function pendingRemain() private view returns (uint256) { return _weiPending.sub(_weiPendingTransfered); } /** * @dev Transfer pending wei. */ function transferPending(address payable to) external onlyOwner { uint256 __weiRemain = pendingRemain(); require(to != address(0)); _weiPendingTransfered = _weiPendingTransfered.add(__weiRemain); emit PendingWeiTransfered(to, __weiRemain); to.transfer(__weiRemain); } /** * @dev Transfer team wei. */ function transferTeam(address payable to) external onlyOwner { uint256 __weiRemain = _weiSold.sub(_weiRefRewarded).sub(_weiTopSales).sub(_weiPending).sub(_weiTeam); require(to != address(0)); _weiTeam = _weiTeam.add(__weiRemain); emit TeamWeiTransfered(to, __weiRemain); to.transfer(__weiRemain); } /** * @dev Status. */ function status() public view returns (uint256 auditEtherPrice, uint16 stage, uint16 season, uint256 WESIONUsdPrice, uint256 currentTopSalesRatio, uint256 txs, uint256 WESIONTxs, uint256 WESIONBonusTxs, uint256 WESIONWhitelistTxs, uint256 WESIONIssued, uint256 WESIONBonus, uint256 WESIONWhitelist) { auditEtherPrice = _etherPrice; if (_stage > STAGE_MAX) { stage = STAGE_MAX; season = SEASON_MAX; } else { stage = _stage; season = _season; } WESIONUsdPrice = _WESIONUsdPrice; currentTopSalesRatio = _topSalesRatio; txs = _txs; WESIONTxs = _WESIONTxs; WESIONBonusTxs = _WESIONBonusTxs; WESIONWhitelistTxs = _WESIONWhitelistTxs; WESIONIssued = _WESIONIssued; WESIONBonus = _WESIONBonus; WESIONWhitelist = _WESIONWhitelist; } /** * @dev Sum. */ function sum() public view returns(uint256 weiSold, uint256 weiReferralRewarded, uint256 weiTopSales, uint256 weiTeam, uint256 weiPending, uint256 weiPendingTransfered, uint256 weiPendingRemain) { weiSold = _weiSold; weiReferralRewarded = _weiRefRewarded; weiTopSales = _weiTopSales; weiTeam = _weiTeam; weiPending = _weiPending; weiPendingTransfered = _weiPendingTransfered; weiPendingRemain = pendingRemain(); } /** * @dev Throws if gas is not enough. */ modifier enoughGas() { require(gasleft() > GAS_MIN); _; } /** * @dev Throws if not started. */ modifier onlyOnSale() { require(_startTimestamp > 0 && now > _startTimestamp, "WESION Public-Sale has not started yet."); require(_etherPrice > 0, "Audit ETH price must be greater than zero."); require(!paused(), "WESION Public-Sale is paused."); require(_stage <= STAGE_MAX, "WESION Public-Sale Closed."); _; } /** * @dev Top-Sales ratio. */ function topSalesRatio(uint16 stageIndex) private view returns (uint256) { return TOP_SALES_RATIO_START.add(TOP_SALES_RATIO_DISTANCE.mul(stageIndex).div(STAGE_MAX)); } /** * @dev USD => wei, for Top-Sales */ function usd2weiTopSales(uint256 usdAmount) private view returns (uint256) { return usd2wei(usdAmount.mul(_topSalesRatio).div(100000000)); } /** * @dev Calculate stage dollor cap, by stage index. */ function stageUsdCap(uint16 stageIndex) private view returns (uint256) { uint256 __usdCap = STAGE_USD_CAP_START.add(STAGE_USD_CAP_STEP.mul(stageIndex)); if (__usdCap > STAGE_USD_CAP_MAX) { return STAGE_USD_CAP_MAX; } return __usdCap; } /** * @dev Stage Vokdn cap, by stage index. */ function stageWESIONCap(uint16 stageIndex) private view returns (uint256) { return usd2WESIONByStage(stageUsdCap(stageIndex), stageIndex); } /** * @dev Stage status, by stage index. */ function stageStatus(uint16 stageIndex) public view returns (uint256 WESIONUsdPrice, uint256 WESIONCap, uint256 WESIONOnSale, uint256 WESIONSold, uint256 usdCap, uint256 usdOnSale, uint256 usdSold, uint256 weiTopSalesRatio) { if (stageIndex > STAGE_MAX) { return (0, 0, 0, 0, 0, 0, 0, 0); } WESIONUsdPrice = stageWESIONUsdPrice(stageIndex); WESIONSold = _stageWESIONIssued[stageIndex]; WESIONCap = stageWESIONCap(stageIndex); WESIONOnSale = WESIONCap.sub(WESIONSold); usdSold = _stageUsdSold[stageIndex]; usdCap = stageUsdCap(stageIndex); usdOnSale = usdCap.sub(usdSold); weiTopSalesRatio = topSalesRatio(stageIndex); } /** * @dev Season Top-Sales remain, in wei. */ function seasonTopSalesRemain(uint16 seasonNumber) private view returns (uint256) { return _seasonWeiTopSales[seasonNumber].sub(_seasonWeiTopSalesTransfered[seasonNumber]); } /** * @dev Season Top-Sales rewards, by season number, in wei. */ function seasonTopSalesRewards(uint16 seasonNumber) public view returns (uint256 weiSold, uint256 weiTopSales, uint256 weiTopSalesTransfered, uint256 weiTopSalesRemain) { weiSold = _seasonWeiSold[seasonNumber]; weiTopSales = _seasonWeiTopSales[seasonNumber]; weiTopSalesTransfered = _seasonWeiTopSalesTransfered[seasonNumber]; weiTopSalesRemain = seasonTopSalesRemain(seasonNumber); } /** * @dev Query account. */ function accountQuery(address account) public view returns (uint256 WESIONIssued, uint256 WESIONBonus, uint256 WESIONWhitelisted, uint256 weiPurchased, uint256 weiReferralRewarded) { WESIONIssued = _accountWESIONIssued[account]; WESIONBonus = _accountWESIONBonus[account]; WESIONWhitelisted = _accountWESIONWhitelisted[account]; weiPurchased = _accountWeiPurchased[account]; weiReferralRewarded = _accountWeiRefRewarded[account]; } /** * @dev Accounts in a specific season. */ function seasonRefAccounts(uint16 seasonNumber) public view returns (address[] memory accounts) { accounts = _seasonRefAccounts[seasonNumber]; } /** * @dev Season number => account => USD purchased. */ function usdSeasonAccountPurchased(uint16 seasonNumber, address account) public view returns (uint256) { return _usdSeasonAccountPurchased[seasonNumber][account]; } /** * @dev Season number => account => referral dollors. */ function usdSeasonAccountRef(uint16 seasonNumber, address account) public view returns (uint256) { return _usdSeasonAccountRef[seasonNumber][account]; } /** * @dev constructor */ constructor () public { _etherPriceAuditors[msg.sender] = true; _stage = 0; _season = 1; } /** * @dev Receive ETH, and send WESIONs. */ function () external payable enoughGas onlyOnSale { require(msg.value >= WEI_MIN); require(msg.value <= WEI_MAX); // Set temporary variables. setTemporaryVariables(); uint256 __usdAmount = wei2usd(msg.value); uint256 __usdRemain = __usdAmount; uint256 __WESIONIssued; uint256 __WESIONBonus; uint256 __usdUsed; uint256 __weiUsed; // USD => WESION while (gasleft() > GAS_EX && __usdRemain > 0 && _stage <= STAGE_MAX) { uint256 __txWESIONIssued; (__txWESIONIssued, __usdRemain) = ex(__usdRemain); __WESIONIssued = __WESIONIssued.add(__txWESIONIssued); } // Used __usdUsed = __usdAmount.sub(__usdRemain); __weiUsed = usd2wei(__usdUsed); // Bonus 10% if (msg.value >= WEI_BONUS) { __WESIONBonus = __WESIONIssued.div(10); assert(transferWESIONBonus(__WESIONBonus)); } // Whitelisted // BUY-ONE-AND-GET-ONE-MORE-FREE if (_inWhitelist_ && __WESIONIssued > 0) { // both issued and bonus assert(transferWESIONWhitelisted(__WESIONIssued.add(__WESIONBonus))); // 35% for 15 levels sendWhitelistReferralRewards(__weiUsed); } // If wei remains, refund. if (__usdRemain > 0) { uint256 __weiRemain = usd2wei(__usdRemain); __weiUsed = msg.value.sub(__weiRemain); // Refund wei back msg.sender.transfer(__weiRemain); } // Counter if (__weiUsed > 0) { _txs = _txs.add(1); _weiSold = _weiSold.add(__weiUsed); _accountWeiPurchased[msg.sender] = _accountWeiPurchased[msg.sender].add(__weiUsed); } // Wei team uint256 __weiTeam; if (_season > SEASON_MAX) __weiTeam = _weiSold.sub(_weiRefRewarded).sub(_weiTopSales).sub(_weiPending).sub(_weiTeam); else __weiTeam = _weiSold.sub(_weiRefRewarded).sub(_weiTopSales).sub(_weiPending).sub(_weiTeam).div(0.01 ether).mul(0.01 ether); _weiTeam = _weiTeam.add(__weiTeam); _receiver.transfer(__weiTeam); // Assert finished assert(true); } /** * @dev Set temporary variables. */ function setTemporaryVariables() private { delete _referrers_; delete _rewards_; _inWhitelist_ = WESION.inWhitelist(msg.sender); _pending_ = WHITELIST_REF_REWARDS_PCT_SUM; address __cursor = msg.sender; for(uint16 i = 0; i < WHITELIST_REF_REWARDS_PCT.length; i++) { address __refAccount = WESION.referrer(__cursor); if (__cursor == __refAccount) break; if (WESION.refCount(__refAccount) > i) { if (!_seasonHasRefAccount[_season][__refAccount]) { _seasonRefAccounts[_season].push(__refAccount); _seasonHasRefAccount[_season][__refAccount] = true; } _pending_ = _pending_.sub(WHITELIST_REF_REWARDS_PCT[i]); _rewards_.push(WHITELIST_REF_REWARDS_PCT[i]); _referrers_.push(__refAccount); } __cursor = __refAccount; } } /** * @dev USD => WESION */ function ex(uint256 usdAmount) private returns (uint256, uint256) { uint256 __stageUsdCap = stageUsdCap(_stage); uint256 __WESIONIssued; // in stage if (_stageUsdSold[_stage].add(usdAmount) <= __stageUsdCap) { exCount(usdAmount); __WESIONIssued = usd2WESION(usdAmount); assert(transferWESIONIssued(__WESIONIssued, usdAmount)); // close stage, if stage dollor cap reached if (__stageUsdCap == _stageUsdSold[_stage]) { assert(closeStage()); } return (__WESIONIssued, 0); } // close stage uint256 __usdUsed = __stageUsdCap.sub(_stageUsdSold[_stage]); uint256 __usdRemain = usdAmount.sub(__usdUsed); exCount(__usdUsed); __WESIONIssued = usd2WESION(__usdUsed); assert(transferWESIONIssued(__WESIONIssued, __usdUsed)); assert(closeStage()); return (__WESIONIssued, __usdRemain); } /** * @dev Ex counter. */ function exCount(uint256 usdAmount) private { uint256 __weiSold = usd2wei(usdAmount); uint256 __weiTopSales = usd2weiTopSales(usdAmount); _usdSeasonAccountPurchased[_season][msg.sender] = _usdSeasonAccountPurchased[_season][msg.sender].add(usdAmount); // season => address => purchased, in USD _stageUsdSold[_stage] = _stageUsdSold[_stage].add(usdAmount); // stage sold, in USD _seasonWeiSold[_season] = _seasonWeiSold[_season].add(__weiSold); // season sold, in wei _seasonWeiTopSales[_season] = _seasonWeiTopSales[_season].add(__weiTopSales); // season Top-Sales, in wei _weiTopSales = _weiTopSales.add(__weiTopSales); // sum Top-Sales, in wei // season referral account if (_inWhitelist_) { for (uint16 i = 0; i < _rewards_.length; i++) { _usdSeasonAccountRef[_season][_referrers_[i]] = _usdSeasonAccountRef[_season][_referrers_[i]].add(usdAmount); } } } /** * @dev Transfer WESION issued. */ function transferWESIONIssued(uint256 amount, uint256 usdAmount) private returns (bool) { _WESIONTxs = _WESIONTxs.add(1); _WESIONIssued = _WESIONIssued.add(amount); _stageWESIONIssued[_stage] = _stageWESIONIssued[_stage].add(amount); _accountWESIONIssued[msg.sender] = _accountWESIONIssued[msg.sender].add(amount); assert(WESION.transfer(msg.sender, amount)); emit WESIONIssuedTransfered(_stage, msg.sender, amount, _etherPrice, usdAmount); return true; } /** * @dev Transfer WESION bonus. */ function transferWESIONBonus(uint256 amount) private returns (bool) { _WESIONBonusTxs = _WESIONBonusTxs.add(1); _WESIONBonus = _WESIONBonus.add(amount); _accountWESIONBonus[msg.sender] = _accountWESIONBonus[msg.sender].add(amount); assert(WESION.transfer(msg.sender, amount)); emit WESIONBonusTransfered(msg.sender, amount); return true; } /** * @dev Transfer WESION whitelisted. */ function transferWESIONWhitelisted(uint256 amount) private returns (bool) { _WESIONWhitelistTxs = _WESIONWhitelistTxs.add(1); _WESIONWhitelist = _WESIONWhitelist.add(amount); _accountWESIONWhitelisted[msg.sender] = _accountWESIONWhitelisted[msg.sender].add(amount); assert(WESION.transfer(msg.sender, amount)); emit WESIONWhitelistTransfered(msg.sender, amount); return true; } /** * Close current stage. */ function closeStage() private returns (bool) { emit StageClosed(_stage, msg.sender); _stage = _stage.add(1); _WESIONUsdPrice = stageWESIONUsdPrice(_stage); _topSalesRatio = topSalesRatio(_stage); // Close current season uint16 __seasonNumber = calcSeason(_stage); if (_season < __seasonNumber) { emit SeasonClosed(_season, msg.sender); _season = __seasonNumber; } return true; } /** * @dev Send whitelist referral rewards. */ function sendWhitelistReferralRewards(uint256 weiAmount) private { uint256 __weiRemain = weiAmount; for (uint16 i = 0; i < _rewards_.length; i++) { uint256 __weiReward = weiAmount.mul(_rewards_[i]).div(100); address payable __receiver = address(uint160(_referrers_[i])); _weiRefRewarded = _weiRefRewarded.add(__weiReward); _accountWeiRefRewarded[__receiver] = _accountWeiRefRewarded[__receiver].add(__weiReward); __weiRemain = __weiRemain.sub(__weiReward); __receiver.transfer(__weiReward); } if (_pending_ > 0) _weiPending = _weiPending.add(weiAmount.mul(_pending_).div(100)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[{"name":"state","type":"bool"}],"name":"setPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"status","outputs":[{"name":"auditEtherPrice","type":"uint256"},{"name":"stage","type":"uint16"},{"name":"season","type":"uint16"},{"name":"WESIONUsdPrice","type":"uint256"},{"name":"currentTopSalesRatio","type":"uint256"},{"name":"txs","type":"uint256"},{"name":"WESIONTxs","type":"uint256"},{"name":"WESIONBonusTxs","type":"uint256"},{"name":"WESIONWhitelistTxs","type":"uint256"},{"name":"WESIONIssued","type":"uint256"},{"name":"WESIONBonus","type":"uint256"},{"name":"WESIONWhitelist","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"etherPriceAuditor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"state","type":"bool"}],"name":"setEtherPriceAuditor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"setEtherPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"transferPending","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"stageIndex","type":"uint16"}],"name":"stageStatus","outputs":[{"name":"WESIONUsdPrice","type":"uint256"},{"name":"WESIONCap","type":"uint256"},{"name":"WESIONOnSale","type":"uint256"},{"name":"WESIONSold","type":"uint256"},{"name":"usdCap","type":"uint256"},{"name":"usdOnSale","type":"uint256"},{"name":"usdSold","type":"uint256"},{"name":"weiTopSalesRatio","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newReceiver","type":"address"}],"name":"changeReceiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"transferTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sum","outputs":[{"name":"weiSold","type":"uint256"},{"name":"weiReferralRewarded","type":"uint256"},{"name":"weiTopSales","type":"uint256"},{"name":"weiTeam","type":"uint256"},{"name":"weiPending","type":"uint256"},{"name":"weiPendingTransfered","type":"uint256"},{"name":"weiPendingRemain","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"usdAmount","type":"uint256"},{"name":"stageIndex","type":"uint16"}],"name":"usd2WESIONByStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"},{"name":"account","type":"address"}],"name":"usdSeasonAccountRef","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"},{"name":"account","type":"address"}],"name":"usdSeasonAccountPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"WESION","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"seasonNumber","type":"uint16"},{"name":"to","type":"address"}],"name":"transferTopSales","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddr","type":"address"},{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"}],"name":"seasonTopSalesRewards","outputs":[{"name":"weiSold","type":"uint256"},{"name":"weiTopSales","type":"uint256"},{"name":"weiTopSalesTransfered","type":"uint256"},{"name":"weiTopSalesRemain","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"timestamp","type":"uint32"}],"name":"setStartTimestamp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startTimestamp","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"accountQuery","outputs":[{"name":"WESIONIssued","type":"uint256"},{"name":"WESIONBonus","type":"uint256"},{"name":"WESIONWhitelisted","type":"uint256"},{"name":"weiPurchased","type":"uint256"},{"name":"weiReferralRewarded","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"}],"name":"seasonRefAccounts","outputs":[{"name":"accounts","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"uint256"},{"indexed":true,"name":"account","type":"address"}],"name":"AuditEtherPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":false,"name":"state","type":"bool"}],"name":"AuditEtherPriceAuditorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"WESIONBonusTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"WESIONWhitelistTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stageIndex","type":"uint16"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"WESIONAmount","type":"uint256"},{"indexed":false,"name":"auditEtherPrice","type":"uint256"},{"indexed":false,"name":"weiUsed","type":"uint256"}],"name":"WESIONIssuedTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_stageNumber","type":"uint256"},{"indexed":true,"name":"account","type":"address"}],"name":"StageClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_seasonNumber","type":"uint16"},{"indexed":true,"name":"account","type":"address"}],"name":"SeasonClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"seasonNumber","type":"uint16"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"SeasonTopSalesWeiTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TeamWeiTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"PendingWeiTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousReceiver","type":"address"},{"indexed":true,"name":"newReceiver","type":"address"}],"name":"ReceiverChanged","type":"event"}]
Contract Creation Code
6080604052732c1564a74f07757765642acef62a583b38d5a213600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506023600460006101000a81548161ffff021916908361ffff160217905550604051806101e00160405280600660ff168152602001600660ff168152602001600560ff168152602001600460ff168152602001600360ff168152602001600260ff168152602001600160ff168152602001600160ff168152602001600160ff168152602001600160ff168152602001600160ff168152602001600160ff168152602001600160ff168152602001600160ff168152602001600160ff16815250600590600f62000129929190620003fe565b5067016345785d8a0000600660006101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff16021790555068056bc75e2d63100000600660096101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550678ac7230489e80000600660126101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550622dc6c06006601b6101000a81548162ffffff021916908362ffffff1602179055506216e360600760006101000a81548162ffffff021916908362ffffff1602179055506103e8600855600a6009556305f5e100600a55620f4240600b5564038407b700600c55600854600d5561ea60600e60006101000a81548161ffff021916908361ffff1602179055506064600e60026101000a81548161ffff021916908361ffff160217905550610258600e60046101000a81548161ffff021916908361ffff16021790555062e4e1c0601c556302faf080601d55601c54601e55600460009054906101000a900461ffff1661ffff16602055348015620002c757600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160146101000a81548160ff0219169083151502179055506001602360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600e60066101000a81548161ffff021916908361ffff1602179055506001600e60086101000a81548161ffff021916908361ffff160217905550620004d4565b82600f80016010900481019282156200048d5791602002820160005b838211156200045b57835183826101000a81548161ffff021916908360ff16021790555092602001926002016020816001010492830192600103026200041a565b80156200048b5782816101000a81549061ffff02191690556002016020816001010492830192600103026200045b565b505b5090506200049c9190620004a0565b5090565b620004d191905b80821115620004cd57600081816101000a81549061ffff021916905550600101620004a7565b5090565b90565b61417380620004e46000396000f3fe6080604052600436106101665760003560e01c80638da5cb5b116100d1578063cea9d26f1161008a578063e6fd48bc11610064578063e6fd48bc14610fd9578063f2e2934114611010578063f2fde38b14611091578063f5f56b7a146110e257610166565b8063cea9d26f14610eb5578063d4eeb6ad14610f30578063de8f246c14610f9857610166565b80638da5cb5b14610c65578063aab79a6814610cbc578063ac5cf93414610d19578063b7352bee14610d8c578063b92693a114610dff578063c225135d14610e5657610166565b806348d3297c1161012357806348d3297c14610a60578063522f681514610ae4578063547e3f0614610b3f5780635c975abb14610b9057806363b26e7614610bbf578063853255cc14610c1057610166565b806316c38b3c14610849578063200d2ed214610886578063223e8eff1461090e57806322c8c2cc1461097757806327187991146109d4578063294b2ed014610a0f575b6006601b9054906101000a900462ffffff1662ffffff165a1161018857600080fd5b6000600260149054906101000a900463ffffffff1663ffffffff161180156101c75750600260149054906101000a900463ffffffff1663ffffffff1642115b61021c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806141216027913960400191505060405180910390fd5b600060035411610277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806140f7602a913960400191505060405180910390fd5b61027f611176565b156102f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f574553494f4e205075626c69632d53616c65206973207061757365642e00000081525060200191505060405180910390fd5b600e60009054906101000a900461ffff1661ffff16600e60069054906101000a900461ffff1661ffff161115610390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f574553494f4e205075626c69632d53616c6520436c6f7365642e00000000000081525060200191505060405180910390fd5b600660009054906101000a900468ffffffffffffffffff1668ffffffffffffffffff163410156103bf57600080fd5b600660099054906101000a900468ffffffffffffffffff1668ffffffffffffffffff163411156103ee57600080fd5b6103f661118d565b600061040134611793565b905060008190506000806000805b600760009054906101000a900462ffffff1662ffffff165a1180156104345750600085115b80156104685750600e60009054906101000a900461ffff1661ffff16600e60069054906101000a900461ffff1661ffff1611155b1561049b576000610478866117cb565b8097508192505050610493818661194390919063ffffffff16565b94505061040f565b6104ae858761195d90919063ffffffff16565b91506104b982611974565b9050600660129054906101000a900468ffffffffffffffffff1668ffffffffffffffffff16341061050a576104f8600a856119ac90919063ffffffff16565b9250610503836119ee565b61050957fe5b5b601f60009054906101000a900460ff1680156105265750600084115b1561055657610546610541848661194390919063ffffffff16565b611bfd565b61054c57fe5b61055581611e0c565b5b60008511156105ca57600061056a86611974565b905061057f813461195d90919063ffffffff16565b91503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156105c7573d6000803e3d6000fd5b50505b60008111156106a0576105e96001600f5461194390919063ffffffff16565b600f819055506106048160165461194390919063ffffffff16565b60168190555061065c81602c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b602c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000600e60029054906101000a900461ffff1661ffff16600e60089054906101000a900461ffff1661ffff16111561072c57610725601954610717601a546107096018546106fb60175460165461195d90919063ffffffff16565b61195d90919063ffffffff16565b61195d90919063ffffffff16565b61195d90919063ffffffff16565b90506107b4565b6107b1662386f26fc100006107a3662386f26fc10000610795601954610787601a5461077960185461076b60175460165461195d90919063ffffffff16565b61195d90919063ffffffff16565b61195d90919063ffffffff16565b61195d90919063ffffffff16565b6119ac90919063ffffffff16565b61203890919063ffffffff16565b90505b6107c98160195461194390919063ffffffff16565b601981905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610837573d6000803e3d6000fd5b50600161084057fe5b50505050505050005b34801561085557600080fd5b506108846004803603602081101561086c57600080fd5b8101908080351515906020019092919050505061206c565b005b34801561089257600080fd5b5061089b612208565b604051808d81526020018c61ffff1661ffff1681526020018b61ffff1661ffff1681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019c5050505050505050505050505060405180910390f35b34801561091a57600080fd5b5061095d6004803603602081101561093157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122dc565b604051808215151515815260200191505060405180910390f35b34801561098357600080fd5b506109d26004803603604081101561099a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612332565b005b3480156109e057600080fd5b50610a0d600480360360208110156109f757600080fd5b8101908080359060200190929190505050612438565b005b348015610a1b57600080fd5b50610a5e60048036036020811015610a3257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124e6565b005b348015610a6c57600080fd5b50610a9d60048036036020811015610a8357600080fd5b81019080803561ffff169060200190929190505050612639565b604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390f35b348015610af057600080fd5b50610b3d60048036036040811015610b0757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061273c565b005b348015610b4b57600080fd5b50610b8e60048036036020811015610b6257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612844565b005b348015610b9c57600080fd5b50610ba5611176565b604051808215151515815260200191505060405180910390f35b348015610bcb57600080fd5b50610c0e60048036036020811015610be257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061299d565b005b348015610c1c57600080fd5b50610c25612b3b565b6040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b348015610c7157600080fd5b50610c7a612b77565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cc857600080fd5b50610d0360048036036040811015610cdf57600080fd5b8101908080359060200190929190803561ffff169060200190929190505050612ba0565b6040518082815260200191505060405180910390f35b348015610d2557600080fd5b50610d7660048036036040811015610d3c57600080fd5b81019080803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bda565b6040518082815260200191505060405180910390f35b348015610d9857600080fd5b50610de960048036036040811015610daf57600080fd5b81019080803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c3d565b6040518082815260200191505060405180910390f35b348015610e0b57600080fd5b50610e14612ca0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e6257600080fd5b50610eb360048036036040811015610e7957600080fd5b81019080803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cc6565b005b348015610ec157600080fd5b50610f2e60048036036060811015610ed857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e5d565b005b348015610f3c57600080fd5b50610f6d60048036036020811015610f5357600080fd5b81019080803561ffff16906020019092919050505061308d565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b348015610fa457600080fd5b50610fd760048036036020811015610fbb57600080fd5b81019080803563ffffffff1690602001909291905050506130ff565b005b348015610fe557600080fd5b50610fee61317c565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561101c57600080fd5b5061105f6004803603602081101561103357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613196565b604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b34801561109d57600080fd5b506110e0600480360360208110156110b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132f1565b005b3480156110ee57600080fd5b5061111f6004803603602081101561110557600080fd5b81019080803561ffff169060200190929190505050613448565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015611162578082015181840152602081019050611147565b505050509050019250505060405180910390f35b6000600160149054906101000a900460ff16905090565b6022600061119b9190614088565b602160006111a991906140a9565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2aafa21336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561124857600080fd5b505afa15801561125c573d6000803e3d6000fd5b505050506040513d602081101561127257600080fd5b8101908080519060200190929190505050601f60006101000a81548160ff021916908315150217905550600460009054906101000a900461ffff1661ffff16602081905550600033905060008090505b600f8161ffff16101561178f576000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632cf003c2846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561137057600080fd5b505afa158015611384573d6000803e3d6000fd5b505050506040513d602081101561139a57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113e7575061178f565b8161ffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ec8f95fc836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561148b57600080fd5b505afa15801561149f573d6000803e3d6000fd5b505050506040513d60208110156114b557600080fd5b8101908080519060200190929190505050111561177e57602f6000600e60089054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661165757602e6000600e60089054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506001602f6000600e60089054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61169a60058361ffff16600f811061166b57fe5b601091828204019190066002029054906101000a900461ffff1661ffff1660205461195d90919063ffffffff16565b602081905550602160058361ffff16600f81106116b357fe5b601091828204019190066002029054906101000a900461ffff16908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff1602179055505060228190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b8092505080806001019150506112c2565b5050565b60006117c4670de0b6b3a76400006117b66003548561203890919063ffffffff16565b6119ac90919063ffffffff16565b9050919050565b60008060006117e9600e60069054906101000a900461ffff166134f1565b905060008161182c8660246000600e60069054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000205461194390919063ffffffff16565b116118a85761183a85613542565b61184385613942565b905061184f8186613975565b61185557fe5b60246000600e60069054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000205482141561189757611890613c24565b61189657fe5b5b80600080905093509350505061193e565b60006118e860246000600e60069054906101000a900461ffff1661ffff1661ffff168152602001908152602001600020548461195d90919063ffffffff16565b905060006118ff828861195d90919063ffffffff16565b905061190a82613542565b61191382613942565b925061191f8383613975565b61192557fe5b61192d613c24565b61193357fe5b828195509550505050505b915091565b600081830190508281101561195457fe5b80905092915050565b60008282111561196957fe5b818303905092915050565b60006119a5600354611997670de0b6b3a76400008561203890919063ffffffff16565b6119ac90919063ffffffff16565b9050919050565b60008082116119b757fe5b60008284816119c257fe5b0490508284816119ce57fe5b068184020184146119db57fe5b8284816119e457fe5b0491505092915050565b6000611a06600160115461194390919063ffffffff16565b601181905550611a218260145461194390919063ffffffff16565b601481905550611a7982602a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b602a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611b6557600080fd5b505af1158015611b79573d6000803e3d6000fd5b505050506040513d6020811015611b8f57600080fd5b8101908080519060200190929190505050611ba657fe5b3373ffffffffffffffffffffffffffffffffffffffff167f8cef011d049c0be8d14f16155c3f72d75dac8e53b3ef9f891271bf21e4f2ad59836040518082815260200191505060405180910390a260019050919050565b6000611c15600160125461194390919063ffffffff16565b601281905550611c308260155461194390919063ffffffff16565b601581905550611c8882602b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b602b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b505050506040513d6020811015611d9e57600080fd5b8101908080519060200190929190505050611db557fe5b3373ffffffffffffffffffffffffffffffffffffffff167f9ad543bbf8e55db3c0825f34dfd2be0bb9c9fd5ad3dfb31fa72fed925d7706a2836040518082815260200191505060405180910390a260019050919050565b600081905060008090505b6021805490508161ffff161015611fe5576000611e886064611e7a60218561ffff1681548110611e4357fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff168761203890919063ffffffff16565b6119ac90919063ffffffff16565b9050600060228361ffff1681548110611e9d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611edf8260175461194390919063ffffffff16565b601781905550611f3782602d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b602d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f8d828561195d90919063ffffffff16565b93508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611fd5573d6000803e3d6000fd5b5050508080600101915050611e17565b50600060205411156120345761202d61201c606461200e6020548661203890919063ffffffff16565b6119ac90919063ffffffff16565b601a5461194390919063ffffffff16565b601a819055505b5050565b60008083141561204b5760009050612066565b81830290508183828161205a57fe5b041461206257fe5b8090505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120c557600080fd5b600160149054906101000a900460ff1680156120df575080155b15612167576000600160146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1612205565b600160149054906101000a900460ff161580156121815750805b156122045760018060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b5b50565b6000806000806000806000806000806000806003549b50600e60009054906101000a900461ffff1661ffff16600e60069054906101000a900461ffff1661ffff16111561227a57600e60009054906101000a900461ffff169a50600e60029054906101000a900461ffff1699506122a1565b600e60069054906101000a900461ffff169a50600e60089054906101000a900461ffff1699505b600d549850601e549750600f549650601054955060115494506012549350601354925060145491506015549050909192939495969798999a9b565b6000602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461238b57600080fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f7309a1bee0ae3b528b2e9f11ab2abd82b54426646b40c5bef678f09554bd7c8f82604051808215151515815260200191505060405180910390a25050565b602360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661248e57600080fd5b806003819055503373ffffffffffffffffffffffffffffffffffffffff167f4c93251017d1829354b31aa6cb37ab6ec1b2af6a073553f6073a7a3420cf7393826040518082815260200191505060405180910390a250565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461253f57600080fd5b6000612549613dd3565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561258557600080fd5b61259a81601b5461194390919063ffffffff16565b601b819055508173ffffffffffffffffffffffffffffffffffffffff167ffcd200d7cba84a55eb61ba9209300062477f6f08297653f398fa5489b65a1704826040518082815260200191505060405180910390a28173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612634573d6000803e3d6000fd5b505050565b600080600080600080600080600e60009054906101000a900461ffff1661ffff168961ffff16111561269e5760008060008060008060008087975086965085955084945083935082925081915080905097509750975097509750975097509750612731565b6126a789613df1565b9750602560008a61ffff1661ffff1681526020019081526020016000205494506126d089613e27565b96506126e5858861195d90919063ffffffff16565b9550602460008a61ffff1661ffff16815260200190815260200160002054915061270e896134f1565b9350612723828561195d90919063ffffffff16565b925061272e89613e42565b90505b919395975091939597565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461279557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127cf57600080fd5b60003073ffffffffffffffffffffffffffffffffffffffff16319050818110156127f857600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561283e573d6000803e3d6000fd5b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461289d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128d757600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fd36aafedb017e43b79d3cf6aa1987d3fbb9fff33e1738c71dbf6b2abaadbded060405160405180910390a35050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129f657600080fd5b6000612a4b601954612a3d601a54612a2f601854612a2160175460165461195d90919063ffffffff16565b61195d90919063ffffffff16565b61195d90919063ffffffff16565b61195d90919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a8757600080fd5b612a9c8160195461194390919063ffffffff16565b6019819055508173ffffffffffffffffffffffffffffffffffffffff167fe4de4c8dc6ab2404c805abf5db58633d76fc08b6c8b2c0a34d3a47bfb73663bf826040518082815260200191505060405180910390a28173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612b36573d6000803e3d6000fd5b505050565b60008060008060008060006016549650601754955060185494506019549350601a549250601b549150612b6c613dd3565b905090919293949596565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612bd2612bae83613df1565b612bc4620f42408661203890919063ffffffff16565b6119ac90919063ffffffff16565b905092915050565b6000603160008461ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000603060008461ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d1f57600080fd5b6000612d2a83613e9e565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d6657600080fd5b612d9481602860008661ffff1661ffff1681526020019081526020016000205461194390919063ffffffff16565b602860008561ffff1661ffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f69ccd39c099e91512b4f9c8d1664c05f38430681d4d594a1deec4ace4e7a6e0d8483604051808361ffff1661ffff1681526020018281526020019250505060405180910390a28173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612e57573d6000803e3d6000fd5b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612eb657600080fd5b6000839050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ef557600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612f7457600080fd5b505afa158015612f88573d6000803e3d6000fd5b505050506040513d6020811015612f9e57600080fd5b8101908080519060200190929190505050905082811015612fbe57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561304557600080fd5b505af1158015613059573d6000803e3d6000fd5b505050506040513d602081101561306f57600080fd5b810190808051906020019092919050505061308657fe5b5050505050565b600080600080602660008661ffff1661ffff168152602001908152602001600020549350602760008661ffff1661ffff168152602001908152602001600020549250602860008661ffff1661ffff1681526020019081526020016000205491506130f685613e9e565b90509193509193565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461315857600080fd5b80600260146101000a81548163ffffffff021916908363ffffffff16021790555050565b6000600260149054906101000a900463ffffffff16905090565b6000806000806000602960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549450602a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549350602b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250602c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150602d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905091939590929450565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461334a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561338457600080fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6060602e60008361ffff1661ffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156134e557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161349b575b50505050509050919050565b6000806135216135108461ffff16600b5461203890919063ffffffff16565b600a5461194390919063ffffffff16565b9050600c5481111561353857600c5491505061353d565b809150505b919050565b600061354d82611974565b9050600061355a83613ef0565b90506135d78360306000600e60089054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b60306000600e60089054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136818360246000600e60069054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000205461194390919063ffffffff16565b60246000600e60069054906101000a900461ffff1661ffff1661ffff168152602001908152602001600020819055506136ee8260266000600e60089054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000205461194390919063ffffffff16565b60266000600e60089054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000208190555061375b8160276000600e60089054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000205461194390919063ffffffff16565b60276000600e60089054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000208190555061379f8160185461194390919063ffffffff16565b601881905550601f60009054906101000a900460ff161561393d5760008090505b6021805490508161ffff16101561393b576138878460316000600e60089054906101000a900461ffff1661ffff1661ffff168152602001908152602001600020600060228561ffff168154811061381357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b60316000600e60089054906101000a900461ffff1661ffff1661ffff168152602001908152602001600020600060228461ffff16815481106138c557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806001019150506137c0565b505b505050565b600061396e600d54613960620f42408561203890919063ffffffff16565b6119ac90919063ffffffff16565b9050919050565b600061398d600160105461194390919063ffffffff16565b6010819055506139a88360135461194390919063ffffffff16565b6013819055506139ec8360256000600e60069054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000205461194390919063ffffffff16565b60256000600e60069054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002081905550613a6d83602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613b5957600080fd5b505af1158015613b6d573d6000803e3d6000fd5b505050506040513d6020811015613b8357600080fd5b8101908080519060200190929190505050613b9a57fe5b3373ffffffffffffffffffffffffffffffffffffffff167f6157a4b729216e44c36dedcad906c31c6808c4c80ea68ecddf83aa5c0066fa0b600e60069054906101000a900461ffff168560035486604051808561ffff1661ffff16815260200184815260200183815260200182815260200194505050505060405180910390a26001905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff167feb233b5b7ba017d2651d779b7619d1a70758bcd13049019e0dd121077a1e1a2f600e60069054906101000a900461ffff16604051808261ffff16815260200191505060405180910390a2613cb06001600e60069054906101000a900461ffff1661ffff16613f2c90919063ffffffff16565b600e60066101000a81548161ffff021916908361ffff160217905550613ce5600e60069054906101000a900461ffff16613df1565b600d81905550613d04600e60069054906101000a900461ffff16613e42565b601e819055506000613d25600e60069054906101000a900461ffff16613f4e565b90508061ffff16600e60089054906101000a900461ffff1661ffff161015613dcb573373ffffffffffffffffffffffffffffffffffffffff167f7d2797fdf1b9f35ccf52e7b904a608332c1db1d8c7f2ff7f28ea7f2d6f87996c600e60089054906101000a900461ffff16604051808261ffff1661ffff16815260200191505060405180910390a280600e60086101000a81548161ffff021916908361ffff1602179055505b600191505090565b6000613dec601b54601a5461195d90919063ffffffff16565b905090565b6000613e20613e0f8361ffff1660095461203890919063ffffffff16565b60085461194390919063ffffffff16565b9050919050565b6000613e3b613e35836134f1565b83612ba0565b9050919050565b6000613e97613e86600e60009054906101000a900461ffff1661ffff16613e788561ffff16601d5461203890919063ffffffff16565b6119ac90919063ffffffff16565b601c5461194390919063ffffffff16565b9050919050565b6000613ee9602860008461ffff1661ffff16815260200190815260200160002054602760008561ffff1661ffff1681526020019081526020016000205461195d90919063ffffffff16565b9050919050565b6000613f25613f206305f5e100613f12601e548661203890919063ffffffff16565b6119ac90919063ffffffff16565b611974565b9050919050565b600081830190508261ffff168161ffff161015613f4557fe5b80905092915050565b6000808261ffff161115613fe3576000613f85600e60049054906101000a900461ffff168461ffff16613fed90919063ffffffff16565b90506000613fb0600e60049054906101000a900461ffff168561ffff1661405b90919063ffffffff16565b61ffff161115613fda57613fd260018261ffff16613f2c90919063ffffffff16565b915050613fe8565b80915050613fe8565b600190505b919050565b6000808261ffff1611613ffc57fe5b60008261ffff168461ffff168161400f57fe5b0461ffff1690508261ffff168461ffff168161402757fe5b0661ffff16818461ffff1602018461ffff161461404057fe5b8261ffff168461ffff168161405157fe5b0491505092915050565b6000808261ffff16141561406e57600080fd5b8161ffff168361ffff168161407f57fe5b06905092915050565b50805460008255906000526020600020908101906140a691906140d1565b50565b50805460008255600f0160109004906000526020600020908101906140ce91906140d1565b50565b6140f391905b808211156140ef5760008160009055506001016140d7565b5090565b9056fe417564697420455448207072696365206d7573742062652067726561746572207468616e207a65726f2e574553494f4e205075626c69632d53616c6520686173206e6f742073746172746564207965742ea165627a7a72305820fa6d6185eea275883ca43434abea818b8eeba930611110a8c8afa515489f8fde0029
Deployed Bytecode
0x6080604052600436106101665760003560e01c80638da5cb5b116100d1578063cea9d26f1161008a578063e6fd48bc11610064578063e6fd48bc14610fd9578063f2e2934114611010578063f2fde38b14611091578063f5f56b7a146110e257610166565b8063cea9d26f14610eb5578063d4eeb6ad14610f30578063de8f246c14610f9857610166565b80638da5cb5b14610c65578063aab79a6814610cbc578063ac5cf93414610d19578063b7352bee14610d8c578063b92693a114610dff578063c225135d14610e5657610166565b806348d3297c1161012357806348d3297c14610a60578063522f681514610ae4578063547e3f0614610b3f5780635c975abb14610b9057806363b26e7614610bbf578063853255cc14610c1057610166565b806316c38b3c14610849578063200d2ed214610886578063223e8eff1461090e57806322c8c2cc1461097757806327187991146109d4578063294b2ed014610a0f575b6006601b9054906101000a900462ffffff1662ffffff165a1161018857600080fd5b6000600260149054906101000a900463ffffffff1663ffffffff161180156101c75750600260149054906101000a900463ffffffff1663ffffffff1642115b61021c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806141216027913960400191505060405180910390fd5b600060035411610277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806140f7602a913960400191505060405180910390fd5b61027f611176565b156102f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f574553494f4e205075626c69632d53616c65206973207061757365642e00000081525060200191505060405180910390fd5b600e60009054906101000a900461ffff1661ffff16600e60069054906101000a900461ffff1661ffff161115610390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f574553494f4e205075626c69632d53616c6520436c6f7365642e00000000000081525060200191505060405180910390fd5b600660009054906101000a900468ffffffffffffffffff1668ffffffffffffffffff163410156103bf57600080fd5b600660099054906101000a900468ffffffffffffffffff1668ffffffffffffffffff163411156103ee57600080fd5b6103f661118d565b600061040134611793565b905060008190506000806000805b600760009054906101000a900462ffffff1662ffffff165a1180156104345750600085115b80156104685750600e60009054906101000a900461ffff1661ffff16600e60069054906101000a900461ffff1661ffff1611155b1561049b576000610478866117cb565b8097508192505050610493818661194390919063ffffffff16565b94505061040f565b6104ae858761195d90919063ffffffff16565b91506104b982611974565b9050600660129054906101000a900468ffffffffffffffffff1668ffffffffffffffffff16341061050a576104f8600a856119ac90919063ffffffff16565b9250610503836119ee565b61050957fe5b5b601f60009054906101000a900460ff1680156105265750600084115b1561055657610546610541848661194390919063ffffffff16565b611bfd565b61054c57fe5b61055581611e0c565b5b60008511156105ca57600061056a86611974565b905061057f813461195d90919063ffffffff16565b91503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156105c7573d6000803e3d6000fd5b50505b60008111156106a0576105e96001600f5461194390919063ffffffff16565b600f819055506106048160165461194390919063ffffffff16565b60168190555061065c81602c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b602c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000600e60029054906101000a900461ffff1661ffff16600e60089054906101000a900461ffff1661ffff16111561072c57610725601954610717601a546107096018546106fb60175460165461195d90919063ffffffff16565b61195d90919063ffffffff16565b61195d90919063ffffffff16565b61195d90919063ffffffff16565b90506107b4565b6107b1662386f26fc100006107a3662386f26fc10000610795601954610787601a5461077960185461076b60175460165461195d90919063ffffffff16565b61195d90919063ffffffff16565b61195d90919063ffffffff16565b61195d90919063ffffffff16565b6119ac90919063ffffffff16565b61203890919063ffffffff16565b90505b6107c98160195461194390919063ffffffff16565b601981905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610837573d6000803e3d6000fd5b50600161084057fe5b50505050505050005b34801561085557600080fd5b506108846004803603602081101561086c57600080fd5b8101908080351515906020019092919050505061206c565b005b34801561089257600080fd5b5061089b612208565b604051808d81526020018c61ffff1661ffff1681526020018b61ffff1661ffff1681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019c5050505050505050505050505060405180910390f35b34801561091a57600080fd5b5061095d6004803603602081101561093157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122dc565b604051808215151515815260200191505060405180910390f35b34801561098357600080fd5b506109d26004803603604081101561099a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612332565b005b3480156109e057600080fd5b50610a0d600480360360208110156109f757600080fd5b8101908080359060200190929190505050612438565b005b348015610a1b57600080fd5b50610a5e60048036036020811015610a3257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124e6565b005b348015610a6c57600080fd5b50610a9d60048036036020811015610a8357600080fd5b81019080803561ffff169060200190929190505050612639565b604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390f35b348015610af057600080fd5b50610b3d60048036036040811015610b0757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061273c565b005b348015610b4b57600080fd5b50610b8e60048036036020811015610b6257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612844565b005b348015610b9c57600080fd5b50610ba5611176565b604051808215151515815260200191505060405180910390f35b348015610bcb57600080fd5b50610c0e60048036036020811015610be257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061299d565b005b348015610c1c57600080fd5b50610c25612b3b565b6040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b348015610c7157600080fd5b50610c7a612b77565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cc857600080fd5b50610d0360048036036040811015610cdf57600080fd5b8101908080359060200190929190803561ffff169060200190929190505050612ba0565b6040518082815260200191505060405180910390f35b348015610d2557600080fd5b50610d7660048036036040811015610d3c57600080fd5b81019080803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bda565b6040518082815260200191505060405180910390f35b348015610d9857600080fd5b50610de960048036036040811015610daf57600080fd5b81019080803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c3d565b6040518082815260200191505060405180910390f35b348015610e0b57600080fd5b50610e14612ca0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e6257600080fd5b50610eb360048036036040811015610e7957600080fd5b81019080803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cc6565b005b348015610ec157600080fd5b50610f2e60048036036060811015610ed857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e5d565b005b348015610f3c57600080fd5b50610f6d60048036036020811015610f5357600080fd5b81019080803561ffff16906020019092919050505061308d565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b348015610fa457600080fd5b50610fd760048036036020811015610fbb57600080fd5b81019080803563ffffffff1690602001909291905050506130ff565b005b348015610fe557600080fd5b50610fee61317c565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561101c57600080fd5b5061105f6004803603602081101561103357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613196565b604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b34801561109d57600080fd5b506110e0600480360360208110156110b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132f1565b005b3480156110ee57600080fd5b5061111f6004803603602081101561110557600080fd5b81019080803561ffff169060200190929190505050613448565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015611162578082015181840152602081019050611147565b505050509050019250505060405180910390f35b6000600160149054906101000a900460ff16905090565b6022600061119b9190614088565b602160006111a991906140a9565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2aafa21336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561124857600080fd5b505afa15801561125c573d6000803e3d6000fd5b505050506040513d602081101561127257600080fd5b8101908080519060200190929190505050601f60006101000a81548160ff021916908315150217905550600460009054906101000a900461ffff1661ffff16602081905550600033905060008090505b600f8161ffff16101561178f576000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632cf003c2846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561137057600080fd5b505afa158015611384573d6000803e3d6000fd5b505050506040513d602081101561139a57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113e7575061178f565b8161ffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ec8f95fc836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561148b57600080fd5b505afa15801561149f573d6000803e3d6000fd5b505050506040513d60208110156114b557600080fd5b8101908080519060200190929190505050111561177e57602f6000600e60089054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661165757602e6000600e60089054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506001602f6000600e60089054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61169a60058361ffff16600f811061166b57fe5b601091828204019190066002029054906101000a900461ffff1661ffff1660205461195d90919063ffffffff16565b602081905550602160058361ffff16600f81106116b357fe5b601091828204019190066002029054906101000a900461ffff16908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff1602179055505060228190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b8092505080806001019150506112c2565b5050565b60006117c4670de0b6b3a76400006117b66003548561203890919063ffffffff16565b6119ac90919063ffffffff16565b9050919050565b60008060006117e9600e60069054906101000a900461ffff166134f1565b905060008161182c8660246000600e60069054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000205461194390919063ffffffff16565b116118a85761183a85613542565b61184385613942565b905061184f8186613975565b61185557fe5b60246000600e60069054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000205482141561189757611890613c24565b61189657fe5b5b80600080905093509350505061193e565b60006118e860246000600e60069054906101000a900461ffff1661ffff1661ffff168152602001908152602001600020548461195d90919063ffffffff16565b905060006118ff828861195d90919063ffffffff16565b905061190a82613542565b61191382613942565b925061191f8383613975565b61192557fe5b61192d613c24565b61193357fe5b828195509550505050505b915091565b600081830190508281101561195457fe5b80905092915050565b60008282111561196957fe5b818303905092915050565b60006119a5600354611997670de0b6b3a76400008561203890919063ffffffff16565b6119ac90919063ffffffff16565b9050919050565b60008082116119b757fe5b60008284816119c257fe5b0490508284816119ce57fe5b068184020184146119db57fe5b8284816119e457fe5b0491505092915050565b6000611a06600160115461194390919063ffffffff16565b601181905550611a218260145461194390919063ffffffff16565b601481905550611a7982602a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b602a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611b6557600080fd5b505af1158015611b79573d6000803e3d6000fd5b505050506040513d6020811015611b8f57600080fd5b8101908080519060200190929190505050611ba657fe5b3373ffffffffffffffffffffffffffffffffffffffff167f8cef011d049c0be8d14f16155c3f72d75dac8e53b3ef9f891271bf21e4f2ad59836040518082815260200191505060405180910390a260019050919050565b6000611c15600160125461194390919063ffffffff16565b601281905550611c308260155461194390919063ffffffff16565b601581905550611c8882602b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b602b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b505050506040513d6020811015611d9e57600080fd5b8101908080519060200190929190505050611db557fe5b3373ffffffffffffffffffffffffffffffffffffffff167f9ad543bbf8e55db3c0825f34dfd2be0bb9c9fd5ad3dfb31fa72fed925d7706a2836040518082815260200191505060405180910390a260019050919050565b600081905060008090505b6021805490508161ffff161015611fe5576000611e886064611e7a60218561ffff1681548110611e4357fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff168761203890919063ffffffff16565b6119ac90919063ffffffff16565b9050600060228361ffff1681548110611e9d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611edf8260175461194390919063ffffffff16565b601781905550611f3782602d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b602d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f8d828561195d90919063ffffffff16565b93508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611fd5573d6000803e3d6000fd5b5050508080600101915050611e17565b50600060205411156120345761202d61201c606461200e6020548661203890919063ffffffff16565b6119ac90919063ffffffff16565b601a5461194390919063ffffffff16565b601a819055505b5050565b60008083141561204b5760009050612066565b81830290508183828161205a57fe5b041461206257fe5b8090505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120c557600080fd5b600160149054906101000a900460ff1680156120df575080155b15612167576000600160146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1612205565b600160149054906101000a900460ff161580156121815750805b156122045760018060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b5b50565b6000806000806000806000806000806000806003549b50600e60009054906101000a900461ffff1661ffff16600e60069054906101000a900461ffff1661ffff16111561227a57600e60009054906101000a900461ffff169a50600e60029054906101000a900461ffff1699506122a1565b600e60069054906101000a900461ffff169a50600e60089054906101000a900461ffff1699505b600d549850601e549750600f549650601054955060115494506012549350601354925060145491506015549050909192939495969798999a9b565b6000602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461238b57600080fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f7309a1bee0ae3b528b2e9f11ab2abd82b54426646b40c5bef678f09554bd7c8f82604051808215151515815260200191505060405180910390a25050565b602360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661248e57600080fd5b806003819055503373ffffffffffffffffffffffffffffffffffffffff167f4c93251017d1829354b31aa6cb37ab6ec1b2af6a073553f6073a7a3420cf7393826040518082815260200191505060405180910390a250565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461253f57600080fd5b6000612549613dd3565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561258557600080fd5b61259a81601b5461194390919063ffffffff16565b601b819055508173ffffffffffffffffffffffffffffffffffffffff167ffcd200d7cba84a55eb61ba9209300062477f6f08297653f398fa5489b65a1704826040518082815260200191505060405180910390a28173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612634573d6000803e3d6000fd5b505050565b600080600080600080600080600e60009054906101000a900461ffff1661ffff168961ffff16111561269e5760008060008060008060008087975086965085955084945083935082925081915080905097509750975097509750975097509750612731565b6126a789613df1565b9750602560008a61ffff1661ffff1681526020019081526020016000205494506126d089613e27565b96506126e5858861195d90919063ffffffff16565b9550602460008a61ffff1661ffff16815260200190815260200160002054915061270e896134f1565b9350612723828561195d90919063ffffffff16565b925061272e89613e42565b90505b919395975091939597565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461279557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127cf57600080fd5b60003073ffffffffffffffffffffffffffffffffffffffff16319050818110156127f857600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561283e573d6000803e3d6000fd5b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461289d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128d757600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fd36aafedb017e43b79d3cf6aa1987d3fbb9fff33e1738c71dbf6b2abaadbded060405160405180910390a35050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129f657600080fd5b6000612a4b601954612a3d601a54612a2f601854612a2160175460165461195d90919063ffffffff16565b61195d90919063ffffffff16565b61195d90919063ffffffff16565b61195d90919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a8757600080fd5b612a9c8160195461194390919063ffffffff16565b6019819055508173ffffffffffffffffffffffffffffffffffffffff167fe4de4c8dc6ab2404c805abf5db58633d76fc08b6c8b2c0a34d3a47bfb73663bf826040518082815260200191505060405180910390a28173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612b36573d6000803e3d6000fd5b505050565b60008060008060008060006016549650601754955060185494506019549350601a549250601b549150612b6c613dd3565b905090919293949596565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612bd2612bae83613df1565b612bc4620f42408661203890919063ffffffff16565b6119ac90919063ffffffff16565b905092915050565b6000603160008461ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000603060008461ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d1f57600080fd5b6000612d2a83613e9e565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d6657600080fd5b612d9481602860008661ffff1661ffff1681526020019081526020016000205461194390919063ffffffff16565b602860008561ffff1661ffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f69ccd39c099e91512b4f9c8d1664c05f38430681d4d594a1deec4ace4e7a6e0d8483604051808361ffff1661ffff1681526020018281526020019250505060405180910390a28173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612e57573d6000803e3d6000fd5b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612eb657600080fd5b6000839050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ef557600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612f7457600080fd5b505afa158015612f88573d6000803e3d6000fd5b505050506040513d6020811015612f9e57600080fd5b8101908080519060200190929190505050905082811015612fbe57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561304557600080fd5b505af1158015613059573d6000803e3d6000fd5b505050506040513d602081101561306f57600080fd5b810190808051906020019092919050505061308657fe5b5050505050565b600080600080602660008661ffff1661ffff168152602001908152602001600020549350602760008661ffff1661ffff168152602001908152602001600020549250602860008661ffff1661ffff1681526020019081526020016000205491506130f685613e9e565b90509193509193565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461315857600080fd5b80600260146101000a81548163ffffffff021916908363ffffffff16021790555050565b6000600260149054906101000a900463ffffffff16905090565b6000806000806000602960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549450602a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549350602b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250602c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150602d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905091939590929450565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461334a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561338457600080fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6060602e60008361ffff1661ffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156134e557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161349b575b50505050509050919050565b6000806135216135108461ffff16600b5461203890919063ffffffff16565b600a5461194390919063ffffffff16565b9050600c5481111561353857600c5491505061353d565b809150505b919050565b600061354d82611974565b9050600061355a83613ef0565b90506135d78360306000600e60089054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b60306000600e60089054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136818360246000600e60069054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000205461194390919063ffffffff16565b60246000600e60069054906101000a900461ffff1661ffff1661ffff168152602001908152602001600020819055506136ee8260266000600e60089054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000205461194390919063ffffffff16565b60266000600e60089054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000208190555061375b8160276000600e60089054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000205461194390919063ffffffff16565b60276000600e60089054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000208190555061379f8160185461194390919063ffffffff16565b601881905550601f60009054906101000a900460ff161561393d5760008090505b6021805490508161ffff16101561393b576138878460316000600e60089054906101000a900461ffff1661ffff1661ffff168152602001908152602001600020600060228561ffff168154811061381357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b60316000600e60089054906101000a900461ffff1661ffff1661ffff168152602001908152602001600020600060228461ffff16815481106138c557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806001019150506137c0565b505b505050565b600061396e600d54613960620f42408561203890919063ffffffff16565b6119ac90919063ffffffff16565b9050919050565b600061398d600160105461194390919063ffffffff16565b6010819055506139a88360135461194390919063ffffffff16565b6013819055506139ec8360256000600e60069054906101000a900461ffff1661ffff1661ffff1681526020019081526020016000205461194390919063ffffffff16565b60256000600e60069054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002081905550613a6d83602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194390919063ffffffff16565b602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613b5957600080fd5b505af1158015613b6d573d6000803e3d6000fd5b505050506040513d6020811015613b8357600080fd5b8101908080519060200190929190505050613b9a57fe5b3373ffffffffffffffffffffffffffffffffffffffff167f6157a4b729216e44c36dedcad906c31c6808c4c80ea68ecddf83aa5c0066fa0b600e60069054906101000a900461ffff168560035486604051808561ffff1661ffff16815260200184815260200183815260200182815260200194505050505060405180910390a26001905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff167feb233b5b7ba017d2651d779b7619d1a70758bcd13049019e0dd121077a1e1a2f600e60069054906101000a900461ffff16604051808261ffff16815260200191505060405180910390a2613cb06001600e60069054906101000a900461ffff1661ffff16613f2c90919063ffffffff16565b600e60066101000a81548161ffff021916908361ffff160217905550613ce5600e60069054906101000a900461ffff16613df1565b600d81905550613d04600e60069054906101000a900461ffff16613e42565b601e819055506000613d25600e60069054906101000a900461ffff16613f4e565b90508061ffff16600e60089054906101000a900461ffff1661ffff161015613dcb573373ffffffffffffffffffffffffffffffffffffffff167f7d2797fdf1b9f35ccf52e7b904a608332c1db1d8c7f2ff7f28ea7f2d6f87996c600e60089054906101000a900461ffff16604051808261ffff1661ffff16815260200191505060405180910390a280600e60086101000a81548161ffff021916908361ffff1602179055505b600191505090565b6000613dec601b54601a5461195d90919063ffffffff16565b905090565b6000613e20613e0f8361ffff1660095461203890919063ffffffff16565b60085461194390919063ffffffff16565b9050919050565b6000613e3b613e35836134f1565b83612ba0565b9050919050565b6000613e97613e86600e60009054906101000a900461ffff1661ffff16613e788561ffff16601d5461203890919063ffffffff16565b6119ac90919063ffffffff16565b601c5461194390919063ffffffff16565b9050919050565b6000613ee9602860008461ffff1661ffff16815260200190815260200160002054602760008561ffff1661ffff1681526020019081526020016000205461195d90919063ffffffff16565b9050919050565b6000613f25613f206305f5e100613f12601e548661203890919063ffffffff16565b6119ac90919063ffffffff16565b611974565b9050919050565b600081830190508261ffff168161ffff161015613f4557fe5b80905092915050565b6000808261ffff161115613fe3576000613f85600e60049054906101000a900461ffff168461ffff16613fed90919063ffffffff16565b90506000613fb0600e60049054906101000a900461ffff168561ffff1661405b90919063ffffffff16565b61ffff161115613fda57613fd260018261ffff16613f2c90919063ffffffff16565b915050613fe8565b80915050613fe8565b600190505b919050565b6000808261ffff1611613ffc57fe5b60008261ffff168461ffff168161400f57fe5b0461ffff1690508261ffff168461ffff168161402757fe5b0661ffff16818461ffff1602018461ffff161461404057fe5b8261ffff168461ffff168161405157fe5b0491505092915050565b6000808261ffff16141561406e57600080fd5b8161ffff168361ffff168161407f57fe5b06905092915050565b50805460008255906000526020600020908101906140a691906140d1565b50565b50805460008255600f0160109004906000526020600020908101906140ce91906140d1565b50565b6140f391905b808211156140ef5760008160009055506001016140d7565b5090565b9056fe417564697420455448207072696365206d7573742062652067726561746572207468616e207a65726f2e574553494f4e205075626c69632d53616c6520686173206e6f742073746172746564207965742ea165627a7a72305820fa6d6185eea275883ca43434abea818b8eeba930611110a8c8afa515489f8fde0029
Deployed Bytecode Sourcemap
7483:25538:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18945:7;;;;;;;;;;;18933:19;;:9;:19;18925:28;;;;;;19094:1;19076:15;;;;;;;;;;;:19;;;:44;;;;;19105:15;;;;;;;;;;;19099:21;;:3;:21;19076:44;19068:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19197:1;19183:11;;:15;19175:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19265:8;:6;:8::i;:::-;19264:9;19256:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19336:9;;;;;;;;;;;19326:19;;:6;;;;;;;;;;;:19;;;;19318:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24589:7;;;;;;;;;;;24576:20;;:9;:20;;24568:29;;;;;;24629:7;;;;;;;;;;;24616:20;;:9;:20;;24608:29;;;;;;24687:23;:21;:23::i;:::-;24721:19;24743:18;24751:9;24743:7;:18::i;:::-;24721:40;;24772:19;24794:11;24772:33;;24816:22;24849:21;24881:17;24909;24965:252;24984:6;;;;;;;;;;;24972:18;;:9;:18;:37;;;;;25008:1;24994:11;:15;24972:37;:60;;;;;25023:9;;;;;;;;;;;25013:19;;:6;;;;;;;;;;;:19;;;;24972:60;24965:252;;;25049:24;25122:15;25125:11;25122:2;:15::i;:::-;25088:49;;;;;;;;25169:36;25188:16;25169:14;:18;;:36;;;;:::i;:::-;25152:53;;24965:252;;;;25258:28;25274:11;25258;:15;;:28;;;;:::i;:::-;25246:40;;25309:18;25317:9;25309:7;:18::i;:::-;25297:30;;25379:9;;;;;;;;;;;25366:22;;:9;:22;25362:150;;25421:22;25440:2;25421:14;:18;;:22;;;;:::i;:::-;25405:38;;25465:34;25485:13;25465:19;:34::i;:::-;25458:42;;;;25362:150;25594:13;;;;;;;;;;;:35;;;;;25628:1;25611:14;:18;25594:35;25590:264;;;25691:60;25717:33;25736:13;25717:14;:18;;:33;;;;:::i;:::-;25691:25;:60::i;:::-;25684:68;;;;25803:39;25832:9;25803:28;:39::i;:::-;25590:264;25920:1;25906:11;:15;25902:226;;;25938:19;25960:20;25968:11;25960:7;:20::i;:::-;25938:42;;26009:26;26023:11;26009:9;:13;;:26;;;;:::i;:::-;25997:38;;26084:10;:19;;:32;26104:11;26084:32;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26084:32:0;25902:226;;26176:1;26164:9;:13;26160:210;;;26201:11;26210:1;26201:4;;:8;;:11;;;;:::i;:::-;26194:4;:18;;;;26238:23;26251:9;26238:8;;:12;;:23;;;;:::i;:::-;26227:8;:34;;;;26311:47;26348:9;26311:20;:32;26332:10;26311:32;;;;;;;;;;;;;;;;:36;;:47;;;;:::i;:::-;26276:20;:32;26297:10;26276:32;;;;;;;;;;;;;;;:82;;;;26160:210;26403:17;26445:10;;;;;;;;;;;26435:20;;:7;;;;;;;;;;;:20;;;26431:280;;;26482:78;26551:8;;26482:64;26534:11;;26482:47;26516:12;;26482:29;26495:15;;26482:8;;:12;;:29;;;;:::i;:::-;:33;;:47;;;;:::i;:::-;:51;;:64;;;;:::i;:::-;:68;;:78;;;;:::i;:::-;26470:90;;26431:280;;;26601:110;26700:10;26601:94;26684:10;26601:78;26670:8;;26601:64;26653:11;;26601:47;26635:12;;26601:29;26614:15;;26601:8;;:12;;:29;;;;:::i;:::-;:33;;:47;;;;:::i;:::-;:51;;:64;;;;:::i;:::-;:68;;:78;;;;:::i;:::-;:82;;:94;;;;:::i;:::-;:98;;:110;;;;:::i;:::-;26589:122;;26431:280;26735:23;26748:9;26735:8;;:12;;:23;;;;:::i;:::-;26724:8;:34;;;;26769:9;;;;;;;;;;;:18;;:29;26788:9;26769:29;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26769:29:0;26846:4;26839:12;;;;19387:1;;;;;;;7483:25538;6459:281;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6459:281:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6459:281:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;16673:1387;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16673:1387:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13289:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13289:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13289:125:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13484:194;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13484:194:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13484:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13055:164;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13055:164:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13055:164:0;;;;;;;;;;;;;;;;;:::i;:::-;;15899:319;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15899:319:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15899:319:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;20523:1197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20523:1197:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20523:1197:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5426:241;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5426:241:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5426:241:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4531:272;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4531:272:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4531:272:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;6091:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6091:78:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16276:350;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16276:350:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16276:350:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;18104:721;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18104:721:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3797:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3797:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14527:180;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14527:180:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14527:180:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24098:166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24098:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24098:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23835:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23835:178:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23835:178:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7623:75;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7623:75:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15232:423;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15232:423:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15232:423:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5033:339;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5033:339:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5033:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22071:659;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22071:659:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22071:659:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12705:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12705:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12705:110:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;12549:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12549:96:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22784:741;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22784:741:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22784:741:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4227:248;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4227:248:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4227:248:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;23595:158;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23595:158:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23595:158:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;23595:158:0;;;;;;;;;;;;;;;;;6091:78;6130:4;6154:7;;;;;;;;;;;6147:14;;6091:78;:::o;26923:1002::-;26982:11;;26975:18;;;;:::i;:::-;27011:9;;27004:16;;;;:::i;:::-;27049:6;;;;;;;;;;;:18;;;27068:10;27049:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27049:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27049:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27049:30:0;;;;;;;;;;;;;;;;27033:13;;:46;;;;;;;;;;;;;;;;;;27102:29;;;;;;;;;;;27090:41;;:9;:41;;;;27144:16;27163:10;27144:29;;27188:8;27199:1;27188:12;;27184:734;27206:32;27202:1;:36;;;27184:734;;;27260:20;27283:6;;;;;;;;;;;:15;;;27299:8;27283:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27283:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27283:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27283:25:0;;;;;;;;;;;;;;;;27260:48;;27341:12;27329:24;;:8;:24;;;27325:52;;;27372:5;;;27325:52;27430:1;27398:33;;:6;;;;;;;;;;;:15;;;27414:12;27398:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27398:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27398:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27398:29:0;;;;;;;;;;;;;;;;:33;27394:473;;;27457:20;:29;27478:7;;;;;;;;;;;27457:29;;;;;;;;;;;;;;;:43;27487:12;27457:43;;;;;;;;;;;;;;;;;;;;;;;;;27452:212;;27525:18;:27;27544:7;;;;;;;;;;;27525:27;;;;;;;;;;;;;;;27558:12;27525:46;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;27525:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27640:4;27594:20;:29;27615:7;;;;;;;;;;;27594:29;;;;;;;;;;;;;;;:43;27624:12;27594:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;27452:212;27696:43;27710:25;27736:1;27710:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27696:43;;:9;;:13;;:43;;;;:::i;:::-;27684:9;:55;;;;27758:9;27773:25;27799:1;27773:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27758:44;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;27758:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27821:11;27838:12;27821:30;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;27821:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27394:473;27894:12;27883:23;;27184:734;27240:3;;;;;;;27184:734;;;;26923:1002;:::o;13980:126::-;14035:7;14062:36;14090:7;14062:23;14073:11;;14062:6;:10;;:23;;;;:::i;:::-;:27;;:36;;;;:::i;:::-;14055:43;;13980:126;;;:::o;27978:1020::-;28026:7;28035;28055:21;28079:19;28091:6;;;;;;;;;;;28079:11;:19::i;:::-;28055:43;;28109:22;28209:13;28169:36;28195:9;28169:13;:21;28183:6;;;;;;;;;;;28169:21;;;;;;;;;;;;;;;;:25;;:36;;;;:::i;:::-;:53;28165:444;;28239:18;28247:9;28239:7;:18::i;:::-;28291:21;28302:9;28291:10;:21::i;:::-;28274:38;;28334:47;28355:14;28371:9;28334:20;:47::i;:::-;28327:55;;;;28477:13;:21;28491:6;;;;;;;;;;;28477:21;;;;;;;;;;;;;;;;28460:13;:38;28456:99;;;28526:12;:10;:12::i;:::-;28519:20;;;;28456:99;28579:14;28595:1;28571:26;;;;;;;;;;;28165:444;28645:17;28665:40;28683:13;:21;28697:6;;;;;;;;;;;28683:21;;;;;;;;;;;;;;;;28665:13;:17;;:40;;;;:::i;:::-;28645:60;;28716:19;28738:24;28752:9;28738;:13;;:24;;;;:::i;:::-;28716:46;;28775:18;28783:9;28775:7;:18::i;:::-;28823:21;28834:9;28823:10;:21::i;:::-;28806:38;;28862:47;28883:14;28899:9;28862:20;:47::i;:::-;28855:55;;;;28928:12;:10;:12::i;:::-;28921:20;;;;28962:14;28978:11;28954:36;;;;;;;;27978:1020;;;;:::o;349:141::-;407:9;437:1;433;:5;429:9;;461:1;456;:6;;449:14;;;;481:1;474:8;;349:141;;;;:::o;628:123::-;686:7;718:1;713;:6;;706:14;;;;742:1;738;:5;731:12;;628:123;;;;:::o;14156:126::-;14211:7;14238:36;14262:11;;14238:19;14249:7;14238:6;:10;;:19;;;;:::i;:::-;:23;;:36;;;;:::i;:::-;14231:43;;14156:126;;;:::o;1190:187::-;1248:7;1279:1;1275;:5;1268:13;;;;1292:9;1308:1;1304;:5;;;;;;1292:17;;1344:1;1340;:5;;;;;;1336:1;1332;:5;:13;1327:1;:18;1320:26;;;;1368:1;1364;:5;;;;;;1357:12;;;1190:187;;;;:::o;30770:402::-;30832:4;30867:22;30887:1;30867:15;;:19;;:22;;;;:::i;:::-;30849:15;:40;;;;30917:24;30934:6;30917:12;;:16;;:24;;;;:::i;:::-;30902:12;:39;;;;30986:43;31022:6;30986:19;:31;31006:10;30986:31;;;;;;;;;;;;;;;;:35;;:43;;;;:::i;:::-;30952:19;:31;30972:10;30952:31;;;;;;;;;;;;;;;:77;;;;31049:6;;;;;;;;;;;:15;;;31065:10;31077:6;31049:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31049:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31049:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31049:35:0;;;;;;;;;;;;;;;;31042:43;;;;31123:10;31101:41;;;31135:6;31101:41;;;;;;;;;;;;;;;;;;31160:4;31153:11;;30770:402;;;:::o;31240:440::-;31308:4;31347:26;31371:1;31347:19;;:23;;:26;;;;:::i;:::-;31325:19;:48;;;;31405:28;31426:6;31405:16;;:20;;:28;;;;:::i;:::-;31386:16;:47;;;;31484:49;31526:6;31484:25;:37;31510:10;31484:37;;;;;;;;;;;;;;;;:41;;:49;;;;:::i;:::-;31444:25;:37;31470:10;31444:37;;;;;;;;;;;;;;;:89;;;;31553:6;;;;;;;;;;;:15;;;31569:10;31581:6;31553:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31553:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31553:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31553:35:0;;;;;;;;;;;;;;;;31546:43;;;;31631:10;31605:45;;;31643:6;31605:45;;;;;;;;;;;;;;;;;;31668:4;31661:11;;31240:440;;;:::o;32301:717::-;32377:19;32399:9;32377:31;;32424:8;32435:1;32424:12;;32419:483;32442:9;:16;;;;32438:1;:20;;;32419:483;;;32480:19;32502:36;32534:3;32502:27;32516:9;32526:1;32516:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32502:27;;:9;:13;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;32480:58;;32553:26;32598:11;32610:1;32598:14;;;;;;;;;;;;;;;;;;;;;;;;;;;32553:61;;32649:32;32669:11;32649:15;;:19;;:32;;;;:::i;:::-;32631:15;:50;;;;32733:51;32772:11;32733:22;:34;32756:10;32733:34;;;;;;;;;;;;;;;;:38;;:51;;;;:::i;:::-;32696:22;:34;32719:10;32696:34;;;;;;;;;;;;;;;:88;;;;32813:28;32829:11;32813;:15;;:28;;;;:::i;:::-;32799:42;;32858:10;:19;;:32;32878:11;32858:32;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32858:32:0;32419:483;;32460:3;;;;;;;32419:483;;;;32930:1;32918:9;;:13;32914:96;;;32960:50;32976:33;33005:3;32976:24;32990:9;;32976;:13;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;32960:11;;:15;;:50;;;;:::i;:::-;32946:11;:64;;;;32914:96;32301:717;;:::o;845:202::-;903:9;934:1;929;:6;925:47;;;959:1;952:8;;;;925:47;990:1;986;:5;982:9;;1018:1;1013;1009;:5;;;;;;:10;1002:18;;;;1038:1;1031:8;;845:202;;;;;:::o;6459:281::-;4023:6;;;;;;;;;;;4009:20;;:10;:20;;;4001:29;;;;;;6524:7;;;;;;;;;;;:17;;;;;6536:5;6535:6;6524:17;6520:213;;;6568:5;6558:7;;:15;;;;;;;;;;;;;;;;;;6593:20;6602:10;6593:20;;;;;;;;;;;;;;;;;;;;;;6520:213;;;6636:7;;;;;;;;;;;6635:8;:17;;;;;6647:5;6635:17;6631:102;;;6679:4;6669:7;;:14;;;;;;;;;;;;;;;;;;6703:18;6710:10;6703:18;;;;;;;;;;;;;;;;;;;;;;6631:102;6520:213;6459:281;:::o;16673:1387::-;16712:23;16781:12;16839:13;16898:22;16966:28;17040:11;17097:17;17160:22;17228:26;17300:20;17366:19;17431:23;17485:11;;17467:29;;17522:9;;;;;;;;;;;17513:18;;:6;;;;;;;;;;;:18;;;17509:180;;;17556:9;;;;;;;;;;;17548:17;;17589:10;;;;;;;;;;;17580:19;;17509:180;;;17640:6;;;;;;;;;;;17632:14;;17670:7;;;;;;;;;;;17661:16;;17509:180;17718:15;;17701:32;;17767:14;;17744:37;;17800:4;;17794:10;;17827;;17815:22;;17865:15;;17848:32;;17912:19;;17891:40;;17957:13;;17942:28;;17995:12;;17981:26;;18036:16;;18018:34;;16673:1387;;;;;;;;;;;;:::o;13289:125::-;13354:4;13378:19;:28;13398:7;13378:28;;;;;;;;;;;;;;;;;;;;;;;;;13371:35;;13289:125;;;:::o;13484:194::-;4023:6;;;;;;;;;;;4009:20;;:10;:20;;;4001:29;;;;;;13604:5;13573:19;:28;13593:7;13573:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;13655:7;13625:45;;;13664:5;13625:45;;;;;;;;;;;;;;;;;;;;;;13484:194;;:::o;13055:164::-;12941:19;:31;12961:10;12941:31;;;;;;;;;;;;;;;;;;;;;;;;;12933:40;;;;;;13149:5;13135:11;:19;;;;13200:10;13170:41;;;13193:5;13170:41;;;;;;;;;;;;;;;;;;13055:164;:::o;15899:319::-;4023:6;;;;;;;;;;;4009:20;;:10;:20;;;4001:29;;;;;;15974:19;15996:15;:13;:15::i;:::-;15974:37;;16044:1;16030:16;;:2;:16;;;;16022:25;;;;;;16084:38;16110:11;16084:21;;:25;;:38;;;;:::i;:::-;16060:21;:62;;;;16159:2;16138:37;;;16163:11;16138:37;;;;;;;;;;;;;;;;;;16186:2;:11;;:24;16198:11;16186:24;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16186:24:0;4041:1;15899:319;:::o;20523:1197::-;20584:22;20674:17;20759:20;20847:18;20933:14;21015:17;21100:15;21183:24;21237:9;;;;;;;;;;;21224:22;;:10;:22;;;21220:86;;;21271:1;21274;21277;21280;21283;21286;21289;21292;21263:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21220:86;21335:31;21355:10;21335:19;:31::i;:::-;21318:48;;21392:18;:30;21411:10;21392:30;;;;;;;;;;;;;;;;21379:43;;21445:26;21460:10;21445:14;:26::i;:::-;21433:38;;21497:25;21511:10;21497:9;:13;;:25;;;;:::i;:::-;21482:40;;21545:13;:25;21559:10;21545:25;;;;;;;;;;;;;;;;21535:35;;21590:23;21602:10;21590:11;:23::i;:::-;21581:32;;21636:19;21647:7;21636:6;:10;;:19;;;;:::i;:::-;21624:31;;21687:25;21701:10;21687:13;:25::i;:::-;21668:44;;20523:1197;;;;;;;;;;:::o;5426:241::-;4023:6;;;;;;;;;;;4009:20;;:10;:20;;;4001:29;;;;;;5537:1;5523:16;;:2;:16;;;;5515:25;;;;;;5551:15;5577:4;5569:21;;;5551:39;;5620:6;5609:7;:17;;5601:26;;;;;;5640:2;:11;;:19;5652:6;5640:19;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5640:19:0;4041:1;5426:241;;:::o;4531:272::-;4023:6;;;;;;;;;;;4009:20;;:10;:20;;;4001:29;;;;;;4645:1;4622:25;;:11;:25;;;;4614:34;;;;;;4659:26;4688:9;;;;;;;;;;;4659:38;;4720:11;4708:9;;:23;;;;;;;;;;;;;;;;;;4783:11;4747:48;;4763:18;4747:48;;;;;;;;;;;;4041:1;4531:272;:::o;16276:350::-;4023:6;;;;;;;;;;;4009:20;;:10;:20;;;4001:29;;;;;;16348:19;16370:78;16439:8;;16370:64;16422:11;;16370:47;16404:12;;16370:29;16383:15;;16370:8;;:12;;:29;;;;:::i;:::-;:33;;:47;;;;:::i;:::-;:51;;:64;;;;:::i;:::-;:68;;:78;;;;:::i;:::-;16348:100;;16481:1;16467:16;;:2;:16;;;;16459:25;;;;;;16508;16521:11;16508:8;;:12;;:25;;;;:::i;:::-;16497:8;:36;;;;16567:2;16549:34;;;16571:11;16549:34;;;;;;;;;;;;;;;;;;16594:2;:11;;:24;16606:11;16594:24;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16594:24:0;4041:1;16276:350;:::o;18104:721::-;18139:15;18196:27;18265:19;18326:15;18383:18;18443:28;18513:24;18560:8;;18550:18;;18601:15;;18579:37;;18641:12;;18627:26;;18674:8;;18664:18;;18706:11;;18693:24;;18751:21;;18728:44;;18802:15;:13;:15::i;:::-;18783:34;;18104:721;;;;;;;:::o;3797:79::-;3835:7;3862:6;;;;;;;;;;;3855:13;;3797:79;:::o;14527:180::-;14613:7;14640:59;14667:31;14687:10;14667:19;:31::i;:::-;14640:22;14654:7;14640:9;:13;;:22;;;;:::i;:::-;:26;;:59;;;;:::i;:::-;14633:66;;14527:180;;;;:::o;24098:166::-;24186:7;24213:20;:34;24234:12;24213:34;;;;;;;;;;;;;;;:43;24248:7;24213:43;;;;;;;;;;;;;;;;24206:50;;24098:166;;;;:::o;23835:178::-;23929:7;23956:26;:40;23983:12;23956:40;;;;;;;;;;;;;;;:49;23997:7;23956:49;;;;;;;;;;;;;;;;23949:56;;23835:178;;;;:::o;7623:75::-;;;;;;;;;;;;;:::o;15232:423::-;4023:6;;;;;;;;;;;4009:20;;:10;:20;;;4001:29;;;;;;15329:19;15351:34;15372:12;15351:20;:34::i;:::-;15329:56;;15418:1;15404:16;;:2;:16;;;;15396:25;;;;;;15479:59;15526:11;15479:28;:42;15508:12;15479:42;;;;;;;;;;;;;;;;:46;;:59;;;;:::i;:::-;15434:28;:42;15463:12;15434:42;;;;;;;;;;;;;;;:104;;;;15596:2;15554:58;;;15582:12;15600:11;15554:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;15623:2;:11;;:24;15635:11;15623:24;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15623:24:0;4041:1;15232:423;;:::o;5033:339::-;4023:6;;;;;;;;;;;4009:20;;:10;:20;;;4001:29;;;;;;5138:13;5161:9;5138:33;;5210:1;5190:22;;:8;:22;;;;5182:31;;;;;;5224:15;5242:6;:16;;;5267:4;5242:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5242:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5242:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5242:31:0;;;;;;;;;;;;;;;;5224:49;;5303:6;5292:7;:17;;5284:26;;;;;;5330:6;:15;;;5346:8;5356:6;5330:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5330:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5330:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5330:33:0;;;;;;;;;;;;;;;;5323:41;;;;4041:1;;5033:339;;;:::o;22071:659::-;22144:15;22239:19;22338:29;22447:25;22495:14;:28;22510:12;22495:28;;;;;;;;;;;;;;;;22485:38;;22548:18;:32;22567:12;22548:32;;;;;;;;;;;;;;;;22534:46;;22615:28;:42;22644:12;22615:42;;;;;;;;;;;;;;;;22591:66;;22688:34;22709:12;22688:20;:34::i;:::-;22668:54;;22071:659;;;;;:::o;12705:110::-;4023:6;;;;;;;;;;;4009:20;;:10;:20;;;4001:29;;;;;;12798:9;12780:15;;:27;;;;;;;;;;;;;;;;;;12705:110;:::o;12549:96::-;12596:6;12622:15;;;;;;;;;;;12615:22;;12549:96;:::o;22784:741::-;22844:20;22931:19;23017:25;23109:20;23196:27;23251:20;:29;23272:7;23251:29;;;;;;;;;;;;;;;;23236:44;;23305:19;:28;23325:7;23305:28;;;;;;;;;;;;;;;;23291:42;;23364:25;:34;23390:7;23364:34;;;;;;;;;;;;;;;;23344:54;;23424:20;:29;23445:7;23424:29;;;;;;;;;;;;;;;;23409:44;;23486:22;:31;23509:7;23486:31;;;;;;;;;;;;;;;;23464:53;;22784:741;;;;;;;:::o;4227:248::-;4023:6;;;;;;;;;;;4009:20;;:10;:20;;;4001:29;;;;;;4330:1;4310:22;;:8;:22;;;;4302:31;;;;;;4344:23;4370:6;;;;;;;;;;;4344:32;;4396:8;4387:6;;:17;;;;;;;;;;;;;;;;;;4458:8;4420:47;;4441:15;4420:47;;;;;;;;;;;;4041:1;4227:248;:::o;23595:158::-;23664:25;23713:18;:32;23732:12;23713:32;;;;;;;;;;;;;;;23702:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23595:158;;;:::o;19935:293::-;19997:7;20017:16;20036:59;20060:34;20083:10;20060:34;;:18;;:22;;:34;;;;:::i;:::-;20036:19;;:23;;:59;;;;:::i;:::-;20017:78;;20123:17;;20112:8;:28;20108:85;;;20164:17;;20157:24;;;;;20108:85;20212:8;20205:15;;;19935:293;;;;:::o;29049:1069::-;29104:17;29124:18;29132:9;29124:7;:18::i;:::-;29104:38;;29153:21;29177:26;29193:9;29177:15;:26::i;:::-;29153:50;;29266:62;29318:9;29266:26;:35;29293:7;;;;;;;;;;;29266:35;;;;;;;;;;;;;;;:47;29302:10;29266:47;;;;;;;;;;;;;;;;:51;;:62;;;;:::i;:::-;29216:26;:35;29243:7;;;;;;;;;;;29216:35;;;;;;;;;;;;;;;:47;29252:10;29216:47;;;;;;;;;;;;;;;:112;;;;29409:36;29435:9;29409:13;:21;29423:6;;;;;;;;;;;29409:21;;;;;;;;;;;;;;;;:25;;:36;;;;:::i;:::-;29385:13;:21;29399:6;;;;;;;;;;;29385:21;;;;;;;;;;;;;;;:60;;;;29522:38;29550:9;29522:14;:23;29537:7;;;;;;;;;;;29522:23;;;;;;;;;;;;;;;;:27;;:38;;;;:::i;:::-;29496:14;:23;29511:7;;;;;;;;;;;29496:23;;;;;;;;;;;;;;;:64;;;;29638:46;29670:13;29638:18;:27;29657:7;;;;;;;;;;;29638:27;;;;;;;;;;;;;;;;:31;;:46;;;;:::i;:::-;29608:18;:27;29627:7;;;;;;;;;;;29608:27;;;;;;;;;;;;;;;:76;;;;29740:31;29757:13;29740:12;;:16;;:31;;;;:::i;:::-;29725:12;:46;;;;29881:13;;;;;;;;;;;29877:234;;;29916:8;29927:1;29916:12;;29911:189;29934:9;:16;;;;29930:1;:20;;;29911:189;;;30024:60;30074:9;30024:20;:29;30045:7;;;;;;;;;;;30024:29;;;;;;;;;;;;;;;:45;30054:11;30066:1;30054:14;;;;;;;;;;;;;;;;;;;;;;;;;;;30024:45;;;;;;;;;;;;;;;;:49;;:60;;;;:::i;:::-;29976:20;:29;29997:7;;;;;;;;;;;29976:29;;;;;;;;;;;;;;;:45;30006:11;30018:1;30006:14;;;;;;;;;;;;;;;;;;;;;;;;;;;29976:45;;;;;;;;;;;;;;;:108;;;;29952:3;;;;;;;29911:189;;;;29877:234;29049:1069;;;:::o;14335:139::-;14396:7;14423:43;14450:15;;14423:22;14437:7;14423:9;:13;;:22;;;;:::i;:::-;:26;;:43;;;;:::i;:::-;14416:50;;14335:139;;;:::o;30181:527::-;30263:4;30293:17;30308:1;30293:10;;:14;;:17;;;;:::i;:::-;30280:10;:30;;;;30339:25;30357:6;30339:13;;:17;;:25;;;;:::i;:::-;30323:13;:41;;;;30404:38;30435:6;30404:18;:26;30423:6;;;;;;;;;;;30404:26;;;;;;;;;;;;;;;;:30;;:38;;;;:::i;:::-;30375:18;:26;30394:6;;;;;;;;;;;30375:26;;;;;;;;;;;;;;;:67;;;;30488:44;30525:6;30488:20;:32;30509:10;30488:32;;;;;;;;;;;;;;;;:36;;:44;;;;:::i;:::-;30453:20;:32;30474:10;30453:32;;;;;;;;;;;;;;;:79;;;;30552:6;;;;;;;;;;;:15;;;30568:10;30580:6;30552:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30552:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30552:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30552:35:0;;;;;;;;;;;;;;;;30545:43;;;;30635:10;30604:74;;;30627:6;;;;;;;;;;;30647;30655:11;;30668:9;30604:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30696:4;30689:11;;30181:527;;;;:::o;31735:494::-;31774:4;31816:10;31796:31;;;31808:6;;;;;;;;;;;31796:31;;;;;;;;;;;;;;;;;;;;31847:13;31858:1;31847:6;;;;;;;;;;;:10;;;;:13;;;;:::i;:::-;31838:6;;:22;;;;;;;;;;;;;;;;;;31889:27;31909:6;;;;;;;;;;;31889:19;:27::i;:::-;31871:15;:45;;;;31944:21;31958:6;;;;;;;;;;;31944:13;:21::i;:::-;31927:14;:38;;;;32011:21;32035:18;32046:6;;;;;;;;;;;32035:10;:18::i;:::-;32011:42;;32078:14;32068:24;;:7;;;;;;;;;;;:24;;;32064:134;;;32136:10;32114:33;;;32127:7;;;;;;;;;;;32114:33;;;;;;;;;;;;;;;;;;;;;;32172:14;32162:7;;:24;;;;;;;;;;;;;;;;;;32064:134;32217:4;32210:11;;;31735:494;:::o;15718:120::-;15765:7;15792:38;15808:21;;15792:11;;:15;;:38;;;;:::i;:::-;15785:45;;15718:120;:::o;13760:170::-;13830:7;13857:65;13884:37;13910:10;13884:37;;:21;;:25;;:37;;;;:::i;:::-;13857:22;;:26;;:65;;;;:::i;:::-;13850:72;;13760:170;;;:::o;20300:154::-;20365:7;20392:54;20410:23;20422:10;20410:11;:23::i;:::-;20435:10;20392:17;:54::i;:::-;20385:61;;20300:154;;;:::o;19452:181::-;19516:7;19543:82;19569:55;19614:9;;;;;;;;;;;19569:55;;:40;19598:10;19569:40;;:24;;:28;;:40;;;;:::i;:::-;:44;;:55;;;;:::i;:::-;19543:21;;:25;;:82;;;;:::i;:::-;19536:89;;19452:181;;;:::o;21792:188::-;21865:7;21892:80;21929:28;:42;21958:12;21929:42;;;;;;;;;;;;;;;;21892:18;:32;21911:12;21892:32;;;;;;;;;;;;;;;;:36;;:80;;;;:::i;:::-;21885:87;;21792:188;;;:::o;19698:154::-;19764:7;19791:53;19799:44;19833:9;19799:29;19813:14;;19799:9;:13;;:29;;;;:::i;:::-;:33;;:44;;;;:::i;:::-;19791:7;:53::i;:::-;19784:60;;19698:154;;;:::o;1891:138::-;1947:8;1976:1;1972;:5;1968:9;;2000:1;1995:6;;:1;:6;;;;1988:14;;;;2020:1;2013:8;;1891:138;;;;:::o;14787:364::-;14848:6;14884:1;14871:10;:14;;;14867:256;;;14902:21;14926:29;14941:13;;;;;;;;;;;14926:10;:14;;;;:29;;;;:::i;:::-;14902:53;;15008:1;14976:29;14991:13;;;;;;;;;;;14976:10;:14;;;;:29;;;;:::i;:::-;:33;;;14972:102;;;15037:21;15056:1;15037:14;:18;;;;:21;;;;:::i;:::-;15030:28;;;;;14972:102;15097:14;15090:21;;;;;14867:256;15142:1;15135:8;;14787:364;;;;:::o;2723:184::-;2779:6;2809:1;2805;:5;;;2798:13;;;;2822:9;2838:1;2834:5;;:1;:5;;;;;;;;2822:17;;;;2874:1;2870:5;;:1;:5;;;;;;;;2862:13;;2866:1;2862;:5;;;:13;2857:1;:18;;;2850:26;;;;2898:1;2894:5;;:1;:5;;;;;;;;2887:12;;;2723:184;;;;:::o;3068:121::-;3124:6;3156:1;3151;:6;;;;3143:15;;;;;;3180:1;3176:5;;:1;:5;;;;;;;;3169:12;;3068:121;;;;:::o;7483:25538::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://fa6d6185eea275883ca43434abea818b8eeba930611110a8c8afa515489f8fde
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,105.61 | 0.000325 | $0.684325 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.