Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
AwardContract
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-11 */ //SPDX-License-Identifier: UNLICENSED pragma solidity ^0.6.12; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IERC20Token is IERC20 { function maxSupply() external view returns (uint256); function issue(address account, uint256 amount) external returns (bool); function burn(uint256 amount) external returns (bool); } contract DevAward { // dev line release address public dev; uint256 public devStartBlock; uint256 public devAccAwards; uint256 public devPerBlock; uint256 public MaxAvailAwards; uint256 public claimedIncentives; } contract AwardInfo { struct TaxInfo { uint256 epoch; uint256 amount; } struct UserInfo { uint256 freeAmount; uint256 taxHead; // queue head element index uint256 taxTail; // queue tail next element index bool notEmpty; // whether taxList is empty where taxHead = taxTail TaxInfo[] taxList; } // tax epoch info uint256 public taxEpoch = 9; // tax epoch and user taxlist max length uint256 public epUnit = 1 weeks; // epoch unit => week // user info mapping(address => UserInfo) internal userInfo; // tax treasury address address public treasury; } contract AwardContract is DevAward, AwardInfo, Ownable { using SafeMath for uint256; using SafeERC20 for IERC20Token; // platform token IERC20Token public platformToken; mapping(address => bool) public governors; modifier onlyGovernor{ require(governors[_msgSender()], "AwardContract: caller is not the governor"); _; } event AddFreeAward(address user, uint256 amount); event AddAward(address user, uint256 amount); event Withdraw(address user, uint256 amount, uint256 tax); constructor( IERC20Token _platformToken, uint256 _taxEpoch, address _treasury, address _dev, uint256 _devStartBlock, uint256 _devPerBlock ) public { require(_taxEpoch > 0, "AwardContract: taxEpoch invalid"); require(_dev != address(0), "AwardContract: dev invalid"); require(address(_platformToken) != address(0), "AwardContract: platform token invalid"); require(_devStartBlock != 0, "AwardContract: dev start block invalid"); platformToken = _platformToken; taxEpoch = _taxEpoch; governors[_msgSender()] = true; // get tax fee treasury = _treasury; // dev info dev = _dev; // Dev can receive 10% of platformToken MaxAvailAwards = platformToken.maxSupply().mul(10).div(100); devPerBlock = _devPerBlock; devStartBlock = _devStartBlock; } // get user total rewards function getUserTotalAwards(address user) view public returns (uint256){ UserInfo memory info = userInfo[user]; uint256 amount = info.freeAmount; if (info.notEmpty) { uint256 cursor = info.taxHead; while (true) { amount = amount.add(info.taxList[cursor].amount); cursor = cursor.add(1).mod(taxEpoch); if (cursor == info.taxTail) { break; } } } return amount; } // get user free rewards amount function getCurrentFreeAwards(address user) view public returns (uint256){ uint256 rebaseEp = getCurrEpoch().sub(taxEpoch); UserInfo memory info = userInfo[user]; uint256 amount = info.freeAmount; if (info.notEmpty) { uint256 cursor = info.taxHead; while (info.taxList[cursor].epoch <= rebaseEp) { amount = amount.add(info.taxList[cursor].amount); cursor = cursor.add(1).mod(taxEpoch); if (cursor == info.taxTail) { break; } } } return amount; } // get available awards function getUserAvailAwards(address user) view public returns (uint256){ uint256 current = getCurrEpoch(); uint256 rebaseEp = current.sub(taxEpoch); UserInfo memory info = userInfo[user]; uint256 amount = info.freeAmount; if (info.notEmpty) { uint256 _ep = taxEpoch.add(1); uint256 cursor = info.taxHead; while (true) { if (info.taxList[cursor].epoch > rebaseEp) { uint rate = current.sub(info.taxList[cursor].epoch).add(1).mul(1e12).div(_ep); uint256 available = info.taxList[cursor].amount.mul(rate).div(1e12); amount = amount.add(available); } else { amount = amount.add(info.taxList[cursor].amount); } cursor = cursor.add(1).mod(taxEpoch); if (cursor == info.taxTail) { break; } } } return amount; } // estimate gas function estimateTax(uint256 _amount) view external returns (uint256){ uint256 _current = getCurrEpoch(); uint256 tax = 0; UserInfo memory user = userInfo[msg.sender]; if (user.freeAmount >= _amount) { return 0; } else { uint256 current = _current; uint256 arrears = _amount.sub(user.freeAmount); uint256 _head = user.taxHead; uint256 _ep = taxEpoch.add(1); while (user.notEmpty) { // non-levied tax rate TaxInfo memory taxInfo = user.taxList[_head]; uint rate = current.sub(taxInfo.epoch).add(1).mul(1e12).div(_ep); if (rate > 1e12) { rate = 1e12; } uint256 available = taxInfo.amount.mul(rate).div(1e12); if (available >= arrears) { uint256 newAmount = arrears.mul(1e12).div(rate); tax = tax.add(newAmount.sub(arrears)); arrears = 0; break; } else { arrears = arrears.sub(available); tax = tax.add(taxInfo.amount.sub(available)); _head = _head.add(1).mod(taxEpoch); if (_head == user.taxTail) { break; } } } require(arrears == 0, "AwardContract: Insufficient Balance"); return tax; } } // add governor function addGovernor(address governor) onlyOwner external { governors[governor] = true; } // remove governor function removeGovernor(address governor) onlyOwner external { governors[governor] = false; } // dev get rewards function claimDevAwards() external { require(msg.sender == dev, "AwardContract: only dev can receive awards"); require(devAccAwards < MaxAvailAwards, "AwardContract: dev awards exceed permitted amount"); uint256 amount = block.number.sub(devStartBlock).mul(devPerBlock); uint256 rewards = amount.sub(devAccAwards); if (amount > MaxAvailAwards) { rewards = MaxAvailAwards.sub(devAccAwards); } safeIssue(dev, rewards, "AwardContract: dev claim awards failed"); devAccAwards = devAccAwards.add(rewards); } // add free amount function addFreeAward(address _user, uint256 _amount) onlyGovernor external { UserInfo storage user = userInfo[_user]; user.freeAmount = user.freeAmount.add(_amount); emit AddFreeAward(_user, _amount); } // add award function addAward(address _user, uint256 _amount) onlyGovernor public { uint256 current = getCurrEpoch(); // get epoch UserInfo storage user = userInfo[_user]; // if (user.taxList.length == 0) { user.taxList.push(TaxInfo({ epoch : current, amount : _amount })); user.taxHead = 0; user.taxTail = 1; user.notEmpty = true; } else { // taxList not full if (user.notEmpty) { uint256 end; if (user.taxTail == 0) { end = user.taxList.length - 1; } else { end = user.taxTail.sub(1); } if (user.taxList[end].epoch >= current) { user.taxList[end].amount = user.taxList[end].amount.add(_amount); } else { if (user.taxList.length < taxEpoch) { user.taxList.push(TaxInfo({ epoch : current, amount : _amount })); } else { if (user.taxHead == user.taxTail) { rebase(user, current); } user.taxList[user.taxTail].epoch = current; user.taxList[user.taxTail].amount = _amount; } user.taxTail = user.taxTail.add(1).mod(taxEpoch); } } else {// user.taxHead == user.taxTail if (user.taxList.length < taxEpoch) { user.taxList.push(TaxInfo({ epoch : current, amount : _amount })); } else { user.taxList[user.taxTail].epoch = current; user.taxList[user.taxTail].amount = _amount; } user.taxTail = user.taxTail.add(1).mod(taxEpoch); user.notEmpty = true; } } emit AddAward(_user, _amount); } // batch add awards function batchAddAwards(address[] memory _users, uint256[] memory _amounts) onlyGovernor external { require(_users.length == _amounts.length, "AwardContract: params invalid"); for (uint i = 0; i < _users.length; i++) { addAward(_users[i], _amounts[i]); } } function withdraw(uint256 _amount) external { uint256 current = getCurrEpoch(); uint256 _destroy = 0; // get base time UserInfo storage user = userInfo[msg.sender]; // rebase rebase(user, current); if (user.freeAmount >= _amount) { user.freeAmount = user.freeAmount.sub(_amount); } else { uint256 arrears = _amount.sub(user.freeAmount); user.freeAmount = 0; uint256 _head = user.taxHead; uint256 _ep = taxEpoch.add(1); while (user.notEmpty) { // non-levied tax rate uint rate = current.sub(user.taxList[_head].epoch).add(1).mul(1e12).div(_ep); uint256 available = user.taxList[_head].amount.mul(rate).div(1e12); // available token if (available >= arrears) { uint256 newAmount = arrears.mul(1e12).div(rate); user.taxList[_head].amount = user.taxList[_head].amount.sub(newAmount); _destroy = _destroy.add(newAmount.sub(arrears)); arrears = 0; break; } else { arrears = arrears.sub(available); _destroy = _destroy.add(user.taxList[_head].amount.sub(available)); _head = _head.add(1).mod(taxEpoch); if (_head == user.taxTail) { user.notEmpty = false; } } } user.taxHead = _head; require(arrears == 0, "AwardContract: Insufficient Balance"); safeIssue(treasury, _destroy, "AwardContract: levy tax failed"); } safeIssue(msg.sender, _amount, "AwardContract: claim awards failed"); emit Withdraw(msg.sender, _amount, _destroy); } function pendingIncentives() view public returns (uint256){ uint256 startBlock = 11210456; // It's staking start block if (block.number <= startBlock) return 0; uint256 maxIncent = 745000 * 10 ** 18; uint256 incents = block.number.sub(startBlock).mul(15 * 10 ** 16); if (incents > maxIncent) { return maxIncent.sub(claimedIncentives); } else { return incents.sub(claimedIncentives); } } function claimIncentives(address to, uint256 amount) external { require(msg.sender == dev, "AwardContract: unauthorized"); require(to != dev, "AwardContract: dev so greedy"); uint256 pending = pendingIncentives(); require(amount <= pending, "AwardContract: incentives exceed"); safeIssue(to, amount, "AwardContract: claim incentives err"); claimedIncentives = claimedIncentives.add(amount); } function destroy(uint256 amount) onlyGovernor external { safeIssue(treasury, amount, "AwardContract: levy tax failed"); } function getCurrEpoch() internal view returns (uint256) { return now.div(epUnit); } function safeIssue(address user, uint256 amount, string memory err) internal { if (amount > 0) { require(amount.add(platformToken.totalSupply()) <= platformToken.maxSupply(), "AwardContract: awards exceeds maxSupply"); require(platformToken.issue(user, amount), err); } } function rebase(UserInfo storage _user, uint256 _current) internal { uint256 rebaseEp = _current.sub(taxEpoch); uint256 head = _user.taxHead; while (_user.notEmpty && _user.taxList[head].epoch <= rebaseEp) { _user.freeAmount = _user.freeAmount.add(_user.taxList[head].amount); head = head.add(1).mod(taxEpoch); if (head == _user.taxTail) { _user.notEmpty = false; } } _user.taxHead = head; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20Token","name":"_platformToken","type":"address"},{"internalType":"uint256","name":"_taxEpoch","type":"uint256"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_dev","type":"address"},{"internalType":"uint256","name":"_devStartBlock","type":"uint256"},{"internalType":"uint256","name":"_devPerBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AddAward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AddFreeAward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MaxAvailAwards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addAward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addFreeAward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"governor","type":"address"}],"name":"addGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"batchAddAwards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDevAwards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimIncentives","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimedIncentives","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"destroy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dev","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAccAwards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epUnit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"estimateTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getCurrentFreeAwards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserAvailAwards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserTotalAwards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"governors","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingIncentives","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformToken","outputs":[{"internalType":"contract IERC20Token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"governor","type":"address"}],"name":"removeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"taxEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600960065562093a806007553480156200001d57600080fd5b506040516200291b3803806200291b833981810160405260c08110156200004357600080fd5b508051602082015160408301516060840151608085015160a09095015193949293919290916000620000746200032b565b600a80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000851162000118576040805162461bcd60e51b815260206004820152601f60248201527f4177617264436f6e74726163743a2074617845706f636820696e76616c696400604482015290519081900360640190fd5b6001600160a01b03831662000174576040805162461bcd60e51b815260206004820152601a60248201527f4177617264436f6e74726163743a2064657620696e76616c6964000000000000604482015290519081900360640190fd5b6001600160a01b038616620001bb5760405162461bcd60e51b8152600401808060200182810382526025815260200180620028af6025913960400191505060405180910390fd5b81620001f95760405162461bcd60e51b8152600401808060200182810382526026815260200180620028d46026913960400191505060405180910390fd5b600b80546001600160a01b0319166001600160a01b03881617905560068590556001600c6000620002296200032b565b6001600160a01b03908116825260208083019390935260409182016000908120805460ff191695151595909517909455600980546001600160a01b03199081168a84161790915584541687821617909355600b54815163d5abeb0160e01b8152915162000317946064946200030394600a949092169263d5abeb01926004808201939291829003018186803b158015620002c257600080fd5b505afa158015620002d7573d6000803e3d6000fd5b505050506040513d6020811015620002ee57600080fd5b5051906200032f602090811b62001c2417901c565b6200039660201b62001c861790919060201c565b600455600355600155506200048792505050565b3390565b600082620003405750600062000390565b828202828482816200034e57fe5b04146200038d5760405162461bcd60e51b8152600401808060200182810382526021815260200180620028fa6021913960400191505060405180910390fd5b90505b92915050565b60006200038d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620003e060201b60201c565b60008183620004705760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620004345781810151838201526020016200041a565b50505050905090810190601f168015620004625780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200047d57fe5b0495945050505050565b61241880620004976000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806391cca3db116100f9578063db281e1b11610097578063f14d13c411610071578063f14d13c4146104eb578063f2fde38b14610511578063fa803b5114610537578063fbb29cfd14610563576101c4565b8063db281e1b14610465578063e3eece261461048b578063eecdac88146104c5576101c4565b8063a076e7db116100d3578063a076e7db14610445578063ad56ca421461044d578063aef018b114610455578063d1b812cd1461045d576101c4565b806391cca3db14610418578063961c34fe146104205780639d11877014610428576101c4565b806358f57f4d11610166578063715018a611610140578063715018a6146103b05780637336991d146103b85780638b76ba64146103e45780638da5cb5b14610410576101c4565b806358f57f4d1461037c57806359cd09381461038457806361d027b31461038c576101c4565b80631b255e18116101a25780631b255e18146101f35780632e1a7d4d146102105780633c4a25d01461022f57806345decd1e14610255576101c4565b806303aafa25146101c95780630f6104fc146101e3578063155a6b85146101eb575b600080fd5b6101d1610589565b60408051918252519081900360200190f35b6101d16105fc565b6101d1610602565b6101d16004803603602081101561020957600080fd5b5035610608565b61022d6004803603602081101561022657600080fd5b50356108a8565b005b61022d6004803603602081101561024557600080fd5b50356001600160a01b0316610b98565b61022d6004803603604081101561026b57600080fd5b81019060208101813564010000000081111561028657600080fd5b82018360208201111561029857600080fd5b803590602001918460208302840111640100000000831117156102ba57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561030a57600080fd5b82018360208201111561031c57600080fd5b8035906020019184602083028401116401000000008311171561033e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c14945050505050565b61022d610d17565b6101d1610e3a565b610394610e40565b604080516001600160a01b039092168252519081900360200190f35b61022d610e4f565b61022d600480360360408110156103ce57600080fd5b506001600160a01b038135169060200135610ef1565b61022d600480360360408110156103fa57600080fd5b506001600160a01b03813516906020013561104c565b61039461111f565b61039461112e565b6101d161113d565b61022d6004803603602081101561043e57600080fd5b5035611143565b6101d16111f6565b6101d16111fc565b6101d1611202565b610394611208565b6101d16004803603602081101561047b57600080fd5b50356001600160a01b0316611217565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611356565b604080519115158252519081900360200190f35b61022d600480360360208110156104db57600080fd5b50356001600160a01b031661136b565b6101d16004803603602081101561050157600080fd5b50356001600160a01b03166113e4565b61022d6004803603602081101561052757600080fd5b50356001600160a01b0316611542565b61022d6004803603604081101561054d57600080fd5b506001600160a01b03813516906020013561163b565b6101d16004803603602081101561057957600080fd5b50356001600160a01b03166119f5565b600062ab0ed84381106105a05760009150506105f9565b699dc287eab4d4dfa0000060006105c9670214e8348c4f00006105c34386611cc8565b90611c24565b9050818111156105eb576005546105e1908390611cc8565b93505050506105f9565b6005546105e1908290611cc8565b90565b60035481565b60055481565b600080610613611d0a565b9050600061061f6121f7565b336000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b828210156106ca57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610684565b50505091525050805190915085116106e857600093505050506108a3565b805183906000906106fa908890611cc8565b602084015160065491925090600090610714906001611d26565b90505b84606001511561085c57610729612228565b8560800151838151811061073957fe5b60200260200101519050600061077a8361077464e8d4a510006105c3600161076e88600001518d611cc890919063ffffffff16565b90611d26565b90611c86565b905064e8d4a51000811115610791575064e8d4a510005b60006107b364e8d4a51000610774848660200151611c2490919063ffffffff16565b90508581106107f65760006107d1836107748964e8d4a51000611c24565b90506107e76107e08289611cc8565b8b90611d26565b9950600096505050505061085c565b6108008682611cc8565b955061082361081c828560200151611cc890919063ffffffff16565b8a90611d26565b60065490995061083e90610838876001611d26565b90611d80565b945087604001518514156108545750505061085c565b505050610717565b82156108995760405162461bcd60e51b81526004018080602001828103825260238152602001806123436023913960400191505060405180910390fd5b5093955050505050505b919050565b60006108b2611d0a565b336000908152600860205260408120919250906108cf8184611dc2565b805484116108ea5780546108e39085611cc8565b8155610b2f565b80546000906108fa908690611cc8565b60008084556001808501546006549394509261091591611d26565b90505b600384015460ff1615610a9b5760006109638261077464e8d4a510006105c3600161076e8b6004018a8154811061094b57fe5b60009182526020909120600290910201548e90611cc8565b905060006109a364e8d4a510006107748489600401888154811061098357fe5b906000526020600020906002020160010154611c2490919063ffffffff16565b9050848110610a3b5760006109c1836107748864e8d4a51000611c24565b90506109f6818860040187815481106109d657fe5b906000526020600020906002020160010154611cc890919063ffffffff16565b876004018681548110610a0557fe5b6000918252602090912060016002909202010155610a2d610a268288611cc8565b8990611d26565b975060009550505050610a9b565b610a458582611cc8565b9450610a64610a5d828860040187815481106109d657fe5b8890611d26565b600654909750610a7990610838866001611d26565b93508560020154841415610a945760038601805460ff191690555b5050610918565b600184018290558215610adf5760405162461bcd60e51b81526004018080602001828103825260238152602001806123436023913960400191505060405180910390fd5b60095460408051808201909152601e81527f4177617264436f6e74726163743a206c65767920746178206661696c656400006020820152610b2b916001600160a01b0316908790611e8a565b5050505b610b52338560405180606001604052806022815260200161236660229139611e8a565b604080513381526020810186905280820184905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a150505050565b610ba06120d2565b600a546001600160a01b03908116911614610bf0576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b600c6000610c206120d2565b6001600160a01b0316815260208101919091526040016000205460ff16610c785760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b8051825114610cce576040805162461bcd60e51b815260206004820152601d60248201527f4177617264436f6e74726163743a20706172616d7320696e76616c6964000000604482015290519081900360640190fd5b60005b8251811015610d1257610d0a838281518110610ce957fe5b6020026020010151838381518110610cfd57fe5b602002602001015161163b565b600101610cd1565b505050565b6000546001600160a01b03163314610d605760405162461bcd60e51b815260040180806020018281038252602a815260200180612388602a913960400191505060405180910390fd5b60045460025410610da25760405162461bcd60e51b81526004018080602001828103825260318152602001806123b26031913960400191505060405180910390fd5b6000610dbf6003546105c360015443611cc890919063ffffffff16565b90506000610dd860025483611cc890919063ffffffff16565b9050600454821115610df657600254600454610df391611cc8565b90505b60005460408051606081019091526026808252610e26926001600160a01b03169184916122436020830139611e8a565b600254610e339082611d26565b6002555050565b60075481565b6009546001600160a01b031681565b610e576120d2565b600a546001600160a01b03908116911614610ea7576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b6000546001600160a01b03163314610f50576040805162461bcd60e51b815260206004820152601b60248201527f4177617264436f6e74726163743a20756e617574686f72697a65640000000000604482015290519081900360640190fd5b6000546001600160a01b0383811691161415610fb3576040805162461bcd60e51b815260206004820152601c60248201527f4177617264436f6e74726163743a2064657620736f2067726565647900000000604482015290519081900360640190fd5b6000610fbd610589565b905080821115611014576040805162461bcd60e51b815260206004820181905260248201527f4177617264436f6e74726163743a20696e63656e746976657320657863656564604482015290519081900360640190fd5b61103783836040518060600160405280602381526020016122d760239139611e8a565b6005546110449083611d26565b600555505050565b600c60006110586120d2565b6001600160a01b0316815260208101919091526040016000205460ff166110b05760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b6001600160a01b038216600090815260086020526040902080546110d49083611d26565b8155604080516001600160a01b03851681526020810184905281517fb3d34aa6513790110f92a175d6dd74ad8c8a7b013c31d21cfbd8f875465afdbb929181900390910190a1505050565b600a546001600160a01b031690565b6000546001600160a01b031681565b60025481565b600c600061114f6120d2565b6001600160a01b0316815260208101919091526040016000205460ff166111a75760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b60095460408051808201909152601e81527f4177617264436f6e74726163743a206c65767920746178206661696c6564000060208201526111f3916001600160a01b0316908390611e8a565b50565b60045481565b60015481565b60065481565b600b546001600160a01b031681565b60006112216121f7565b6001600160a01b0383166000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b828210156112d55783829060005260206000209060020201604051806040016040529081600082015481526020016001820154815250508152602001906001019061128f565b5050509152505080516060820151919250901561134f5760208201515b6113208360800151828151811061130557fe5b60200260200101516020015183611d2690919063ffffffff16565b60065490925061133590610838836001611d26565b905082604001518114156113485761134d565b6112f2565b505b9392505050565b600c6020526000908152604090205460ff1681565b6113736120d2565b600a546001600160a01b039081169116146113c3576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000806113fb6006546113f5611d0a565b90611cc8565b90506114056121f7565b6001600160a01b0384166000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b828210156114b957838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611473565b5050509152505080516060820151919250901561153a5760208201515b83836080015182815181106114e757fe5b602002602001015160000151116115385761150b8360800151828151811061130557fe5b60065490925061152090610838836001611d26565b9050826040015181141561153357611538565b6114d6565b505b949350505050565b61154a6120d2565b600a546001600160a01b0390811691161461159a576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b6001600160a01b0381166115df5760405162461bcd60e51b81526004018080602001828103825260268152602001806122696026913960400191505060405180910390fd5b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600c60006116476120d2565b6001600160a01b0316815260208101919091526040016000205460ff1661169f5760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b60006116a9611d0a565b6001600160a01b038416600090815260086020526040902060048101549192509061172f57604080518082019091528281526020808201858152600484018054600181810183556000928352938220945160029182029095019485559151938301939093558184019290925590820181905560038201805460ff191690911790556119ab565b600381015460ff16156118d657600081600201546000141561175a575060048101546000190161176d565b600282015461176a906001611cc8565b90505b8282600401828154811061177d57fe5b906000526020600020906002020160000154106117f0576117c7848360040183815481106117a757fe5b906000526020600020906002020160010154611d2690919063ffffffff16565b8260040182815481106117d657fe5b9060005260206000209060020201600101819055506118d0565b6006546004830154101561183f576040805180820190915283815260208082018681526004850180546001818101835560009283529390912093516002909102909301928355519101556118ac565b816002015482600101541415611859576118598284611dc2565b828260040183600201548154811061186d57fe5b906000526020600020906002020160000181905550838260040183600201548154811061189657fe5b9060005260206000209060020201600101819055505b6118ca60065461083860018560020154611d2690919063ffffffff16565b60028301555b506119ab565b6006546004820154101561192557604080518082019091528281526020808201858152600484018054600181810183556000928352939091209351600290910290930192835551910155611978565b818160040182600201548154811061193957fe5b906000526020600020906002020160000181905550828160040182600201548154811061196257fe5b9060005260206000209060020201600101819055505b61199660065461083860018460020154611d2690919063ffffffff16565b600282015560038101805460ff191660011790555b604080516001600160a01b03861681526020810185905281517fd185e4940a36e5f27549de4c89ab5d6d8ba2bbf01c48b4df813c0e73b123cbab929181900390910190a150505050565b600080611a00611d0a565b90506000611a1960065483611cc890919063ffffffff16565b9050611a236121f7565b6001600160a01b0385166000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b82821015611ad757838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611a91565b50505091525050805160608201519192509015611c1b57600654600090611aff906001611d26565b60208401519091505b8484608001518281518110611b1957fe5b6020026020010151600001511115611bbd576000611b6d8361077464e8d4a510006105c3600161076e8b608001518981518110611b5257fe5b6020026020010151600001518e611cc890919063ffffffff16565b90506000611ba864e8d4a510006107748489608001518781518110611b8e57fe5b602002602001015160200151611c2490919063ffffffff16565b9050611bb48582611d26565b94505050611bee565b611beb84608001518281518110611bd057fe5b60200260200101516020015184611d2690919063ffffffff16565b92505b600654611c0090610838836001611d26565b90508360400151811415611c1357611c18565b611b08565b50505b95945050505050565b600082611c3357506000611c80565b82820282848281611c4057fe5b0414611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061228f6021913960400191505060405180910390fd5b90505b92915050565b6000611c7d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120d6565b6000611c7d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061213b565b6000611d2160075442611c8690919063ffffffff16565b905090565b600082820183811015611c7d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000611c7d83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612195565b6000611dd960065483611cc890919063ffffffff16565b60018401549091505b600384015460ff168015611e16575081846004018281548110611e0157fe5b90600052602060002090600202016000015411155b15611e7d57611e49846004018281548110611e2d57fe5b6000918252602090912060016002909202010154855490611d26565b8455600654611e5d90610838836001611d26565b90508360020154811415611e785760038401805460ff191690555b611de2565b6001909301929092555050565b8115610d1257600b60009054906101000a90046001600160a01b03166001600160a01b031663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d6020811015611f0857600080fd5b5051600b54604080516318160ddd60e01b81529051611f83926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015611f5057600080fd5b505afa158015611f64573d6000803e3d6000fd5b505050506040513d6020811015611f7a57600080fd5b50518490611d26565b1115611fc05760405162461bcd60e51b81526004018080602001828103825260278152602001806122b06027913960400191505060405180910390fd5b600b546040805163219e412d60e21b81526001600160a01b038681166004830152602482018690529151919092169163867904b49160448083019260209291908290030181600087803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b505050506040513d602081101561204057600080fd5b505181906120cc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612091578181015183820152602001612079565b50505050905090810190601f1680156120be5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505050565b3390565b600081836121255760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612091578181015183820152602001612079565b50600083858161213157fe5b0495945050505050565b6000818484111561218d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612091578181015183820152602001612079565b505050900390565b600081836121e45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612091578181015183820152602001612079565b508284816121ee57fe5b06949350505050565b6040518060a00160405280600081526020016000815260200160008152602001600015158152602001606081525090565b60405180604001604052806000815260200160008152509056fe4177617264436f6e74726163743a2064657620636c61696d20617761726473206661696c65644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774177617264436f6e74726163743a206177617264732065786365656473206d6178537570706c794177617264436f6e74726163743a20636c61696d20696e63656e7469766573206572724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724177617264436f6e74726163743a2063616c6c6572206973206e6f742074686520676f7665726e6f724177617264436f6e74726163743a20496e73756666696369656e742042616c616e63654177617264436f6e74726163743a20636c61696d20617761726473206661696c65644177617264436f6e74726163743a206f6e6c79206465762063616e2072656365697665206177617264734177617264436f6e74726163743a206465762061776172647320657863656564207065726d697474656420616d6f756e74a2646970667358221220a51897cf8f72196b48d14c35bd2f9f73775695e1324ed39557caf4e26551ce2364736f6c634300060c00334177617264436f6e74726163743a20706c6174666f726d20746f6b656e20696e76616c69644177617264436f6e74726163743a2064657620737461727420626c6f636b20696e76616c6964536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77000000000000000000000000e1b583dc66e0a24fd9af2dc665f6f5e48978e10600000000000000000000000000000000000000000000000000000000000000090000000000000000000000007ca6eea4df49c315534fee8dc43e0660540cd9ea000000000000000000000000667911bc8b5775616ebcf13d49734cff96d4ec390000000000000000000000000000000000000000000000000000000000b1549b00000000000000000000000000000000000000000000000004e28e2290f00000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806391cca3db116100f9578063db281e1b11610097578063f14d13c411610071578063f14d13c4146104eb578063f2fde38b14610511578063fa803b5114610537578063fbb29cfd14610563576101c4565b8063db281e1b14610465578063e3eece261461048b578063eecdac88146104c5576101c4565b8063a076e7db116100d3578063a076e7db14610445578063ad56ca421461044d578063aef018b114610455578063d1b812cd1461045d576101c4565b806391cca3db14610418578063961c34fe146104205780639d11877014610428576101c4565b806358f57f4d11610166578063715018a611610140578063715018a6146103b05780637336991d146103b85780638b76ba64146103e45780638da5cb5b14610410576101c4565b806358f57f4d1461037c57806359cd09381461038457806361d027b31461038c576101c4565b80631b255e18116101a25780631b255e18146101f35780632e1a7d4d146102105780633c4a25d01461022f57806345decd1e14610255576101c4565b806303aafa25146101c95780630f6104fc146101e3578063155a6b85146101eb575b600080fd5b6101d1610589565b60408051918252519081900360200190f35b6101d16105fc565b6101d1610602565b6101d16004803603602081101561020957600080fd5b5035610608565b61022d6004803603602081101561022657600080fd5b50356108a8565b005b61022d6004803603602081101561024557600080fd5b50356001600160a01b0316610b98565b61022d6004803603604081101561026b57600080fd5b81019060208101813564010000000081111561028657600080fd5b82018360208201111561029857600080fd5b803590602001918460208302840111640100000000831117156102ba57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561030a57600080fd5b82018360208201111561031c57600080fd5b8035906020019184602083028401116401000000008311171561033e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c14945050505050565b61022d610d17565b6101d1610e3a565b610394610e40565b604080516001600160a01b039092168252519081900360200190f35b61022d610e4f565b61022d600480360360408110156103ce57600080fd5b506001600160a01b038135169060200135610ef1565b61022d600480360360408110156103fa57600080fd5b506001600160a01b03813516906020013561104c565b61039461111f565b61039461112e565b6101d161113d565b61022d6004803603602081101561043e57600080fd5b5035611143565b6101d16111f6565b6101d16111fc565b6101d1611202565b610394611208565b6101d16004803603602081101561047b57600080fd5b50356001600160a01b0316611217565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611356565b604080519115158252519081900360200190f35b61022d600480360360208110156104db57600080fd5b50356001600160a01b031661136b565b6101d16004803603602081101561050157600080fd5b50356001600160a01b03166113e4565b61022d6004803603602081101561052757600080fd5b50356001600160a01b0316611542565b61022d6004803603604081101561054d57600080fd5b506001600160a01b03813516906020013561163b565b6101d16004803603602081101561057957600080fd5b50356001600160a01b03166119f5565b600062ab0ed84381106105a05760009150506105f9565b699dc287eab4d4dfa0000060006105c9670214e8348c4f00006105c34386611cc8565b90611c24565b9050818111156105eb576005546105e1908390611cc8565b93505050506105f9565b6005546105e1908290611cc8565b90565b60035481565b60055481565b600080610613611d0a565b9050600061061f6121f7565b336000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b828210156106ca57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610684565b50505091525050805190915085116106e857600093505050506108a3565b805183906000906106fa908890611cc8565b602084015160065491925090600090610714906001611d26565b90505b84606001511561085c57610729612228565b8560800151838151811061073957fe5b60200260200101519050600061077a8361077464e8d4a510006105c3600161076e88600001518d611cc890919063ffffffff16565b90611d26565b90611c86565b905064e8d4a51000811115610791575064e8d4a510005b60006107b364e8d4a51000610774848660200151611c2490919063ffffffff16565b90508581106107f65760006107d1836107748964e8d4a51000611c24565b90506107e76107e08289611cc8565b8b90611d26565b9950600096505050505061085c565b6108008682611cc8565b955061082361081c828560200151611cc890919063ffffffff16565b8a90611d26565b60065490995061083e90610838876001611d26565b90611d80565b945087604001518514156108545750505061085c565b505050610717565b82156108995760405162461bcd60e51b81526004018080602001828103825260238152602001806123436023913960400191505060405180910390fd5b5093955050505050505b919050565b60006108b2611d0a565b336000908152600860205260408120919250906108cf8184611dc2565b805484116108ea5780546108e39085611cc8565b8155610b2f565b80546000906108fa908690611cc8565b60008084556001808501546006549394509261091591611d26565b90505b600384015460ff1615610a9b5760006109638261077464e8d4a510006105c3600161076e8b6004018a8154811061094b57fe5b60009182526020909120600290910201548e90611cc8565b905060006109a364e8d4a510006107748489600401888154811061098357fe5b906000526020600020906002020160010154611c2490919063ffffffff16565b9050848110610a3b5760006109c1836107748864e8d4a51000611c24565b90506109f6818860040187815481106109d657fe5b906000526020600020906002020160010154611cc890919063ffffffff16565b876004018681548110610a0557fe5b6000918252602090912060016002909202010155610a2d610a268288611cc8565b8990611d26565b975060009550505050610a9b565b610a458582611cc8565b9450610a64610a5d828860040187815481106109d657fe5b8890611d26565b600654909750610a7990610838866001611d26565b93508560020154841415610a945760038601805460ff191690555b5050610918565b600184018290558215610adf5760405162461bcd60e51b81526004018080602001828103825260238152602001806123436023913960400191505060405180910390fd5b60095460408051808201909152601e81527f4177617264436f6e74726163743a206c65767920746178206661696c656400006020820152610b2b916001600160a01b0316908790611e8a565b5050505b610b52338560405180606001604052806022815260200161236660229139611e8a565b604080513381526020810186905280820184905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a150505050565b610ba06120d2565b600a546001600160a01b03908116911614610bf0576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b600c6000610c206120d2565b6001600160a01b0316815260208101919091526040016000205460ff16610c785760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b8051825114610cce576040805162461bcd60e51b815260206004820152601d60248201527f4177617264436f6e74726163743a20706172616d7320696e76616c6964000000604482015290519081900360640190fd5b60005b8251811015610d1257610d0a838281518110610ce957fe5b6020026020010151838381518110610cfd57fe5b602002602001015161163b565b600101610cd1565b505050565b6000546001600160a01b03163314610d605760405162461bcd60e51b815260040180806020018281038252602a815260200180612388602a913960400191505060405180910390fd5b60045460025410610da25760405162461bcd60e51b81526004018080602001828103825260318152602001806123b26031913960400191505060405180910390fd5b6000610dbf6003546105c360015443611cc890919063ffffffff16565b90506000610dd860025483611cc890919063ffffffff16565b9050600454821115610df657600254600454610df391611cc8565b90505b60005460408051606081019091526026808252610e26926001600160a01b03169184916122436020830139611e8a565b600254610e339082611d26565b6002555050565b60075481565b6009546001600160a01b031681565b610e576120d2565b600a546001600160a01b03908116911614610ea7576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b6000546001600160a01b03163314610f50576040805162461bcd60e51b815260206004820152601b60248201527f4177617264436f6e74726163743a20756e617574686f72697a65640000000000604482015290519081900360640190fd5b6000546001600160a01b0383811691161415610fb3576040805162461bcd60e51b815260206004820152601c60248201527f4177617264436f6e74726163743a2064657620736f2067726565647900000000604482015290519081900360640190fd5b6000610fbd610589565b905080821115611014576040805162461bcd60e51b815260206004820181905260248201527f4177617264436f6e74726163743a20696e63656e746976657320657863656564604482015290519081900360640190fd5b61103783836040518060600160405280602381526020016122d760239139611e8a565b6005546110449083611d26565b600555505050565b600c60006110586120d2565b6001600160a01b0316815260208101919091526040016000205460ff166110b05760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b6001600160a01b038216600090815260086020526040902080546110d49083611d26565b8155604080516001600160a01b03851681526020810184905281517fb3d34aa6513790110f92a175d6dd74ad8c8a7b013c31d21cfbd8f875465afdbb929181900390910190a1505050565b600a546001600160a01b031690565b6000546001600160a01b031681565b60025481565b600c600061114f6120d2565b6001600160a01b0316815260208101919091526040016000205460ff166111a75760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b60095460408051808201909152601e81527f4177617264436f6e74726163743a206c65767920746178206661696c6564000060208201526111f3916001600160a01b0316908390611e8a565b50565b60045481565b60015481565b60065481565b600b546001600160a01b031681565b60006112216121f7565b6001600160a01b0383166000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b828210156112d55783829060005260206000209060020201604051806040016040529081600082015481526020016001820154815250508152602001906001019061128f565b5050509152505080516060820151919250901561134f5760208201515b6113208360800151828151811061130557fe5b60200260200101516020015183611d2690919063ffffffff16565b60065490925061133590610838836001611d26565b905082604001518114156113485761134d565b6112f2565b505b9392505050565b600c6020526000908152604090205460ff1681565b6113736120d2565b600a546001600160a01b039081169116146113c3576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000806113fb6006546113f5611d0a565b90611cc8565b90506114056121f7565b6001600160a01b0384166000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b828210156114b957838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611473565b5050509152505080516060820151919250901561153a5760208201515b83836080015182815181106114e757fe5b602002602001015160000151116115385761150b8360800151828151811061130557fe5b60065490925061152090610838836001611d26565b9050826040015181141561153357611538565b6114d6565b505b949350505050565b61154a6120d2565b600a546001600160a01b0390811691161461159a576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b6001600160a01b0381166115df5760405162461bcd60e51b81526004018080602001828103825260268152602001806122696026913960400191505060405180910390fd5b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600c60006116476120d2565b6001600160a01b0316815260208101919091526040016000205460ff1661169f5760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b60006116a9611d0a565b6001600160a01b038416600090815260086020526040902060048101549192509061172f57604080518082019091528281526020808201858152600484018054600181810183556000928352938220945160029182029095019485559151938301939093558184019290925590820181905560038201805460ff191690911790556119ab565b600381015460ff16156118d657600081600201546000141561175a575060048101546000190161176d565b600282015461176a906001611cc8565b90505b8282600401828154811061177d57fe5b906000526020600020906002020160000154106117f0576117c7848360040183815481106117a757fe5b906000526020600020906002020160010154611d2690919063ffffffff16565b8260040182815481106117d657fe5b9060005260206000209060020201600101819055506118d0565b6006546004830154101561183f576040805180820190915283815260208082018681526004850180546001818101835560009283529390912093516002909102909301928355519101556118ac565b816002015482600101541415611859576118598284611dc2565b828260040183600201548154811061186d57fe5b906000526020600020906002020160000181905550838260040183600201548154811061189657fe5b9060005260206000209060020201600101819055505b6118ca60065461083860018560020154611d2690919063ffffffff16565b60028301555b506119ab565b6006546004820154101561192557604080518082019091528281526020808201858152600484018054600181810183556000928352939091209351600290910290930192835551910155611978565b818160040182600201548154811061193957fe5b906000526020600020906002020160000181905550828160040182600201548154811061196257fe5b9060005260206000209060020201600101819055505b61199660065461083860018460020154611d2690919063ffffffff16565b600282015560038101805460ff191660011790555b604080516001600160a01b03861681526020810185905281517fd185e4940a36e5f27549de4c89ab5d6d8ba2bbf01c48b4df813c0e73b123cbab929181900390910190a150505050565b600080611a00611d0a565b90506000611a1960065483611cc890919063ffffffff16565b9050611a236121f7565b6001600160a01b0385166000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b82821015611ad757838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611a91565b50505091525050805160608201519192509015611c1b57600654600090611aff906001611d26565b60208401519091505b8484608001518281518110611b1957fe5b6020026020010151600001511115611bbd576000611b6d8361077464e8d4a510006105c3600161076e8b608001518981518110611b5257fe5b6020026020010151600001518e611cc890919063ffffffff16565b90506000611ba864e8d4a510006107748489608001518781518110611b8e57fe5b602002602001015160200151611c2490919063ffffffff16565b9050611bb48582611d26565b94505050611bee565b611beb84608001518281518110611bd057fe5b60200260200101516020015184611d2690919063ffffffff16565b92505b600654611c0090610838836001611d26565b90508360400151811415611c1357611c18565b611b08565b50505b95945050505050565b600082611c3357506000611c80565b82820282848281611c4057fe5b0414611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061228f6021913960400191505060405180910390fd5b90505b92915050565b6000611c7d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120d6565b6000611c7d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061213b565b6000611d2160075442611c8690919063ffffffff16565b905090565b600082820183811015611c7d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000611c7d83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612195565b6000611dd960065483611cc890919063ffffffff16565b60018401549091505b600384015460ff168015611e16575081846004018281548110611e0157fe5b90600052602060002090600202016000015411155b15611e7d57611e49846004018281548110611e2d57fe5b6000918252602090912060016002909202010154855490611d26565b8455600654611e5d90610838836001611d26565b90508360020154811415611e785760038401805460ff191690555b611de2565b6001909301929092555050565b8115610d1257600b60009054906101000a90046001600160a01b03166001600160a01b031663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d6020811015611f0857600080fd5b5051600b54604080516318160ddd60e01b81529051611f83926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015611f5057600080fd5b505afa158015611f64573d6000803e3d6000fd5b505050506040513d6020811015611f7a57600080fd5b50518490611d26565b1115611fc05760405162461bcd60e51b81526004018080602001828103825260278152602001806122b06027913960400191505060405180910390fd5b600b546040805163219e412d60e21b81526001600160a01b038681166004830152602482018690529151919092169163867904b49160448083019260209291908290030181600087803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b505050506040513d602081101561204057600080fd5b505181906120cc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612091578181015183820152602001612079565b50505050905090810190601f1680156120be5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505050565b3390565b600081836121255760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612091578181015183820152602001612079565b50600083858161213157fe5b0495945050505050565b6000818484111561218d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612091578181015183820152602001612079565b505050900390565b600081836121e45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612091578181015183820152602001612079565b508284816121ee57fe5b06949350505050565b6040518060a00160405280600081526020016000815260200160008152602001600015158152602001606081525090565b60405180604001604052806000815260200160008152509056fe4177617264436f6e74726163743a2064657620636c61696d20617761726473206661696c65644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774177617264436f6e74726163743a206177617264732065786365656473206d6178537570706c794177617264436f6e74726163743a20636c61696d20696e63656e7469766573206572724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724177617264436f6e74726163743a2063616c6c6572206973206e6f742074686520676f7665726e6f724177617264436f6e74726163743a20496e73756666696369656e742042616c616e63654177617264436f6e74726163743a20636c61696d20617761726473206661696c65644177617264436f6e74726163743a206f6e6c79206465762063616e2072656365697665206177617264734177617264436f6e74726163743a206465762061776172647320657863656564207065726d697474656420616d6f756e74a2646970667358221220a51897cf8f72196b48d14c35bd2f9f73775695e1324ed39557caf4e26551ce2364736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e1b583dc66e0a24fd9af2dc665f6f5e48978e10600000000000000000000000000000000000000000000000000000000000000090000000000000000000000007ca6eea4df49c315534fee8dc43e0660540cd9ea000000000000000000000000667911bc8b5775616ebcf13d49734cff96d4ec390000000000000000000000000000000000000000000000000000000000b1549b00000000000000000000000000000000000000000000000004e28e2290f00000
-----Decoded View---------------
Arg [0] : _platformToken (address): 0xe1b583dc66e0A24Fd9Af2dC665f6F5e48978E106
Arg [1] : _taxEpoch (uint256): 9
Arg [2] : _treasury (address): 0x7Ca6EEa4DF49c315534feE8dc43E0660540cD9EA
Arg [3] : _dev (address): 0x667911bc8B5775616eBcF13d49734cFf96D4ec39
Arg [4] : _devStartBlock (uint256): 11621531
Arg [5] : _devPerBlock (uint256): 352000000000000000
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000e1b583dc66e0a24fd9af2dc665f6f5e48978e106
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [2] : 0000000000000000000000007ca6eea4df49c315534fee8dc43e0660540cd9ea
Arg [3] : 000000000000000000000000667911bc8b5775616ebcf13d49734cff96d4ec39
Arg [4] : 0000000000000000000000000000000000000000000000000000000000b1549b
Arg [5] : 00000000000000000000000000000000000000000000000004e28e2290f00000
Deployed Bytecode Sourcemap
8690:13141:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19791:484;;;:::i;:::-;;;;;;;;;;;;;;;;7885:26;;;:::i;7954:32::-;;;:::i;12536:1577::-;;;;;;;;;;;;;;;;-1:-1:-1;12536:1577:0;;:::i;17843:1940::-;;;;;;;;;;;;;;;;-1:-1:-1;17843:1940:0;;:::i;:::-;;14142:103;;;;;;;;;;;;;;;;-1:-1:-1;14142:103:0;-1:-1:-1;;;;;14142:103:0;;:::i;17534:301::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17534:301:0;;;;;;;;-1:-1:-1;17534:301:0;;-1:-1:-1;;17534:301:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17534:301:0;;-1:-1:-1;17534:301:0;;-1:-1:-1;;;;;17534:301:0:i;14416:592::-;;;:::i;8494:31::-;;;:::i;8659:23::-;;;:::i;:::-;;;;-1:-1:-1;;;;;8659:23:0;;;;;;;;;;;;;;7099:148;;;:::i;20283:451::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20283:451:0;;;;;;;;:::i;15040:235::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15040:235:0;;;;;;;;:::i;6889:79::-;;;:::i;7791:18::-;;;:::i;7851:27::-;;;:::i;20742:135::-;;;;;;;;;;;;;;;;-1:-1:-1;20742:135:0;;:::i;7918:29::-;;;:::i;7816:28::-;;;:::i;8415:27::-;;;:::i;8850:32::-;;;:::i;10225:538::-;;;;;;;;;;;;;;;;-1:-1:-1;10225:538:0;-1:-1:-1;;;;;10225:538:0;;:::i;8889:41::-;;;;;;;;;;;;;;;;-1:-1:-1;8889:41:0;-1:-1:-1;;;;;8889:41:0;;:::i;:::-;;;;;;;;;;;;;;;;;;14277:107;;;;;;;;;;;;;;;;-1:-1:-1;14277:107:0;-1:-1:-1;;;;;14277:107:0;;:::i;10808:632::-;;;;;;;;;;;;;;;;-1:-1:-1;10808:632:0;-1:-1:-1;;;;;10808:632:0;;:::i;7253:244::-;;;;;;;;;;;;;;;;-1:-1:-1;7253:244:0;-1:-1:-1;;;;;7253:244:0;;:::i;15301:2200::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15301:2200:0;;;;;;;;:::i;11477:1030::-;;;;;;;;;;;;;;;;-1:-1:-1;11477:1030:0;-1:-1:-1;;;;;11477:1030:0;;:::i;19791:484::-;19841:7;19881:8;19934:12;:26;-1:-1:-1;19930:40:0;;19969:1;19962:8;;;;;19930:40;20003:17;19983;20049:47;20082:13;20049:28;:12;20066:10;20049:16;:28::i;:::-;:32;;:47::i;:::-;20031:65;;20121:9;20111:7;:19;20107:161;;;20168:17;;20154:32;;:9;;:13;:32::i;:::-;20147:39;;;;;;;20107:161;20238:17;;20226:30;;:7;;:11;:30::i;19791:484::-;;:::o;7885:26::-;;;;:::o;7954:32::-;;;;:::o;12536:1577::-;12597:7;12616:16;12635:14;:12;:14::i;:::-;12616:33;;12660:11;12686:20;;:::i;:::-;12718:10;12709:20;;;;:8;:20;;;;;;;;12686:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12709:20;;12686:43;;;;;;;;12709:20;12686:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12686:43:0;;-1:-1:-1;;12744:15:0;;12686:43;;-1:-1:-1;12744:26:0;-1:-1:-1;12740:1366:0;;12794:1;12787:8;;;;;;;12740:1366;12908:15;;12855:8;;12837:15;;12896:28;;:7;;:11;:28::i;:::-;12955:12;;;;12996:8;;12878:46;;-1:-1:-1;12955:12:0;12939:13;;12996:15;;13009:1;12996:12;:15::i;:::-;12982:29;;13026:969;13033:4;:13;;;13026:969;;;13107:22;;:::i;:::-;13132:4;:12;;;13145:5;13132:19;;;;;;;;;;;;;;13107:44;;13170:9;13182:52;13230:3;13182:43;13220:4;13182:33;13213:1;13182:26;13194:7;:13;;;13182:7;:11;;:26;;;;:::i;:::-;:30;;:33::i;:43::-;:47;;:52::i;:::-;13170:64;;13264:4;13257;:11;13253:71;;;-1:-1:-1;13300:4:0;13253:71;13342:17;13362:34;13391:4;13362:24;13381:4;13362:7;:14;;;:18;;:24;;;;:::i;:34::-;13342:54;;13432:7;13419:9;:20;13415:565;;13464:17;13484:27;13506:4;13484:17;:7;13496:4;13484:11;:17::i;:27::-;13464:47;-1:-1:-1;13540:31:0;13548:22;13464:47;13562:7;13548:13;:22::i;:::-;13540:3;;:7;:31::i;:::-;13534:37;;13604:1;13594:11;;13628:5;;;;;;13415:565;13709:22;:7;13721:9;13709:11;:22::i;:::-;13699:32;;13760:38;13768:29;13787:9;13768:7;:14;;;:18;;:29;;;;:::i;:::-;13760:3;;:7;:38::i;:::-;13846:8;;13754:44;;-1:-1:-1;13829:26:0;;:12;:5;13839:1;13829:9;:12::i;:::-;:16;;:26::i;:::-;13821:34;;13891:4;:12;;;13882:5;:21;13878:83;;;13932:5;;;;;13878:83;13026:969;;;;;;14017:12;;14009:60;;;;-1:-1:-1;;;14009:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14091:3:0;;-1:-1:-1;;;;;;12536:1577:0;;;;:::o;17843:1940::-;17898:15;17916:14;:12;:14::i;:::-;18031:10;17941:16;18022:20;;;:8;:20;;;;;17898:32;;-1:-1:-1;17941:16:0;18072:21;18022:20;17898:32;18072:6;:21::i;:::-;18110:15;;:26;-1:-1:-1;18106:1536:0;;18171:15;;:28;;18191:7;18171:19;:28::i;:::-;18153:46;;18106:1536;;;18271:15;;18241;;18259:28;;:7;;:11;:28::i;:::-;18320:1;18302:19;;;18352:12;;;;;18393:8;;18241:46;;-1:-1:-1;18352:12:0;18393:15;;:12;:15::i;:::-;18379:29;;18423:1020;18430:13;;;;;;18423:1020;;;18504:9;18516:64;18576:3;18516:55;18566:4;18516:45;18559:1;18516:38;18528:4;:12;;18541:5;18528:19;;;;;;;;;;;;;;;;;;;;;:25;18516:7;;:11;:38::i;:64::-;18504:76;;18601:17;18621:46;18662:4;18621:36;18652:4;18621;:12;;18634:5;18621:19;;;;;;;;;;;;;;;;;;:26;;;:30;;:36;;;;:::i;:46::-;18601:66;;18739:7;18726:9;:20;18722:706;;18771:17;18791:27;18813:4;18791:17;:7;18803:4;18791:11;:17::i;:27::-;18771:47;;18870:41;18901:9;18870:4;:12;;18883:5;18870:19;;;;;;;;;;;;;;;;;;:26;;;:30;;:41;;;;:::i;:::-;18841:4;:12;;18854:5;18841:19;;;;;;;;;;;;;;;;:26;:19;;;;;:26;:70;18945:36;18958:22;:9;18972:7;18958:13;:22::i;:::-;18945:8;;:12;:36::i;:::-;18934:47;;19014:1;19004:11;;19038:5;;;;;18722:706;19119:22;:7;19131:9;19119:11;:22::i;:::-;19109:32;;19175:55;19188:41;19219:9;19188:4;:12;;19201:5;19188:19;;;;;;;:41;19175:8;;:12;:55::i;:::-;19278:8;;19164:66;;-1:-1:-1;19261:26:0;;:12;:5;19271:1;19261:9;:12::i;:26::-;19253:34;;19323:4;:12;;;19314:5;:21;19310:99;;;19364:13;;;:21;;-1:-1:-1;;19364:21:0;;;19310:99;18423:1020;;;;;19457:12;;;:20;;;19500:12;;19492:60;;;;-1:-1:-1;;;19492:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19577:8;;19567:63;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19577:8:0;;19587;;19567:9;:63::i;:::-;18106:1536;;;;19652:68;19662:10;19674:7;19652:68;;;;;;;;;;;;;;;;;:9;:68::i;:::-;19736:39;;;19745:10;19736:39;;;;;;;;;;;;;;;;;;;;;;;;;17843:1940;;;;:::o;14142:103::-;7024:12;:10;:12::i;:::-;7014:6;;-1:-1:-1;;;;;7014:6:0;;;:22;;;7006:67;;;;;-1:-1:-1;;;7006:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7006:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14211:19:0::1;;::::0;;;:9:::1;:19;::::0;;;;:26;;-1:-1:-1;;14211:26:0::1;14233:4;14211:26;::::0;;14142:103::o;17534:301::-;8977:9;:23;8987:12;:10;:12::i;:::-;-1:-1:-1;;;;;8977:23:0;;;;;;;;;;;;-1:-1:-1;8977:23:0;;;;8969:77;;;;-1:-1:-1;;;8969:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17668:8:::1;:15;17651:6;:13;:32;17643:74;;;::::0;;-1:-1:-1;;;17643:74:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;17733:6;17728:100;17749:6;:13;17745:1;:17;17728:100;;;17784:32;17793:6;17800:1;17793:9;;;;;;;;;;;;;;17804:8;17813:1;17804:11;;;;;;;;;;;;;;17784:8;:32::i;:::-;17764:3;;17728:100;;;;17534:301:::0;;:::o;14416:592::-;14484:3;;-1:-1:-1;;;;;14484:3:0;14470:10;:17;14462:72;;;;-1:-1:-1;;;14462:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14568:14;;14553:12;;:29;14545:91;;;;-1:-1:-1;;;14545:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14647:14;14664:48;14700:11;;14664:31;14681:13;;14664:12;:16;;:31;;;;:::i;:48::-;14647:65;;14723:15;14741:24;14752:12;;14741:6;:10;;:24;;;;:::i;:::-;14723:42;;14789:14;;14780:6;:23;14776:98;;;14849:12;;14830:14;;:32;;:18;:32::i;:::-;14820:42;;14776:98;14894:3;;14884:65;;;;;;;;;;;;;;;-1:-1:-1;;;;;14894:3:0;;14899:7;;14884:65;;;;;:9;:65::i;:::-;14975:12;;:25;;14992:7;14975:16;:25::i;:::-;14960:12;:40;-1:-1:-1;;14416:592:0:o;8494:31::-;;;;:::o;8659:23::-;;;-1:-1:-1;;;;;8659:23:0;;:::o;7099:148::-;7024:12;:10;:12::i;:::-;7014:6;;-1:-1:-1;;;;;7014:6:0;;;:22;;;7006:67;;;;;-1:-1:-1;;;7006:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7006:67:0;;;;;;;;;;;;;;;7190:6:::1;::::0;7169:40:::1;::::0;7206:1:::1;::::0;-1:-1:-1;;;;;7190:6:0::1;::::0;7169:40:::1;::::0;7206:1;;7169:40:::1;7220:6;:19:::0;;-1:-1:-1;;;;;;7220:19:0::1;::::0;;7099:148::o;20283:451::-;20378:3;;-1:-1:-1;;;;;20378:3:0;20364:10;:17;20356:57;;;;;-1:-1:-1;;;20356:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20438:3;;-1:-1:-1;;;;;20432:9:0;;;20438:3;;20432:9;;20424:50;;;;;-1:-1:-1;;;20424:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20485:15;20503:19;:17;:19::i;:::-;20485:37;;20551:7;20541:6;:17;;20533:62;;;;;-1:-1:-1;;;20533:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20606:60;20616:2;20620:6;20606:60;;;;;;;;;;;;;;;;;:9;:60::i;:::-;20697:17;;:29;;20719:6;20697:21;:29::i;:::-;20677:17;:49;-1:-1:-1;;;20283:451:0:o;15040:235::-;8977:9;:23;8987:12;:10;:12::i;:::-;-1:-1:-1;;;;;8977:23:0;;;;;;;;;;;;-1:-1:-1;8977:23:0;;;;8969:77;;;;-1:-1:-1;;;8969:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15151:15:0;::::1;15127:21;15151:15:::0;;;:8:::1;:15;::::0;;;;15195;;:28:::1;::::0;15215:7;15195:19:::1;:28::i;:::-;15177:46:::0;;15239:28:::1;::::0;;-1:-1:-1;;;;;15239:28:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;9057:1;15040:235:::0;;:::o;6889:79::-;6954:6;;-1:-1:-1;;;;;6954:6:0;6889:79;:::o;7791:18::-;;;-1:-1:-1;;;;;7791:18:0;;:::o;7851:27::-;;;;:::o;20742:135::-;8977:9;:23;8987:12;:10;:12::i;:::-;-1:-1:-1;;;;;8977:23:0;;;;;;;;;;;;-1:-1:-1;8977:23:0;;;;8969:77;;;;-1:-1:-1;;;8969:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20818:8:::1;::::0;20808:61:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;20818:8:0::1;::::0;20828:6;;20808:9:::1;:61::i;:::-;20742:135:::0;:::o;7918:29::-;;;;:::o;7816:28::-;;;;:::o;8415:27::-;;;;:::o;8850:32::-;;;-1:-1:-1;;;;;8850:32:0;;:::o;10225:538::-;10288:7;10307:20;;:::i;:::-;-1:-1:-1;;;;;10330:14:0;;;;;;:8;:14;;;;;;;;10307:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10330:14;;10307:37;;;;;;;;10330:14;10307:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10307:37:0;;-1:-1:-1;;10372:15:0;;10402:13;;;;10307:37;;-1:-1:-1;10372:15:0;10398:334;;;10449:12;;;;10476:245;10517:39;10528:4;:12;;;10541:6;10528:20;;;;;;;;;;;;;;:27;;;10517:6;:10;;:39;;;;:::i;:::-;10602:8;;10508:48;;-1:-1:-1;10584:27:0;;:13;:6;10595:1;10584:10;:13::i;:27::-;10575:36;;10644:4;:12;;;10634:6;:22;10630:76;;;10681:5;;10630:76;10476:245;;;10398:334;;10749:6;10225:538;-1:-1:-1;;;10225:538:0:o;8889:41::-;;;;;;;;;;;;;;;:::o;14277:107::-;7024:12;:10;:12::i;:::-;7014:6;;-1:-1:-1;;;;;7014:6:0;;;:22;;;7006:67;;;;;-1:-1:-1;;;7006:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7006:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14349:19:0::1;14371:5;14349:19:::0;;;:9:::1;:19;::::0;;;;:27;;-1:-1:-1;;14349:27:0::1;::::0;;14277:107::o;10808:632::-;10873:7;10892:16;10911:28;10930:8;;10911:14;:12;:14::i;:::-;:18;;:28::i;:::-;10892:47;;10950:20;;:::i;:::-;-1:-1:-1;;;;;10973:14:0;;;;;;:8;:14;;;;;;;;10950:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10973:14;;10950:37;;;;;;;;10973:14;10950:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10950:37:0;;-1:-1:-1;;11015:15:0;;11045:13;;;;10950:37;;-1:-1:-1;11015:15:0;11041:368;;;11092:12;;;;11119:279;11156:8;11126:4;:12;;;11139:6;11126:20;;;;;;;;;;;;;;:26;;;:38;11119:279;;11194:39;11205:4;:12;;;11218:6;11205:20;;;;;;;11194:39;11279:8;;11185:48;;-1:-1:-1;11261:27:0;;:13;:6;11272:1;11261:10;:13::i;:27::-;11252:36;;11321:4;:12;;;11311:6;:22;11307:76;;;11358:5;;11307:76;11119:279;;;11041:368;;11426:6;10808:632;-1:-1:-1;;;;10808:632:0:o;7253:244::-;7024:12;:10;:12::i;:::-;7014:6;;-1:-1:-1;;;;;7014:6:0;;;:22;;;7006:67;;;;;-1:-1:-1;;;7006:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7006:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;7342:22:0;::::1;7334:73;;;;-1:-1:-1::0;;;7334:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7444:6;::::0;7423:38:::1;::::0;-1:-1:-1;;;;;7423:38:0;;::::1;::::0;7444:6:::1;::::0;7423:38:::1;::::0;7444:6:::1;::::0;7423:38:::1;7472:6;:17:::0;;-1:-1:-1;;;;;;7472:17:0::1;-1:-1:-1::0;;;;;7472:17:0;;;::::1;::::0;;;::::1;::::0;;7253:244::o;15301:2200::-;8977:9;:23;8987:12;:10;:12::i;:::-;-1:-1:-1;;;;;8977:23:0;;;;;;;;;;;;-1:-1:-1;8977:23:0;;;;8969:77;;;;-1:-1:-1;;;8969:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15382:15:::1;15400:14;:12;:14::i;:::-;-1:-1:-1::0;;;;;15471:15:0;::::1;15447:21;15471:15:::0;;;:8:::1;:15;::::0;;;;15513:12:::1;::::0;::::1;:19:::0;15382:32;;-1:-1:-1;15471:15:0;15509:1945:::1;;15572:85;::::0;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;15554:12:::1;::::0;::::1;:104:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;15554:104:0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;::::1;::::0;;;;15673:12;;::::1;:16:::0;;;;15704:12;;::::1;:16:::0;;;15735:13:::1;::::0;::::1;:20:::0;;-1:-1:-1;;15735:20:0::1;::::0;;::::1;::::0;;15509:1945:::1;;;15834:13;::::0;::::1;::::0;::::1;;15830:1613;;;15868:11;15902:4;:12;;;15918:1;15902:17;15898:169;;;-1:-1:-1::0;15950:12:0::1;::::0;::::1;:19:::0;-1:-1:-1;;15950:23:0;15898:169:::1;;;16028:12;::::0;::::1;::::0;:19:::1;::::0;16045:1:::1;16028:16;:19::i;:::-;16022:25;;15898:169;16116:7;16089:4;:12;;16102:3;16089:17;;;;;;;;;;;;;;;;;;:23;;;:34;16085:802;;16175:37;16204:7;16175:4;:12;;16188:3;16175:17;;;;;;;;;;;;;;;;;;:24;;;:28;;:37;;;;:::i;:::-;16148:4;:12;;16161:3;16148:17;;;;;;;;;;;;;;;;;;:24;;:64;;;;16085:802;;;16287:8;::::0;16265:12:::1;::::0;::::1;:19:::0;:30:::1;16261:536;;;16342:121;::::0;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;16324:12:::1;::::0;::::1;:140:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;16324:140:0;;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;16261:536:::1;;;16541:4;:12;;;16525:4;:12;;;:28;16521:114;;;16586:21;16593:4;16599:7;16586:6;:21::i;:::-;16696:7;16661:4;:12;;16674:4;:12;;;16661:26;;;;;;;;;;;;;;;;;;:32;;:42;;;;16766:7;16730:4;:12;;16743:4;:12;;;16730:26;;;;;;;;;;;;;;;;;;:33;;:43;;;;16261:536;16834:33;16858:8;;16834:19;16851:1;16834:4;:12;;;:16;;:19;;;;:::i;:33::-;16819:12;::::0;::::1;:48:::0;16085:802:::1;15830:1613;;;;16984:8;::::0;16962:12:::1;::::0;::::1;:19:::0;:30:::1;16958:364;;;17035:109;::::0;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;17017:12:::1;::::0;::::1;:128:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;17017:128:0;;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;16958:364:::1;;;17229:7;17194:4;:12;;17207:4;:12;;;17194:26;;;;;;;;;;;;;;;;;;:32;;:42;;;;17295:7;17259:4;:12;;17272:4;:12;;;17259:26;;;;;;;;;;;;;;;;;;:33;;:43;;;;16958:364;17355:33;17379:8;;17355:19;17372:1;17355:4;:12;;;:16;;:19;;;;:::i;:33::-;17340:12;::::0;::::1;:48:::0;17407:13:::1;::::0;::::1;:20:::0;;-1:-1:-1;;17407:20:0::1;17423:4;17407:20;::::0;;15830:1613:::1;17469:24;::::0;;-1:-1:-1;;;;;17469:24:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;9057:1;;15301:2200:::0;;:::o;11477:1030::-;11540:7;11559:15;11577:14;:12;:14::i;:::-;11559:32;;11602:16;11621:21;11633:8;;11621:7;:11;;:21;;;;:::i;:::-;11602:40;;11653:20;;:::i;:::-;-1:-1:-1;;;;;11676:14:0;;;;;;:8;:14;;;;;;;;11653:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11676:14;;11653:37;;;;;;;;11676:14;11653:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11653:37:0;;-1:-1:-1;;11718:15:0;;11748:13;;;;11653:37;;-1:-1:-1;11718:15:0;11744:732;;;11792:8;;11778:11;;11792:15;;11805:1;11792:12;:15::i;:::-;11839:12;;;;11778:29;;-1:-1:-1;11866:599:0;11931:8;11902:4;:12;;;11915:6;11902:20;;;;;;;;;;;;;;:26;;;:37;11898:403;;;11964:9;11976:65;12037:3;11976:56;12027:4;11976:46;12020:1;11976:39;11988:4;:12;;;12001:6;11988:20;;;;;;;;;;;;;;:26;;;11976:7;:11;;:39;;;;:::i;:65::-;11964:77;;12064:17;12084:47;12126:4;12084:37;12116:4;12084;:12;;;12097:6;12084:20;;;;;;;;;;;;;;:27;;;:31;;:37;;;;:::i;:47::-;12064:67;-1:-1:-1;12163:21:0;:6;12064:67;12163:10;:21::i;:::-;12154:30;;11898:403;;;;;12242:39;12253:4;:12;;;12266:6;12253:20;;;;;;;;;;;;;;:27;;;12242:6;:10;;:39;;;;:::i;:::-;12233:48;;11898:403;12346:8;;12328:27;;:13;:6;12339:1;12328:10;:13::i;:27::-;12319:36;;12388:4;:12;;;12378:6;:22;12374:76;;;12425:5;;12374:76;11866:599;;;11744:732;;;12493:6;11477:1030;-1:-1:-1;;;;;11477:1030:0:o;1293:246::-;1351:7;1375:6;1371:47;;-1:-1:-1;1405:1:0;1398:8;;1371:47;1440:5;;;1444:1;1440;:5;:1;1464:5;;;;;:10;1456:56;;;;-1:-1:-1;;;1456:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1530:1;-1:-1:-1;1293:246:0;;;;;:::o;1545:132::-;1603:7;1630:39;1634:1;1637;1630:39;;;;;;;;;;;;;;;;;:3;:39::i;955:136::-;1013:7;1040:43;1044:1;1047;1040:43;;;;;;;;;;;;;;;;;:3;:43::i;20885:97::-;20932:7;20959:15;20967:6;;20959:3;:7;;:15;;;;:::i;:::-;20952:22;;20885:97;:::o;770:179::-;828:7;860:5;;;884:6;;;;876:46;;;;;-1:-1:-1;;;876:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1878:130;1936:7;1963:37;1967:1;1970;1963:37;;;;;;;;;;;;;;;;;:3;:37::i;21318:510::-;21396:16;21415:22;21428:8;;21415;:12;;:22;;;;:::i;:::-;21463:13;;;;21396:41;;-1:-1:-1;21487:303:0;21494:14;;;;;;:55;;;;;21541:8;21512:5;:13;;21526:4;21512:19;;;;;;;;;;;;;;;;;;:25;;;:37;;21494:55;21487:303;;;21585:48;21606:5;:13;;21620:4;21606:19;;;;;;;;;;;;;;;;:26;:19;;;;;:26;;21585:16;;;:20;:48::i;:::-;21566:67;;21671:8;;21655:25;;:11;:4;21664:1;21655:8;:11::i;:25::-;21648:32;;21707:5;:13;;;21699:4;:21;21695:84;;;21741:14;;;:22;;-1:-1:-1;;21741:22:0;;;21695:84;21487:303;;;21800:13;;;;:20;;;;-1:-1:-1;;21318:510:0:o;20990:320::-;21082:10;;21078:225;;21160:13;;;;;;;;;-1:-1:-1;;;;;21160:13:0;-1:-1:-1;;;;;21160:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21160:25:0;21128:13;;:27;;;-1:-1:-1;;;21128:27:0;;;;21117:39;;-1:-1:-1;;;;;21128:13:0;;:25;;:27;;;;;21160:25;;21128:27;;;;;;;:13;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21128:27:0;21117:6;;:10;:39::i;:::-;:68;;21109:120;;;;-1:-1:-1;;;21109:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21252:13;;:33;;;-1:-1:-1;;;21252:33:0;;-1:-1:-1;;;;;21252:33:0;;;;;;;;;;;;;;;:13;;;;;:19;;:33;;;;;;;;;;;;;;:13;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21252:33:0;21287:3;;21244:47;;;;-1:-1:-1;;;21244:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20990:320;;;:::o;6216:106::-;6304:10;6216:106;:::o;1683:189::-;1769:7;1804:12;1797:5;1789:28;;;;-1:-1:-1;;;1789:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1828:9;1844:1;1840;:5;;;;;;;1683:189;-1:-1:-1;;;;;1683:189:0:o;1097:190::-;1183:7;1219:12;1211:6;;;;1203:29;;;;-1:-1:-1;;;1203:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1255:5:0;;;1097:190::o;2014:166::-;2100:7;2136:12;2128:6;2120:29;;;;-1:-1:-1;;;2120:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2171:1;2167;:5;;;;;;;2014:166;-1:-1:-1;;;;2014:166:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://a51897cf8f72196b48d14c35bd2f9f73775695e1324ed39557caf4e26551ce23
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.