Polygon Sponsored slots available. Book your slot here!
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x2e2257b78b9b75be6349a0367b02505eb5c34445e705c9c8095536422f4f551a | 21243157 | 454 days 6 hrs ago | 0xc83c45d7d2c5da637551d60f18d4d754d5272e06 | 0x8f0ac7b91c6362b59b8307786dea0c23f454ec8f | 17,196.077716176081108645 MATIC |
[ Download CSV Export ]
Contract Name:
IdoMaster
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-10-12 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.3; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, 'SafeMath: addition overflow'); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, 'SafeMath: subtraction overflow'); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, 'SafeMath: multiplication overflow'); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, 'SafeMath: division by zero'); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, 'SafeMath: modulo by zero'); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address _owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, 'Address: insufficient balance'); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(''); require(success, 'Address: unable to send value, recipient may have reverted'); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, 'Address: low-level call failed'); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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'); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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'); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), 'SafeERC20: approve from non-zero to non-zero allowance' ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, 'SafeERC20: decreased allowance below zero' ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed'); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed'); } } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor() {} function _msgSender() internal view returns (address payable) { return payable(msg.sender); } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address payable) { return payable(_owner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), 'Ownable: caller is not the owner'); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface PriceFeedRouter { function WETH() external pure returns (address); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); } contract IdoMaster is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; struct UserInfo { uint256 tokenAmount; uint256 contributed; uint256 referralBonus; bool whitelisted; bool participated; address referrer; } struct IdoInfo { bool hasWhitelist; bool claimStarted; bool refundInitiated; uint256 referralPercent; uint256 supply; // total token for sale uint256 min; // min contribution uint256 max; // maximum contribution uint256 rate; // tokens per bnb uint256 allocated; // total token sold uint256 weiRaised; uint256 startBlock; uint256 endBlock; } // Info of each ido. IERC20[] public idos; mapping (IERC20 => IdoInfo) public idoInfo; // Info of each user that participates in sale. mapping (IERC20 => mapping (address => UserInfo)) public userInfo; event Deposit(address indexed user, IERC20 indexed token, uint256 amount); event Claim(address indexed user, IERC20 indexed token, uint256 amount); event Refund(address indexed user, IERC20 indexed token, uint256 amount); event Withdraw(address indexed owner, IERC20 indexed token, uint256 amount); constructor() {} receive() external payable { revert(); } function idoLength() external view returns (uint256) { return idos.length; } function add(IERC20 _address, uint256 _supply, uint256 _rate, uint256 _min, uint256 _max, uint256 _startBlock, uint256 _endBlock, uint256 _referralPercent, bool _hasWhitelist) public onlyOwner { require(!inIdo(_address), "Token already in Ido"); idoInfo[_address] = IdoInfo({ hasWhitelist: _hasWhitelist, referralPercent: _referralPercent, supply: _supply, rate: _rate, min: _min, max: _max, startBlock: _startBlock, endBlock: _endBlock, weiRaised: 0, allocated: 0, claimStarted: false, refundInitiated: false }); idos.push(_address); } function inIdo(IERC20 _token) public view returns(bool status) { for (uint i = 0; i < idos.length; i++) { if (idos[i] == _token) { status = true; break; } } } function isActive(IERC20 _token) public view returns(bool status) { IdoInfo memory ido = idoInfo[_token]; if (block.number >= ido.startBlock && block.number < ido.endBlock) { status = true; } } function setStartBlock(IERC20 _token, uint256 _startBlock) external onlyOwner { idoInfo[_token].startBlock = _startBlock; } function setEndBlock(IERC20 _token, uint256 _endBlock) external onlyOwner { idoInfo[_token].endBlock = _endBlock; } function setRate(IERC20 _token, uint256 _rate) external onlyOwner { idoInfo[_token].rate = _rate; } function setMin(IERC20 _token, uint256 _min) external onlyOwner { idoInfo[_token].min = _min; } function setMax(IERC20 _token, uint256 _max) external onlyOwner { idoInfo[_token].max = _max; } function setSupply(IERC20 _token, uint256 _supply) external onlyOwner { idoInfo[_token].supply = _supply; } function setReferralPercent(IERC20 _token, uint256 _referralPercent) external onlyOwner { idoInfo[_token].referralPercent = _referralPercent; } function setWhitelist(IERC20 _token, bool _hasWhitelist) external onlyOwner { idoInfo[_token].hasWhitelist = _hasWhitelist; } function startRefund(IERC20 _token) external onlyOwner { require(!idoInfo[_token].claimStarted, "Claim started!"); idoInfo[_token].refundInitiated = true; } function stopRefund(IERC20 _token) external onlyOwner { idoInfo[_token].refundInitiated = false; } function startClaim(IERC20 _token) external onlyOwner { require(!idoInfo[_token].refundInitiated, "Refunding!"); idoInfo[_token].claimStarted = true; } function stopClaim(IERC20 _token) external onlyOwner { idoInfo[_token].claimStarted = false; } function takeWei(IERC20 _token, uint256 _amount) external onlyOwner { IdoInfo storage ido = idoInfo[_token]; require(ido.claimStarted, "Claim not started"); require(!ido.refundInitiated, "Refunding"); require(_amount <= ido.weiRaised, "Bad amount"); emit Withdraw(owner(), _token, _amount); ido.weiRaised = ido.weiRaised.sub(_amount); owner().transfer(_amount); } function takeDustWei() external onlyOwner { bool hasPendingIdoFund = false; for (uint i = 0; i < idos.length; i++) { if (idoInfo[idos[i]].weiRaised > 0) { hasPendingIdoFund = true; break; } } require(!hasPendingIdoFund, "Ido funds!"); owner().transfer(address(this).balance); } function withdrawToken(IERC20 _token, uint256 _amount) public onlyOwner { require(_token.balanceOf(address(this)) >= _amount, "Not enough balance"); _token.safeTransfer(owner(), _amount); } function whitelistMe(IERC20 _token) external { require(!isActive(_token), "Active"); userInfo[_token][_msgSender()].whitelisted = true; } function giveReferralBonus(IERC20 _token, address _referrer, uint256 _purchased, uint256 _percent) internal { uint256 bonus = _percent.mul(_purchased).div(100); userInfo[_token][_referrer].referralBonus = userInfo[_token][_referrer].referralBonus.add(bonus); } function deposit(IERC20 _token, address _referrer) public payable { IdoInfo storage ido = idoInfo[_token]; UserInfo storage user = userInfo[_token][_msgSender()]; uint256 amount = msg.value; bool whitelistPassed = ido.hasWhitelist ? user.whitelisted : !ido.hasWhitelist; require(_msgSender() == owner() || whitelistPassed, "Not whitelisted"); require(isActive(_token), "Inactive"); require(!ido.claimStarted, "Claim started"); require(!ido.refundInitiated, "Refunding"); require(amount >= ido.min, "Less than minimum purchase"); require(user.contributed.add(amount) <= ido.max, "Cummulative more than maximum purchase"); uint256 tokenAmount = amount.mul(ido.rate).div(1 ether); require(ido.allocated.add(tokenAmount) <= ido.supply, "Filled"); address referrer = _referrer == _msgSender() ? address(0) : _referrer; user.contributed = user.contributed.add(amount); user.tokenAmount = user.tokenAmount.add(tokenAmount); user.referrer = referrer; user.participated = true; ido.weiRaised = ido.weiRaised.add(amount); ido.allocated = ido.allocated.add(tokenAmount); emit Deposit(_msgSender(), _token, amount); if (referrer != address(0)) giveReferralBonus(_token, referrer, tokenAmount, ido.referralPercent); } function claim(IERC20 _token) external { IdoInfo storage ido = idoInfo[_token]; UserInfo storage user = userInfo[_token][_msgSender()]; require(!ido.refundInitiated, "Refunding"); require(ido.claimStarted, "Claim not started"); uint256 tokenToBeSent = user.tokenAmount; user.contributed = 0; user.tokenAmount = 0; emit Claim(_msgSender(), _token, tokenToBeSent); _token.safeTransfer(_msgSender(), tokenToBeSent); } function claimReferralBonus(IERC20 _token) external { IdoInfo storage ido = idoInfo[_token]; UserInfo storage user = userInfo[_token][_msgSender()]; require(user.participated, "Not a participant"); require(!ido.refundInitiated, "Refunding"); require(ido.claimStarted, "Claim not started"); uint256 tokenToBeSent = user.referralBonus; user.referralBonus = 0; emit Claim(_msgSender(), _token, tokenToBeSent); _token.safeTransfer(_msgSender(), tokenToBeSent); } function refund(IERC20 _token) external { IdoInfo storage ido = idoInfo[_token]; UserInfo storage user = userInfo[_token][_msgSender()]; require(!ido.claimStarted, "Claim started"); require(ido.refundInitiated, "Not refunding"); uint256 weiToBeSent = user.contributed; uint256 tokenAllocated = user.tokenAmount; user.contributed = 0; user.tokenAmount = 0; ido.weiRaised = ido.weiRaised.sub(weiToBeSent); ido.allocated = ido.allocated.sub(tokenAllocated); emit Refund(_msgSender(), _token, weiToBeSent); _msgSender().transfer(weiToBeSent); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Refund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"contract IERC20","name":"_address","type":"address"},{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_endBlock","type":"uint256"},{"internalType":"uint256","name":"_referralPercent","type":"uint256"},{"internalType":"bool","name":"_hasWhitelist","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"claimReferralBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"name":"idoInfo","outputs":[{"internalType":"bool","name":"hasWhitelist","type":"bool"},{"internalType":"bool","name":"claimStarted","type":"bool"},{"internalType":"bool","name":"refundInitiated","type":"bool"},{"internalType":"uint256","name":"referralPercent","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint256","name":"allocated","type":"uint256"},{"internalType":"uint256","name":"weiRaised","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"idoLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idos","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"inIdo","outputs":[{"internalType":"bool","name":"status","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"isActive","outputs":[{"internalType":"bool","name":"status","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_endBlock","type":"uint256"}],"name":"setEndBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_referralPercent","type":"uint256"}],"name":"setReferralPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"name":"setStartBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"bool","name":"_hasWhitelist","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"startClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"startRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"stopClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"stopRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"takeDustWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"takeWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"contributed","type":"uint256"},{"internalType":"uint256","name":"referralBonus","type":"uint256"},{"internalType":"bool","name":"whitelisted","type":"bool"},{"internalType":"bool","name":"participated","type":"bool"},{"internalType":"address","name":"referrer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"whitelistMe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061234d806100616000396000f3fe6080604052600436106101d15760003560e01c80638da5cb5b116100f7578063c8972dc511610095578063edce517611610064578063edce517614610679578063f2fde38b14610699578063f9609f08146106b9578063fa89401a146106cc576101db565b8063c8972dc514610539578063c9991da014610559578063cb51505314610639578063cde3802914610659576101db565b8063a2853d2b116100d1578063a2853d2b146104bb578063b4d8cedc146104d9578063b7d1d98e146104f9578063c2bb8b1514610519576101db565b80638da5cb5b1461045d5780639e281a981461047b5780639f8a13d71461049b576101db565b80635bcce3521161016f578063715018a61161013e578063715018a6146103c057806379bf2733146103d55780637e08e9bf146104055780638a5ceabb14610425576101db565b80635bcce352146103405780636751e353146103605780636a80838d1461038057806370e0a81a146103a0576101db565b80632bdb7097116101ab5780632bdb7097146102cb57806346976f46146102eb578063485258871461030057806353d6fd5914610320576101db565b80630a38ff7d146101e05780630f208beb146102025780631e83409a146102ab576101db565b366101db57600080fd5b600080fd5b3480156101ec57600080fd5b506102006101fb366004611fe3565b6106ec565b005b34801561020e57600080fd5b5061026c61021d36600461201b565b6003602081815260009384526040808520909152918352912080546001820154600283015492909301549092919060ff808216916101008104909116906201000090046001600160a01b031686565b6040805196875260208701959095529385019290925215156060840152151560808301526001600160a01b031660a082015260c0015b60405180910390f35b3480156102b757600080fd5b506102006102c6366004611fe3565b610761565b3480156102d757600080fd5b506102006102e6366004612080565b61084f565b3480156102f757600080fd5b50610200610898565b34801561030c57600080fd5b5061020061031b366004611fe3565b6109ba565b34801561032c57600080fd5b5061020061033b366004612053565b610a9a565b34801561034c57600080fd5b5061020061035b366004612080565b610aef565b34801561036c57600080fd5b5061020061037b366004612080565b610c6b565b34801561038c57600080fd5b5061020061039b3660046120ab565b610cb4565b3480156103ac57600080fd5b506102006103bb366004612080565b610ec1565b3480156103cc57600080fd5b50610200610f0a565b3480156103e157600080fd5b506103f56103f0366004611fe3565b610f7e565b60405190151581526020016102a2565b34801561041157600080fd5b50610200610420366004611fe3565b610ff3565b34801561043157600080fd5b50610445610440366004612127565b6110a4565b6040516001600160a01b0390911681526020016102a2565b34801561046957600080fd5b506000546001600160a01b0316610445565b34801561048757600080fd5b50610200610496366004612080565b6110ce565b3480156104a757600080fd5b506103f56104b6366004611fe3565b6111da565b3480156104c757600080fd5b506001546040519081526020016102a2565b3480156104e557600080fd5b506102006104f4366004612080565b6112ae565b34801561050557600080fd5b50610200610514366004611fe3565b6112f8565b34801561052557600080fd5b50610200610534366004611fe3565b611344565b34801561054557600080fd5b50610200610554366004612080565b6113f0565b34801561056557600080fd5b506105d8610574366004611fe3565b6002602081905260009182526040909120805460018201549282015460038301546004840154600585015460068601546007870154600888015460099098015460ff8089169a6101008a0482169a62010000909a049091169890979695949392918c565b604080519c15158d529a151560208d0152981515998b019990995260608a0196909652608089019490945260a088019290925260c087015260e0860152610100850152610120840152610140830191909152610160820152610180016102a2565b34801561064557600080fd5b50610200610654366004612080565b611439565b34801561066557600080fd5b50610200610674366004612080565b611482565b34801561068557600080fd5b50610200610694366004611fe3565b6114cb565b3480156106a557600080fd5b506102006106b4366004611fe3565b611518565b6102006106c736600461201b565b61154e565b3480156106d857600080fd5b506102006106e7366004611fe3565b6118fd565b6106f5816111da565b156107305760405162461bcd60e51b815260206004820152600660248201526541637469766560d01b60448201526064015b60405180910390fd5b6001600160a01b0316600090815260036020818152604080842033855290915290912001805460ff19166001179055565b6001600160a01b038116600090815260026020908152604080832060038352818420338552909252909120815462010000900460ff16156107b45760405162461bcd60e51b8152600401610727906121d1565b8154610100900460ff166107da5760405162461bcd60e51b8152600401610727906121a6565b805460006001830181905582556001600160a01b038416335b6001600160a01b03167f70eb43c4a8ae8c40502dcf22436c509c28d6ff421cf07c491be56984bd9870688360405161082d91815260200190565b60405180910390a36108496001600160a01b0385163383611a67565b50505050565b6000546001600160a01b031633146108795760405162461bcd60e51b8152600401610727906121f4565b6001600160a01b03909116600090815260026020526040902060050155565b6000546001600160a01b031633146108c25760405162461bcd60e51b8152600401610727906121f4565b6000805b60015481101561094057600060026000600184815481106108f757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902060070154111561092e5760019150610940565b80610938816122c3565b9150506108c6565b50801561097c5760405162461bcd60e51b815260206004820152600a60248201526949646f2066756e64732160b01b6044820152606401610727565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156109b6573d6000803e3d6000fd5b5050565b6001600160a01b03811660009081526002602090815260408083206003808452828520338652909352922090810154610100900460ff16610a315760405162461bcd60e51b8152602060048201526011602482015270139bdd0818481c185c9d1a58da5c185b9d607a1b6044820152606401610727565b815462010000900460ff1615610a595760405162461bcd60e51b8152600401610727906121d1565b8154610100900460ff16610a7f5760405162461bcd60e51b8152600401610727906121a6565b60028101805460009091556001600160a01b038416336107f3565b6000546001600160a01b03163314610ac45760405162461bcd60e51b8152600401610727906121f4565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610b195760405162461bcd60e51b8152600401610727906121f4565b6001600160a01b03821660009081526002602052604090208054610100900460ff16610b575760405162461bcd60e51b8152600401610727906121a6565b805462010000900460ff1615610b7f5760405162461bcd60e51b8152600401610727906121d1565b8060070154821115610bc05760405162461bcd60e51b815260206004820152600a60248201526910985908185b5bdd5b9d60b21b6044820152606401610727565b826001600160a01b0316610bdc6000546001600160a01b031690565b6001600160a01b03167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c1691815260200190565b60405180910390a36007810154610c2d9083611abe565b6007820155600080546040516001600160a01b039091169184156108fc02918591818181858888f19350505050158015610849573d6000803e3d6000fd5b6000546001600160a01b03163314610c955760405162461bcd60e51b8152600401610727906121f4565b6001600160a01b03909116600090815260026020526040902060040155565b6000546001600160a01b03163314610cde5760405162461bcd60e51b8152600401610727906121f4565b610ce789610f7e565b15610d2b5760405162461bcd60e51b8152602060048201526014602482015273546f6b656e20616c726561647920696e2049646f60601b6044820152606401610727565b6040518061018001604052808215158152602001600015158152602001600015158152602001838152602001898152602001878152602001868152602001888152602001600081526020016000815260200185815260200184815250600260008b6001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff021916908315150217905550606082015181600101556080820151816002015560a0820151816003015560c0820151816004015560e0820151816005015561010082015181600601556101208201518160070155610140820151816008015561016082015181600901559050506001899080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050505050505050565b6000546001600160a01b03163314610eeb5760405162461bcd60e51b8152600401610727906121f4565b6001600160a01b03909116600090815260026020526040902060080155565b6000546001600160a01b03163314610f345760405162461bcd60e51b8152600401610727906121f4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000805b600154811015610fed57826001600160a01b031660018281548110610fb757634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610fdb5760019150610fed565b80610fe5816122c3565b915050610f82565b50919050565b6000546001600160a01b0316331461101d5760405162461bcd60e51b8152600401610727906121f4565b6001600160a01b038116600090815260026020526040902054610100900460ff161561107c5760405162461bcd60e51b815260206004820152600e60248201526d436c61696d20737461727465642160901b6044820152606401610727565b6001600160a01b03166000908152600260205260409020805462ff0000191662010000179055565b600181815481106110b457600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146110f85760405162461bcd60e51b8152600401610727906121f4565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a082319060240160206040518083038186803b15801561113957600080fd5b505afa15801561114d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611171919061213f565b10156111b45760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b6044820152606401610727565b6109b66111c96000546001600160a01b031690565b6001600160a01b0384169083611a67565b6001600160a01b0381166000908152600260208181526040808420815161018081018352815460ff808216151583526101008083048216151596840196909652620100009091041615159281019290925260018101546060830152928301546080820152600383015460a0820152600483015460c0820152600583015460e08201526006830154918101919091526007820154610120820152600882015461014082018190526009909201546101608201529043108015906112a0575080610160015143105b15610fed5750600192915050565b6000546001600160a01b031633146112d85760405162461bcd60e51b8152600401610727906121f4565b6001600160a01b0390911660009081526002602081905260409091200155565b6000546001600160a01b031633146113225760405162461bcd60e51b8152600401610727906121f4565b6001600160a01b03166000908152600260205260409020805461ff0019169055565b6000546001600160a01b0316331461136e5760405162461bcd60e51b8152600401610727906121f4565b6001600160a01b03811660009081526002602052604090205462010000900460ff16156113ca5760405162461bcd60e51b815260206004820152600a602482015269526566756e64696e672160b01b6044820152606401610727565b6001600160a01b03166000908152600260205260409020805461ff001916610100179055565b6000546001600160a01b0316331461141a5760405162461bcd60e51b8152600401610727906121f4565b6001600160a01b03909116600090815260026020526040902060010155565b6000546001600160a01b031633146114635760405162461bcd60e51b8152600401610727906121f4565b6001600160a01b03909116600090815260026020526040902060030155565b6000546001600160a01b031633146114ac5760405162461bcd60e51b8152600401610727906121f4565b6001600160a01b03909116600090815260026020526040902060090155565b6000546001600160a01b031633146114f55760405162461bcd60e51b8152600401610727906121f4565b6001600160a01b03166000908152600260205260409020805462ff000019169055565b6000546001600160a01b031633146115425760405162461bcd60e51b8152600401610727906121f4565b61154b81611b09565b50565b6001600160a01b038216600090815260026020908152604080832060038352818420338552909252822081549192909134919060ff1661159357835460ff161561159c565b600383015460ff165b90506115b06000546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806115cc5750805b61160a5760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610727565b611613866111da565b61164a5760405162461bcd60e51b8152602060048201526008602482015267496e61637469766560c01b6044820152606401610727565b8354610100900460ff16156116915760405162461bcd60e51b815260206004820152600d60248201526c10db185a5b481cdd185c9d1959609a1b6044820152606401610727565b835462010000900460ff16156116b95760405162461bcd60e51b8152600401610727906121d1565b836003015482101561170d5760405162461bcd60e51b815260206004820152601a60248201527f4c657373207468616e206d696e696d756d2070757263686173650000000000006044820152606401610727565b600484015460018401546117219084611bc9565b111561177e5760405162461bcd60e51b815260206004820152602660248201527f43756d6d756c6174697665206d6f7265207468616e206d6178696d756d20707560448201526572636861736560d01b6064820152608401610727565b60006117a9670de0b6b3a76400006117a3876005015486611c2890919063ffffffff16565b90611ca7565b905084600201546117c7828760060154611bc990919063ffffffff16565b11156117fe5760405162461bcd60e51b8152602060048201526006602482015265119a5b1b195960d21b6044820152606401610727565b60006001600160a01b03871633146118165786611819565b60005b600186015490915061182b9085611bc9565b6001860155845461183c9083611bc9565b855560038501805461ff00196001600160a01b038416620100000216610100600160b01b031990911617610100179055600786015461187b9085611bc9565b6007870155600686015461188f9083611bc9565b60068701556040518481526001600160a01b0389169033907f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f629060200160405180910390a36001600160a01b038116156118f3576118f38882848960010154611ce9565b5050505050505050565b6001600160a01b0381166000908152600260209081526040808320600383528184203385529092529091208154610100900460ff161561196f5760405162461bcd60e51b815260206004820152600d60248201526c10db185a5b481cdd185c9d1959609a1b6044820152606401610727565b815462010000900460ff166119b65760405162461bcd60e51b815260206004820152600d60248201526c4e6f7420726566756e64696e6760981b6044820152606401610727565b600181018054825460009283905591835560078401549091906119d99083611abe565b600785015560068401546119ed9082611abe565b60068501556040518281526001600160a01b0386169033907ff40cc8c1a1d17359049ba500cfc894596a692cffc9d03943cd92ec2e159cf6ae9060200160405180910390a3604051339083156108fc029084906000818181858888f19350505050158015611a5f573d6000803e3d6000fd5b505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611ab9908490611d66565b505050565b6000611b0083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e38565b90505b92915050565b6001600160a01b038116611b6e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610727565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611bd68385612229565b905083811015611b005760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610727565b600082611c3757506000611b03565b6000611c438385612261565b905082611c508583612241565b14611b005760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610727565b6000611b0083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e72565b6000611cfa60646117a38486611c28565b6001600160a01b03808716600090815260036020908152604080832093891683529290522060020154909150611d309082611bc9565b6001600160a01b039586166000908152600360209081526040808320979098168252959095529490932060020193909355505050565b6000611dbb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ea09092919063ffffffff16565b805190915015611ab95780806020019051810190611dd99190611fff565b611ab95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610727565b60008184841115611e5c5760405162461bcd60e51b81526004016107279190612173565b506000611e698486612280565b95945050505050565b60008183611e935760405162461bcd60e51b81526004016107279190612173565b506000611e698486612241565b6060611eaf8484600085611eb7565b949350505050565b6060611ec285611faa565b611f0e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610727565b600080866001600160a01b03168587604051611f2a9190612157565b60006040518083038185875af1925050503d8060008114611f67576040519150601f19603f3d011682016040523d82523d6000602084013e611f6c565b606091505b50915091508115611f80579150611eaf9050565b805115611f905780518082602001fd5b8360405162461bcd60e51b81526004016107279190612173565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611eaf575050151592915050565b600060208284031215611ff4578081fd5b8135611b00816122f4565b600060208284031215612010578081fd5b8151611b0081612309565b6000806040838503121561202d578081fd5b8235612038816122f4565b91506020830135612048816122f4565b809150509250929050565b60008060408385031215612065578182fd5b8235612070816122f4565b9150602083013561204881612309565b60008060408385031215612092578182fd5b823561209d816122f4565b946020939093013593505050565b60008060008060008060008060006101208a8c0312156120c9578485fd5b89356120d4816122f4565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013591506101008a013561211681612309565b809150509295985092959850929598565b600060208284031215612138578081fd5b5035919050565b600060208284031215612150578081fd5b5051919050565b60008251612169818460208701612297565b9190910192915050565b6000602082528251806020840152612192816040850160208701612297565b601f01601f19169190910160400192915050565b60208082526011908201527010db185a5b481b9bdd081cdd185c9d1959607a1b604082015260600190565b602080825260099082015268526566756e64696e6760b81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561223c5761223c6122de565b500190565b60008261225c57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561227b5761227b6122de565b500290565b600082821015612292576122926122de565b500390565b60005b838110156122b257818101518382015260200161229a565b838111156108495750506000910152565b60006000198214156122d7576122d76122de565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461154b57600080fd5b801515811461154b57600080fdfea264697066735822122024482a1eee2dbea552ad12aa929cbadd91158a62fe5725e079f074081aa2d5cf64736f6c63430008030033
Deployed ByteCode Sourcemap
23802:9311:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25187:8;;;23802:9311;;;;29348:160;;;;;;;;;;-1:-1:-1;29348:160:0;;;;;:::i;:::-;;:::i;:::-;;24726:65;;;;;;;;;;-1:-1:-1;24726:65:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24726:65:0;;;;;;;14700:25:1;;;14756:2;14741:18;;14734:34;;;;14784:18;;;14777:34;;;;14854:14;14847:22;14842:2;14827:18;;14820:50;14914:14;14907:22;14901:3;14886:19;;14879:51;-1:-1:-1;;;;;14967:32:1;14987:3;14946:19;;14939:61;14687:3;14672:19;24726:65:0;;;;;;;;31297:522;;;;;;;;;;-1:-1:-1;31297:522:0;;;;;:::i;:::-;;:::i;26835:113::-;;;;;;;;;;-1:-1:-1;26835:113:0;;;;;:::i;:::-;;:::i;28707:409::-;;;;;;;;;;;;;:::i;31831:584::-;;;;;;;;;;-1:-1:-1;31831:584:0;;;;;:::i;:::-;;:::i;27492:139::-;;;;;;;;;;-1:-1:-1;27492:139:0;;;;;:::i;:::-;;:::i;28260:435::-;;;;;;;;;;-1:-1:-1;28260:435:0;;;;;:::i;:::-;;:::i;27073:109::-;;;;;;;;;;-1:-1:-1;27073:109:0;;;;;:::i;:::-;;:::i;25309:737::-;;;;;;;;;;-1:-1:-1;25309:737:0;;;;;:::i;:::-;;:::i;26553:137::-;;;;;;;;;;-1:-1:-1;26553:137:0;;;;;:::i;:::-;;:::i;22853:140::-;;;;;;;;;;;;;:::i;26054:243::-;;;;;;;;;;-1:-1:-1;26054:243:0;;;;;:::i;:::-;;:::i;:::-;;;4426:14:1;;4419:22;4401:41;;4389:2;4374:18;26054:243:0;4356:92:1;27643:179:0;;;;;;;;;;-1:-1:-1;27643:179:0;;;;;:::i;:::-;;:::i;24591:20::-;;;;;;;;;;-1:-1:-1;24591:20:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3714:32:1;;;3696:51;;3684:2;3669:18;24591:20:0;3651:102:1;22194:96:0;;;;;;;;;;-1:-1:-1;22232:15:0;22275:6;-1:-1:-1;;;;;22275:6:0;22194:96;;29128:212;;;;;;;;;;-1:-1:-1;29128:212:0;;;;;:::i;:::-;;:::i;26305:240::-;;;;;;;;;;-1:-1:-1;26305:240:0;;;;;:::i;:::-;;:::i;25211:90::-;;;;;;;;;;-1:-1:-1;25282:4:0;:11;25211:90;;14389:25:1;;;14377:2;14362:18;25211:90:0;14344:76:1;27190:121:0;;;;;;;;;;-1:-1:-1;27190:121:0;;;;;:::i;:::-;;:::i;28144:108::-;;;;;;;;;;-1:-1:-1;28144:108:0;;;;;:::i;:::-;;:::i;27958:174::-;;;;;;;;;;-1:-1:-1;27958:174:0;;;;;:::i;:::-;;:::i;27323:157::-;;;;;;;;;;-1:-1:-1;27323:157:0;;;;;:::i;:::-;;:::i;24618:42::-;;;;;;;;;;-1:-1:-1;24618:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4917:14:1;;4910:22;4892:41;;4976:14;;4969:22;4964:2;4949:18;;4942:50;5035:14;;5028:22;5008:18;;;5001:50;;;;5082:2;5067:18;;5060:34;;;;5125:3;5110:19;;5103:35;;;;5169:3;5154:19;;5147:35;;;;5213:3;5198:19;;5191:35;5257:3;5242:19;;5235:35;5301:3;5286:19;;5279:35;5345:3;5330:19;;5323:35;5389:3;5374:19;;5367:36;;;;5434:3;5419:19;;5412:36;4879:3;4864:19;24618:42:0;4846:608:1;26956:109:0;;;;;;;;;;-1:-1:-1;26956:109:0;;;;;:::i;:::-;;:::i;26698:129::-;;;;;;;;;;-1:-1:-1;26698:129:0;;;;;:::i;:::-;;:::i;27834:112::-;;;;;;;;;;-1:-1:-1;27834:112:0;;;;;:::i;:::-;;:::i;23148:109::-;;;;;;;;;;-1:-1:-1;23148:109:0;;;;;:::i;:::-;;:::i;29815:1474::-;;;;;;:::i;:::-;;:::i;32423:687::-;;;;;;;;;;-1:-1:-1;32423:687:0;;;;;:::i;:::-;;:::i;29348:160::-;29413:16;29422:6;29413:8;:16::i;:::-;29412:17;29404:36;;;;-1:-1:-1;;;29404:36:0;;14111:2:1;29404:36:0;;;14093:21:1;14150:1;14130:18;;;14123:29;-1:-1:-1;;;14168:18:1;;;14161:36;14214:18;;29404:36:0;;;;;;;;;-1:-1:-1;;;;;29451:16:0;;;;;:8;:16;;;;;;;;20935:10;29451:30;;;;;;;;:42;:49;;-1:-1:-1;;29451:49:0;29496:4;29451:49;;;29348:160::o;31297:522::-;-1:-1:-1;;;;;31369:15:0;;31347:19;31369:15;;;:7;:15;;;;;;;;31419:8;:16;;;;;20935:10;31419:30;;;;;;;;31471:19;;;;;;;31470:20;31462:42;;;;-1:-1:-1;;;31462:42:0;;;;;;;:::i;:::-;31523:16;;;;;;;31515:46;;;;-1:-1:-1;;;31515:46:0;;;;;;;:::i;:::-;31596:16;;31572:21;31633:16;;;:20;;;31664;;-1:-1:-1;;;;;31710:42:0;;20935:10;31716:12;-1:-1:-1;;;;;31710:42:0;;31738:13;31710:42;;;;14389:25:1;;14377:2;14362:18;;14344:76;31710:42:0;;;;;;;;31763:48;-1:-1:-1;;;;;31763:19:0;;20935:10;31797:13;31763:19;:48::i;:::-;31297:522;;;;:::o;26835:113::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26912:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;:20:::1;;:28:::0;26835:113::o;28707:409::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;28760:22:::1;28816:6:::0;28811:186:::1;28832:4;:11:::0;28828:15;::::1;28811:186;;;28900:1;28871:7;:16;28879:4;28884:1;28879:7;;;;;;-1:-1:-1::0;;;28879:7:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;28879:7:0::1;28871:16:::0;;;::::1;::::0;;;;;;;;:26:::1;;::::0;:30:::1;28867:119;;;28942:4;28922:24;;28965:5;;28867:119;28845:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28811:186;;;;29026:17;29025:18;29017:41;;;::::0;-1:-1:-1;;;29017:41:0;;8068:2:1;29017:41:0::1;::::0;::::1;8050:21:1::0;8107:2;8087:18;;;8080:30;-1:-1:-1;;;8126:18:1;;;8119:40;8176:18;;29017:41:0::1;8040:160:1::0;29017:41:0::1;22232:15:::0;22275:6;;29069:39:::1;::::0;-1:-1:-1;;;;;22275:6:0;;;;29086:21:::1;29069:39:::0;::::1;;;::::0;29086:21;;29069:39;22232:15;29069:39;29086:21;22275:6;29069:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22493:1;28707:409::o:0;31831:584::-;-1:-1:-1;;;;;31916:15:0;;31894:19;31916:15;;;:7;:15;;;;;;;;31966:8;:16;;;;;;20935:10;31966:30;;;;;;;32025:17;;;;;;;;;32017:47;;;;-1:-1:-1;;;32017:47:0;;6271:2:1;32017:47:0;;;6253:21:1;6310:2;6290:18;;;6283:30;-1:-1:-1;;;6329:18:1;;;6322:47;6386:18;;32017:47:0;6243:167:1;32017:47:0;32084:19;;;;;;;32083:20;32075:42;;;;-1:-1:-1;;;32075:42:0;;;;;;;:::i;:::-;32136:16;;;;;;;32128:46;;;;-1:-1:-1;;;32128:46:0;;;;;;;:::i;:::-;32219:18;;;;;32195:21;32248:22;;;-1:-1:-1;;;;;32296:42:0;;20935:10;32302:12;20847:107;27492:139;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27579:15:0;;;::::1;;::::0;;;:7:::1;:15;::::0;;;;:44;;-1:-1:-1;;27579:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27492:139::o;28260:435::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28361:15:0;::::1;28339:19;28361:15:::0;;;:7:::1;:15;::::0;;;;28397:16;;::::1;::::0;::::1;;;28389:46;;;;-1:-1:-1::0;;;28389:46:0::1;;;;;;;:::i;:::-;28455:19:::0;;;;::::1;;;28454:20;28446:42;;;;-1:-1:-1::0;;;28446:42:0::1;;;;;;;:::i;:::-;28518:3;:13;;;28507:7;:24;;28499:47;;;::::0;-1:-1:-1;;;28499:47:0;;8744:2:1;28499:47:0::1;::::0;::::1;8726:21:1::0;8783:2;8763:18;;;8756:30;-1:-1:-1;;;8802:18:1;;;8795:40;8852:18;;28499:47:0::1;8716:160:1::0;28499:47:0::1;28582:6;-1:-1:-1::0;;;;;28564:34:0::1;28573:7;22232:15:::0;22275:6;-1:-1:-1;;;;;22275:6:0;22194:96;;28573:7:::1;-1:-1:-1::0;;;;;28564:34:0::1;;28590:7;28564:34;;;;14389:25:1::0;;14377:2;14362:18;;14344:76;28564:34:0::1;;;;;;;;28625:13;::::0;::::1;::::0;:26:::1;::::0;28643:7;28625:17:::1;:26::i;:::-;28609:13;::::0;::::1;:42:::0;22232:15;22275:6;;28662:25:::1;::::0;-1:-1:-1;;;;;22275:6:0;;;;28662:25;::::1;;;::::0;28679:7;;28662:25;22232:15;28662:25;28679:7;22275:6;28662:25;::::1;;;;;;;;;;;;;::::0;::::1;;;;27073:109:::0;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27148:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;:19:::1;;:26:::0;27073:109::o;25309:737::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;25522:15:::1;25528:8;25522:5;:15::i;:::-;25521:16;25513:49;;;::::0;-1:-1:-1;;;25513:49:0;;12586:2:1;25513:49:0::1;::::0;::::1;12568:21:1::0;12625:2;12605:18;;;12598:30;-1:-1:-1;;;12644:18:1;;;12637:50;12704:18;;25513:49:0::1;12558:170:1::0;25513:49:0::1;25595:411;;;;;;;;25632:13;25595:411;;;;;;25952:5;25595:411;;;;;;25989:5;25595:411;;;;;;25677:16;25595:411;;;;25716:7;25595:411;;;;25769:4;25595:411;;;;25793:4;25595:411;;;;25744:5;25595:411;;;;25922:1;25595:411;;;;25895:1;25595:411;;;;25824:11;25595:411;;;;25860:9;25595:411;;::::0;25575:7:::1;:17;25583:8;-1:-1:-1::0;;;;;25575:17:0::1;-1:-1:-1::0;;;;;25575:17:0::1;;;;;;;;;;;;:431;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26019:4;26029:8;26019:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26019:19:0::1;;;;;-1:-1:-1::0;;;;;26019:19:0::1;;;;;;25309:737:::0;;;;;;;;;:::o;26553:137::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26642:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;:26:::1;;:40:::0;26553:137::o;22853:140::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;22952:1:::1;22936:6:::0;;22915:40:::1;::::0;-1:-1:-1;;;;;22936:6:0;;::::1;::::0;22915:40:::1;::::0;22952:1;;22915:40:::1;22983:1;22966:19:::0;;-1:-1:-1;;;;;;22966:19:0::1;::::0;;22853:140::o;26054:243::-;26104:11;;26128:162;26149:4;:11;26145:15;;26128:162;;;26199:6;-1:-1:-1;;;;;26188:17:0;:4;26193:1;26188:7;;;;;;-1:-1:-1;;;26188:7:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26188:7:0;:17;26184:95;;;26235:4;26226:13;;26258:5;;26184:95;26162:3;;;;:::i;:::-;;;;26128:162;;;;26054:243;;;:::o;27643:179::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27718:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;:28;::::1;::::0;::::1;;;27717:29;27709:56;;;::::0;-1:-1:-1;;;27709:56:0;;12243:2:1;27709:56:0::1;::::0;::::1;12225:21:1::0;12282:2;12262:18;;;12255:30;-1:-1:-1;;;12301:18:1;;;12294:44;12355:18;;27709:56:0::1;12215:164:1::0;27709:56:0::1;-1:-1:-1::0;;;;;27776:15:0::1;;::::0;;;:7:::1;:15;::::0;;;;:38;;-1:-1:-1;;27776:38:0::1;::::0;::::1;::::0;;27643:179::o;24591:20::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24591:20:0;;-1:-1:-1;24591:20:0;:::o;29128:212::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;29219:31:::1;::::0;-1:-1:-1;;;29219:31:0;;29244:4:::1;29219:31;::::0;::::1;3696:51:1::0;29254:7:0;;-1:-1:-1;;;;;29219:16:0;::::1;::::0;::::1;::::0;3669:18:1;;29219:31:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;29211:73;;;::::0;-1:-1:-1;;;29211:73:0;;9083:2:1;29211:73:0::1;::::0;::::1;9065:21:1::0;9122:2;9102:18;;;9095:30;-1:-1:-1;;;9141:18:1;;;9134:48;9199:18;;29211:73:0::1;9055:168:1::0;29211:73:0::1;29295:37;29315:7;22232:15:::0;22275:6;-1:-1:-1;;;;;22275:6:0;22194:96;;29315:7:::1;-1:-1:-1::0;;;;;29295:19:0;::::1;::::0;29324:7;29295:19:::1;:37::i;26305:240::-:0;-1:-1:-1;;;;;26403:15:0;;26358:11;26403:15;;;:7;:15;;;;;;;;26382:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26435:12;:30;;;;:61;;;26484:3;:12;;;26469;:27;26435:61;26431:107;;;-1:-1:-1;26522:4:0;;26305:240;-1:-1:-1;;26305:240:0:o;27190:121::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27271:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;;;;:22:::1;:32:::0;27190:121::o;28144:108::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28208:15:0::1;28239:5;28208:15:::0;;;:7:::1;:15;::::0;;;;:36;;-1:-1:-1;;28208:36:0::1;::::0;;28144:108::o;27958:174::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28032:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;:31;;;::::1;;;28031:32;28023:55;;;::::0;-1:-1:-1;;;28023:55:0;;9772:2:1;28023:55:0::1;::::0;::::1;9754:21:1::0;9811:2;9791:18;;;9784:30;-1:-1:-1;;;9830:18:1;;;9823:40;9880:18;;28023:55:0::1;9744:160:1::0;28023:55:0::1;-1:-1:-1::0;;;;;28089:15:0::1;;::::0;;;:7:::1;:15;::::0;;;;:35;;-1:-1:-1;;28089:35:0::1;;;::::0;;27958:174::o;27323:157::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27422:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;:31:::1;;:50:::0;27323:157::o;26956:109::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27031:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;:19:::1;;:26:::0;26956:109::o;26698:129::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26783:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;:24:::1;;:36:::0;26698:129::o;27834:112::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27899:15:0::1;27933:5;27899:15:::0;;;:7:::1;:15;::::0;;;;:39;;-1:-1:-1;;27899:39:0::1;::::0;;27834:112::o;23148:109::-;22423:6;;-1:-1:-1;;;;;22423:6:0;20935:10;22423:22;22415:67;;;;-1:-1:-1;;;22415:67:0;;;;;;;:::i;:::-;23221:28:::1;23240:8;23221:18;:28::i;:::-;23148:109:::0;:::o;29815:1474::-;-1:-1:-1;;;;;29914:15:0;;29892:19;29914:15;;;:7;:15;;;;;;;;29964:8;:16;;;;;20935:10;29964:30;;;;;;;30067:16;;29914:15;;29964:30;;30024:9;;29892:19;30067:16;;:55;;30106:16;;;;30105:17;30067:55;;;30086:16;;;;;;30067:55;30044:78;;30167:7;22232:15;22275:6;-1:-1:-1;;;;;22275:6:0;22194:96;;30167:7;-1:-1:-1;;;;;30151:23:0;20935:10;-1:-1:-1;;;;;30151:23:0;;:42;;;;30178:15;30151:42;30143:70;;;;-1:-1:-1;;;30143:70:0;;10445:2:1;30143:70:0;;;10427:21:1;10484:2;10464:18;;;10457:30;-1:-1:-1;;;10503:18:1;;;10496:45;10558:18;;30143:70:0;10417:165:1;30143:70:0;30232:16;30241:6;30232:8;:16::i;:::-;30224:37;;;;-1:-1:-1;;;30224:37:0;;10789:2:1;30224:37:0;;;10771:21:1;10828:1;10808:18;;;10801:29;-1:-1:-1;;;10846:18:1;;;10839:38;10894:18;;30224:37:0;10761:157:1;30224:37:0;30281:16;;;;;;;30280:17;30272:43;;;;-1:-1:-1;;;30272:43:0;;6617:2:1;30272:43:0;;;6599:21:1;6656:2;6636:18;;;6629:30;-1:-1:-1;;;6675:18:1;;;6668:43;6728:18;;30272:43:0;6589:163:1;30272:43:0;30335:19;;;;;;;30334:20;30326:42;;;;-1:-1:-1;;;30326:42:0;;;;;;;:::i;:::-;30397:3;:7;;;30387:6;:17;;30379:56;;;;-1:-1:-1;;;30379:56:0;;11125:2:1;30379:56:0;;;11107:21:1;11164:2;11144:18;;;11137:30;11203:28;11183:18;;;11176:56;11249:18;;30379:56:0;11097:176:1;30379:56:0;30486:7;;;;30454:16;;;;:28;;30475:6;30454:20;:28::i;:::-;:39;;30446:90;;;;-1:-1:-1;;;30446:90:0;;13704:2:1;30446:90:0;;;13686:21:1;13743:2;13723:18;;;13716:30;13782:34;13762:18;;;13755:62;-1:-1:-1;;;13833:18:1;;;13826:36;13879:19;;30446:90:0;13676:228:1;30446:90:0;30549:19;30571:33;30596:7;30571:20;30582:3;:8;;;30571:6;:10;;:20;;;;:::i;:::-;:24;;:33::i;:::-;30549:55;;30659:3;:10;;;30625:30;30643:11;30625:3;:13;;;:17;;:30;;;;:::i;:::-;:44;;30617:63;;;;-1:-1:-1;;;30617:63:0;;10111:2:1;30617:63:0;;;10093:21:1;10150:1;10130:18;;;10123:29;-1:-1:-1;;;10168:18:1;;;10161:36;10214:18;;30617:63:0;10083:155:1;30617:63:0;30701:16;-1:-1:-1;;;;;30720:25:0;;20935:10;30720:25;:50;;30761:9;30720:50;;;30756:1;30720:50;30810:16;;;;30701:69;;-1:-1:-1;30810:28:0;;30831:6;30810:20;:28::i;:::-;30791:16;;;:47;30868:16;;:33;;30889:11;30868:20;:33::i;:::-;30849:52;;30912:13;;;:24;;-1:-1:-1;;;;;;;30912:24:0;;;;30947;-1:-1:-1;;;;;;30947:24:0;;;;30912;30947;;;31008:13;;;;:25;;31026:6;31008:17;:25::i;:::-;30992:13;;;:41;31060:13;;;;:30;;31078:11;31060:17;:30::i;:::-;31044:13;;;:46;31116:37;;14389:25:1;;;-1:-1:-1;;;;;31116:37:0;;;20935:10;;31116:37;;14377:2:1;14362:18;31116:37:0;;;;;;;-1:-1:-1;;;;;31178:22:0;;;31174:97;;31202:69;31220:6;31228:8;31238:11;31251:3;:19;;;31202:17;:69::i;:::-;29815:1474;;;;;;;;:::o;32423:687::-;-1:-1:-1;;;;;32496:15:0;;32474:19;32496:15;;;:7;:15;;;;;;;;32546:8;:16;;;;;20935:10;32546:30;;;;;;;;32598:16;;;;;;;32597:17;32589:43;;;;-1:-1:-1;;;32589:43:0;;6617:2:1;32589:43:0;;;6599:21:1;6656:2;6636:18;;;6629:30;-1:-1:-1;;;6675:18:1;;;6668:43;6728:18;;32589:43:0;6589:163:1;32589:43:0;32651:19;;;;;;;32643:45;;;;-1:-1:-1;;;32643:45:0;;9430:2:1;32643:45:0;;;9412:21:1;9469:2;9449:18;;;9442:30;-1:-1:-1;;;9488:18:1;;;9481:43;9541:18;;32643:45:0;9402:163:1;32643:45:0;32731:16;;;;;32783;;32709:19;32820:20;;;;32851;;;32908:13;;;;32731:16;;32783;32908:30;;32731:16;32908:17;:30::i;:::-;32892:13;;;:46;32965:13;;;;:33;;32983:14;32965:17;:33::i;:::-;32949:13;;;:49;33016:41;;14389:25:1;;;-1:-1:-1;;;;;33016:41:0;;;20935:10;;33016:41;;14377:2:1;14362:18;33016:41:0;;;;;;;33068:34;;20935:10;;33068:34;;;;;33090:11;;33068:34;;;;33090:11;20935:10;33068:34;;;;;;;;;;;;;;;;;;;;;32423:687;;;;;:::o;16817:211::-;16961:58;;;-1:-1:-1;;;;;4174:32:1;;16961:58:0;;;4156:51:1;4223:18;;;;4216:34;;;16961:58:0;;;;;;;;;;4129:18:1;;;;16961:58:0;;;;;;;;-1:-1:-1;;;;;16961:58:0;-1:-1:-1;;;16961:58:0;;;16934:86;;16954:5;;16934:19;:86::i;:::-;16817:211;;;:::o;2135:136::-;2193:7;2220:43;2224:1;2227;2220:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2213:50;;2135:136;;;;;:::o;23363:229::-;-1:-1:-1;;;;;23437:22:0;;23429:73;;;;-1:-1:-1;;;23429:73:0;;6959:2:1;23429:73:0;;;6941:21:1;6998:2;6978:18;;;6971:30;7037:34;7017:18;;;7010:62;-1:-1:-1;;;7088:18:1;;;7081:36;7134:19;;23429:73:0;6931:228:1;23429:73:0;23539:6;;;23518:38;;-1:-1:-1;;;;;23518:38:0;;;;23539:6;;;23518:38;;;23567:6;:17;;-1:-1:-1;;;;;;23567:17:0;-1:-1:-1;;;;;23567:17:0;;;;;;;;;;23363:229::o;1671:181::-;1729:7;;1761:5;1765:1;1761;:5;:::i;:::-;1749:17;;1790:1;1785;:6;;1777:46;;;;-1:-1:-1;;;1777:46:0;;7366:2:1;1777:46:0;;;7348:21:1;7405:2;7385:18;;;7378:30;7444:29;7424:18;;;7417:57;7491:18;;1777:46:0;7338:177:1;3059:471:0;3117:7;3362:6;3358:47;;-1:-1:-1;3392:1:0;3385:8;;3358:47;3417:9;3429:5;3433:1;3429;:5;:::i;:::-;3417:17;-1:-1:-1;3462:1:0;3453:5;3457:1;3417:17;3453:5;:::i;:::-;:10;3445:56;;;;-1:-1:-1;;;3445:56:0;;11480:2:1;3445:56:0;;;11462:21:1;11519:2;11499:18;;;11492:30;11558:34;11538:18;;;11531:62;-1:-1:-1;;;11609:18:1;;;11602:31;11650:19;;3445:56:0;11452:223:1;4006:132:0;4064:7;4091:39;4095:1;4098;4091:39;;;;;;;;;;;;;;;;;:3;:39::i;29520:283::-;29639:13;29655:33;29684:3;29655:24;:8;29668:10;29655:12;:24::i;:33::-;-1:-1:-1;;;;;29743:16:0;;;;;;;:8;:16;;;;;;;;:27;;;;;;;;;:41;;;29639:49;;-1:-1:-1;29743:52:0;;29639:49;29743:45;:52::i;:::-;-1:-1:-1;;;;;29699:16:0;;;;;;;:8;:16;;;;;;;;:27;;;;;;;;;;;;;;:41;;:96;;;;-1:-1:-1;;;29520:283:0:o;19352:774::-;19776:23;19802:69;19830:4;19802:69;;;;;;;;;;;;;;;;;19810:5;-1:-1:-1;;;;;19802:27:0;;;:69;;;;;:::i;:::-;19886:17;;19776:95;;-1:-1:-1;19886:21:0;19882:237;;20041:10;20030:30;;;;;;;;;;;;:::i;:::-;20022:85;;;;-1:-1:-1;;;20022:85:0;;13293:2:1;20022:85:0;;;13275:21:1;13332:2;13312:18;;;13305:30;13371:34;13351:18;;;13344:62;-1:-1:-1;;;13422:18:1;;;13415:40;13472:19;;20022:85:0;13265:232:1;2574:226:0;2694:7;2730:12;2722:6;;;;2714:29;;;;-1:-1:-1;;;2714:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2754:9:0;2766:5;2770:1;2766;:5;:::i;:::-;2754:17;2574:226;-1:-1:-1;;;;;2574:226:0:o;4634:312::-;4754:7;4789:12;4782:5;4774:28;;;;-1:-1:-1;;;4774:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4813:9:0;4825:5;4829:1;4825;:5;:::i;13743:230::-;13880:12;13912:53;13935:6;13943:4;13949:1;13952:12;13912:22;:53::i;:::-;13905:60;13743:230;-1:-1:-1;;;;13743:230:0:o;15231:1020::-;15404:12;15437:18;15448:6;15437:10;:18::i;:::-;15429:60;;;;-1:-1:-1;;;15429:60:0;;12935:2:1;15429:60:0;;;12917:21:1;12974:2;12954:18;;;12947:30;13013:31;12993:18;;;12986:59;13062:18;;15429:60:0;12907:179:1;15429:60:0;15563:12;15577:23;15604:6;-1:-1:-1;;;;;15604:11:0;15623:8;15633:4;15604:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15562:76;;;;15653:7;15649:595;;;15684:10;-1:-1:-1;15677:17:0;;-1:-1:-1;15677:17:0;15649:595;15798:17;;:21;15794:439;;16061:10;16055:17;16122:15;16109:10;16105:2;16101:19;16094:44;16009:148;16204:12;16197:20;;-1:-1:-1;;;16197:20:0;;;;;;;;:::i;10606:641::-;10666:4;11147:20;;10977:66;11196:23;;;;;;:42;;-1:-1:-1;;11223:15:0;;;11188:51;-1:-1:-1;;10606:641:0:o;14:257:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:255::-;;396:2;384:9;375:7;371:23;367:32;364:2;;;417:6;409;402:22;364:2;454:9;448:16;473:28;495:5;473:28;:::i;812:412::-;;;955:2;943:9;934:7;930:23;926:32;923:2;;;976:6;968;961:22;923:2;1020:9;1007:23;1039:31;1064:5;1039:31;:::i;:::-;1089:5;-1:-1:-1;1146:2:1;1131:18;;1118:32;1159:33;1118:32;1159:33;:::i;:::-;1211:7;1201:17;;;913:311;;;;;:::o;1229:406::-;;;1369:2;1357:9;1348:7;1344:23;1340:32;1337:2;;;1390:6;1382;1375:22;1337:2;1434:9;1421:23;1453:31;1478:5;1453:31;:::i;:::-;1503:5;-1:-1:-1;1560:2:1;1545:18;;1532:32;1573:30;1532:32;1573:30;:::i;1640:339::-;;;1783:2;1771:9;1762:7;1758:23;1754:32;1751:2;;;1804:6;1796;1789:22;1751:2;1848:9;1835:23;1867:31;1892:5;1867:31;:::i;:::-;1917:5;1969:2;1954:18;;;;1941:32;;-1:-1:-1;;;1741:238:1:o;1984:888::-;;;;;;;;;;2243:3;2231:9;2222:7;2218:23;2214:33;2211:2;;;2265:6;2257;2250:22;2211:2;2309:9;2296:23;2328:31;2353:5;2328:31;:::i;:::-;2378:5;-1:-1:-1;2430:2:1;2415:18;;2402:32;;-1:-1:-1;2481:2:1;2466:18;;2453:32;;-1:-1:-1;2532:2:1;2517:18;;2504:32;;-1:-1:-1;2583:3:1;2568:19;;2555:33;;-1:-1:-1;2635:3:1;2620:19;;2607:33;;-1:-1:-1;2687:3:1;2672:19;;2659:33;;-1:-1:-1;2739:3:1;2724:19;;2711:33;;-1:-1:-1;2796:3:1;2781:19;;2768:33;2810:30;2768:33;2810:30;:::i;:::-;2859:7;2849:17;;;2201:671;;;;;;;;;;;:::o;2877:190::-;;2989:2;2977:9;2968:7;2964:23;2960:32;2957:2;;;3010:6;3002;2995:22;2957:2;-1:-1:-1;3038:23:1;;2947:120;-1:-1:-1;2947:120:1:o;3072:194::-;;3195:2;3183:9;3174:7;3170:23;3166:32;3163:2;;;3216:6;3208;3201:22;3163:2;-1:-1:-1;3244:16:1;;3153:113;-1:-1:-1;3153:113:1:o;3271:274::-;;3438:6;3432:13;3454:53;3500:6;3495:3;3488:4;3480:6;3476:17;3454:53;:::i;:::-;3523:16;;;;;3408:137;-1:-1:-1;;3408:137:1:o;5681:383::-;;5830:2;5819:9;5812:21;5862:6;5856:13;5905:6;5900:2;5889:9;5885:18;5878:34;5921:66;5980:6;5975:2;5964:9;5960:18;5955:2;5947:6;5943:15;5921:66;:::i;:::-;6048:2;6027:15;-1:-1:-1;;6023:29:1;6008:45;;;;6055:2;6004:54;;5802:262;-1:-1:-1;;5802:262:1:o;7520:341::-;7722:2;7704:21;;;7761:2;7741:18;;;7734:30;-1:-1:-1;;;7795:2:1;7780:18;;7773:47;7852:2;7837:18;;7694:167::o;8205:332::-;8407:2;8389:21;;;8446:1;8426:18;;;8419:29;-1:-1:-1;;;8479:2:1;8464:18;;8457:39;8528:2;8513:18;;8379:158::o;11680:356::-;11882:2;11864:21;;;11901:18;;;11894:30;11960:34;11955:2;11940:18;;11933:62;12027:2;12012:18;;11854:182::o;15011:128::-;;15082:1;15078:6;15075:1;15072:13;15069:2;;;15088:18;;:::i;:::-;-1:-1:-1;15124:9:1;;15059:80::o;15144:217::-;;15210:1;15200:2;;-1:-1:-1;;;15235:31:1;;15289:4;15286:1;15279:15;15317:4;15242:1;15307:15;15200:2;-1:-1:-1;15346:9:1;;15190:171::o;15366:168::-;;15472:1;15468;15464:6;15460:14;15457:1;15454:21;15449:1;15442:9;15435:17;15431:45;15428:2;;;15479:18;;:::i;:::-;-1:-1:-1;15519:9:1;;15418:116::o;15539:125::-;;15607:1;15604;15601:8;15598:2;;;15612:18;;:::i;:::-;-1:-1:-1;15649:9:1;;15588:76::o;15669:258::-;15741:1;15751:113;15765:6;15762:1;15759:13;15751:113;;;15841:11;;;15835:18;15822:11;;;15815:39;15787:2;15780:10;15751:113;;;15882:6;15879:1;15876:13;15873:2;;;-1:-1:-1;;15917:1:1;15899:16;;15892:27;15722:205::o;15932:135::-;;-1:-1:-1;;15992:17:1;;15989:2;;;16012:18;;:::i;:::-;-1:-1:-1;16059:1:1;16048:13;;15979:88::o;16072:127::-;16133:10;16128:3;16124:20;16121:1;16114:31;16164:4;16161:1;16154:15;16188:4;16185:1;16178:15;16204:131;-1:-1:-1;;;;;16279:31:1;;16269:42;;16259:2;;16325:1;16322;16315:12;16340:118;16426:5;16419:13;16412:21;16405:5;16402:32;16392:2;;16448:1;16445;16438:12
Swarm Source
ipfs://24482a1eee2dbea552ad12aa929cbadd91158a62fe5725e079f074081aa2d5cf
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.