Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 4,605 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 17276238 | 590 days ago | IN | 0 ETH | 0.00196842 | ||||
Begin Lock Drop | 16648465 | 678 days ago | IN | 0 ETH | 0.02297334 | ||||
Approve | 16591530 | 686 days ago | IN | 0 ETH | 0.0011599 | ||||
Begin Lock Drop | 16345316 | 720 days ago | IN | 0 ETH | 0.01515217 | ||||
Begin Lock Drop | 16099818 | 755 days ago | IN | 0 ETH | 0.01356557 | ||||
Approve | 15750164 | 804 days ago | IN | 0 ETH | 0.00072798 | ||||
Transfer | 15540533 | 833 days ago | IN | 0 ETH | 0.00098883 | ||||
Begin Lock Drop | 15530509 | 834 days ago | IN | 0 ETH | 0.00701353 | ||||
Approve | 15383795 | 858 days ago | IN | 0 ETH | 0.00023593 | ||||
Begin Lock Drop | 15339734 | 865 days ago | IN | 0 ETH | 0.00659638 | ||||
Approve | 15310400 | 870 days ago | IN | 0 ETH | 0.00041605 | ||||
Approve | 15310385 | 870 days ago | IN | 0 ETH | 0.00025884 | ||||
Approve | 15310366 | 870 days ago | IN | 0 ETH | 0.00054485 | ||||
Transfer | 15310319 | 870 days ago | IN | 0 ETH | 0.00111244 | ||||
Begin Lock Drop | 15060549 | 908 days ago | IN | 0 ETH | 0.0149076 | ||||
Begin Lock Drop | 14887569 | 939 days ago | IN | 0 ETH | 0.0732176 | ||||
Transfer | 14738644 | 963 days ago | IN | 0 ETH | 0.00078017 | ||||
Begin Lock Drop | 14695212 | 970 days ago | IN | 0 ETH | 0.04350191 | ||||
Transfer | 14636693 | 979 days ago | IN | 0 ETH | 0.00163166 | ||||
Begin Lock Drop | 14502470 | 1000 days ago | IN | 0 ETH | 0.10508511 | ||||
Begin Lock Drop | 14309573 | 1030 days ago | IN | 0 ETH | 0.08162245 | ||||
Approve | 13875387 | 1097 days ago | IN | 0 ETH | 0.00302841 | ||||
Transfer | 13852836 | 1100 days ago | IN | 0 ETH | 0.0026828 | ||||
Begin Lock Drop | 13465591 | 1161 days ago | IN | 0 ETH | 0.0541149 | ||||
Transfer | 13328461 | 1183 days ago | IN | 0 ETH | 0.00353247 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
Contract Name:
KongERC20
Compiler Version
v0.5.2+commit.1df8f40c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-08-09 */ pragma solidity 0.5.2; /*************** ** ** ** INTERFACES ** ** ** ***************/ /** * @dev Interface of OpenZeppelin's ERC20; For definitions / documentation, see below. */ interface IERC20 { function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function balanceOf(address account) external view returns (uint256); function totalSupply() external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); } /**************************** ** ** ** OPEN ZEPPELIN CONTRACTS ** ** ** ****************************/ /** * @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 {ERC20Mintable}. * * 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 IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view 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 returns (bool) { _transfer(msg.sender, recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public returns (bool) { _approve(msg.sender, spender, value); 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 `value`. * - the caller must have allowance for `sender`'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].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 returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][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 returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][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 { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _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 { require(account != address(0), "ERC20: mint to the zero address"); _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 value) internal { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(value, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(value); emit Transfer(account, address(0), value); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is 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 value) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = value; emit Approval(owner, spender, value); } /** * @dev Destoys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See {_burn} and {_approve}. */ function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount, "ERC20: burn amount exceeds allowance")); } } /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ contract ERC20Burnable is ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public { _burn(msg.sender, amount); } /** * @dev See {ERC20-_burnFrom}. */ function burnFrom(address account, uint256 amount) public { _burnFrom(account, amount); } } /** * @dev Optional functions from the ERC20 standard. */ contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of * these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view 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. * * 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 returns (uint8) { return _decimals; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /******************* ** ** ** KONG CONTRACTS ** ** ** *******************/ /** * @title Kong ERC20 Token Contract. * * @dev Extends OpenZeppelin contracts `ERC20`, `ERC20Detailed`, and `ERC20Burnable`. * * Main additions: * * - `beginLockDrop()`: Function to deploy instances of `LockDrop` contracts. This function * can be called periodically. The amount of new tokens minted is proportional to the * existing supply of tokens. * * - `mint()`: Function to mint new Kong token. Can only be called by addresses that have * been added to `_minters` through `addMinter()` which is only accessible to `owner`. * `mint()` is subject to restrictions concerning the mintable amount (see below). */ contract KongERC20 is ERC20, ERC20Burnable, ERC20Detailed { // Constants. uint256 constant ONE_YEAR = 365 * 24 * 60 * 60; uint256 constant ONE_MONTH = 30 * 24 * 60 * 60; uint256 constant MINTING_REWARD = 2 ** 8 * 10 ** 18; // Account with right to add to `minters`. address public _owner; // Total amount minted through `minters`; does not include Genesis Kong. uint256 public _totalMinted; // Timestamp of contract deployment; used to calculate number of years since launch. uint256 public _launchTimestamp; // Address and timestamp of last `LockDrop` deployment. address public _lastLockDropAddress; uint256 public _lastLockDropTimestamp; // Addresses allowed to mint new Kong. mapping (address => bool) public _minters; // Emits when new `LockDrop` is deployed. event LockDropCreation( address deployedBy, uint256 deployedTimestamp, uint256 deployedSize, address deployedAddress ); // Emits when a new address is added to `minters`. event MinterAddition( address minter ); /** * @dev The constructor sets the following variables: * * - `_name`, * - `_symbol`, * - `_decimals`, * - `_owner`, and * - `_launchTimeStamp`. * * It also mints Genesis tokens. */ constructor() public ERC20Detailed('KONG', 'KONG', 18) { // Set _owner. _owner = 0xAB35D3476251C6b614dC2eb36380D7AF1232D822; // Store launch time. _launchTimestamp = block.timestamp; // Mint Genesis Kong. _mint(0xAB35D3476251C6b614dC2eb36380D7AF1232D822, 3 * 2 ** 20 * 10 ** 18); _mint(0x9699b500fD907636f10965d005813F0CE0986176, 2 ** 20 * 10 ** 18); _mint(0xdBa9A507aa0838370399FDE048752E91B5a27F06, 2 ** 20 * 10 ** 18); _mint(0xb2E0F4dee26CcCf1f3A267Ad185f212Dd3e7a6b1, 2 ** 20 * 10 ** 18); _mint(0xdB6e9FaAcE283e230939769A2DFa80BdcD7E1E43, 2 ** 20 * 10 ** 18); } /** * @dev Function to add a minter. */ function addMinter(address minter) public { require(msg.sender == _owner, 'Can only be called by owner.'); _minters[minter] = true; emit MinterAddition(minter); } /** * @dev Function to deploy a new `LockDrop` contract. The function can be called every 30 days, * i.e., whenever 30 days have passed since the function was last called successfully. * Mints approximately (1.01^(1/12) - 1) percent of the current total supply * and transfers the new tokens to the deployed contract. Mints `MINTING_REWARD` tokens * to whoever calls it successfully. */ function beginLockDrop() public { // Verify that time to last `LockDrop` deployment exceeds 30 days. require(_lastLockDropTimestamp + ONE_MONTH <= block.timestamp, '30 day cooling period.'); // Update timestamp of last `LockDrop` deployment. _lastLockDropTimestamp = block.timestamp; // Calculate size of lockdrop as 0.0008295381 (≈ 1.01 ^ (1/12) - 1) times the total supply. uint256 lockDropSize = totalSupply().mul(8295381).div(10 ** 10); // Deploy a new `LockDrop` contract. LockDrop lockDrop = new LockDrop(address(this)); // Update address of last lock drop. _lastLockDropAddress = address(lockDrop); // Mint `lockDropSize` to deployed `LockDrop` contract. _mint(_lastLockDropAddress, lockDropSize); // Mint `MINTING_REWARD` to msg.sender. _mint(msg.sender, MINTING_REWARD); // Emit event. emit LockDropCreation( msg.sender, block.timestamp, lockDropSize, address(lockDrop) ); } /** * @dev Helper function to calculate the maximal amount `minters` are capable of minting. */ function getMintingLimit() public view returns(uint256) { // Calculate number of years since launch. uint256 y = (block.timestamp - _launchTimestamp) / uint(ONE_YEAR); // Determine maximally mintable amount. uint256 mintingLimit = 2 ** 25 * 10 ** 18; if (y > 0) {mintingLimit += 2 ** 24 * 10 ** 18;} if (y > 1) {mintingLimit += 2 ** 23 * 10 ** 18;} if (y > 2) {mintingLimit += 2 ** 22 * 10 ** 18;} // Return. return mintingLimit; } /** * @dev Mints new tokens conditional on not exceeding minting limits. Can only be called by * valid `minters`. */ function mint(uint256 mintedAmount, address recipient) public { require(_minters[msg.sender] == true, 'Can only be called by registered minter.'); // Enforce global cap. require(_totalMinted.add(mintedAmount) <= getMintingLimit(), 'Exceeds global cap.'); // Increase minted amount. _totalMinted += mintedAmount; // Mint. _mint(recipient, mintedAmount); } } /** * @title Lock Drop Contract * * @dev This contract implements a Kong Lock Drop. * * Notes (check online sources for further details): * * - `stakeETH()` can be called to participate in the lock drop by staking ETH. Individual * stakes are immediately sent to separate instances of `LockETH` contracts that only the * staker has access to. * * - `claimKong()` can be called to claim Kong once the staking period is over. * * - The contract is open for contributions for 30 days after its deployment. */ contract LockDrop { using SafeMath for uint256; // Timestamp for the end of staking. uint256 public _stakingEnd; // Sum of all contribution weights. uint256 public _weightsSum; // Address of the KONG ERC20 contract. address public _kongERC20Address; // Mapping from contributors to contribution weights. mapping(address => uint256) public _weights; // Mapping from contributors to locking period ends. mapping(address => uint256) public _lockingEnds; // Events for staking and claiming. event Staked( address indexed contributor, address lockETHAddress, uint256 ethStaked, uint256 endDate ); event Claimed( address indexed claimant, uint256 ethStaked, uint256 kongClaim ); constructor (address kongERC20Address) public { // Set the address of the ERC20 token. _kongERC20Address = kongERC20Address; // Set the end of the staking period to 30 days after deployment. _stakingEnd = block.timestamp + 30 days; } /** * @dev Function to stake ETH in this lock drop. * * When called with positive `msg.value` and valid `stakingPeriod`, deploys instance of * `LockETH` contract and transfers `msg.value` to it. Each `LockETH` contract is only * accessible to the address that called `stakeETH()` to deploy the respective instance. * * For valid stakes, calculates the variable `weight` as the product of total lockup time * and `msg.value`. Stores `weight` in `_weights[msg.sender]` and adds it to `_weightsSum`. * * Expects `block.timestamp` to be smaller than `_stakingEnd`. Does not allow for topping * up of existing stakes. Restricts staking period to be between 90 and 365. * * Emits `Staked` event. */ function stakeETH(uint256 stakingPeriod) public payable { // Require positive msg.value. require(msg.value > 0, 'Msg value = 0.'); // No topping up. require(_weights[msg.sender] == 0, 'No topping up.'); // No contributions after _stakingEnd. require(block.timestamp <= _stakingEnd, 'Closed for contributions.'); // Ensure the staking period is valid. require(stakingPeriod >= 30 && stakingPeriod <= 365, 'Staking period outside of allowed range.'); // Calculate contribution weight as product of msg.value and total time the ETH is locked. uint256 totalTime = _stakingEnd + stakingPeriod * 1 days - block.timestamp; uint256 weight = totalTime.mul(msg.value); // Adjust contribution weights. _weightsSum = _weightsSum.add(weight); _weights[msg.sender] = weight; // Set end date for lock. _lockingEnds[msg.sender] = _stakingEnd + stakingPeriod * 1 days; // Deploy new lock contract. LockETH lockETH = (new LockETH).value(msg.value)(_lockingEnds[msg.sender], msg.sender); // Abort if the new contract's balance is lower than expected. require(address(lockETH).balance >= msg.value); // Emit event. emit Staked(msg.sender, address(lockETH), msg.value, _lockingEnds[msg.sender]); } /** * @dev Function to claim Kong. * * Determines the ratio of the contribution by `msg.sender` to all contributions. Sends * the product of this ratio and the contract's Kong balance to `msg.sender`. Sets the * contribution of `msg.sender` to zero afterwards and subtracts it from the sum of all * contributions. * * Expects `block.timestamp` to be larger than `_lockingEnds[msg.sender]`. Throws if * `_weights[msg.sender]` is zero. Emits `Claimed` event. * * NOTE: Overflow protection in calculation of `kongClaim` prevents anyone staking massive * amounts from ever claiming. Fine as long as product of weight and the contract's Kong * balance is at most (2^256)-1. */ function claimKong() external { // Verify that this `msg.sender` has contributed. require(_weights[msg.sender] > 0, 'Zero contribution.'); // Verify that this `msg.sender` can claim. require(block.timestamp > _lockingEnds[msg.sender], 'Cannot claim yet.'); // Calculate amount to return. uint256 weight = _weights[msg.sender]; uint256 kongClaim = IERC20(_kongERC20Address).balanceOf(address(this)).mul(weight).div(_weightsSum); // Adjust stake and sum of stakes. _weights[msg.sender] = 0; _weightsSum = _weightsSum.sub(weight); // Send kong to `msg.sender`. IERC20(_kongERC20Address).transfer(msg.sender, kongClaim); // Emit event. emit Claimed(msg.sender, weight, kongClaim); } } /** * @title LockETH contract. * * @dev Escrows ETH until `_endOfLockUp`. Calling `unlockETH()` after `_endOfLockUp` sends ETH * to `_contractOwner`. */ contract LockETH { uint256 public _endOfLockUp; address payable public _contractOwner; constructor (uint256 endOfLockUp, address payable contractOwner) public payable { _endOfLockUp = endOfLockUp; _contractOwner = contractOwner; } /** * @dev Send ETH owned by this contract to `_contractOwner`. Can be called by anyone but * requires `block.timestamp` > `endOfLockUp`. */ function unlockETH() external { // Verify end of lock-up period. require(block.timestamp > _endOfLockUp, 'Cannot claim yet.'); // Send ETH balance to `_contractOwner`. _contractOwner.transfer(address(this).balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"_minters","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"beginLockDrop","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_totalMinted","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_launchTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"mintedAmount","type":"uint256"},{"name":"recipient","type":"address"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"minter","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_lastLockDropAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMintingLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_lastLockDropTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"deployedBy","type":"address"},{"indexed":false,"name":"deployedTimestamp","type":"uint256"},{"indexed":false,"name":"deployedSize","type":"uint256"},{"indexed":false,"name":"deployedAddress","type":"address"}],"name":"LockDropCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minter","type":"address"}],"name":"MinterAddition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040805190810160405280600481526020017f4b4f4e47000000000000000000000000000000000000000000000000000000008152506040805190810160405280600481526020017f4b4f4e47000000000000000000000000000000000000000000000000000000008152506012826003908051906020019062000098929190620004b9565b508160049080519060200190620000b1929190620004b9565b5080600560006101000a81548160ff021916908360ff16021790555050505073ab35d3476251c6b614dc2eb36380d7af1232d822600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426007819055506200016673ab35d3476251c6b614dc2eb36380d7af1232d8226a029a2241af62c00000000062000250640100000000026401000000009004565b6200019f739699b500fd907636f10965d005813f0ce098617669de0b6b3a76400000000062000250640100000000026401000000009004565b620001d873dba9a507aa0838370399fde048752e91b5a27f0669de0b6b3a76400000000062000250640100000000026401000000009004565b6200021173b2e0f4dee26cccf1f3a267ad185f212dd3e7a6b169de0b6b3a76400000000062000250640100000000026401000000009004565b6200024a73db6e9faace283e230939769a2dfa80bdcd7e1e4369de0b6b3a76400000000062000250640100000000026401000000009004565b62000568565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620002f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6200031b816002546200042e6401000000000262001870179091906401000000009004565b60028190555062000382816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200042e6401000000000262001870179091906401000000009004565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000808284019050838110151515620004af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004fc57805160ff19168380011785556200052d565b828001600101855582156200052d579182015b828111156200052c5782518255916020019190600101906200050f565b5b5090506200053c919062000540565b5090565b6200056591905b808211156200056157600081600090555060010162000547565b5090565b90565b6133df80620005786000396000f3fe608060405234801561001057600080fd5b506004361061016a576000357c01000000000000000000000000000000000000000000000000000000009004806379cc6790116100e0578063a457c2d711610099578063a457c2d71461065b578063a9059cbb146106c1578063b2bdfa7b14610727578063bdff78ac14610771578063dd62ed3e1461078f578063ff747dea146108075761016a565b806379cc6790146104905780638920266c146104de57806394bf804d146104fc57806395d89b411461054a578063983b2d56146105cd5780639adce6a1146106115761016a565b80633575597d116101325780633575597d14610320578063395093511461037c57806342966c68146103e25780636963ab0c1461041057806370a082311461041a578063736bf591146104725761016a565b806306fdde031461016f578063095ea7b3146101f257806318160ddd1461025857806323b872dd14610276578063313ce567146102fc575b600080fd5b610177610825565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101b757808201518184015260208101905061019c565b50505050905090810190601f1680156101e45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023e6004803603604081101561020857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108c7565b604051808215151515815260200191505060405180910390f35b6102606108de565b6040518082815260200191505060405180910390f35b6102e26004803603606081101561028c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108e8565b604051808215151515815260200191505060405180910390f35b6103046109b4565b604051808260ff1660ff16815260200191505060405180910390f35b6103626004803603602081101561033657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109cb565b604051808215151515815260200191505060405180910390f35b6103c86004803603604081101561039257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109eb565b604051808215151515815260200191505060405180910390f35b61040e600480360360208110156103f857600080fd5b8101908080359060200190929190505050610a90565b005b610418610a9d565b005b61045c6004803603602081101561043057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ce6565b6040518082815260200191505060405180910390f35b61047a610d2e565b6040518082815260200191505060405180910390f35b6104dc600480360360408110156104a657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d34565b005b6104e6610d42565b6040518082815260200191505060405180910390f35b6105486004803603604081101561051257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d48565b005b610552610ea4565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610592578082015181840152602081019050610577565b50505050905090810190601f1680156105bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61060f600480360360208110156105e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f46565b005b6106196110c9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106a76004803603604081101561067157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ef565b604051808215151515815260200191505060405180910390f35b61070d600480360360408110156106d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111af565b604051808215151515815260200191505060405180910390f35b61072f6111c6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107796111ec565b6040518082815260200191505060405180910390f35b6107f1600480360360408110156107a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061126b565b6040518082815260200191505060405180910390f35b61080f6112f2565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108bd5780601f10610892576101008083540402835291602001916108bd565b820191906000526020600020905b8154815290600101906020018083116108a057829003601f168201915b5050505050905090565b60006108d43384846112f8565b6001905092915050565b6000600254905090565b60006108f58484846114f3565b6109a984336109a485606060405190810160405280602881526020016132d960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ae9092919063ffffffff16565b6112f8565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000610a863384610a8185600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187090919063ffffffff16565b6112f8565b6001905092915050565b610a9a33826118fa565b50565b4262278d006009540111151515610b1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f33302064617920636f6f6c696e6720706572696f642e0000000000000000000081525060200191505060405180910390fd5b426009819055506000610b596402540be400610b4b627e93d5610b3d6108de565b611ab590919063ffffffff16565b611b3f90919063ffffffff16565b9050600030610b66611f1c565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f080158015610bb8573d6000803e3d6000fd5b50905080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c28600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611b89565b610c3b33680de0b6b3a764000000611b89565b7f68b90a8aac48e93f43ad9c5b70cbab97e60977332a86d21cdcf6670ba686eb7033428484604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60065481565b610d3e8282611d46565b5050565b60075481565b60011515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515610df3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806132486028913960400191505060405180910390fd5b610dfb6111ec565b610e108360065461187090919063ffffffff16565b11151515610e86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4578636565647320676c6f62616c206361702e0000000000000000000000000081525060200191505060405180910390fd5b81600660008282540192505081905550610ea08183611b89565b5050565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f3c5780601f10610f1157610100808354040283529160200191610f3c565b820191906000526020600020905b815481529060010190602001808311610f1f57829003601f168201915b5050505050905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e206f6e6c792062652063616c6c6564206279206f776e65722e0000000081525060200191505060405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f59544bee92bf2b253a972a2287d60d36384a1d8c66c6b62b5fda5c1454d6e0fe81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006111a533846111a0856060604051908101604052806025815260200161338f60259139600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ae9092919063ffffffff16565b6112f8565b6001905092915050565b60006111bc3384846114f3565b6001905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806301e13380600754420381151561120257fe5b04905060006a1bc16d674ec800000000009050600082111561122f576a0de0b6b3a7640000000000810190505b6001821115611249576a06f05b59d3b20000000000810190505b6002821115611263576a03782dace9d90000000000810190505b809250505090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061336b6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806132706022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561157b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806133466025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806132036023913960400191505060405180910390fd5b61166f8160606040519081016040528060268152602001613292602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ae9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611702816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290151561185d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611822578082015181840152602081019050611807565b50505050905090810190601f16801561184f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008082840190508381101515156118f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611982576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806133256021913960400191505060405180910390fd5b6119ee8160606040519081016040528060228152602001613226602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ae9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4581600254611e0890919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080831415611ac85760009050611b39565b60008284029050828482811515611adb57fe5b04141515611b34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806132b86021913960400191505060405180910390fd5b809150505b92915050565b6000611b8183836040805190810160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e52565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b611c438160025461187090919063ffffffff16565b600281905550611c9a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b611d5082826118fa565b611e048233611dff846060604051908101604052806024815260200161330160249139600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ae9092919063ffffffff16565b6112f8565b5050565b6000611e4a83836040805190810160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117ae565b905092915050565b600080831182901515611f00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ec5578082015181840152602081019050611eaa565b50505050905090810190601f168015611ef25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385811515611f0e57fe5b049050809150509392505050565b6040516112d680611f2d8339019056fe608060405234801561001057600080fd5b506040516020806112d68339810180604052602081101561003057600080fd5b810190808051906020019092919050505080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062278d004201600081905550506112388061009e6000396000f3fe60806040526004361061008d576000357c0100000000000000000000000000000000000000000000000000000000900480636ecc20da1161006b5780636ecc20da146101b3578063cb0fcb52146101e1578063d583b596146101f8578063f2bacacf146102235761008d565b80632abbd8471461009257806332c1d50d146100e95780634d12616a1461014e575b600080fd5b34801561009e57600080fd5b506100a761024e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100f557600080fd5b506101386004803603602081101561010c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610274565b6040518082815260200191505060405180910390f35b34801561015a57600080fd5b5061019d6004803603602081101561017157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061028c565b6040518082815260200191505060405180910390f35b6101df600480360360208110156101c957600080fd5b81019080803590602001909291905050506102a4565b005b3480156101ed57600080fd5b506101f6610728565b005b34801561020457600080fd5b5061020d610bb4565b6040518082815260200191505060405180910390f35b34801561022f57600080fd5b50610238610bba565b6040518082815260200191505060405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915090505481565b60036020528060005260406000206000915090505481565b60003411151561031c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d73672076616c7565203d20302e00000000000000000000000000000000000081525060200191505060405180910390fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415156103d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f20746f7070696e672075702e00000000000000000000000000000000000081525060200191505060405180910390fd5b600054421115151561044d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f436c6f73656420666f7220636f6e747269627574696f6e732e0000000000000081525060200191505060405180910390fd5b601e8110158015610460575061016d8111155b15156104b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806111e56028913960400191505060405180910390fd5b6000426201518083026000540103905060006104dc3483610bc090919063ffffffff16565b90506104f381600154610c4a90919063ffffffff16565b60018190555080600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062015180830260005401600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600034600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054336105d6610ef4565b808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506040518091039082f08015801561062e573d6000803e3d6000fd5b5090509050348173ffffffffffffffffffffffffffffffffffffffff16311015151561065957600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f6c86f3fd5118b3aa8bb4f389a617046de0a3d3d477de1a1673d227f802f616dc8234600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a250505050565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115156107df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5a65726f20636f6e747269627574696f6e2e000000000000000000000000000081525060200191505060405180910390fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442111515610895576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f7420636c61696d207965742e00000000000000000000000000000081525060200191505060405180910390fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006109f76001546109e984600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156109a057600080fd5b505afa1580156109b4573d6000803e3d6000fd5b505050506040513d60208110156109ca57600080fd5b8101908080519060200190929190505050610bc090919063ffffffff16565b610cd490919063ffffffff16565b90506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a5382600154610d1e90919063ffffffff16565b600181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b505050506040513d6020811015610b4857600080fd5b8101908080519060200190929190505050503373ffffffffffffffffffffffffffffffffffffffff167f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a8383604051808381526020018281526020019250505060405180910390a25050565b60015481565b60005481565b600080831415610bd35760009050610c44565b60008284029050828482811515610be657fe5b04141515610c3f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806111c46021913960400191505060405180910390fd5b809150505b92915050565b6000808284019050838110151515610cca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000610d1683836040805190810160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d68565b905092915050565b6000610d6083836040805190810160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610e32565b905092915050565b600080831182901515610e16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ddb578082015181840152602081019050610dc0565b50505050905090810190601f168015610e085780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385811515610e2457fe5b049050809150509392505050565b60008383111582901515610ee1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ea6578082015181840152602081019050610e8b565b50505050905090810190601f168015610ed35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6040516102bf80610f058339019056fe60806040526040516040806102bf8339810180604052604081101561002357600080fd5b8101908080519060200190929190805190602001909291905050508160008190555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610228806100976000396000f3fe608060405234801561001057600080fd5b506004361061005e576000357c01000000000000000000000000000000000000000000000000000000009004806316ec1600146100635780632bb3b1141461006d57806387f95dda146100b7575b600080fd5b61006b6100d5565b005b6100756101d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100bf6101f6565b6040518082815260200191505060405180910390f35b6000544211151561014e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f7420636c61696d207965742e00000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501580156101cd573d6000803e3d6000fd5b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000548156fea165627a7a723058202aee17bc97a360fee9269768709045e6f067b367b082051c91a464d4b979e7ec0029536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775374616b696e6720706572696f64206f757473696465206f6620616c6c6f7765642072616e67652ea165627a7a72305820065c0e37c8ebcbc3978169570a35fd9ba94dd863f36a5b0c68261870c12022bc002945524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636543616e206f6e6c792062652063616c6c65642062792072656769737465726564206d696e7465722e45524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa165627a7a7230582087ad1ee8610421e693c718d2fac652c5339df46fed08c65b2b80aad6f056450c0029
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061016a576000357c01000000000000000000000000000000000000000000000000000000009004806379cc6790116100e0578063a457c2d711610099578063a457c2d71461065b578063a9059cbb146106c1578063b2bdfa7b14610727578063bdff78ac14610771578063dd62ed3e1461078f578063ff747dea146108075761016a565b806379cc6790146104905780638920266c146104de57806394bf804d146104fc57806395d89b411461054a578063983b2d56146105cd5780639adce6a1146106115761016a565b80633575597d116101325780633575597d14610320578063395093511461037c57806342966c68146103e25780636963ab0c1461041057806370a082311461041a578063736bf591146104725761016a565b806306fdde031461016f578063095ea7b3146101f257806318160ddd1461025857806323b872dd14610276578063313ce567146102fc575b600080fd5b610177610825565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101b757808201518184015260208101905061019c565b50505050905090810190601f1680156101e45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023e6004803603604081101561020857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108c7565b604051808215151515815260200191505060405180910390f35b6102606108de565b6040518082815260200191505060405180910390f35b6102e26004803603606081101561028c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108e8565b604051808215151515815260200191505060405180910390f35b6103046109b4565b604051808260ff1660ff16815260200191505060405180910390f35b6103626004803603602081101561033657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109cb565b604051808215151515815260200191505060405180910390f35b6103c86004803603604081101561039257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109eb565b604051808215151515815260200191505060405180910390f35b61040e600480360360208110156103f857600080fd5b8101908080359060200190929190505050610a90565b005b610418610a9d565b005b61045c6004803603602081101561043057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ce6565b6040518082815260200191505060405180910390f35b61047a610d2e565b6040518082815260200191505060405180910390f35b6104dc600480360360408110156104a657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d34565b005b6104e6610d42565b6040518082815260200191505060405180910390f35b6105486004803603604081101561051257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d48565b005b610552610ea4565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610592578082015181840152602081019050610577565b50505050905090810190601f1680156105bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61060f600480360360208110156105e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f46565b005b6106196110c9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106a76004803603604081101561067157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ef565b604051808215151515815260200191505060405180910390f35b61070d600480360360408110156106d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111af565b604051808215151515815260200191505060405180910390f35b61072f6111c6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107796111ec565b6040518082815260200191505060405180910390f35b6107f1600480360360408110156107a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061126b565b6040518082815260200191505060405180910390f35b61080f6112f2565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108bd5780601f10610892576101008083540402835291602001916108bd565b820191906000526020600020905b8154815290600101906020018083116108a057829003601f168201915b5050505050905090565b60006108d43384846112f8565b6001905092915050565b6000600254905090565b60006108f58484846114f3565b6109a984336109a485606060405190810160405280602881526020016132d960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ae9092919063ffffffff16565b6112f8565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000610a863384610a8185600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187090919063ffffffff16565b6112f8565b6001905092915050565b610a9a33826118fa565b50565b4262278d006009540111151515610b1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f33302064617920636f6f6c696e6720706572696f642e0000000000000000000081525060200191505060405180910390fd5b426009819055506000610b596402540be400610b4b627e93d5610b3d6108de565b611ab590919063ffffffff16565b611b3f90919063ffffffff16565b9050600030610b66611f1c565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f080158015610bb8573d6000803e3d6000fd5b50905080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c28600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611b89565b610c3b33680de0b6b3a764000000611b89565b7f68b90a8aac48e93f43ad9c5b70cbab97e60977332a86d21cdcf6670ba686eb7033428484604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60065481565b610d3e8282611d46565b5050565b60075481565b60011515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515610df3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806132486028913960400191505060405180910390fd5b610dfb6111ec565b610e108360065461187090919063ffffffff16565b11151515610e86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4578636565647320676c6f62616c206361702e0000000000000000000000000081525060200191505060405180910390fd5b81600660008282540192505081905550610ea08183611b89565b5050565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f3c5780601f10610f1157610100808354040283529160200191610f3c565b820191906000526020600020905b815481529060010190602001808311610f1f57829003601f168201915b5050505050905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e206f6e6c792062652063616c6c6564206279206f776e65722e0000000081525060200191505060405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f59544bee92bf2b253a972a2287d60d36384a1d8c66c6b62b5fda5c1454d6e0fe81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006111a533846111a0856060604051908101604052806025815260200161338f60259139600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ae9092919063ffffffff16565b6112f8565b6001905092915050565b60006111bc3384846114f3565b6001905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806301e13380600754420381151561120257fe5b04905060006a1bc16d674ec800000000009050600082111561122f576a0de0b6b3a7640000000000810190505b6001821115611249576a06f05b59d3b20000000000810190505b6002821115611263576a03782dace9d90000000000810190505b809250505090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061336b6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806132706022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561157b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806133466025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806132036023913960400191505060405180910390fd5b61166f8160606040519081016040528060268152602001613292602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ae9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611702816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290151561185d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611822578082015181840152602081019050611807565b50505050905090810190601f16801561184f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008082840190508381101515156118f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611982576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806133256021913960400191505060405180910390fd5b6119ee8160606040519081016040528060228152602001613226602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ae9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4581600254611e0890919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080831415611ac85760009050611b39565b60008284029050828482811515611adb57fe5b04141515611b34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806132b86021913960400191505060405180910390fd5b809150505b92915050565b6000611b8183836040805190810160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e52565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b611c438160025461187090919063ffffffff16565b600281905550611c9a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b611d5082826118fa565b611e048233611dff846060604051908101604052806024815260200161330160249139600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ae9092919063ffffffff16565b6112f8565b5050565b6000611e4a83836040805190810160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117ae565b905092915050565b600080831182901515611f00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ec5578082015181840152602081019050611eaa565b50505050905090810190601f168015611ef25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385811515611f0e57fe5b049050809150509392505050565b6040516112d680611f2d8339019056fe608060405234801561001057600080fd5b506040516020806112d68339810180604052602081101561003057600080fd5b810190808051906020019092919050505080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062278d004201600081905550506112388061009e6000396000f3fe60806040526004361061008d576000357c0100000000000000000000000000000000000000000000000000000000900480636ecc20da1161006b5780636ecc20da146101b3578063cb0fcb52146101e1578063d583b596146101f8578063f2bacacf146102235761008d565b80632abbd8471461009257806332c1d50d146100e95780634d12616a1461014e575b600080fd5b34801561009e57600080fd5b506100a761024e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100f557600080fd5b506101386004803603602081101561010c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610274565b6040518082815260200191505060405180910390f35b34801561015a57600080fd5b5061019d6004803603602081101561017157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061028c565b6040518082815260200191505060405180910390f35b6101df600480360360208110156101c957600080fd5b81019080803590602001909291905050506102a4565b005b3480156101ed57600080fd5b506101f6610728565b005b34801561020457600080fd5b5061020d610bb4565b6040518082815260200191505060405180910390f35b34801561022f57600080fd5b50610238610bba565b6040518082815260200191505060405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915090505481565b60036020528060005260406000206000915090505481565b60003411151561031c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d73672076616c7565203d20302e00000000000000000000000000000000000081525060200191505060405180910390fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415156103d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f20746f7070696e672075702e00000000000000000000000000000000000081525060200191505060405180910390fd5b600054421115151561044d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f436c6f73656420666f7220636f6e747269627574696f6e732e0000000000000081525060200191505060405180910390fd5b601e8110158015610460575061016d8111155b15156104b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806111e56028913960400191505060405180910390fd5b6000426201518083026000540103905060006104dc3483610bc090919063ffffffff16565b90506104f381600154610c4a90919063ffffffff16565b60018190555080600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062015180830260005401600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600034600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054336105d6610ef4565b808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506040518091039082f08015801561062e573d6000803e3d6000fd5b5090509050348173ffffffffffffffffffffffffffffffffffffffff16311015151561065957600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f6c86f3fd5118b3aa8bb4f389a617046de0a3d3d477de1a1673d227f802f616dc8234600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a250505050565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115156107df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5a65726f20636f6e747269627574696f6e2e000000000000000000000000000081525060200191505060405180910390fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442111515610895576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f7420636c61696d207965742e00000000000000000000000000000081525060200191505060405180910390fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006109f76001546109e984600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156109a057600080fd5b505afa1580156109b4573d6000803e3d6000fd5b505050506040513d60208110156109ca57600080fd5b8101908080519060200190929190505050610bc090919063ffffffff16565b610cd490919063ffffffff16565b90506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a5382600154610d1e90919063ffffffff16565b600181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b505050506040513d6020811015610b4857600080fd5b8101908080519060200190929190505050503373ffffffffffffffffffffffffffffffffffffffff167f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a8383604051808381526020018281526020019250505060405180910390a25050565b60015481565b60005481565b600080831415610bd35760009050610c44565b60008284029050828482811515610be657fe5b04141515610c3f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806111c46021913960400191505060405180910390fd5b809150505b92915050565b6000808284019050838110151515610cca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000610d1683836040805190810160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d68565b905092915050565b6000610d6083836040805190810160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610e32565b905092915050565b600080831182901515610e16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ddb578082015181840152602081019050610dc0565b50505050905090810190601f168015610e085780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385811515610e2457fe5b049050809150509392505050565b60008383111582901515610ee1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ea6578082015181840152602081019050610e8b565b50505050905090810190601f168015610ed35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6040516102bf80610f058339019056fe60806040526040516040806102bf8339810180604052604081101561002357600080fd5b8101908080519060200190929190805190602001909291905050508160008190555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610228806100976000396000f3fe608060405234801561001057600080fd5b506004361061005e576000357c01000000000000000000000000000000000000000000000000000000009004806316ec1600146100635780632bb3b1141461006d57806387f95dda146100b7575b600080fd5b61006b6100d5565b005b6100756101d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100bf6101f6565b6040518082815260200191505060405180910390f35b6000544211151561014e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f7420636c61696d207965742e00000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501580156101cd573d6000803e3d6000fd5b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000548156fea165627a7a723058202aee17bc97a360fee9269768709045e6f067b367b082051c91a464d4b979e7ec0029536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775374616b696e6720706572696f64206f757473696465206f6620616c6c6f7765642072616e67652ea165627a7a72305820065c0e37c8ebcbc3978169570a35fd9ba94dd863f36a5b0c68261870c12022bc002945524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636543616e206f6e6c792062652063616c6c65642062792072656769737465726564206d696e7465722e45524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa165627a7a7230582087ad1ee8610421e693c718d2fac652c5339df46fed08c65b2b80aad6f056450c0029
Deployed Bytecode Sourcemap
17513:5157:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17513:5157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10451:83;;;:::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;10451:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3504:148;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3504:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2527:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4123:300;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4123:300:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11303:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18278:41;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18278:41:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4832:206;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4832:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9581:81;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9581:81:0;;;;;;;;;;;;;;;;;:::i;:::-;;20321:1113;;;:::i;:::-;;2681:110;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2681:110:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17919:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9724:103;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9724:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18045:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22233:432;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22233:432:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10653:87;;;:::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;10653:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19671:194;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19671:194:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;18146:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5541:257;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5541:257:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3004:156;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3004:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17811:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21555:525;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3223:134;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3223:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18188:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10451:83;10488:13;10521:5;10514:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10451:83;:::o;3504:148::-;3569:4;3586:36;3595:10;3607:7;3616:5;3586:8;:36::i;:::-;3640:4;3633:11;;3504:148;;;;:::o;2527:91::-;2571:7;2598:12;;2591:19;;2527:91;:::o;4123:300::-;4212:4;4229:36;4239:6;4247:9;4258:6;4229:9;:36::i;:::-;4276:117;4285:6;4293:10;4305:87;4341:6;4305:87;;;;;;;;;;;;;;;;;;:11;:19;4317:6;4305:19;;;;;;;;;;;;;;;:31;4325:10;4305:31;;;;;;;;;;;;;;;;:35;;:87;;;;;:::i;:::-;4276:8;:117::i;:::-;4411:4;4404:11;;4123:300;;;;;:::o;11303:83::-;11344:5;11369:9;;;;;;;;;;;11362:16;;11303:83;:::o;18278:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;4832:206::-;4912:4;4929:79;4938:10;4950:7;4959:48;4996:10;4959:11;:23;4971:10;4959:23;;;;;;;;;;;;;;;:32;4983:7;4959:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;4929:8;:79::i;:::-;5026:4;5019:11;;4832:206;;;;:::o;9581:81::-;9629:25;9635:10;9647:6;9629:5;:25::i;:::-;9581:81;:::o;20321:1113::-;20488:15;17679:17;20450:22;;:34;:53;;20442:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20628:15;20603:22;:40;;;;20759:20;20782:40;20813:8;20782:26;20800:7;20782:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:30;;:40;;;;:::i;:::-;20759:63;;20881:17;20922:4;20901:27;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20901:27:0;20881:47;;21018:8;20987:20;;:40;;;;;;;;;;;;;;;;;;21105:41;21111:20;;;;;;;;;;;21133:12;21105:5;:41::i;:::-;21208:33;21214:10;17737:17;21208:5;:33::i;:::-;21283:141;21314:10;21339:15;21369:12;21404:8;21283:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20321:1113;;:::o;2681:110::-;2738:7;2765:9;:18;2775:7;2765:18;;;;;;;;;;;;;;;;2758:25;;2681:110;;;:::o;17919:27::-;;;;:::o;9724:103::-;9793:26;9803:7;9812:6;9793:9;:26::i;:::-;9724:103;;:::o;18045:31::-;;;;:::o;22233:432::-;22340:4;22316:28;;:8;:20;22325:10;22316:20;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;22308:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22476:17;:15;:17::i;:::-;22442:30;22459:12;22442;;:16;;:30;;;;:::i;:::-;:51;;22434:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22582:12;22566;;:28;;;;;;;;;;;22625:30;22631:9;22642:12;22625:5;:30::i;:::-;22233:432;;:::o;10653:87::-;10692:13;10725:7;10718:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10653:87;:::o;19671:194::-;19746:6;;;;;;;;;;;19732:20;;:10;:20;;;19724:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19815:4;19796:8;:16;19805:6;19796:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;19833:22;19848:6;19833:22;;;;;;;;;;;;;;;;;;;;;;19671:194;:::o;18146:35::-;;;;;;;;;;;;;:::o;5541:257::-;5626:4;5643:125;5652:10;5664:7;5673:94;5710:15;5673:94;;;;;;;;;;;;;;;;;;:11;:23;5685:10;5673:23;;;;;;;;;;;;;;;:32;5697:7;5673:32;;;;;;;;;;;;;;;;:36;;:94;;;;;:::i;:::-;5643:8;:125::i;:::-;5786:4;5779:11;;5541:257;;;;:::o;3004:156::-;3073:4;3090:40;3100:10;3112:9;3123:6;3090:9;:40::i;:::-;3148:4;3141:11;;3004:156;;;;:::o;17811:21::-;;;;;;;;;;;;;:::o;21555:525::-;21602:7;21676:9;17625:18;21707:16;;21689:15;:34;21688:53;;;;;;;;21676:65;;21803:20;21826:18;21803:41;;21863:1;21859;:5;21855:48;;;21883:18;21867:34;;;;21855:48;21921:1;21917;:5;21913:48;;;21941:18;21925:34;;;;21913:48;21979:1;21975;:5;21971:48;;;21999:18;21983:34;;;;21971:48;22058:12;22051:19;;;;21555:525;:::o;3223:134::-;3295:7;3322:11;:18;3334:5;3322:18;;;;;;;;;;;;;;;:27;3341:7;3322:27;;;;;;;;;;;;;;;;3315:34;;3223:134;;;;:::o;18188:37::-;;;;:::o;8465:335::-;8575:1;8558:19;;:5;:19;;;;8550:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8656:1;8637:21;;:7;:21;;;;8629:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8740:5;8710:11;:18;8722:5;8710:18;;;;;;;;;;;;;;;:27;8729:7;8710:27;;;;;;;;;;;;;;;:35;;;;8777:7;8761:31;;8770:5;8761:31;;;8786:5;8761:31;;;;;;;;;;;;;;;;;;8465:335;;;:::o;6288:471::-;6404:1;6386:20;;:6;:20;;;;6378:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6488:1;6467:23;;:9;:23;;;;6459:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6563;6585:6;6563:71;;;;;;;;;;;;;;;;;;:9;:17;6573:6;6563:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;6543:9;:17;6553:6;6543:17;;;;;;;;;;;;;;;:91;;;;6668:32;6693:6;6668:9;:20;6678:9;6668:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;6645:9;:20;6655:9;6645:20;;;;;;;;;;;;;;;:55;;;;6733:9;6716:35;;6725:6;6716:35;;;6744:6;6716:35;;;;;;;;;;;;;;;;;;6288:471;;;:::o;13112:192::-;13198:7;13231:1;13226;:6;;13234:12;13218:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;13218:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13258:9;13274:1;13270;:5;13258:17;;13295:1;13288:8;;;13112:192;;;;;:::o;12225:181::-;12283:7;12303:9;12319:1;12315;:5;12303:17;;12344:1;12339;:6;;12331:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12397:1;12390:8;;;12225:181;;;;:::o;7681:344::-;7775:1;7756:21;;:7;:21;;;;7748:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7849;7872:5;7849:67;;;;;;;;;;;;;;;;;;:9;:18;7859:7;7849:18;;;;;;;;;;;;;;;;:22;;:67;;;;;:::i;:::-;7828:9;:18;7838:7;7828:18;;;;;;;;;;;;;;;:88;;;;7942:23;7959:5;7942:12;;:16;;:23;;;;:::i;:::-;7927:12;:38;;;;8007:1;7981:36;;7990:7;7981:36;;;8011:5;7981:36;;;;;;;;;;;;;;;;;;7681:344;;:::o;13555:471::-;13613:7;13863:1;13858;:6;13854:47;;;13888:1;13881:8;;;;13854:47;13913:9;13929:1;13925;:5;13913:17;;13958:1;13953;13949;:5;;;;;;;;:10;13941:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14017:1;14010:8;;;13555:471;;;;;:::o;14494:132::-;14552:7;14579:39;14583:1;14586;14579:39;;;;;;;;;;;;;;;;;;:3;:39::i;:::-;14572:46;;14494:132;;;;:::o;7040:308::-;7135:1;7116:21;;:7;:21;;;;7108:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7201:24;7218:6;7201:12;;:16;;:24;;;;:::i;:::-;7186:12;:39;;;;7257:30;7280:6;7257:9;:18;7267:7;7257:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;7236:9;:18;7246:7;7236:18;;;;;;;;;;;;;;;:51;;;;7324:7;7303:37;;7320:1;7303:37;;;7333:6;7303:37;;;;;;;;;;;;;;;;;;7040:308;;:::o;8985:228::-;9057:22;9063:7;9072:6;9057:5;:22::i;:::-;9090:115;9099:7;9108:10;9120:84;9157:6;9120:84;;;;;;;;;;;;;;;;;;:11;:20;9132:7;9120:20;;;;;;;;;;;;;;;:32;9141:10;9120:32;;;;;;;;;;;;;;;;:36;;:84;;;;;:::i;:::-;9090:8;:115::i;:::-;8985:228;;:::o;12681:136::-;12739:7;12766:43;12770:1;12773;12766:43;;;;;;;;;;;;;;;;;;:3;:43::i;:::-;12759:50;;12681:136;;;;:::o;15114:345::-;15200:7;15299:1;15295;:5;15302:12;15287: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;15287:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15326:9;15342:1;15338;:5;;;;;;;;15326:17;;15450:1;15443:8;;;15114:345;;;;;:::o;17513:5157::-;;;;;;;;;;:::o
Swarm Source
bzzr://87ad1ee8610421e693c718d2fac652c5339df46fed08c65b2b80aad6f056450c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.