Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 13000864 | 1078 days ago | IN | Create: FixedSwapETH | 0 ETH | 0.17421344 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
FixedSwapETH
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-11 */ // Sources flattened with hardhat v2.2.1 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ 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; } } // File @openzeppelin/contracts/access/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @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. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _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 virtual 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 virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File contracts/Whitelist.sol //SPDX-License-Identifier: Unlicense pragma solidity ^0.6.1; contract Whitelist is Ownable { mapping(address => bool) public whitelist; address[] public whitelistedAddresses; bool public hasWhitelisting = false; event AddedToWhitelist(address[] indexed accounts); event RemovedFromWhitelist(address indexed account); modifier onlyWhitelisted() { if(hasWhitelisting){ require(isWhitelisted(msg.sender),"Whitelist: Not Whitelisted"); } _; } constructor (bool _hasWhitelisting) public{ hasWhitelisting = _hasWhitelisting; } function add(address[] memory _addresses) public onlyOwner { for (uint i = 0; i < _addresses.length; i++) { require(whitelist[_addresses[i]] != true); whitelist[_addresses[i]] = true; whitelistedAddresses.push(_addresses[i]); } emit AddedToWhitelist(_addresses); } function remove(address _address, uint256 _index) public onlyOwner { require(_address == whitelistedAddresses[_index]); whitelist[_address] = false; delete whitelistedAddresses[_index]; emit RemovedFromWhitelist(_address); } function getWhitelistedAddresses() public view returns(address[] memory) { return whitelistedAddresses; } function isWhitelisted(address _address) public view returns(bool) { return whitelist[_address]; } } // File @openzeppelin/contracts/token/ERC20/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @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); } // File @openzeppelin/contracts/math/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @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) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * 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); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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; } } // File @openzeppelin/contracts/token/ERC20/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) public { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File contracts/FixedSwap/FixedSwapETH.sol //SPDX-License-Identifier: Unlicense pragma solidity ^0.6.1; contract FixedSwapETH is Pausable, Whitelist { using SafeMath for uint256; uint256 increment = 0; mapping(uint256 => Purchase) public purchases; /* Purchasers mapping */ address[] public buyers; /* Current Buyers Addresses */ uint256[] public purchaseIds; /* All purchaseIds */ mapping(address => uint256[]) public myPurchases; /* Purchasers mapping */ ERC20 public erc20; bool public isSaleFunded = false; uint public decimals = 0; bool public unsoldTokensReedemed = false; uint256 public tradeValue; /* Price in Wei */ uint256 public startDate; /* Start Date */ uint256 public endDate; /* End Date */ uint256 public individualMinimumAmount = 0; /* Minimum Amount Per Address */ uint256 public individualMaximumAmount = 0; /* Minimum Amount Per Address */ uint256 public minimumRaise = 0; /* Minimum Amount of Tokens that have to be sold */ uint256 public tokensAllocated = 0; /* Tokens Available for Allocation - Dynamic */ uint256 public tokensForSale = 0; /* Tokens Available for Sale */ bool public isTokenSwapAtomic; /* Make token release atomic or not */ address payable public FEE_ADDRESS = 0x42B78f894e826C8D6C2cd2582f32640BF8E168D4; /* Default Address for Fee Percentage */ uint256 public feePercentage = 1; /* Default Fee 1% */ struct Purchase { uint256 amount; address purchaser; uint256 ethAmount; uint256 timestamp; bool wasFinalized /* Confirm the tokens were sent already */; bool reverted /* Confirm the tokens were sent already */; } event PurchaseEvent(uint256 amount, address indexed purchaser, uint256 timestamp); constructor(address _tokenAddress, uint256 _tradeValue, uint256 _tokensForSale, uint256 _startDate, uint256 _endDate, uint256 _individualMinimumAmount, uint256 _individualMaximumAmount, bool _isTokenSwapAtomic, uint256 _minimumRaise, uint256 _feeAmount, bool _hasWhitelisting ) public Whitelist(_hasWhitelisting) { /* Confirmations */ require(block.timestamp < _endDate, "End Date should be further than current date"); require(block.timestamp < _startDate, "Start Date should be further than current date"); require(_startDate < _endDate, "End Date higher than Start Date"); require(_tokensForSale > 0, "Tokens for Sale should be > 0"); require(_tokensForSale > _individualMinimumAmount, "Tokens for Sale should be > Individual Minimum Amount"); require(_individualMaximumAmount >= _individualMinimumAmount, "Individual Maximim AMount should be > Individual Minimum Amount"); require(_minimumRaise <= _tokensForSale, "Minimum Raise should be < Tokens For Sale"); require(_feeAmount >= feePercentage, "Fee Percentage has to be >= 1"); require(_feeAmount <= 99, "Fee Percentage has to be < 100"); startDate = _startDate; endDate = _endDate; tokensForSale = _tokensForSale; tradeValue = _tradeValue; individualMinimumAmount = _individualMinimumAmount; individualMaximumAmount = _individualMaximumAmount; isTokenSwapAtomic = _isTokenSwapAtomic; if(!_isTokenSwapAtomic){ /* If raise is not atomic swap */ minimumRaise = _minimumRaise; } erc20 = ERC20(_tokenAddress); decimals = erc20.decimals(); feePercentage = _feeAmount; } /** * Modifier to make a function callable only when the contract has Atomic Swaps not available. */ modifier isNotAtomicSwap() { require(!isTokenSwapAtomic, "Has to be non Atomic swap"); _; } /** * Modifier to make a function callable only when the contract has Atomic Swaps not available. */ modifier isSaleFinalized() { require(hasFinalized(), "Has to be finalized"); _; } /** * Modifier to make a function callable only when the swap time is open. */ modifier isSaleOpen() { require(isOpen(), "Has to be open"); _; } /** * Modifier to make a function callable only when the contract has Atomic Swaps not available. */ modifier isSalePreStarted() { require(isPreStart(), "Has to be pre-started"); _; } /** * Modifier to make a function callable only when the contract has Atomic Swaps not available. */ modifier isFunded() { require(isSaleFunded, "Has to be funded"); _; } /* Get Functions */ function isBuyer(uint256 purchase_id) public view returns (bool) { return (msg.sender == purchases[purchase_id].purchaser); } /* Get Functions */ function totalRaiseCost() public view returns (uint256) { return (cost(tokensForSale)); } function availableTokens() public view returns (uint256) { return erc20.balanceOf(address(this)); } function tokensLeft() public view returns (uint256) { return tokensForSale - tokensAllocated; } function hasMinimumRaise() public view returns (bool){ return (minimumRaise != 0); } /* Verify if minimum raise was not achieved */ function minimumRaiseNotAchieved() public view returns (bool){ require(cost(tokensAllocated) < cost(minimumRaise), "TotalRaise is bigger than minimum raise amount"); return true; } /* Verify if minimum raise was achieved */ function minimumRaiseAchieved() public view returns (bool){ if(hasMinimumRaise()){ require(cost(tokensAllocated) >= cost(minimumRaise), "TotalRaise is less than minimum raise amount"); } return true; } function hasFinalized() public view returns (bool){ return block.timestamp > endDate; } function hasStarted() public view returns (bool){ return block.timestamp >= startDate; } function isPreStart() public view returns (bool){ return block.timestamp < startDate; } function isOpen() public view returns (bool){ return hasStarted() && !hasFinalized(); } function hasMinimumAmount() public view returns (bool){ return (individualMinimumAmount != 0); } function cost(uint256 _amount) public view returns (uint){ return _amount.mul(tradeValue).div(10**decimals); } function getPurchase(uint256 _purchase_id) external view returns (uint256, address, uint256, uint256, bool, bool){ Purchase memory purchase = purchases[_purchase_id]; return (purchase.amount, purchase.purchaser, purchase.ethAmount, purchase.timestamp, purchase.wasFinalized, purchase.reverted); } function getPurchaseIds() public view returns(uint256[] memory) { return purchaseIds; } function getBuyers() public view returns(address[] memory) { return buyers; } function getMyPurchases(address _address) public view returns(uint256[] memory) { return myPurchases[_address]; } /* Fund - Pre Sale Start */ function fund(uint256 _amount) public isSalePreStarted { /* Confirm transfered tokens is no more than needed */ require(availableTokens().add(_amount) <= tokensForSale, "Transfered tokens have to be equal or less than proposed"); /* Transfer Funds */ require(erc20.transferFrom(msg.sender, address(this), _amount), "Failed ERC20 token transfer"); /* If Amount is equal to needed - sale is ready */ if(availableTokens() == tokensForSale){ isSaleFunded = true; } } /* Action Functions */ function swap(uint256 _amount) payable external whenNotPaused isFunded isSaleOpen onlyWhitelisted { /* Confirm Amount is positive */ require(_amount > 0, "Amount has to be positive"); /* Confirm Amount is less than tokens available */ require(_amount <= tokensLeft(), "Amount is less than tokens available"); /* Confirm the user has funds for the transfer, confirm the value is equal */ require(msg.value == cost(_amount), "User has to cover the cost of the swap in ETH, use the cost function to determine"); /* Confirm Amount is bigger than minimum Amount */ require(_amount >= individualMinimumAmount, "Amount is bigger than minimum amount"); /* Confirm Amount is smaller than maximum Amount */ require(_amount <= individualMaximumAmount, "Amount is smaller than maximum amount"); /* Verify all user purchases, loop thru them */ uint256[] memory _purchases = getMyPurchases(msg.sender); uint256 purchaserTotalAmountPurchased = 0; for (uint i = 0; i < _purchases.length; i++) { Purchase memory _purchase = purchases[_purchases[i]]; purchaserTotalAmountPurchased = purchaserTotalAmountPurchased.add(_purchase.amount); } require(purchaserTotalAmountPurchased.add(_amount) <= individualMaximumAmount, "Address has already passed the max amount of swap"); if(isTokenSwapAtomic){ /* Confirm transfer */ require(erc20.transfer(msg.sender, _amount), "ERC20 transfer didn´t work"); } uint256 purchase_id = increment; increment = increment.add(1); /* Create new purchase */ Purchase memory purchase = Purchase(_amount, msg.sender, msg.value, block.timestamp, isTokenSwapAtomic /* If Atomic Swap */, false); purchases[purchase_id] = purchase; purchaseIds.push(purchase_id); myPurchases[msg.sender].push(purchase_id); buyers.push(msg.sender); tokensAllocated = tokensAllocated.add(_amount); emit PurchaseEvent(_amount, msg.sender, block.timestamp); } /* Redeem tokens when the sale was finalized */ function redeemTokens(uint256 purchase_id) external isNotAtomicSwap isSaleFinalized whenNotPaused { /* Confirm it exists and was not finalized */ require((purchases[purchase_id].amount != 0) && !purchases[purchase_id].wasFinalized, "Purchase is either 0 or finalized"); require(isBuyer(purchase_id), "Address is not buyer"); purchases[purchase_id].wasFinalized = true; require(erc20.transfer(msg.sender, purchases[purchase_id].amount), "ERC20 transfer failed"); } /* Retrieve Minumum Amount */ function redeemGivenMinimumGoalNotAchieved(uint256 purchase_id) external isSaleFinalized isNotAtomicSwap { require(hasMinimumRaise(), "Minimum raise has to exist"); require(minimumRaiseNotAchieved(), "Minimum raise has to be reached"); /* Confirm it exists and was not finalized */ require((purchases[purchase_id].amount != 0) && !purchases[purchase_id].wasFinalized, "Purchase is either 0 or finalized"); require(isBuyer(purchase_id), "Address is not buyer"); purchases[purchase_id].wasFinalized = true; purchases[purchase_id].reverted = true; msg.sender.transfer(purchases[purchase_id].ethAmount); } /* Admin Functions */ function withdrawFunds() external onlyOwner whenNotPaused isSaleFinalized { require(minimumRaiseAchieved(), "Minimum raise has to be reached"); FEE_ADDRESS.transfer(address(this).balance.mul(feePercentage).div(100)); /* Fee Address */ msg.sender.transfer(address(this).balance); } function withdrawUnsoldTokens() external onlyOwner isSaleFinalized { require(!unsoldTokensReedemed); uint256 unsoldTokens; if(hasMinimumRaise() && (cost(tokensAllocated) < cost(minimumRaise))){ /* Minimum Raise not reached */ unsoldTokens = tokensForSale; }else{ /* If minimum Raise Achieved Redeem All Tokens minus the ones */ unsoldTokens = tokensForSale.sub(tokensAllocated); } if(unsoldTokens > 0){ unsoldTokensReedemed = true; require(erc20.transfer(msg.sender, unsoldTokens), "ERC20 transfer failed"); } } function removeOtherERC20Tokens(address _tokenAddress, address _to) external onlyOwner isSaleFinalized { require(_tokenAddress != address(erc20), "Token Address has to be diff than the erc20 subject to sale"); // Confirm tokens addresses are different from main sale one ERC20 erc20Token = ERC20(_tokenAddress); require(erc20Token.transfer(_to, erc20Token.balanceOf(address(this))), "ERC20 Token transfer failed"); } /* Safe Pull function */ function safePull() payable external onlyOwner whenPaused { msg.sender.transfer(address(this).balance); erc20.transfer(msg.sender, erc20.balanceOf(address(this))); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tradeValue","type":"uint256"},{"internalType":"uint256","name":"_tokensForSale","type":"uint256"},{"internalType":"uint256","name":"_startDate","type":"uint256"},{"internalType":"uint256","name":"_endDate","type":"uint256"},{"internalType":"uint256","name":"_individualMinimumAmount","type":"uint256"},{"internalType":"uint256","name":"_individualMaximumAmount","type":"uint256"},{"internalType":"bool","name":"_isTokenSwapAtomic","type":"bool"},{"internalType":"uint256","name":"_minimumRaise","type":"uint256"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"},{"internalType":"bool","name":"_hasWhitelisting","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"AddedToWhitelist","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":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PurchaseEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RemovedFromWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"FEE_ADDRESS","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"availableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc20","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"fund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getMyPurchases","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_purchase_id","type":"uint256"}],"name":"getPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPurchaseIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhitelistedAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasFinalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasMinimumAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasMinimumRaise","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasWhitelisting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"individualMaximumAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"individualMinimumAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"purchase_id","type":"uint256"}],"name":"isBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPreStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleFunded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTokenSwapAtomic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumRaise","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumRaiseAchieved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumRaiseNotAchieved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"myPurchases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"purchaseIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"purchases","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"purchaser","type":"address"},{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"wasFinalized","type":"bool"},{"internalType":"bool","name":"reverted","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"purchase_id","type":"uint256"}],"name":"redeemGivenMinimumGoalNotAchieved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"purchase_id","type":"uint256"}],"name":"redeemTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"remove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"removeOtherERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safePull","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"startDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"swap","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"tokensAllocated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRaiseCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeValue","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":"unsoldTokensReedemed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawUnsoldTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600360006101000a81548160ff02191690831515021790555060006004556000600960146101000a81548160ff0219169083151502179055506000600a556000600b60006101000a81548160ff0219169083151502179055506000600f5560006010556000601155600060125560006013557342b78f894e826c8d6c2cd2582f32640bf8e168d4601460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601555348015620000df57600080fd5b506040516200519a3803806200519a83398181016040526101608110156200010657600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508060008060006101000a81548160ff0219169083151502179055506000620001a86200075e60201b60201c565b905080600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600360006101000a81548160ff02191690831515021790555050864210620002bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180620050a3602c913960400191505060405180910390fd5b87421062000316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620050cf602e913960400191505060405180910390fd5b8688106200038c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f456e64204461746520686967686572207468616e20537461727420446174650081525060200191505060405180910390fd5b6000891162000403576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f546f6b656e7320666f722053616c652073686f756c64206265203e203000000081525060200191505060405180910390fd5b8589116200045d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180620051656035913960400191505060405180910390fd5b85851015620004b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180620050fd603f913960400191505060405180910390fd5b8883111562000513576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806200513c6029913960400191505060405180910390fd5b6015548210156200058c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4665652050657263656e746167652068617320746f206265203e3d203100000081525060200191505060405180910390fd5b606382111562000604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4665652050657263656e746167652068617320746f206265203c20313030000081525060200191505060405180910390fd5b87600d8190555086600e819055508860138190555089600c8190555085600f819055508460108190555083601460006101000a81548160ff021916908315150217905550836200065657826011819055505b8a600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200070057600080fd5b505afa15801562000715573d6000803e3d6000fd5b505050506040513d60208110156200072c57600080fd5b810190808051906020019092919050505060ff16600a8190555081601581905550505050505050505050505062000766565b600033905090565b61492d80620007766000396000f3fe6080604052600436106103505760003560e01c8063785e9e86116101c6578063ba4e5c49116100f7578063e4101de511610095578063f2aa82181161006f578063f2aa8218146110cf578063f2fde38b1461114a578063f64bfaba1461119b578063fecf415a1461120757610350565b8063e4101de514611022578063eb1edd611461104d578063efbb34d5146110a457610350565b8063c4c1c94f116100d1578063c4c1c94f14610ebc578063c8bdbfb614610f81578063ca1d209d14610f98578063d65fb16014610fd357610350565b8063ba4e5c4914610d70578063c24a0f8b14610deb578063c3ca324f14610e1657610350565b80639b19251a11610164578063abe7f1ab1161013e578063abe7f1ab14610c8c578063b31f8f9314610ce7578063b367940e14610d12578063b7fd706d14610d4157610350565b80639b19251a14610bbd578063a001ecdd14610c26578063a6e158f814610c5157610350565b80638e75b131116101a05780638e75b13114610aa45780639097548d14610acf578063917c854d14610b1e57806394b918de14610b8f57610350565b8063785e9e86146109505780638392fe31146109a75780638da5cb5b14610a4d57610350565b80633af32abf116102a057806369bb4dc21161023e57806370a898bc1161021857806370a898bc146108b0578063715018a6146108df57806374fa05fb146108f6578063755e3e281461092557610350565b806369bb4dc2146107ad5780636a93df11146107d85780636d0280271461084457610350565b806347535d7b1161027a57806347535d7b146106b55780635ac699bb146106e45780635c975abb146107535780636295a2f41461078257610350565b80633af32abf146105ee5780634089aa9a1461065757806344691f7e1461068657610350565b806321d3002a1161030d5780632e154107116102e75780632e154107146104c35780632ebb5c1e146104ee578063313ce5671461051d5780633742a9f71461054857610350565b806321d3002a1461047357806324600fc3146104a25780632daa8c84146104b957610350565b806307662345146103555780630b97bc861461038457806312aef8c3146103af57806315b57866146103da578063161a7b2a146104095780631de18af714610438575b600080fd5b34801561036157600080fd5b5061036a61125a565b604051808215151515815260200191505060405180910390f35b34801561039057600080fd5b5061039961126d565b6040518082815260200191505060405180910390f35b3480156103bb57600080fd5b506103c4611273565b6040518082815260200191505060405180910390f35b3480156103e657600080fd5b506103ef611279565b604051808215151515815260200191505060405180910390f35b34801561041557600080fd5b5061041e611286565b604051808215151515815260200191505060405180910390f35b34801561044457600080fd5b506104716004803603602081101561045b57600080fd5b8101908080359060200190929190505050611299565b005b34801561047f57600080fd5b50610488611660565b604051808215151515815260200191505060405180910390f35b3480156104ae57600080fd5b506104b7611673565b005b6104c161196a565b005b3480156104cf57600080fd5b506104d8611c9a565b6040518082815260200191505060405180910390f35b3480156104fa57600080fd5b50610503611ca0565b604051808215151515815260200191505060405180910390f35b34801561052957600080fd5b50610532611cac565b6040518082815260200191505060405180910390f35b34801561055457600080fd5b506105816004803603602081101561056b57600080fd5b8101908080359060200190929190505050611cb2565b604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018315151515815260200182151515158152602001965050505050505060405180910390f35b3480156105fa57600080fd5b5061063d6004803603602081101561061157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dc1565b604051808215151515815260200191505060405180910390f35b34801561066357600080fd5b5061066c611e17565b604051808215151515815260200191505060405180910390f35b34801561069257600080fd5b5061069b611e23565b604051808215151515815260200191505060405180910390f35b3480156106c157600080fd5b506106ca611e30565b604051808215151515815260200191505060405180910390f35b3480156106f057600080fd5b5061073d6004803603604081101561070757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e50565b6040518082815260200191505060405180910390f35b34801561075f57600080fd5b50610768611e7e565b604051808215151515815260200191505060405180910390f35b34801561078e57600080fd5b50610797611e94565b6040518082815260200191505060405180910390f35b3480156107b957600080fd5b506107c2611e9a565b6040518082815260200191505060405180910390f35b3480156107e457600080fd5b506107ed611f7b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610830578082015181840152602081019050610815565b505050509050019250505060405180910390f35b34801561085057600080fd5b50610859611fd3565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561089c578082015181840152602081019050610881565b505050509050019250505060405180910390f35b3480156108bc57600080fd5b506108c5612061565b604051808215151515815260200191505060405180910390f35b3480156108eb57600080fd5b506108f461206e565b005b34801561090257600080fd5b5061090b6121dd565b604051808215151515815260200191505060405180910390f35b34801561093157600080fd5b5061093a612252565b6040518082815260200191505060405180910390f35b34801561095c57600080fd5b50610965612258565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109b357600080fd5b506109e0600480360360208110156109ca57600080fd5b810190808035906020019092919050505061227e565b604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018315151515815260200182151515158152602001965050505050505060405180910390f35b348015610a5957600080fd5b50610a626122f4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ab057600080fd5b50610ab961231d565b6040518082815260200191505060405180910390f35b348015610adb57600080fd5b50610b0860048036036020811015610af257600080fd5b8101908080359060200190929190505050612323565b6040518082815260200191505060405180910390f35b348015610b2a57600080fd5b50610b8d60048036036040811015610b4157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612358565b005b610bbb60048036036020811015610ba557600080fd5b810190808035906020019092919050505061271d565b005b348015610bc957600080fd5b50610c0c60048036036020811015610be057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130c2565b604051808215151515815260200191505060405180910390f35b348015610c3257600080fd5b50610c3b6130e2565b6040518082815260200191505060405180910390f35b348015610c5d57600080fd5b50610c8a60048036036020811015610c7457600080fd5b81019080803590602001909291905050506130e8565b005b348015610c9857600080fd5b50610ce560048036036040811015610caf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613516565b005b348015610cf357600080fd5b50610cfc61370d565b6040518082815260200191505060405180910390f35b348015610d1e57600080fd5b50610d2761371b565b604051808215151515815260200191505060405180910390f35b348015610d4d57600080fd5b50610d5661379f565b604051808215151515815260200191505060405180910390f35b348015610d7c57600080fd5b50610da960048036036020811015610d9357600080fd5b81019080803590602001909291905050506137b2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610df757600080fd5b50610e006137ee565b6040518082815260200191505060405180910390f35b348015610e2257600080fd5b50610e6560048036036020811015610e3957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137f4565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610ea8578082015181840152602081019050610e8d565b505050509050019250505060405180910390f35b348015610ec857600080fd5b50610f7f60048036036020811015610edf57600080fd5b8101908080359060200190640100000000811115610efc57600080fd5b820183602082011115610f0e57600080fd5b80359060200191846020830284011164010000000083111715610f3057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061388b565b005b348015610f8d57600080fd5b50610f96613b1a565b005b348015610fa457600080fd5b50610fd160048036036020811015610fbb57600080fd5b8101908080359060200190929190505050613e2d565b005b348015610fdf57600080fd5b5061100c60048036036020811015610ff657600080fd5b81019080803590602001909291905050506140d5565b6040518082815260200191505060405180910390f35b34801561102e57600080fd5b506110376140f6565b6040518082815260200191505060405180910390f35b34801561105957600080fd5b506110626140fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156110b057600080fd5b506110b9614122565b6040518082815260200191505060405180910390f35b3480156110db57600080fd5b50611108600480360360208110156110f257600080fd5b8101908080359060200190929190505050614134565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561115657600080fd5b506111996004803603602081101561116d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614170565b005b3480156111a757600080fd5b506111b0614365565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156111f35780820151818401526020810190506111d8565b505050509050019250505060405180910390f35b34801561121357600080fd5b506112406004803603602081101561122a57600080fd5b81019080803590602001909291905050506143f3565b604051808215151515815260200191505060405180910390f35b600360009054906101000a900460ff1681565b600d5481565b60135481565b6000806011541415905090565b600960149054906101000a900460ff1681565b6112a1611e17565b611313576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f48617320746f2062652066696e616c697a65640000000000000000000000000081525060200191505060405180910390fd5b601460009054906101000a900460ff1615611396576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f48617320746f206265206e6f6e2041746f6d696320737761700000000000000081525060200191505060405180910390fd5b61139e611279565b611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4d696e696d756d2072616973652068617320746f20657869737400000000000081525060200191505060405180910390fd5b6114186121dd565b61148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4d696e696d756d2072616973652068617320746f20626520726561636865640081525060200191505060405180910390fd5b60006005600083815260200190815260200160002060000154141580156114d257506005600082815260200190815260200160002060040160009054906101000a900460ff16155b611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061470f6021913960400191505060405180910390fd5b611530816143f3565b6115a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f41646472657373206973206e6f7420627579657200000000000000000000000081525060200191505060405180910390fd5b60016005600083815260200190815260200160002060040160006101000a81548160ff02191690831515021790555060016005600083815260200190815260200160002060040160016101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff166108fc60056000848152602001908152602001600020600201549081150290604051600060405180830381858888f1935050505015801561165c573d6000803e3d6000fd5b5050565b601460009054906101000a900460ff1681565b61167b614461565b73ffffffffffffffffffffffffffffffffffffffff166116996122f4565b73ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61172a611e7e565b1561179d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6117a5611e17565b611817576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f48617320746f2062652066696e616c697a65640000000000000000000000000081525060200191505060405180910390fd5b61181f61371b565b611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4d696e696d756d2072616973652068617320746f20626520726561636865640081525060200191505060405180910390fd5b601460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6118f560646118e76015544761446990919063ffffffff16565b6144ef90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611920573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611967573d6000803e3d6000fd5b50565b611972614461565b73ffffffffffffffffffffffffffffffffffffffff166119906122f4565b73ffffffffffffffffffffffffffffffffffffffff1614611a19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611a21611e7e565b611a93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611ad9573d6000803e3d6000fd5b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bb857600080fd5b505afa158015611bcc573d6000803e3d6000fd5b505050506040513d6020811015611be257600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611c5c57600080fd5b505af1158015611c70573d6000803e3d6000fd5b505050506040513d6020811015611c8657600080fd5b810190808051906020019092919050505050565b600f5481565b6000600d544210905090565b600a5481565b600080600080600080611cc3614683565b600560008981526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250509050806000015181602001518260400151836060015184608001518560a001519650965096509650965096505091939550919395565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600e544211905090565b6000600d54421015905090565b6000611e3a611e23565b8015611e4b5750611e49611e17565b155b905090565b60086020528160005260406000208181548110611e6957fe5b90600052602060002001600091509150505481565b60008060009054906101000a900460ff16905090565b600c5481565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f3b57600080fd5b505afa158015611f4f573d6000803e3d6000fd5b505050506040513d6020811015611f6557600080fd5b8101908080519060200190929190505050905090565b60606007805480602002602001604051908101604052809291908181526020018280548015611fc957602002820191906000526020600020905b815481526020019060010190808311611fb5575b5050505050905090565b6060600280548060200260200160405190810160405280929190818152602001828054801561205757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161200d575b5050505050905090565b600080600f541415905090565b612076614461565b73ffffffffffffffffffffffffffffffffffffffff166120946122f4565b73ffffffffffffffffffffffffffffffffffffffff161461211d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121ea601154612323565b6121f5601254612323565b1061224b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806147b2602e913960400191505060405180910390fd5b6001905090565b60125481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040160009054906101000a900460ff16908060040160019054906101000a900460ff16905086565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6000612351600a54600a0a612343600c548561446990919063ffffffff16565b6144ef90919063ffffffff16565b9050919050565b612360614461565b73ffffffffffffffffffffffffffffffffffffffff1661237e6122f4565b73ffffffffffffffffffffffffffffffffffffffff1614612407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61240f611e17565b612481576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f48617320746f2062652066696e616c697a65640000000000000000000000000081525060200191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806146d4603b913960400191505060405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb838373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156125c757600080fd5b505afa1580156125db573d6000803e3d6000fd5b505050506040513d60208110156125f157600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561266b57600080fd5b505af115801561267f573d6000803e3d6000fd5b505050506040513d602081101561269557600080fd5b8101908080519060200190929190505050612718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f455243323020546f6b656e207472616e73666572206661696c6564000000000081525060200191505060405180910390fd5b505050565b612725611e7e565b15612798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b600960149054906101000a900460ff1661281a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f48617320746f2062652066756e6465640000000000000000000000000000000081525060200191505060405180910390fd5b612822611e30565b612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f48617320746f206265206f70656e00000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900460ff1615612925576128b233611dc1565b612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f57686974656c6973743a204e6f742057686974656c697374656400000000000081525060200191505060405180910390fd5b5b6000811161299b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f416d6f756e742068617320746f20626520706f7369746976650000000000000081525060200191505060405180910390fd5b6129a361370d565b8111156129fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061478e6024913960400191505060405180910390fd5b612a0481612323565b3414612a5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260518152602001806148836051913960600191505060405180910390fd5b600f54811015612ab6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806148d46024913960400191505060405180910390fd5b601054811115612b11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806147e06025913960400191505060405180910390fd5b6060612b1c336137f4565b9050600080905060008090505b8251811015612c3e57612b3a614683565b60056000858481518110612b4a57fe5b602002602001015181526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250509050612c2e81600001518461457890919063ffffffff16565b9250508080600101915050612b29565b50601054612c55848361457890919063ffffffff16565b1115612cac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806148526031913960400191505060405180910390fd5b601460009054906101000a900460ff1615612e1857600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612d6a57600080fd5b505af1158015612d7e573d6000803e3d6000fd5b505050506040513d6020811015612d9457600080fd5b8101908080519060200190929190505050612e17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4552433230207472616e73666572206469646ec2b47420776f726b000000000081525060200191505060405180910390fd5b5b60006004549050612e35600160045461457890919063ffffffff16565b600481905550612e43614683565b6040518060c001604052808681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001348152602001428152602001601460009054906101000a900460ff161515815260200160001515815250905080600560008481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160040160016101000a81548160ff0219169083151502179055509050506007829080600181540180825580915050600190039060005260206000200160009091909190915055600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150556006339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061305f8560125461457890919063ffffffff16565b6012819055503373ffffffffffffffffffffffffffffffffffffffff167fbec109f7ee137de661c6887caa96653c0545050a9908a3b6eb5190440bbec8648642604051808381526020018281526020019250505060405180910390a25050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b60155481565b601460009054906101000a900460ff161561316b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f48617320746f206265206e6f6e2041746f6d696320737761700000000000000081525060200191505060405180910390fd5b613173611e17565b6131e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f48617320746f2062652066696e616c697a65640000000000000000000000000081525060200191505060405180910390fd5b6131ed611e7e565b15613260576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60006005600083815260200190815260200160002060000154141580156132a857506005600082815260200190815260200160002060040160009054906101000a900460ff16155b6132fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061470f6021913960400191505060405180910390fd5b613306816143f3565b613378576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f41646472657373206973206e6f7420627579657200000000000000000000000081525060200191505060405180910390fd5b60016005600083815260200190815260200160002060040160006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360056000858152602001908152602001600020600001546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561346657600080fd5b505af115801561347a573d6000803e3d6000fd5b505050506040513d602081101561349057600080fd5b8101908080519060200190929190505050613513576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4552433230207472616e73666572206661696c6564000000000000000000000081525060200191505060405180910390fd5b50565b61351e614461565b73ffffffffffffffffffffffffffffffffffffffff1661353c6122f4565b73ffffffffffffffffffffffffffffffffffffffff16146135c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600281815481106135d257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461363457600080fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506002818154811061369957fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558173ffffffffffffffffffffffffffffffffffffffff167fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df75760405160405180910390a25050565b600060125460135403905090565b6000613725611279565b1561379857613735601154612323565b613740601254612323565b1015613797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614805602c913960400191505060405180910390fd5b5b6001905090565b600b60009054906101000a900460ff1681565b600281815481106137bf57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6060600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561387f57602002820191906000526020600020905b81548152602001906001019080831161386b575b50505050509050919050565b613893614461565b73ffffffffffffffffffffffffffffffffffffffff166138b16122f4565b73ffffffffffffffffffffffffffffffffffffffff161461393a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b8151811015613aa757600115156001600084848151811061395d57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156139ba57600080fd5b60018060008484815181106139cb57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506002828281518110613a3257fe5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050613940565b508060405180828051906020019060200280838360005b83811015613ad9578082015181840152602081019050613abe565b5050505090500191505060405180910390207fe3c5086a518f78e8aa61952bb9c28a9a0f0022707e537ea961faa918e0d89f6f60405160405180910390a250565b613b22614461565b73ffffffffffffffffffffffffffffffffffffffff16613b406122f4565b73ffffffffffffffffffffffffffffffffffffffff1614613bc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b613bd1611e17565b613c43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f48617320746f2062652066696e616c697a65640000000000000000000000000081525060200191505060405180910390fd5b600b60009054906101000a900460ff1615613c5d57600080fd5b6000613c67611279565b8015613c865750613c79601154612323565b613c84601254612323565b105b15613c95576013549050613caf565b613cac60125460135461460090919063ffffffff16565b90505b6000811115613e2a576001600b60006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613d7c57600080fd5b505af1158015613d90573d6000803e3d6000fd5b505050506040513d6020811015613da657600080fd5b8101908080519060200190929190505050613e29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4552433230207472616e73666572206661696c6564000000000000000000000081525060200191505060405180910390fd5b5b50565b613e35611ca0565b613ea7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f48617320746f206265207072652d73746172746564000000000000000000000081525060200191505060405180910390fd5b601354613ec482613eb6611e9a565b61457890919063ffffffff16565b1115613f1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806147306038913960400191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613ff857600080fd5b505af115801561400c573d6000803e3d6000fd5b505050506040513d602081101561402257600080fd5b81019080805190602001909291905050506140a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4661696c656420455243323020746f6b656e207472616e73666572000000000081525060200191505060405180910390fd5b6013546140b0611e9a565b14156140d2576001600960146101000a81548160ff0219169083151502179055505b50565b600781815481106140e257fe5b906000526020600020016000915090505481565b60105481565b601460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061412f601354612323565b905090565b6006818154811061414157fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b614178614461565b73ffffffffffffffffffffffffffffffffffffffff166141966122f4565b73ffffffffffffffffffffffffffffffffffffffff161461421f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156142a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806147686026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060068054806020026020016040519081016040528092919081815260200182805480156143e957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161439f575b5050505050905090565b60006005600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16149050919050565b600033905090565b60008083141561447c57600090506144e9565b600082840290508284828161448d57fe5b04146144e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806148316021913960400191505060405180910390fd5b809150505b92915050565b6000808211614566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838161456f57fe5b04905092915050565b6000808284019050838110156145f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600082821115614678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6040518060c0016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600015158152602001600015158152509056fe546f6b656e20416464726573732068617320746f2062652064696666207468616e20746865206572633230207375626a65637420746f2073616c655075726368617365206973206569746865722030206f722066696e616c697a65645472616e73666572656420746f6b656e73206861766520746f20626520657175616c206f72206c657373207468616e2070726f706f7365644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416d6f756e74206973206c657373207468616e20746f6b656e7320617661696c61626c65546f74616c526169736520697320626967676572207468616e206d696e696d756d20726169736520616d6f756e74416d6f756e7420697320736d616c6c6572207468616e206d6178696d756d20616d6f756e74546f74616c5261697365206973206c657373207468616e206d696e696d756d20726169736520616d6f756e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416464726573732068617320616c72656164792070617373656420746865206d617820616d6f756e74206f662073776170557365722068617320746f20636f7665722074686520636f7374206f6620746865207377617020696e204554482c207573652074686520636f73742066756e6374696f6e20746f2064657465726d696e65416d6f756e7420697320626967676572207468616e206d696e696d756d20616d6f756e74a264697066735822122067aa56e7654a5085da44f9c1d5a4364e1642f2c2a062345b5dd645de18fd07ca64736f6c63430006060033456e6420446174652073686f756c642062652066757274686572207468616e2063757272656e742064617465537461727420446174652073686f756c642062652066757274686572207468616e2063757272656e742064617465496e646976696475616c204d6178696d696d20414d6f756e742073686f756c64206265203e20496e646976696475616c204d696e696d756d20416d6f756e744d696e696d756d2052616973652073686f756c64206265203c20546f6b656e7320466f722053616c65546f6b656e7320666f722053616c652073686f756c64206265203e20496e646976696475616c204d696e696d756d20416d6f756e740000000000000000000000008ed8856c42e1367bee99cd3fe5c75c1e4f689bf0000000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000013da329b63364718000000000000000000000000000000000000000000000000000000000000061186710000000000000000000000000000000000000000000000000000000006119b8900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a5a058fc295ed0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106103505760003560e01c8063785e9e86116101c6578063ba4e5c49116100f7578063e4101de511610095578063f2aa82181161006f578063f2aa8218146110cf578063f2fde38b1461114a578063f64bfaba1461119b578063fecf415a1461120757610350565b8063e4101de514611022578063eb1edd611461104d578063efbb34d5146110a457610350565b8063c4c1c94f116100d1578063c4c1c94f14610ebc578063c8bdbfb614610f81578063ca1d209d14610f98578063d65fb16014610fd357610350565b8063ba4e5c4914610d70578063c24a0f8b14610deb578063c3ca324f14610e1657610350565b80639b19251a11610164578063abe7f1ab1161013e578063abe7f1ab14610c8c578063b31f8f9314610ce7578063b367940e14610d12578063b7fd706d14610d4157610350565b80639b19251a14610bbd578063a001ecdd14610c26578063a6e158f814610c5157610350565b80638e75b131116101a05780638e75b13114610aa45780639097548d14610acf578063917c854d14610b1e57806394b918de14610b8f57610350565b8063785e9e86146109505780638392fe31146109a75780638da5cb5b14610a4d57610350565b80633af32abf116102a057806369bb4dc21161023e57806370a898bc1161021857806370a898bc146108b0578063715018a6146108df57806374fa05fb146108f6578063755e3e281461092557610350565b806369bb4dc2146107ad5780636a93df11146107d85780636d0280271461084457610350565b806347535d7b1161027a57806347535d7b146106b55780635ac699bb146106e45780635c975abb146107535780636295a2f41461078257610350565b80633af32abf146105ee5780634089aa9a1461065757806344691f7e1461068657610350565b806321d3002a1161030d5780632e154107116102e75780632e154107146104c35780632ebb5c1e146104ee578063313ce5671461051d5780633742a9f71461054857610350565b806321d3002a1461047357806324600fc3146104a25780632daa8c84146104b957610350565b806307662345146103555780630b97bc861461038457806312aef8c3146103af57806315b57866146103da578063161a7b2a146104095780631de18af714610438575b600080fd5b34801561036157600080fd5b5061036a61125a565b604051808215151515815260200191505060405180910390f35b34801561039057600080fd5b5061039961126d565b6040518082815260200191505060405180910390f35b3480156103bb57600080fd5b506103c4611273565b6040518082815260200191505060405180910390f35b3480156103e657600080fd5b506103ef611279565b604051808215151515815260200191505060405180910390f35b34801561041557600080fd5b5061041e611286565b604051808215151515815260200191505060405180910390f35b34801561044457600080fd5b506104716004803603602081101561045b57600080fd5b8101908080359060200190929190505050611299565b005b34801561047f57600080fd5b50610488611660565b604051808215151515815260200191505060405180910390f35b3480156104ae57600080fd5b506104b7611673565b005b6104c161196a565b005b3480156104cf57600080fd5b506104d8611c9a565b6040518082815260200191505060405180910390f35b3480156104fa57600080fd5b50610503611ca0565b604051808215151515815260200191505060405180910390f35b34801561052957600080fd5b50610532611cac565b6040518082815260200191505060405180910390f35b34801561055457600080fd5b506105816004803603602081101561056b57600080fd5b8101908080359060200190929190505050611cb2565b604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018315151515815260200182151515158152602001965050505050505060405180910390f35b3480156105fa57600080fd5b5061063d6004803603602081101561061157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dc1565b604051808215151515815260200191505060405180910390f35b34801561066357600080fd5b5061066c611e17565b604051808215151515815260200191505060405180910390f35b34801561069257600080fd5b5061069b611e23565b604051808215151515815260200191505060405180910390f35b3480156106c157600080fd5b506106ca611e30565b604051808215151515815260200191505060405180910390f35b3480156106f057600080fd5b5061073d6004803603604081101561070757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e50565b6040518082815260200191505060405180910390f35b34801561075f57600080fd5b50610768611e7e565b604051808215151515815260200191505060405180910390f35b34801561078e57600080fd5b50610797611e94565b6040518082815260200191505060405180910390f35b3480156107b957600080fd5b506107c2611e9a565b6040518082815260200191505060405180910390f35b3480156107e457600080fd5b506107ed611f7b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610830578082015181840152602081019050610815565b505050509050019250505060405180910390f35b34801561085057600080fd5b50610859611fd3565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561089c578082015181840152602081019050610881565b505050509050019250505060405180910390f35b3480156108bc57600080fd5b506108c5612061565b604051808215151515815260200191505060405180910390f35b3480156108eb57600080fd5b506108f461206e565b005b34801561090257600080fd5b5061090b6121dd565b604051808215151515815260200191505060405180910390f35b34801561093157600080fd5b5061093a612252565b6040518082815260200191505060405180910390f35b34801561095c57600080fd5b50610965612258565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109b357600080fd5b506109e0600480360360208110156109ca57600080fd5b810190808035906020019092919050505061227e565b604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018315151515815260200182151515158152602001965050505050505060405180910390f35b348015610a5957600080fd5b50610a626122f4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ab057600080fd5b50610ab961231d565b6040518082815260200191505060405180910390f35b348015610adb57600080fd5b50610b0860048036036020811015610af257600080fd5b8101908080359060200190929190505050612323565b6040518082815260200191505060405180910390f35b348015610b2a57600080fd5b50610b8d60048036036040811015610b4157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612358565b005b610bbb60048036036020811015610ba557600080fd5b810190808035906020019092919050505061271d565b005b348015610bc957600080fd5b50610c0c60048036036020811015610be057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130c2565b604051808215151515815260200191505060405180910390f35b348015610c3257600080fd5b50610c3b6130e2565b6040518082815260200191505060405180910390f35b348015610c5d57600080fd5b50610c8a60048036036020811015610c7457600080fd5b81019080803590602001909291905050506130e8565b005b348015610c9857600080fd5b50610ce560048036036040811015610caf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613516565b005b348015610cf357600080fd5b50610cfc61370d565b6040518082815260200191505060405180910390f35b348015610d1e57600080fd5b50610d2761371b565b604051808215151515815260200191505060405180910390f35b348015610d4d57600080fd5b50610d5661379f565b604051808215151515815260200191505060405180910390f35b348015610d7c57600080fd5b50610da960048036036020811015610d9357600080fd5b81019080803590602001909291905050506137b2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610df757600080fd5b50610e006137ee565b6040518082815260200191505060405180910390f35b348015610e2257600080fd5b50610e6560048036036020811015610e3957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137f4565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610ea8578082015181840152602081019050610e8d565b505050509050019250505060405180910390f35b348015610ec857600080fd5b50610f7f60048036036020811015610edf57600080fd5b8101908080359060200190640100000000811115610efc57600080fd5b820183602082011115610f0e57600080fd5b80359060200191846020830284011164010000000083111715610f3057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061388b565b005b348015610f8d57600080fd5b50610f96613b1a565b005b348015610fa457600080fd5b50610fd160048036036020811015610fbb57600080fd5b8101908080359060200190929190505050613e2d565b005b348015610fdf57600080fd5b5061100c60048036036020811015610ff657600080fd5b81019080803590602001909291905050506140d5565b6040518082815260200191505060405180910390f35b34801561102e57600080fd5b506110376140f6565b6040518082815260200191505060405180910390f35b34801561105957600080fd5b506110626140fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156110b057600080fd5b506110b9614122565b6040518082815260200191505060405180910390f35b3480156110db57600080fd5b50611108600480360360208110156110f257600080fd5b8101908080359060200190929190505050614134565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561115657600080fd5b506111996004803603602081101561116d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614170565b005b3480156111a757600080fd5b506111b0614365565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156111f35780820151818401526020810190506111d8565b505050509050019250505060405180910390f35b34801561121357600080fd5b506112406004803603602081101561122a57600080fd5b81019080803590602001909291905050506143f3565b604051808215151515815260200191505060405180910390f35b600360009054906101000a900460ff1681565b600d5481565b60135481565b6000806011541415905090565b600960149054906101000a900460ff1681565b6112a1611e17565b611313576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f48617320746f2062652066696e616c697a65640000000000000000000000000081525060200191505060405180910390fd5b601460009054906101000a900460ff1615611396576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f48617320746f206265206e6f6e2041746f6d696320737761700000000000000081525060200191505060405180910390fd5b61139e611279565b611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4d696e696d756d2072616973652068617320746f20657869737400000000000081525060200191505060405180910390fd5b6114186121dd565b61148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4d696e696d756d2072616973652068617320746f20626520726561636865640081525060200191505060405180910390fd5b60006005600083815260200190815260200160002060000154141580156114d257506005600082815260200190815260200160002060040160009054906101000a900460ff16155b611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061470f6021913960400191505060405180910390fd5b611530816143f3565b6115a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f41646472657373206973206e6f7420627579657200000000000000000000000081525060200191505060405180910390fd5b60016005600083815260200190815260200160002060040160006101000a81548160ff02191690831515021790555060016005600083815260200190815260200160002060040160016101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff166108fc60056000848152602001908152602001600020600201549081150290604051600060405180830381858888f1935050505015801561165c573d6000803e3d6000fd5b5050565b601460009054906101000a900460ff1681565b61167b614461565b73ffffffffffffffffffffffffffffffffffffffff166116996122f4565b73ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61172a611e7e565b1561179d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6117a5611e17565b611817576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f48617320746f2062652066696e616c697a65640000000000000000000000000081525060200191505060405180910390fd5b61181f61371b565b611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4d696e696d756d2072616973652068617320746f20626520726561636865640081525060200191505060405180910390fd5b601460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6118f560646118e76015544761446990919063ffffffff16565b6144ef90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611920573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611967573d6000803e3d6000fd5b50565b611972614461565b73ffffffffffffffffffffffffffffffffffffffff166119906122f4565b73ffffffffffffffffffffffffffffffffffffffff1614611a19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611a21611e7e565b611a93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611ad9573d6000803e3d6000fd5b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bb857600080fd5b505afa158015611bcc573d6000803e3d6000fd5b505050506040513d6020811015611be257600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611c5c57600080fd5b505af1158015611c70573d6000803e3d6000fd5b505050506040513d6020811015611c8657600080fd5b810190808051906020019092919050505050565b600f5481565b6000600d544210905090565b600a5481565b600080600080600080611cc3614683565b600560008981526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250509050806000015181602001518260400151836060015184608001518560a001519650965096509650965096505091939550919395565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600e544211905090565b6000600d54421015905090565b6000611e3a611e23565b8015611e4b5750611e49611e17565b155b905090565b60086020528160005260406000208181548110611e6957fe5b90600052602060002001600091509150505481565b60008060009054906101000a900460ff16905090565b600c5481565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f3b57600080fd5b505afa158015611f4f573d6000803e3d6000fd5b505050506040513d6020811015611f6557600080fd5b8101908080519060200190929190505050905090565b60606007805480602002602001604051908101604052809291908181526020018280548015611fc957602002820191906000526020600020905b815481526020019060010190808311611fb5575b5050505050905090565b6060600280548060200260200160405190810160405280929190818152602001828054801561205757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161200d575b5050505050905090565b600080600f541415905090565b612076614461565b73ffffffffffffffffffffffffffffffffffffffff166120946122f4565b73ffffffffffffffffffffffffffffffffffffffff161461211d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121ea601154612323565b6121f5601254612323565b1061224b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806147b2602e913960400191505060405180910390fd5b6001905090565b60125481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040160009054906101000a900460ff16908060040160019054906101000a900460ff16905086565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6000612351600a54600a0a612343600c548561446990919063ffffffff16565b6144ef90919063ffffffff16565b9050919050565b612360614461565b73ffffffffffffffffffffffffffffffffffffffff1661237e6122f4565b73ffffffffffffffffffffffffffffffffffffffff1614612407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61240f611e17565b612481576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f48617320746f2062652066696e616c697a65640000000000000000000000000081525060200191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806146d4603b913960400191505060405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb838373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156125c757600080fd5b505afa1580156125db573d6000803e3d6000fd5b505050506040513d60208110156125f157600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561266b57600080fd5b505af115801561267f573d6000803e3d6000fd5b505050506040513d602081101561269557600080fd5b8101908080519060200190929190505050612718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f455243323020546f6b656e207472616e73666572206661696c6564000000000081525060200191505060405180910390fd5b505050565b612725611e7e565b15612798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b600960149054906101000a900460ff1661281a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f48617320746f2062652066756e6465640000000000000000000000000000000081525060200191505060405180910390fd5b612822611e30565b612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f48617320746f206265206f70656e00000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900460ff1615612925576128b233611dc1565b612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f57686974656c6973743a204e6f742057686974656c697374656400000000000081525060200191505060405180910390fd5b5b6000811161299b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f416d6f756e742068617320746f20626520706f7369746976650000000000000081525060200191505060405180910390fd5b6129a361370d565b8111156129fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061478e6024913960400191505060405180910390fd5b612a0481612323565b3414612a5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260518152602001806148836051913960600191505060405180910390fd5b600f54811015612ab6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806148d46024913960400191505060405180910390fd5b601054811115612b11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806147e06025913960400191505060405180910390fd5b6060612b1c336137f4565b9050600080905060008090505b8251811015612c3e57612b3a614683565b60056000858481518110612b4a57fe5b602002602001015181526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250509050612c2e81600001518461457890919063ffffffff16565b9250508080600101915050612b29565b50601054612c55848361457890919063ffffffff16565b1115612cac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806148526031913960400191505060405180910390fd5b601460009054906101000a900460ff1615612e1857600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612d6a57600080fd5b505af1158015612d7e573d6000803e3d6000fd5b505050506040513d6020811015612d9457600080fd5b8101908080519060200190929190505050612e17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4552433230207472616e73666572206469646ec2b47420776f726b000000000081525060200191505060405180910390fd5b5b60006004549050612e35600160045461457890919063ffffffff16565b600481905550612e43614683565b6040518060c001604052808681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001348152602001428152602001601460009054906101000a900460ff161515815260200160001515815250905080600560008481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160040160016101000a81548160ff0219169083151502179055509050506007829080600181540180825580915050600190039060005260206000200160009091909190915055600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150556006339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061305f8560125461457890919063ffffffff16565b6012819055503373ffffffffffffffffffffffffffffffffffffffff167fbec109f7ee137de661c6887caa96653c0545050a9908a3b6eb5190440bbec8648642604051808381526020018281526020019250505060405180910390a25050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b60155481565b601460009054906101000a900460ff161561316b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f48617320746f206265206e6f6e2041746f6d696320737761700000000000000081525060200191505060405180910390fd5b613173611e17565b6131e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f48617320746f2062652066696e616c697a65640000000000000000000000000081525060200191505060405180910390fd5b6131ed611e7e565b15613260576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60006005600083815260200190815260200160002060000154141580156132a857506005600082815260200190815260200160002060040160009054906101000a900460ff16155b6132fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061470f6021913960400191505060405180910390fd5b613306816143f3565b613378576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f41646472657373206973206e6f7420627579657200000000000000000000000081525060200191505060405180910390fd5b60016005600083815260200190815260200160002060040160006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360056000858152602001908152602001600020600001546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561346657600080fd5b505af115801561347a573d6000803e3d6000fd5b505050506040513d602081101561349057600080fd5b8101908080519060200190929190505050613513576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4552433230207472616e73666572206661696c6564000000000000000000000081525060200191505060405180910390fd5b50565b61351e614461565b73ffffffffffffffffffffffffffffffffffffffff1661353c6122f4565b73ffffffffffffffffffffffffffffffffffffffff16146135c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600281815481106135d257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461363457600080fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506002818154811061369957fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558173ffffffffffffffffffffffffffffffffffffffff167fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df75760405160405180910390a25050565b600060125460135403905090565b6000613725611279565b1561379857613735601154612323565b613740601254612323565b1015613797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614805602c913960400191505060405180910390fd5b5b6001905090565b600b60009054906101000a900460ff1681565b600281815481106137bf57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6060600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561387f57602002820191906000526020600020905b81548152602001906001019080831161386b575b50505050509050919050565b613893614461565b73ffffffffffffffffffffffffffffffffffffffff166138b16122f4565b73ffffffffffffffffffffffffffffffffffffffff161461393a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b8151811015613aa757600115156001600084848151811061395d57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156139ba57600080fd5b60018060008484815181106139cb57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506002828281518110613a3257fe5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050613940565b508060405180828051906020019060200280838360005b83811015613ad9578082015181840152602081019050613abe565b5050505090500191505060405180910390207fe3c5086a518f78e8aa61952bb9c28a9a0f0022707e537ea961faa918e0d89f6f60405160405180910390a250565b613b22614461565b73ffffffffffffffffffffffffffffffffffffffff16613b406122f4565b73ffffffffffffffffffffffffffffffffffffffff1614613bc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b613bd1611e17565b613c43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f48617320746f2062652066696e616c697a65640000000000000000000000000081525060200191505060405180910390fd5b600b60009054906101000a900460ff1615613c5d57600080fd5b6000613c67611279565b8015613c865750613c79601154612323565b613c84601254612323565b105b15613c95576013549050613caf565b613cac60125460135461460090919063ffffffff16565b90505b6000811115613e2a576001600b60006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613d7c57600080fd5b505af1158015613d90573d6000803e3d6000fd5b505050506040513d6020811015613da657600080fd5b8101908080519060200190929190505050613e29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4552433230207472616e73666572206661696c6564000000000000000000000081525060200191505060405180910390fd5b5b50565b613e35611ca0565b613ea7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f48617320746f206265207072652d73746172746564000000000000000000000081525060200191505060405180910390fd5b601354613ec482613eb6611e9a565b61457890919063ffffffff16565b1115613f1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806147306038913960400191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613ff857600080fd5b505af115801561400c573d6000803e3d6000fd5b505050506040513d602081101561402257600080fd5b81019080805190602001909291905050506140a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4661696c656420455243323020746f6b656e207472616e73666572000000000081525060200191505060405180910390fd5b6013546140b0611e9a565b14156140d2576001600960146101000a81548160ff0219169083151502179055505b50565b600781815481106140e257fe5b906000526020600020016000915090505481565b60105481565b601460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061412f601354612323565b905090565b6006818154811061414157fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b614178614461565b73ffffffffffffffffffffffffffffffffffffffff166141966122f4565b73ffffffffffffffffffffffffffffffffffffffff161461421f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156142a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806147686026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060068054806020026020016040519081016040528092919081815260200182805480156143e957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161439f575b5050505050905090565b60006005600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16149050919050565b600033905090565b60008083141561447c57600090506144e9565b600082840290508284828161448d57fe5b04146144e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806148316021913960400191505060405180910390fd5b809150505b92915050565b6000808211614566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838161456f57fe5b04905092915050565b6000808284019050838110156145f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600082821115614678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6040518060c0016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600015158152602001600015158152509056fe546f6b656e20416464726573732068617320746f2062652064696666207468616e20746865206572633230207375626a65637420746f2073616c655075726368617365206973206569746865722030206f722066696e616c697a65645472616e73666572656420746f6b656e73206861766520746f20626520657175616c206f72206c657373207468616e2070726f706f7365644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416d6f756e74206973206c657373207468616e20746f6b656e7320617661696c61626c65546f74616c526169736520697320626967676572207468616e206d696e696d756d20726169736520616d6f756e74416d6f756e7420697320736d616c6c6572207468616e206d6178696d756d20616d6f756e74546f74616c5261697365206973206c657373207468616e206d696e696d756d20726169736520616d6f756e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416464726573732068617320616c72656164792070617373656420746865206d617820616d6f756e74206f662073776170557365722068617320746f20636f7665722074686520636f7374206f6620746865207377617020696e204554482c207573652074686520636f73742066756e6374696f6e20746f2064657465726d696e65416d6f756e7420697320626967676572207468616e206d696e696d756d20616d6f756e74a264697066735822122067aa56e7654a5085da44f9c1d5a4364e1642f2c2a062345b5dd645de18fd07ca64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008ed8856c42e1367bee99cd3fe5c75c1e4f689bf0000000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000013da329b63364718000000000000000000000000000000000000000000000000000000000000061186710000000000000000000000000000000000000000000000000000000006119b8900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a5a058fc295ed0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x8Ed8856C42e1367bEE99CD3FE5c75c1E4F689Bf0
Arg [1] : _tradeValue (uint256): 25000000000000
Arg [2] : _tokensForSale (uint256): 1500000000000000000000000
Arg [3] : _startDate (uint256): 1628989200
Arg [4] : _endDate (uint256): 1629075600
Arg [5] : _individualMinimumAmount (uint256): 0
Arg [6] : _individualMaximumAmount (uint256): 200000000000000000000000
Arg [7] : _isTokenSwapAtomic (bool): False
Arg [8] : _minimumRaise (uint256): 0
Arg [9] : _feeAmount (uint256): 1
Arg [10] : _hasWhitelisting (bool): False
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000008ed8856c42e1367bee99cd3fe5c75c1e4f689bf0
Arg [1] : 000000000000000000000000000000000000000000000000000016bcc41e9000
Arg [2] : 000000000000000000000000000000000000000000013da329b6336471800000
Arg [3] : 0000000000000000000000000000000000000000000000000000000061186710
Arg [4] : 000000000000000000000000000000000000000000000000000000006119b890
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 000000000000000000000000000000000000000000002a5a058fc295ed000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
28838:13040:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;3677:35:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3677:35:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29423:24;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29423:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29864:32;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29864:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34013:98;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34013:98:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29255:32;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29255:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;39486:678;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39486:678:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39486:678:0;;;;;;;;;;;;;;;;;:::i;:::-;;29935:32;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29935:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;40199:312;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40199:312:0;;;:::i;:::-;;41687:188;;;:::i;:::-;;29518:42;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29518:42:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34907:101;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34907:101:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29294:24;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29294:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35373:319;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35373:319:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35373:319:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4863:112;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4863:112:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;4863:112:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34684:101;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34684:101:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34793:102;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34793:102:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35016:101;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35016:101:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29148:48;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29148:48:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29148:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27539:86;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27539:86:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29372:25;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29372:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33775:113;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33775:113:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35700:101;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35700:101:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;35700:101:0;;;;;;;;;;;;;;;;;4735:119;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4735:119:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4735:119:0;;;;;;;;;;;;;;;;;35125:109;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35125:109:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2892:148;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2892:148:0;;;:::i;:::-;;34171:203;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34171:203:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29775:34;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29775:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29230:18;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29230:18:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28953:45;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28953:45:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28953:45:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2241:87;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2241:87:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29684:31;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29684:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35240:125;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35240:125:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35240:125:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41200:448;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41200:448:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;41200:448:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36681:2188;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36681:2188:0;;;;;;;;;;;;;;;;;:::i;:::-;;3585:41;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3585:41:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;3585:41:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30140:32;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30140:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38930:513;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38930:513:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;38930:513:0;;;;;;;;;;;;;;;;;:::i;:::-;;4462:265;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4462:265:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;4462:265:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33896:109;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33896:109:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34430:246;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34430:246:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29325:40;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29325:40:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3633:37;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3633:37:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;3633:37:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29472:22;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29472:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35908:127;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35908:127:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35908:127:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;35908:127:0;;;;;;;;;;;;;;;;;4119:335;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4119:335:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;4119:335:0;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;4119:335:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;4119:335:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;4119:335:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4119:335:0;;;;;;;;;;;;;;;:::i;:::-;;40525:664;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40525:664:0;;;:::i;:::-;;36076:565;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36076:565:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36076:565:0;;;;;;;;;;;;;;;;;:::i;:::-;;29091:28;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29091:28:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29091:28:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29601:42;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29601:42:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30013:79;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30013:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33664:103;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33664:103:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29030:23;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29030:23:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29030:23:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3195:244;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3195:244:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;3195:244:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;35809:91;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35809:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;35809:91:0;;;;;;;;;;;;;;;;;33492:139;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33492:139:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33492:139:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3677:35;;;;;;;;;;;;;:::o;29423:24::-;;;;:::o;29864:32::-;;;;:::o;34013:98::-;34061:4;34101:1;34085:12;;:17;;34077:26;;34013:98;:::o;29255:32::-;;;;;;;;;;;;;:::o;39486:678::-;32762:14;:12;:14::i;:::-;32754:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32524:17:::1;;;;;;;;;;;32523:18;32515:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;39610:17:::2;:15;:17::i;:::-;39602:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;39677:25;:23;:25::i;:::-;39669:69;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;39846:1;39813:9;:22;39823:11;39813:22;;;;;;;;;;;:29;;;:34;;39812:76;;;;;39853:9;:22;39863:11;39853:22;;;;;;;;;;;:35;;;;;;;;;;;;39852:36;39812:76;39804:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39945:20;39953:11;39945:7;:20::i;:::-;39937:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;40039:4;40001:9;:22;40011:11;40001:22;;;;;;;;;;;:35;;;:42;;;;;;;;;;;;;;;;;;40088:4;40054:9;:22;40064:11;40054:22;;;;;;;;;;;:31;;;:38;;;;;;;;;;;;;;;;;;40103:10;:19;;:53;40123:9;:22;40133:11;40123:22;;;;;;;;;;;:32;;;40103:53;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;40103:53:0;39486:678:::0;:::o;29935:32::-;;;;;;;;;;;;;:::o;40199:312::-;2472:12;:10;:12::i;:::-;2461:23;;:7;:5;:7::i;:::-;:23;;;2453:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27865:8:::1;:6;:8::i;:::-;27864:9;27856:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32762:14:::2;:12;:14::i;:::-;32754:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;40292:22:::3;:20;:22::i;:::-;40284:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;40361:11;;;;;;;;;;;:20;;:71;40382:49;40427:3;40382:40;40408:13;;40382:21;:25;;:40;;;;:::i;:::-;:44;;:49;;;;:::i;:::-;40361:71;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::3;77:16;74:1;67:27;5:2;40361:71:0;40461:10;:19;;:42;40481:21;40461:42;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::3;77:16;74:1;67:27;5:2;40461:42:0;40199:312::o:0;41687:188::-;2472:12;:10;:12::i;:::-;2461:23;;:7;:5;:7::i;:::-;:23;;;2453:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28142:8:::1;:6;:8::i;:::-;28134:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41756:10:::2;:19;;:42;41776:21;41756:42;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;41756:42:0;41809:5;;;;;;;;;;;:14;;;41824:10;41836:5;;;;;;;;;;;:15;;;41860:4;41836:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;41836:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;41836:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;41836:30:0;;;;;;;;;;;;;;;;41809:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;41809:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;41809:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;41809:58:0;;;;;;;;;;;;;;;;;41687:188::o:0;29518:42::-;;;;:::o;34907:101::-;34950:4;34991:9;;34973:15;:27;34966:34;;34907:101;:::o;29294:24::-;;;;:::o;35373:319::-;35439:7;35448;35457;35466;35475:4;35481;35497:24;;:::i;:::-;35524:9;:23;35534:12;35524:23;;;;;;;;;;;35497:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35566:8;:15;;;35583:8;:18;;;35603:8;:18;;;35623:8;:18;;;35643:8;:21;;;35666:8;:17;;;35558:126;;;;;;;;;;;;;35373:319;;;;;;;:::o;4863:112::-;4924:4;4948:9;:19;4958:8;4948:19;;;;;;;;;;;;;;;;;;;;;;;;;4941:26;;4863:112;;;:::o;34684:101::-;34729:4;34770:7;;34752:15;:25;34745:32;;34684:101;:::o;34793:102::-;34836:4;34878:9;;34859:15;:28;;34852:35;;34793:102;:::o;35016:101::-;35055:4;35078:12;:10;:12::i;:::-;:31;;;;;35095:14;:12;:14::i;:::-;35094:15;35078:31;35071:38;;35016:101;:::o;29148:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27539:86::-;27586:4;27610:7;;;;;;;;;;;27603:14;;27539:86;:::o;29372:25::-;;;;:::o;33775:113::-;33823:7;33850:5;;;;;;;;;;;:15;;;33874:4;33850:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33850:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33850:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33850:30:0;;;;;;;;;;;;;;;;33843:37;;33775:113;:::o;35700:101::-;35746:16;35782:11;35775:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35700:101;:::o;4735:119::-;4790:16;4826:20;4819:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4735:119;:::o;35125:109::-;35174:4;35224:1;35197:23;;:28;;35189:37;;35125:109;:::o;2892:148::-;2472:12;:10;:12::i;:::-;2461:23;;:7;:5;:7::i;:::-;:23;;;2453:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2999:1:::1;2962:40;;2983:6;;;;;;;;;;;2962:40;;;;;;;;;;;;3030:1;3013:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2892:148::o:0;34171:203::-;34227:4;34275:18;34280:12;;34275:4;:18::i;:::-;34251:21;34256:15;;34251:4;:21::i;:::-;:42;34243:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34362:4;34355:11;;34171:203;:::o;29775:34::-;;;;:::o;29230:18::-;;;;;;;;;;;;;:::o;28953:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2241:87::-;2287:7;2314:6;;;;;;;;;;;2307:13;;2241:87;:::o;29684:31::-;;;;:::o;35240:125::-;35292:4;35315:41;35347:8;;35343:2;:12;35315:23;35327:10;;35315:7;:11;;:23;;;;:::i;:::-;:27;;:41;;;;:::i;:::-;35308:48;;35240:125;;;:::o;41200:448::-;2472:12;:10;:12::i;:::-;2461:23;;:7;:5;:7::i;:::-;:23;;;2453:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32762:14:::1;:12;:14::i;:::-;32754:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41347:5:::2;;;;;;;;;;;41322:31;;:13;:31;;;;41314:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41489:16;41514:13;41489:39;;41547:10;:19;;;41567:3;41572:10;:20;;;41601:4;41572:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;41572:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;41572:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;41572:35:0;;;;;;;;;;;;;;;;41547:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;41547:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;41547:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;41547:61:0;;;;;;;;;;;;;;;;41539:101;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;32811:1;41200:448:::0;;:::o;36681:2188::-;27865:8;:6;:8::i;:::-;27864:9;27856:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33404:12:::1;;;;;;;;;;;33396:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32964:8:::2;:6;:8::i;:::-;32956:35;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;3879:15:::3;;;;;;;;;;;3876:109;;;3918:25;3932:10;3918:13;:25::i;:::-;3910:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;3876:109;36852:1:::4;36842:7;:11;36834:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;36975:12;:10;:12::i;:::-;36964:7;:23;;36956:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37161:13;37166:7;37161:4;:13::i;:::-;37148:9;:26;37140:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37352:23;;37341:7;:34;;37333:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37509:23;;37498:7;:34;;37490:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37644:27;37674:26;37689:10;37674:14;:26::i;:::-;37644:56;;37711:37;37751:1:::0;37711:41:::4;;37768:6;37777:1:::0;37768:10:::4;;37763:222;37784:10;:17;37780:1;:21;37763:222;;;37823:25;;:::i;:::-;37851:9;:24;37861:10;37872:1;37861:13;;;;;;;;;;;;;;37851:24;;;;;;;;;;;37823:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;37922:51;37956:9;:16;;;37922:29;:33;;:51;;;;:::i;:::-;37890:83;;37763:222;37803:3;;;;;;;37763:222;;;;38049:23;;38003:42;38037:7;38003:29;:33;;:42;;;;:::i;:::-;:69;;37995:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38142:17;;;;;;;;;;;38139:159;;;38219:5;;;;;;;;;;;:14;;;38234:10;38246:7;38219:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::4;2:2;38219:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::4;77:16;74:1;67:27;5:2;38219:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::4;4:2;38219:35:0;;;;;;;;;;;;;;;;38211:75;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;38139:159;38318:19;38340:9;;38318:31;;38372:16;38386:1;38372:9;;:13;;:16;;;;:::i;:::-;38360:9;:28;;;;38436:24;;:::i;:::-;38463:104;;;;;;;;38472:7;38463:104;;;;38481:10;38463:104;;;;;;38493:9;38463:104;;;;38504:15;38463:104;;;;38521:17;;;;;;;;;;;38463:104;;;;;;38561:5;38463:104;;;;::::0;38436:131:::4;;38603:8;38578:9;:22;38588:11;38578:22;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38622:11;38639;38622:29;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;38622:29:0;;;;;;;;;;;;;;;;;;;38662:11;:23;38674:10;38662:23;;;;;;;;;;;;;;;38691:11;38662:41;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;38662:41:0;;;;;;;;;;;;;;;;;;;38714:6;38726:10;38714:23;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;38714:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38766:28;38786:7;38766:15;;:19;;:28;;;;:::i;:::-;38748:15;:46;;;;38833:10;38810:51;;;38824:7;38845:15;38810:51;;;;;;;;;;;;;;;;;;;;;;;;3995:1;;;;36681:2188:::0;:::o;3585:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;30140:32::-;;;;:::o;38930:513::-;32524:17;;;;;;;;;;;32523:18;32515:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32762:14:::1;:12;:14::i;:::-;32754:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27865:8:::2;:6;:8::i;:::-;27864:9;27856:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;39136:1:::3;39103:9;:22;39113:11;39103:22;;;;;;;;;;;:29;;;:34;;39102:76;;;;;39143:9;:22;39153:11;39143:22;;;;;;;;;;;:35;;;;;;;;;;;;39142:36;39102:76;39094:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39235:20;39243:11;39235:7;:20::i;:::-;39227:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;39329:4;39291:9;:22;39301:11;39291:22;;;;;;;;;;;:35;;;:42;;;;;;;;;;;;;;;;;;39352:5;;;;;;;;;;;:14;;;39367:10;39379:9;:22;39389:11;39379:22;;;;;;;;;;;:29;;;39352:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::3;2:2;39352:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::3;77:16;74:1;67:27;5:2;39352:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::3;4:2;39352:57:0;;;;;;;;;;;;;;;;39344:91;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;38930:513:::0;:::o;4462:265::-;2472:12;:10;:12::i;:::-;2461:23;;:7;:5;:7::i;:::-;:23;;;2453:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4560:20:::1;4581:6;4560:28;;;;;;;;;;;;;;;;;;;;;;;;;4548:40;;:8;:40;;;4540:49;;12:1:-1;9::::0;2:12:::1;4540:49:0;4622:5;4600:9;:19;4610:8;4600:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;4645:20;4666:6;4645:28;;;;;;;;;;;;;;;;4638:35;;;;;;;;;;;4710:8;4689:30;;;;;;;;;;;;4462:265:::0;;:::o;33896:109::-;33939:7;33982:15;;33966:13;;:31;33959:38;;33896:109;:::o;34430:246::-;34483:4;34502:17;:15;:17::i;:::-;34499:148;;;34568:18;34573:12;;34568:4;:18::i;:::-;34543:21;34548:15;;34543:4;:21::i;:::-;:43;;34535:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34499:148;34664:4;34657:11;;34430:246;:::o;29325:40::-;;;;;;;;;;;;;:::o;3633:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29472:22::-;;;;:::o;35908:127::-;35970:16;36006:11;:21;36018:8;36006:21;;;;;;;;;;;;;;;35999:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35908:127;;;:::o;4119:335::-;2472:12;:10;:12::i;:::-;2461:23;;:7;:5;:7::i;:::-;:23;;;2453:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4194:6:::1;4203:1:::0;4194:10:::1;;4189:214;4210:10;:17;4206:1;:21;4189:214;;;4285:4;4257:32;;:9;:24;4267:10;4278:1;4267:13;;;;;;;;;;;;;;4257:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;4249:41;;12:1:-1;9::::0;2:12:::1;4249:41:0;4332:4;4305:9:::0;:24:::1;4315:10;4326:1;4315:13;;;;;;;;;;;;;;4305:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;4351:20;4377:10;4388:1;4377:13;;;;;;;;;;;;;;4351:40;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;4351:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4229:3;;;;;;;4189:214;;;;4435:10;4418:28;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4418:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;4119:335:::0;:::o;40525:664::-;2472:12;:10;:12::i;:::-;2461:23;;:7;:5;:7::i;:::-;:23;;;2453:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32762:14:::1;:12;:14::i;:::-;32754:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;40612:20:::2;;;;;;;;;;;40611:21;40603:30;;12:1:-1;9::::0;2:12:::2;40603:30:0;40644:20;40678:17;:15;:17::i;:::-;:79;;;;;40738:18;40743:12;;40738:4;:18::i;:::-;40714:21;40719:15;;40714:4;:21::i;:::-;:42;40678:79;40675:332;;;40824:13;;40809:28;;40675:332;;;40961:34;40979:15;;40961:13;;:17;;:34;;;;:::i;:::-;40946:49;;40675:332;41037:1;41022:12;:16;41019:163;;;41077:4;41054:20;;:27;;;;;;;;;;;;;;;;;;41104:5;;;;;;;;;;;:14;;;41119:10;41131:12;41104:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;41104:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;41104:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;41104:40:0;;;;;;;;;;;;;;;;41096:74;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;41019:163;32811:1;40525:664::o:0;36076:565::-;33183:12;:10;:12::i;:::-;33175:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36258:13:::1;;36224:30;36246:7;36224:17;:15;:17::i;:::-;:21;;:30;;;;:::i;:::-;:47;;36216:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36383:5;;;;;;;;;;;:18;;;36402:10;36422:4;36429:7;36383:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36383:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36383:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;36383:54:0;;;;;;;;;;;;;;;;36375:94;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36574:13;;36553:17;:15;:17::i;:::-;:34;36550:84;;;36618:4;36603:12;;:19;;;;;;;;;;;;;;;;;;36550:84;36076:565:::0;:::o;29091:28::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29601:42::-;;;;:::o;30013:79::-;;;;;;;;;;;;;:::o;33664:103::-;33711:7;33739:19;33744:13;;33739:4;:19::i;:::-;33731:28;;33664:103;:::o;29030:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3195:244::-;2472:12;:10;:12::i;:::-;2461:23;;:7;:5;:7::i;:::-;:23;;;2453:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3304:1:::1;3284:22;;:8;:22;;;;3276:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3394:8;3365:38;;3386:6;;;;;;;;;;;3365:38;;;;;;;;;;;;3423:8;3414:6;;:17;;;;;;;;;;;;;;;;;;3195:244:::0;:::o;35809:91::-;35850:16;35886:6;35879:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35809:91;:::o;33492:139::-;33551:4;33590:9;:22;33600:11;33590:22;;;;;;;;;;;:32;;;;;;;;;;;;33576:46;;:10;:46;;;33568:55;;33492:139;;;:::o;737:106::-;790:15;825:10;818:17;;737:106;:::o;11547:220::-;11605:7;11634:1;11629;:6;11625:20;;;11644:1;11637:8;;;;11625:20;11656:9;11672:1;11668;:5;11656:17;;11701:1;11696;11692;:5;;;;;;:10;11684:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11758:1;11751:8;;;11547:220;;;;;:::o;12245:153::-;12303:7;12335:1;12331;:5;12323:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12389:1;12385;:5;;;;;;12378:12;;12245:153;;;;:::o;10668:179::-;10726:7;10746:9;10762:1;10758;:5;10746:17;;10787:1;10782;:6;;10774:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10838:1;10831:8;;;10668:179;;;;:::o;11130:158::-;11188:7;11221:1;11216;:6;;11208:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11279:1;11275;:5;11268:12;;11130:158;;;;:::o;28838:13040::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://67aa56e7654a5085da44f9c1d5a4364e1642f2c2a062345b5dd645de18fd07ca
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.