Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Multi Chain
Multichain Addresses
9 addresses found via
Latest 22 from a total of 22 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Set Vesting Weig... | 18184901 | 5 days 14 hrs ago | IN | 0 ETH | 0.00038137 | ||||
Set Vesting Weig... | 18184900 | 5 days 14 hrs ago | IN | 0 ETH | 0.00036816 | ||||
Set Vesting Weig... | 18184899 | 5 days 14 hrs ago | IN | 0 ETH | 0.00035067 | ||||
Set Vesting Weig... | 18184898 | 5 days 14 hrs ago | IN | 0 ETH | 0.00033008 | ||||
Set Vesting Weig... | 18184896 | 5 days 14 hrs ago | IN | 0 ETH | 0.00036294 | ||||
Set Vesting Weig... | 18184896 | 5 days 14 hrs ago | IN | 0 ETH | 0.00036294 | ||||
Set Vesting Weig... | 18184895 | 5 days 14 hrs ago | IN | 0 ETH | 0.00036654 | ||||
Set Gro Weight | 17513082 | 99 days 19 hrs ago | IN | 0 ETH | 0.00042424 | ||||
Set Vesting Weig... | 17513040 | 99 days 19 hrs ago | IN | 0 ETH | 0.00047392 | ||||
Set Vesting Weig... | 17512881 | 99 days 20 hrs ago | IN | 0 ETH | 0.00183211 | ||||
Set Vesting Weig... | 17512827 | 99 days 20 hrs ago | IN | 0 ETH | 0.00184745 | ||||
Set Vesting Weig... | 15917001 | 323 days 20 hrs ago | IN | 0 ETH | 0.00032893 | ||||
Transfer Ownersh... | 15890264 | 327 days 14 hrs ago | IN | 0 ETH | 0.00067836 | ||||
Set Vesting Weig... | 14469584 | 548 days 12 hrs ago | IN | 0 ETH | 0.00392394 | ||||
Add Bal V2Pool | 14464009 | 549 days 8 hrs ago | IN | 0 ETH | 0.00449882 | ||||
Add Uni V2Pool | 14464007 | 549 days 8 hrs ago | IN | 0 ETH | 0.00454948 | ||||
Add Uni V2Pool | 14464004 | 549 days 8 hrs ago | IN | 0 ETH | 0.0046315 | ||||
Set Vesting Weig... | 14464003 | 549 days 8 hrs ago | IN | 0 ETH | 0.00222746 | ||||
Set Vesting Weig... | 14464002 | 549 days 8 hrs ago | IN | 0 ETH | 0.00097893 | ||||
Set Vesting Weig... | 14464001 | 549 days 8 hrs ago | IN | 0 ETH | 0.00202337 | ||||
Set Gro Weight | 14463999 | 549 days 8 hrs ago | IN | 0 ETH | 0.00130038 | ||||
0x60a06040 | 14463997 | 549 days 8 hrs ago | IN | Create: VoteAggregator | 0 ETH | 0.05997172 |
Loading...
Loading
Contract Name:
VoteAggregator
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPLv3 pragma solidity 0.8.4; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "../common/Constants.sol"; interface IGROVesting { function vestedBalance(address account) external view returns (uint256); function vestingBalance(address account) external view returns (uint256); } interface IGROBaseVesting { function totalBalance(address account) external view returns (uint256); function vestedBalance(address account) external view returns (uint256 vested, uint256 available); } struct UserInfo { uint256 amount; int256 rewardDebt; } interface IGROStaker { function userInfo(uint256 poolId, address account) external view returns (UserInfo memory); } interface IGROStakerMigration { function userMigrated(address account, uint256 poolId) external view returns (bool); } interface IUniswapV2Pool { function token0() external view returns (address); function token1() external view returns (address); function balanceOf(address account) external view returns (uint256); function totalSupply() external view returns (uint256); function getReserves() external view returns ( uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast ); } interface IBalanceVault { function getPoolTokens(bytes32 poolId) external view returns ( address[] memory tokens, uint256[] memory balances, uint256 lastChangeBlock ); } interface IBalanceV2Pool { function getVault() external view returns (IBalanceVault); function getPoolId() external view returns (bytes32); function balanceOf(address account) external view returns (uint256); function totalSupply() external view returns (uint256); } contract VoteAggregator is Ownable, Constants { IERC20 public immutable GRO; IGROVesting public mainVesting; IGROBaseVesting public empVesting; IGROBaseVesting public invVesting; address public stakerOld; address public stakerNew; // Make 0 pool in staker for single gro always uint256 public constant SINGLE_GRO_POOL_ID = 0; IUniswapV2Pool[] public uniV2Pools; IBalanceV2Pool[] public balV2Pools; // weight decimals is 4 uint256 public groWeight; mapping(address => uint256[2]) public vestingWeights; mapping(address => uint256[]) public lpWeights; mapping(address => uint256) public groPools; event LogSetGroWeight(uint256 newWeight); event LogSetVestingWeight(address indexed vesting, uint256 newLockedWeight, uint256 newUnlockedWeight); event LogAddUniV2Pool(address pool, uint256[] weights, uint256 groPoolId); event LogRemoveUniV2Pool(address pool); event LogAddBalV2Pool(address pool, uint256[] weights, uint256 groPoolId); event LogRemoveBalV2Pool(address pool); event LogSetLPPool(address indexed pool, uint256[] weights, uint256 groPoolId); event LogSetMainVesting(address newVesting); event LogSetInvVesting(address newVesting); event LogSetEmpVesting(address newVesting); event LogSetOldStaker(address staker); event LogSetNewStaker(address staker); constructor( address _gro, address _mainVesting, address _empVesting, address _invVesting, address _stakerOld, address _stakerNew ) { GRO = IERC20(_gro); mainVesting = IGROVesting(_mainVesting); empVesting = IGROBaseVesting(_empVesting); invVesting = IGROBaseVesting(_invVesting); stakerOld = _stakerOld; stakerNew = _stakerNew; } function setMainVesting(address newVesting) external onlyOwner { mainVesting = IGROVesting(newVesting); emit LogSetMainVesting(newVesting); } function setInvVesting(address newVesting) external onlyOwner { invVesting = IGROBaseVesting(newVesting); emit LogSetInvVesting(newVesting); } function setEmpVesting(address newVesting) external onlyOwner { empVesting = IGROBaseVesting(newVesting); emit LogSetEmpVesting(newVesting); } function setOldStaker(address staker) external onlyOwner { stakerOld = staker; emit LogSetOldStaker(staker); } function setNewStaker(address staker) external onlyOwner { stakerNew = staker; emit LogSetNewStaker(staker); } function setGroWeight(uint256 weight) external onlyOwner { groWeight = weight; emit LogSetGroWeight(weight); } function setVestingWeight( address vesting, uint256 lockedWeight, uint256 unlockedWeight ) external onlyOwner { vestingWeights[vesting][0] = lockedWeight; vestingWeights[vesting][1] = unlockedWeight; emit LogSetVestingWeight(vesting, lockedWeight, unlockedWeight); } function addUniV2Pool( address pool, uint256[] calldata weights, uint256 groPoolId ) external onlyOwner { lpWeights[pool] = weights; groPools[pool] = groPoolId; uniV2Pools.push(IUniswapV2Pool(pool)); emit LogAddUniV2Pool(pool, weights, groPoolId); } function removeUniV2Pool(address pool) external onlyOwner { uint256 len = uniV2Pools.length; bool find; for (uint256 i = 0; i < len - 1; i++) { if (find) { uniV2Pools[i] = uniV2Pools[i + 1]; } else { if (pool == address(uniV2Pools[i])) { find = true; uniV2Pools[i] = uniV2Pools[i + 1]; } } } uniV2Pools.pop(); delete lpWeights[pool]; delete groPools[pool]; emit LogRemoveUniV2Pool(pool); } function addBalV2Pool( address pool, uint256[] calldata weights, uint256 groPoolId ) external onlyOwner { lpWeights[pool] = weights; groPools[pool] = groPoolId; balV2Pools.push(IBalanceV2Pool(pool)); emit LogAddBalV2Pool(pool, weights, groPoolId); } function removeBalV2Pool(address pool) external onlyOwner { uint256 len = balV2Pools.length; bool find; for (uint256 i = 0; i < len - 1; i++) { if (find) { balV2Pools[i] = balV2Pools[i + 1]; } else { if (pool == address(balV2Pools[i])) { find = true; balV2Pools[i] = balV2Pools[i + 1]; } } } balV2Pools.pop(); delete lpWeights[pool]; delete groPools[pool]; emit LogRemoveBalV2Pool(pool); } function setLPPool( address pool, uint256[] calldata weights, uint256 groPoolId ) external onlyOwner { if (weights.length > 0) { lpWeights[pool] = weights; } if (groPoolId > 0) { groPools[pool] = groPoolId; } emit LogSetLPPool(pool, weights, groPoolId); } function balanceOf(address account) external view returns (uint256 value) { // calculate gro weight amount uint256 amount = GRO.balanceOf(account); amount += getLPAmountInStaker(SINGLE_GRO_POOL_ID, account); value = (amount * groWeight) / PERCENTAGE_DECIMAL_FACTOR; // calculate vesting weight amount // vestings[0] - main vesting address // vestings[1] - employee vesting address // vestings[2] - investor vesting address address[3] memory vestings; // amounts[0][0] - main vesting locked amount // amounts[0][1] - main vesting unlocked amount // amounts[1][0] - employee vesting locked amount // amounts[1][1] - employee vesting unlocked amount // amounts[2][0] - investor vesting locked amount // amounts[2][1] - investor vesting unlocked amount uint256[2][3] memory amounts; vestings[0] = address(mainVesting); amounts[0][0] = mainVesting.vestingBalance(account); amounts[0][1] = mainVesting.vestedBalance(account); uint256 totalUnlocked; amounts[1][0] = empVesting.totalBalance(account); if (amounts[1][0] > 0) { (totalUnlocked, amounts[1][1]) = empVesting.vestedBalance(account); amounts[1][0] = amounts[1][0] - totalUnlocked; vestings[1] = address(empVesting); } amounts[2][0] = invVesting.totalBalance(account); if (amounts[2][0] > 0) { (totalUnlocked, amounts[2][1]) = invVesting.vestedBalance(account); amounts[2][0] = amounts[2][0] - totalUnlocked; vestings[2] = address(invVesting); } for (uint256 i = 0; i < vestings.length; i++) { if (amounts[i][0] > 0 || amounts[i][1] > 0) { uint256[2] storage weights = vestingWeights[vestings[i]]; uint256 lockedWeight = weights[0]; uint256 unlockedWeight = weights[1]; value += (amounts[i][0] * lockedWeight + amounts[i][1] * unlockedWeight) / PERCENTAGE_DECIMAL_FACTOR; } } value += calculateUniWeight(account); value += calculateBalWeight(account); } function calculateUniWeight(address account) public view returns (uint256 uniValue) { uint256 len = uniV2Pools.length; for (uint256 i = 0; i < len; i++) { IUniswapV2Pool pool = uniV2Pools[i]; uint256 lpAmount = pool.balanceOf(account); lpAmount += getLPAmountInStaker(address(pool), account); if (lpAmount > 0) { (uint112 res0, uint112 res1, ) = pool.getReserves(); uint256 ts = pool.totalSupply(); uint256[] memory amounts = new uint256[](2); amounts[0] = res0; amounts[1] = res1; address[] memory tokens = new address[](2); tokens[0] = pool.token0(); tokens[1] = pool.token1(); uint256[] memory weights = lpWeights[address(pool)]; uniValue += calculateLPWeightValue(amounts, lpAmount, ts, tokens, weights); } } } function calculateBalWeight(address account) public view returns (uint256 balValue) { uint256 len = balV2Pools.length; for (uint256 i = 0; i < len; i++) { IBalanceV2Pool pool = balV2Pools[i]; uint256 lpAmount = pool.balanceOf(account); lpAmount += getLPAmountInStaker(address(pool), account); if (lpAmount > 0) { IBalanceVault vault = pool.getVault(); bytes32 poolId = pool.getPoolId(); (address[] memory tokens, uint256[] memory balances, ) = vault.getPoolTokens(poolId); uint256 ts = pool.totalSupply(); uint256[] memory weights = lpWeights[address(pool)]; balValue += calculateLPWeightValue(balances, lpAmount, ts, tokens, weights); } } } function getUniV2Pools() external view returns (IUniswapV2Pool[] memory) { return uniV2Pools; } function getBalV2Pools() external view returns (IBalanceV2Pool[] memory) { return balV2Pools; } function getVestingWeights(address vesting) external view returns (uint256[2] memory) { return vestingWeights[vesting]; } function getLPWeights(address pool) external view returns (uint256[] memory) { return lpWeights[pool]; } function getLPAmountInStaker(address lpPool, address account) private view returns (uint256 amount) { uint256 poolId = groPools[lpPool]; if (poolId > 0) { amount = getLPAmountInStaker(poolId, account); } } function getLPAmountInStaker(uint256 poolId, address account) private view returns (uint256 amount) { UserInfo memory ui = IGROStaker(stakerNew).userInfo(poolId, account); amount = ui.amount; if (stakerOld != address(0) && !IGROStakerMigration(stakerNew).userMigrated(account, poolId)) { ui = IGROStaker(stakerOld).userInfo(poolId, account); amount += ui.amount; } } function calculateLPWeightValue( uint256[] memory tokenAmounts, uint256 lpAmount, uint256 lpTotalSupply, address[] memory tokens, uint256[] memory weights ) private view returns (uint256 value) { for (uint256 i = 0; i < tokenAmounts.length; i++) { uint256 amount = (tokenAmounts[i] * lpAmount) / lpTotalSupply; uint256 decimals = ERC20(tokens[i]).decimals(); uint256 weight = weights[i]; value += (amount * weight * DEFAULT_DECIMALS_FACTOR) / (uint256(10)**decimals) / PERCENTAGE_DECIMAL_FACTOR; } } }
// SPDX-License-Identifier: AGPLv3 pragma solidity 0.8.4; contract Constants { uint8 internal constant N_COINS = 3; uint8 internal constant DEFAULT_DECIMALS = 18; // GToken and Controller use this decimals uint256 internal constant DEFAULT_DECIMALS_FACTOR = uint256(10)**DEFAULT_DECIMALS; uint8 internal constant CHAINLINK_PRICE_DECIMALS = 8; uint256 internal constant CHAINLINK_PRICE_DECIMAL_FACTOR = uint256(10)**CHAINLINK_PRICE_DECIMALS; uint8 internal constant PERCENTAGE_DECIMALS = 4; uint256 internal constant PERCENTAGE_DECIMAL_FACTOR = uint256(10)**PERCENTAGE_DECIMALS; uint256 internal constant CURVE_RATIO_DECIMALS = 6; uint256 internal constant CURVE_RATIO_DECIMALS_FACTOR = uint256(10)**CURVE_RATIO_DECIMALS; uint256 internal constant ONE_YEAR_SECONDS = 31556952; // average year (including leap years) in seconds }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(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: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
{ "metadata": { "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_gro","type":"address"},{"internalType":"address","name":"_mainVesting","type":"address"},{"internalType":"address","name":"_empVesting","type":"address"},{"internalType":"address","name":"_invVesting","type":"address"},{"internalType":"address","name":"_stakerOld","type":"address"},{"internalType":"address","name":"_stakerNew","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"weights","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"groPoolId","type":"uint256"}],"name":"LogAddBalV2Pool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"weights","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"groPoolId","type":"uint256"}],"name":"LogAddUniV2Pool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"LogRemoveBalV2Pool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"LogRemoveUniV2Pool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newVesting","type":"address"}],"name":"LogSetEmpVesting","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newWeight","type":"uint256"}],"name":"LogSetGroWeight","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newVesting","type":"address"}],"name":"LogSetInvVesting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"weights","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"groPoolId","type":"uint256"}],"name":"LogSetLPPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newVesting","type":"address"}],"name":"LogSetMainVesting","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"}],"name":"LogSetNewStaker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"}],"name":"LogSetOldStaker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vesting","type":"address"},{"indexed":false,"internalType":"uint256","name":"newLockedWeight","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newUnlockedWeight","type":"uint256"}],"name":"LogSetVestingWeight","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"GRO","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SINGLE_GRO_POOL_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"weights","type":"uint256[]"},{"internalType":"uint256","name":"groPoolId","type":"uint256"}],"name":"addBalV2Pool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"weights","type":"uint256[]"},{"internalType":"uint256","name":"groPoolId","type":"uint256"}],"name":"addUniV2Pool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"balV2Pools","outputs":[{"internalType":"contract IBalanceV2Pool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"calculateBalWeight","outputs":[{"internalType":"uint256","name":"balValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"calculateUniWeight","outputs":[{"internalType":"uint256","name":"uniValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"empVesting","outputs":[{"internalType":"contract IGROBaseVesting","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalV2Pools","outputs":[{"internalType":"contract IBalanceV2Pool[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getLPWeights","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniV2Pools","outputs":[{"internalType":"contract IUniswapV2Pool[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vesting","type":"address"}],"name":"getVestingWeights","outputs":[{"internalType":"uint256[2]","name":"","type":"uint256[2]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"groPools","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"groWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"invVesting","outputs":[{"internalType":"contract IGROBaseVesting","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpWeights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainVesting","outputs":[{"internalType":"contract IGROVesting","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"removeBalV2Pool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"removeUniV2Pool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVesting","type":"address"}],"name":"setEmpVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weight","type":"uint256"}],"name":"setGroWeight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVesting","type":"address"}],"name":"setInvVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"weights","type":"uint256[]"},{"internalType":"uint256","name":"groPoolId","type":"uint256"}],"name":"setLPPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVesting","type":"address"}],"name":"setMainVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"setNewStaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"setOldStaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vesting","type":"address"},{"internalType":"uint256","name":"lockedWeight","type":"uint256"},{"internalType":"uint256","name":"unlockedWeight","type":"uint256"}],"name":"setVestingWeight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakerNew","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakerOld","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uniV2Pools","outputs":[{"internalType":"contract IUniswapV2Pool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"vestingWeights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162002ebd38038062002ebd833981016040819052620000349162000121565b6200003f33620000b4565b60609590951b6001600160601b031916608052600180546001600160a01b03199081166001600160a01b039687161790915560028054821694861694909417909355600380548416928516929092179091556004805483169184169190911790556005805490911691909216179055620001a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200011c57600080fd5b919050565b60008060008060008060c087890312156200013a578182fd5b620001458762000104565b9550620001556020880162000104565b9450620001656040880162000104565b9350620001756060880162000104565b9250620001856080880162000104565b91506200019560a0880162000104565b90509295509295509295565b60805160601c612cf6620001c7600039600081816103ee0152610ef90152612cf66000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806381e50b2111610125578063c4c10647116100ad578063e5ee62441161007c578063e5ee6244146104a2578063ea2416f9146104aa578063f0915bbc146104bd578063f2fde38b146104c6578063f4f89e9b146104d957600080fd5b8063c4c1064714610449578063d0bf5d5e1461045c578063d49bcefa1461047c578063e5e1e5301461048f57600080fd5b80638da5cb5b116100f45780638da5cb5b146103d857806399caf44e146103e9578063a9e219d514610410578063b563b27f14610423578063c078cfc11461043657600080fd5b806381e50b211461037f5780638523b12c146103925780638bec1106146103b25780638cf26b28146103c557600080fd5b806344d95e3e116101a85780636d650c70116101775780636d650c701461031e57806370a0823114610331578063715018a61461034457806373f8cda51461034c57806378b6551e1461036c57600080fd5b806344d95e3e146102dd578063576bc098146102f05780636053505c146103035780636c96ac101461031657600080fd5b80631ef8cf82116101e45780631ef8cf821461028f5780632bb9841b146102a45780632fe0f150146102b75780633e26c725146102ca57600080fd5b80630239b3c4146102165780630a8c7c3e1461022b5780630d5c22031461025b5780631153d8cb1461026e575b600080fd5b610229610224366004612605565b6104ec565b005b61023e6102393660046128cf565b610574565b6040516001600160a01b0390911681526020015b60405180910390f35b60025461023e906001600160a01b031681565b61028161027c3660046126cd565b61059e565b604051908152602001610252565b6102976105cf565b6040516102529190612995565b6102816102b2366004612605565b610631565b60055461023e906001600160a01b031681565b60035461023e906001600160a01b031681565b6102296102eb366004612644565b610aa6565b6102296102fe3660046128cf565b610b94565b610229610311366004612605565b610bf3565b610297610e75565b60015461023e906001600160a01b031681565b61028161033f366004612605565b610ed5565b610229611514565b61028161035a366004612605565b600b6020526000908152604090205481565b61022961037a366004612605565b61154a565b61028161038d366004612605565b6115c2565b6103a56103a0366004612605565b611921565b6040516102529190612a37565b6102296103c0366004612605565b61198d565b61023e6103d33660046128cf565b611a05565b6000546001600160a01b031661023e565b61023e7f000000000000000000000000000000000000000000000000000000000000000081565b61022961041e3660046126f8565b611a15565b610229610431366004612605565b611a9f565b60045461023e906001600160a01b031681565b610229610457366004612644565b611b17565b61046f61046a366004612605565b611bd9565b60405161025291906129e2565b61022961048a366004612605565b611c2d565b61022961049d366004612644565b611ea6565b610281600081565b6102296104b8366004612605565b611f86565b61028160085481565b6102296104d4366004612605565b611ffe565b6102816104e73660046126cd565b612099565b6000546001600160a01b0316331461051f5760405162461bcd60e51b815260040161051690612a6f565b60405180910390fd5b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f0f17ad01ca9a185b64df44bef24145486e1f174aef53c4bb96ea79964971831c906020015b60405180910390a150565b6006818154811061058457600080fd5b6000918252602090912001546001600160a01b0316905081565b600a60205281600052604060002081815481106105ba57600080fd5b90600052602060002001600091509150505481565b6060600780548060200260200160405190810160405280929190818152602001828054801561062757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610609575b5050505050905090565b600654600090815b81811015610a9f5760006006828154811061066457634e487b7160e01b600052603260045260246000fd5b60009182526020822001546040516370a0823160e01b81526001600160a01b038881166004830152909116925082906370a082319060240160206040518083038186803b1580156106b457600080fd5b505afa1580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec919061281b565b90506106f882876120be565b6107029082612af9565b90508015610a8a57600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561074657600080fd5b505afa15801561075a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077e9190612881565b50915091506000846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107be57600080fd5b505afa1580156107d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f6919061281b565b6040805160028082526060820183529293506000929091602083019080368337019050509050836001600160701b03168160008151811061084757634e487b7160e01b600052603260045260246000fd5b602002602001018181525050826001600160701b03168160018151811061087e57634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408051600280825260608201909252600091816020016020820280368337019050509050866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156108e757600080fd5b505afa1580156108fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091f9190612628565b8160008151811061094057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050866001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561099957600080fd5b505afa1580156109ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d19190612628565b816001815181106109f257634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091529088166000908152600a825260408082208054825181860281018601909352808352929391929091830182828015610a6357602002820191906000526020600020905b815481526020019060010190808311610a4f575b50505050509050610a7783888685856120f1565b610a81908c612af9565b9a505050505050505b50508080610a9790612c64565b915050610639565b5050919050565b6000546001600160a01b03163314610ad05760405162461bcd60e51b815260040161051690612a6f565b6001600160a01b0384166000908152600a60205260409020610af3908484612493565b506001600160a01b0384166000818152600b60205260408082208490556006805460018101825592527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b031916909217909155517f3ec16440ac41c46b2a4f6b499dba12ab89998cc483cf8f1f914f40920a889a2790610b8690869086908690869061295f565b60405180910390a150505050565b6000546001600160a01b03163314610bbe5760405162461bcd60e51b815260040161051690612a6f565b60088190556040518181527f49ebd529c3122e97586ed7961136eff671c82b4a282e9e2d917a5d4572e8b7af90602001610569565b6000546001600160a01b03163314610c1d5760405162461bcd60e51b815260040161051690612a6f565b6006546000805b610c2f600184612c4d565b811015610dbd578115610cd4576006610c49826001612af9565b81548110610c6757634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169183908110610ca157634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610dab565b60068181548110610cf557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0385811691161415610dab57600191506006610d248284612af9565b81548110610d4257634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169183908110610d7c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80610db581612c64565b915050610c24565b506006805480610ddd57634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0385168252600a905260408120610e20916124de565b6001600160a01b0383166000818152600b602090815260408083209290925590519182527f4aabfad77ddacd14036eae690567498f57f0e2eaabef1f62bf4cf6abb61eb86591015b60405180910390a1505050565b60606006805480602002602001604051908101604052809291908181526020018280548015610627576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610609575050505050905090565b6040516370a0823160e01b81526001600160a01b03828116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b158015610f3b57600080fd5b505afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061281b565b9050610f80600084612284565b610f8a9082612af9565b9050610f986004600a612b80565b600854610fa59083612c2e565b610faf9190612b11565b9150610fb96124fc565b610fc161251a565b6001546001600160a01b0390811680845260405163192399d160e01b815291871660048301529063192399d19060240160206040518083038186803b15801561100957600080fd5b505afa15801561101d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611041919061281b565b81515260015460405163488a2abf60e11b81526001600160a01b03878116600483015290911690639114557e9060240160206040518083038186803b15801561108957600080fd5b505afa15801561109d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c1919061281b565b815160200152600254604051630dd59a7360e31b81526001600160a01b0387811660048301526000921690636eacd3989060240160206040518083038186803b15801561110d57600080fd5b505afa158015611121573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611145919061281b565b6020830180519190915251511561120b5760025460405163488a2abf60e11b81526001600160a01b03888116600483015290911690639114557e90602401604080518083038186803b15801561119a57600080fd5b505afa1580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d291906128e7565b602080850180519091019190915251519091506111f0908290612c4d565b602080840151919091526002546001600160a01b0316908401525b600354604051630dd59a7360e31b81526001600160a01b03888116600483015290911690636eacd3989060240160206040518083038186803b15801561125057600080fd5b505afa158015611264573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611288919061281b565b6040830180519190915251511561134d5760035460405163488a2abf60e11b81526001600160a01b03888116600483015290911690639114557e90602401604080518083038186803b1580156112dd57600080fd5b505afa1580156112f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131591906128e7565b604084018051602001919091525151909150611332908290612c4d565b604080840151919091526003546001600160a01b0316908401525b60005b60038110156114e157600083826003811061137b57634e487b7160e01b600052603260045260246000fd5b60200201515111806113b8575060008382600381106113aa57634e487b7160e01b600052603260045260246000fd5b602002015160016020020151115b156114cf576000600960008684600381106113e357634e487b7160e01b600052603260045260246000fd5b60200201516001600160a01b03166001600160a01b03168152602001908152602001600020905060008160006002811061142d57634e487b7160e01b600052603260045260246000fd5b015460018301549091506114436004600a612b80565b8187866003811061146457634e487b7160e01b600052603260045260246000fd5b60200201516001602002015161147a9190612c2e565b8388876003811061149b57634e487b7160e01b600052603260045260246000fd5b6020020151516114ab9190612c2e565b6114b59190612af9565b6114bf9190612b11565b6114c9908a612af9565b98505050505b806114d981612c64565b915050611350565b506114eb86610631565b6114f59086612af9565b9450611500866115c2565b61150a9086612af9565b9695505050505050565b6000546001600160a01b0316331461153e5760405162461bcd60e51b815260040161051690612a6f565b6115486000612443565b565b6000546001600160a01b031633146115745760405162461bcd60e51b815260040161051690612a6f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527fa2100f055df07d8266677fee20de5520af74de502f1cffb91838ed6573f0724d90602001610569565b600754600090815b81811015610a9f576000600782815481106115f557634e487b7160e01b600052603260045260246000fd5b60009182526020822001546040516370a0823160e01b81526001600160a01b038881166004830152909116925082906370a082319060240160206040518083038186803b15801561164557600080fd5b505afa158015611659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167d919061281b565b905061168982876120be565b6116939082612af9565b9050801561190c576000826001600160a01b0316638d928af86040518163ffffffff1660e01b815260040160206040518083038186803b1580156116d657600080fd5b505afa1580156116ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170e9190612628565b90506000836001600160a01b03166338fff2d06040518163ffffffff1660e01b815260040160206040518083038186803b15801561174b57600080fd5b505afa15801561175f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611783919061281b565b9050600080836001600160a01b031663f94d4668846040518263ffffffff1660e01b81526004016117b691815260200190565b60006040518083038186803b1580156117ce57600080fd5b505afa1580156117e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261180a919081019061272c565b50915091506000866001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561184a57600080fd5b505afa15801561185e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611882919061281b565b6001600160a01b0388166000908152600a60209081526040808320805482518185028101850190935280835294955092939092918301828280156118e557602002820191906000526020600020905b8154815260200190600101908083116118d1575b505050505090506118f983888487856120f1565b611903908c612af9565b9a505050505050505b5050808061191990612c64565b9150506115ca565b6001600160a01b0381166000908152600a602090815260409182902080548351818402810184019094528084526060939283018282801561198157602002820191906000526020600020905b81548152602001906001019080831161196d575b50505050509050919050565b6000546001600160a01b031633146119b75760405162461bcd60e51b815260040161051690612a6f565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fcd943fb845429d9bd9ae81fdf90efed591bf98ca52698ffddd9521781aabcf9090602001610569565b6007818154811061058457600080fd5b6000546001600160a01b03163314611a3f5760405162461bcd60e51b815260040161051690612a6f565b6001600160a01b03831660008181526009602090815260409182902085815560010184905581518581529081018490527ffab3275f84809dc465f034e2674f1b3d2271b9a24f7640eab6ccddfabce6f0f1910160405180910390a2505050565b6000546001600160a01b03163314611ac95760405162461bcd60e51b815260040161051690612a6f565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f06559892206fa3252f2912fc6d2bb4fe7d8bd9736dcfbb8f6920a7c05a1ced8890602001610569565b6000546001600160a01b03163314611b415760405162461bcd60e51b815260040161051690612a6f565b8115611b6c576001600160a01b0384166000908152600a60205260409020611b6a908484612493565b505b8015611b8e576001600160a01b0384166000908152600b602052604090208190555b836001600160a01b03167fe3ab0d5f7099d7a8778d6973538ecefe0ba93e3798cd48fd131cd7a96a8136cf848484604051611bcb93929190612a13565b60405180910390a250505050565b611be1612547565b6001600160a01b038216600090815260096020526040908190208151808301909252600282828260200282019181548152602001906001019080831161196d5750505050509050919050565b6000546001600160a01b03163314611c575760405162461bcd60e51b815260040161051690612a6f565b6007546000805b611c69600184612c4d565b811015611df7578115611d0e576007611c83826001612af9565b81548110611ca157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600780546001600160a01b039092169183908110611cdb57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611de5565b60078181548110611d2f57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0385811691161415611de557600191506007611d5e8284612af9565b81548110611d7c57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600780546001600160a01b039092169183908110611db657634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80611def81612c64565b915050611c5e565b506007805480611e1757634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0385168252600a905260408120611e5a916124de565b6001600160a01b0383166000818152600b602090815260408083209290925590519182527fdf37b3d1502ca40a9183a7bdeb4fbd04eef4b4cc9b26280b32f990e9d39f828b9101610e68565b6000546001600160a01b03163314611ed05760405162461bcd60e51b815260040161051690612a6f565b6001600160a01b0384166000908152600a60205260409020611ef3908484612493565b506001600160a01b0384166000818152600b60205260408082208490556007805460018101825592527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b031916909217909155517f701db5ae5c81ee95860300dd8a35d9fddc1170c333b8656199f60acbd90e1a4e90610b8690869086908690869061295f565b6000546001600160a01b03163314611fb05760405162461bcd60e51b815260040161051690612a6f565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527ffd545ac0e45f33d5e02c616bce4495f62c610b3525df183421aaa5cb30ddc88b90602001610569565b6000546001600160a01b031633146120285760405162461bcd60e51b815260040161051690612a6f565b6001600160a01b03811661208d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610516565b61209681612443565b50565b600960205281600052604060002081600281106120b557600080fd5b01549150829050565b6001600160a01b0382166000908152600b602052604081205480156120ea576120e78184612284565b91505b5092915050565b6000805b865181101561227a576000858789848151811061212257634e487b7160e01b600052603260045260246000fd5b60200260200101516121349190612c2e565b61213e9190612b11565b9050600085838151811061216257634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156121a257600080fd5b505afa1580156121b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121da919061290a565b60ff169050600085848151811061220157634e487b7160e01b600052603260045260246000fd5b602002602001015190506004600a6122199190612b80565b61222483600a612b74565b6122306012600a612b80565b61223a8487612c2e565b6122449190612c2e565b61224e9190612b11565b6122589190612b11565b6122629086612af9565b9450505050808061227290612c64565b9150506120f5565b5095945050505050565b6005546040516393f1a40b60e01b8152600481018490526001600160a01b03838116602483015260009283929116906393f1a40b90604401604080518083038186803b1580156122d357600080fd5b505afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612833565b80516004549093509091506001600160a01b0316158015906123ae57506005546040516384e7966160e01b81526001600160a01b03858116600483015260248201879052909116906384e796619060440160206040518083038186803b15801561237457600080fd5b505afa158015612388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ac91906127fb565b155b156120ea57600480546040516393f1a40b60e01b81529182018690526001600160a01b03858116602484015216906393f1a40b90604401604080518083038186803b1580156123fc57600080fd5b505afa158015612410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124349190612833565b80519091506120e79083612af9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280548282559060005260206000209081019282156124ce579160200282015b828111156124ce5782358255916020019190600101906124b3565b506124da929150612565565b5090565b50805460008255906000526020600020908101906120969190612565565b60405180606001604052806003906020820280368337509192915050565b60405180606001604052806003905b612531612547565b8152602001906001900390816125295790505090565b60405180604001604052806002906020820280368337509192915050565b5b808211156124da5760008155600101612566565b600082601f83011261258a578081fd5b8151602061259f61259a83612ad5565b612aa4565b80838252828201915082860187848660051b89010111156125be578586fd5b855b858110156125dc578151845292840192908401906001016125c0565b5090979650505050505050565b80516001600160701b038116811461260057600080fd5b919050565b600060208284031215612616578081fd5b813561262181612cab565b9392505050565b600060208284031215612639578081fd5b815161262181612cab565b60008060008060608587031215612659578283fd5b843561266481612cab565b9350602085013567ffffffffffffffff80821115612680578485fd5b818701915087601f830112612693578485fd5b8135818111156126a1578586fd5b8860208260051b85010111156126b5578586fd5b95986020929092019750949560400135945092505050565b600080604083850312156126df578182fd5b82356126ea81612cab565b946020939093013593505050565b60008060006060848603121561270c578283fd5b833561271781612cab565b95602085013595506040909401359392505050565b600080600060608486031215612740578283fd5b835167ffffffffffffffff80821115612757578485fd5b818601915086601f83011261276a578485fd5b8151602061277a61259a83612ad5565b8083825282820191508286018b848660051b890101111561279957898afd5b8996505b848710156127c45780516127b081612cab565b83526001969096019591830191830161279d565b50918901519197509093505050808211156127dd578384fd5b506127ea8682870161257a565b925050604084015190509250925092565b60006020828403121561280c578081fd5b81518015158114612621578182fd5b60006020828403121561282c578081fd5b5051919050565b600060408284031215612844578081fd5b6040516040810181811067ffffffffffffffff8211171561286757612867612c95565b604052825181526020928301519281019290925250919050565b600080600060608486031215612895578081fd5b61289e846125e9565b92506128ac602085016125e9565b9150604084015163ffffffff811681146128c4578182fd5b809150509250925092565b6000602082840312156128e0578081fd5b5035919050565b600080604083850312156128f9578182fd5b505080516020909101519092909150565b60006020828403121561291b578081fd5b815160ff81168114612621578182fd5b81835260006001600160fb1b03831115612943578081fd5b8260051b80836020870137939093016020019283525090919050565b6001600160a01b0385168152606060208201819052600090612984908301858761292b565b905082604083015295945050505050565b6020808252825182820181905260009190848201906040850190845b818110156129d65783516001600160a01b0316835292840192918401916001016129b1565b50909695505050505050565b60408101818360005b6002811015612a0a5781518352602092830192909101906001016129eb565b50505092915050565b604081526000612a2760408301858761292b565b9050826020830152949350505050565b6020808252825182820181905260009190848201906040850190845b818110156129d657835183529284019291840191600101612a53565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612acd57612acd612c95565b604052919050565b600067ffffffffffffffff821115612aef57612aef612c95565b5060051b60200190565b60008219821115612b0c57612b0c612c7f565b500190565b600082612b2c57634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115612b6c578160001904821115612b5257612b52612c7f565b80851615612b5f57918102915b93841c9390800290612b36565b509250929050565b60006126218383612b8b565b600061262160ff8416835b600082612b9a57506001612c28565b81612ba757506000612c28565b8160018114612bbd5760028114612bc757612be3565b6001915050612c28565b60ff841115612bd857612bd8612c7f565b50506001821b612c28565b5060208310610133831016604e8410600b8410161715612c06575081810a612c28565b612c108383612b31565b8060001904821115612c2457612c24612c7f565b0290505b92915050565b6000816000190483118215151615612c4857612c48612c7f565b500290565b600082821015612c5f57612c5f612c7f565b500390565b6000600019821415612c7857612c78612c7f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461209657600080fdfea26469706673582212208b6a380559323a807a1fcb09571247abac31f7726b74e5fbdd7763ab1e10eba864736f6c634300080400330000000000000000000000003ec8798b81485a254928b70cda1cf0a2bb0b74d7000000000000000000000000748218256afe0a19a88ebeb2e0c5ce86d2178360000000000000000000000000f43c6bdd2f9158b5a78dccf732d190c490e286440000000000000000000000000537d3da1ed1dd7350ff1f3b92b727dfdbab80f1000000000000000000000000001c249c09090d79dc350a286247479f08c7aad70000000000000000000000002e32bad45a1c29c1ea27cf4dd588df9e68ed376c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c806381e50b2111610125578063c4c10647116100ad578063e5ee62441161007c578063e5ee6244146104a2578063ea2416f9146104aa578063f0915bbc146104bd578063f2fde38b146104c6578063f4f89e9b146104d957600080fd5b8063c4c1064714610449578063d0bf5d5e1461045c578063d49bcefa1461047c578063e5e1e5301461048f57600080fd5b80638da5cb5b116100f45780638da5cb5b146103d857806399caf44e146103e9578063a9e219d514610410578063b563b27f14610423578063c078cfc11461043657600080fd5b806381e50b211461037f5780638523b12c146103925780638bec1106146103b25780638cf26b28146103c557600080fd5b806344d95e3e116101a85780636d650c70116101775780636d650c701461031e57806370a0823114610331578063715018a61461034457806373f8cda51461034c57806378b6551e1461036c57600080fd5b806344d95e3e146102dd578063576bc098146102f05780636053505c146103035780636c96ac101461031657600080fd5b80631ef8cf82116101e45780631ef8cf821461028f5780632bb9841b146102a45780632fe0f150146102b75780633e26c725146102ca57600080fd5b80630239b3c4146102165780630a8c7c3e1461022b5780630d5c22031461025b5780631153d8cb1461026e575b600080fd5b610229610224366004612605565b6104ec565b005b61023e6102393660046128cf565b610574565b6040516001600160a01b0390911681526020015b60405180910390f35b60025461023e906001600160a01b031681565b61028161027c3660046126cd565b61059e565b604051908152602001610252565b6102976105cf565b6040516102529190612995565b6102816102b2366004612605565b610631565b60055461023e906001600160a01b031681565b60035461023e906001600160a01b031681565b6102296102eb366004612644565b610aa6565b6102296102fe3660046128cf565b610b94565b610229610311366004612605565b610bf3565b610297610e75565b60015461023e906001600160a01b031681565b61028161033f366004612605565b610ed5565b610229611514565b61028161035a366004612605565b600b6020526000908152604090205481565b61022961037a366004612605565b61154a565b61028161038d366004612605565b6115c2565b6103a56103a0366004612605565b611921565b6040516102529190612a37565b6102296103c0366004612605565b61198d565b61023e6103d33660046128cf565b611a05565b6000546001600160a01b031661023e565b61023e7f0000000000000000000000003ec8798b81485a254928b70cda1cf0a2bb0b74d781565b61022961041e3660046126f8565b611a15565b610229610431366004612605565b611a9f565b60045461023e906001600160a01b031681565b610229610457366004612644565b611b17565b61046f61046a366004612605565b611bd9565b60405161025291906129e2565b61022961048a366004612605565b611c2d565b61022961049d366004612644565b611ea6565b610281600081565b6102296104b8366004612605565b611f86565b61028160085481565b6102296104d4366004612605565b611ffe565b6102816104e73660046126cd565b612099565b6000546001600160a01b0316331461051f5760405162461bcd60e51b815260040161051690612a6f565b60405180910390fd5b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f0f17ad01ca9a185b64df44bef24145486e1f174aef53c4bb96ea79964971831c906020015b60405180910390a150565b6006818154811061058457600080fd5b6000918252602090912001546001600160a01b0316905081565b600a60205281600052604060002081815481106105ba57600080fd5b90600052602060002001600091509150505481565b6060600780548060200260200160405190810160405280929190818152602001828054801561062757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610609575b5050505050905090565b600654600090815b81811015610a9f5760006006828154811061066457634e487b7160e01b600052603260045260246000fd5b60009182526020822001546040516370a0823160e01b81526001600160a01b038881166004830152909116925082906370a082319060240160206040518083038186803b1580156106b457600080fd5b505afa1580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec919061281b565b90506106f882876120be565b6107029082612af9565b90508015610a8a57600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561074657600080fd5b505afa15801561075a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077e9190612881565b50915091506000846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107be57600080fd5b505afa1580156107d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f6919061281b565b6040805160028082526060820183529293506000929091602083019080368337019050509050836001600160701b03168160008151811061084757634e487b7160e01b600052603260045260246000fd5b602002602001018181525050826001600160701b03168160018151811061087e57634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408051600280825260608201909252600091816020016020820280368337019050509050866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156108e757600080fd5b505afa1580156108fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091f9190612628565b8160008151811061094057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050866001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561099957600080fd5b505afa1580156109ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d19190612628565b816001815181106109f257634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091529088166000908152600a825260408082208054825181860281018601909352808352929391929091830182828015610a6357602002820191906000526020600020905b815481526020019060010190808311610a4f575b50505050509050610a7783888685856120f1565b610a81908c612af9565b9a505050505050505b50508080610a9790612c64565b915050610639565b5050919050565b6000546001600160a01b03163314610ad05760405162461bcd60e51b815260040161051690612a6f565b6001600160a01b0384166000908152600a60205260409020610af3908484612493565b506001600160a01b0384166000818152600b60205260408082208490556006805460018101825592527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b031916909217909155517f3ec16440ac41c46b2a4f6b499dba12ab89998cc483cf8f1f914f40920a889a2790610b8690869086908690869061295f565b60405180910390a150505050565b6000546001600160a01b03163314610bbe5760405162461bcd60e51b815260040161051690612a6f565b60088190556040518181527f49ebd529c3122e97586ed7961136eff671c82b4a282e9e2d917a5d4572e8b7af90602001610569565b6000546001600160a01b03163314610c1d5760405162461bcd60e51b815260040161051690612a6f565b6006546000805b610c2f600184612c4d565b811015610dbd578115610cd4576006610c49826001612af9565b81548110610c6757634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169183908110610ca157634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610dab565b60068181548110610cf557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0385811691161415610dab57600191506006610d248284612af9565b81548110610d4257634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169183908110610d7c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80610db581612c64565b915050610c24565b506006805480610ddd57634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0385168252600a905260408120610e20916124de565b6001600160a01b0383166000818152600b602090815260408083209290925590519182527f4aabfad77ddacd14036eae690567498f57f0e2eaabef1f62bf4cf6abb61eb86591015b60405180910390a1505050565b60606006805480602002602001604051908101604052809291908181526020018280548015610627576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610609575050505050905090565b6040516370a0823160e01b81526001600160a01b03828116600483015260009182917f0000000000000000000000003ec8798b81485a254928b70cda1cf0a2bb0b74d716906370a082319060240160206040518083038186803b158015610f3b57600080fd5b505afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061281b565b9050610f80600084612284565b610f8a9082612af9565b9050610f986004600a612b80565b600854610fa59083612c2e565b610faf9190612b11565b9150610fb96124fc565b610fc161251a565b6001546001600160a01b0390811680845260405163192399d160e01b815291871660048301529063192399d19060240160206040518083038186803b15801561100957600080fd5b505afa15801561101d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611041919061281b565b81515260015460405163488a2abf60e11b81526001600160a01b03878116600483015290911690639114557e9060240160206040518083038186803b15801561108957600080fd5b505afa15801561109d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c1919061281b565b815160200152600254604051630dd59a7360e31b81526001600160a01b0387811660048301526000921690636eacd3989060240160206040518083038186803b15801561110d57600080fd5b505afa158015611121573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611145919061281b565b6020830180519190915251511561120b5760025460405163488a2abf60e11b81526001600160a01b03888116600483015290911690639114557e90602401604080518083038186803b15801561119a57600080fd5b505afa1580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d291906128e7565b602080850180519091019190915251519091506111f0908290612c4d565b602080840151919091526002546001600160a01b0316908401525b600354604051630dd59a7360e31b81526001600160a01b03888116600483015290911690636eacd3989060240160206040518083038186803b15801561125057600080fd5b505afa158015611264573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611288919061281b565b6040830180519190915251511561134d5760035460405163488a2abf60e11b81526001600160a01b03888116600483015290911690639114557e90602401604080518083038186803b1580156112dd57600080fd5b505afa1580156112f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131591906128e7565b604084018051602001919091525151909150611332908290612c4d565b604080840151919091526003546001600160a01b0316908401525b60005b60038110156114e157600083826003811061137b57634e487b7160e01b600052603260045260246000fd5b60200201515111806113b8575060008382600381106113aa57634e487b7160e01b600052603260045260246000fd5b602002015160016020020151115b156114cf576000600960008684600381106113e357634e487b7160e01b600052603260045260246000fd5b60200201516001600160a01b03166001600160a01b03168152602001908152602001600020905060008160006002811061142d57634e487b7160e01b600052603260045260246000fd5b015460018301549091506114436004600a612b80565b8187866003811061146457634e487b7160e01b600052603260045260246000fd5b60200201516001602002015161147a9190612c2e565b8388876003811061149b57634e487b7160e01b600052603260045260246000fd5b6020020151516114ab9190612c2e565b6114b59190612af9565b6114bf9190612b11565b6114c9908a612af9565b98505050505b806114d981612c64565b915050611350565b506114eb86610631565b6114f59086612af9565b9450611500866115c2565b61150a9086612af9565b9695505050505050565b6000546001600160a01b0316331461153e5760405162461bcd60e51b815260040161051690612a6f565b6115486000612443565b565b6000546001600160a01b031633146115745760405162461bcd60e51b815260040161051690612a6f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527fa2100f055df07d8266677fee20de5520af74de502f1cffb91838ed6573f0724d90602001610569565b600754600090815b81811015610a9f576000600782815481106115f557634e487b7160e01b600052603260045260246000fd5b60009182526020822001546040516370a0823160e01b81526001600160a01b038881166004830152909116925082906370a082319060240160206040518083038186803b15801561164557600080fd5b505afa158015611659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167d919061281b565b905061168982876120be565b6116939082612af9565b9050801561190c576000826001600160a01b0316638d928af86040518163ffffffff1660e01b815260040160206040518083038186803b1580156116d657600080fd5b505afa1580156116ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170e9190612628565b90506000836001600160a01b03166338fff2d06040518163ffffffff1660e01b815260040160206040518083038186803b15801561174b57600080fd5b505afa15801561175f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611783919061281b565b9050600080836001600160a01b031663f94d4668846040518263ffffffff1660e01b81526004016117b691815260200190565b60006040518083038186803b1580156117ce57600080fd5b505afa1580156117e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261180a919081019061272c565b50915091506000866001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561184a57600080fd5b505afa15801561185e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611882919061281b565b6001600160a01b0388166000908152600a60209081526040808320805482518185028101850190935280835294955092939092918301828280156118e557602002820191906000526020600020905b8154815260200190600101908083116118d1575b505050505090506118f983888487856120f1565b611903908c612af9565b9a505050505050505b5050808061191990612c64565b9150506115ca565b6001600160a01b0381166000908152600a602090815260409182902080548351818402810184019094528084526060939283018282801561198157602002820191906000526020600020905b81548152602001906001019080831161196d575b50505050509050919050565b6000546001600160a01b031633146119b75760405162461bcd60e51b815260040161051690612a6f565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fcd943fb845429d9bd9ae81fdf90efed591bf98ca52698ffddd9521781aabcf9090602001610569565b6007818154811061058457600080fd5b6000546001600160a01b03163314611a3f5760405162461bcd60e51b815260040161051690612a6f565b6001600160a01b03831660008181526009602090815260409182902085815560010184905581518581529081018490527ffab3275f84809dc465f034e2674f1b3d2271b9a24f7640eab6ccddfabce6f0f1910160405180910390a2505050565b6000546001600160a01b03163314611ac95760405162461bcd60e51b815260040161051690612a6f565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f06559892206fa3252f2912fc6d2bb4fe7d8bd9736dcfbb8f6920a7c05a1ced8890602001610569565b6000546001600160a01b03163314611b415760405162461bcd60e51b815260040161051690612a6f565b8115611b6c576001600160a01b0384166000908152600a60205260409020611b6a908484612493565b505b8015611b8e576001600160a01b0384166000908152600b602052604090208190555b836001600160a01b03167fe3ab0d5f7099d7a8778d6973538ecefe0ba93e3798cd48fd131cd7a96a8136cf848484604051611bcb93929190612a13565b60405180910390a250505050565b611be1612547565b6001600160a01b038216600090815260096020526040908190208151808301909252600282828260200282019181548152602001906001019080831161196d5750505050509050919050565b6000546001600160a01b03163314611c575760405162461bcd60e51b815260040161051690612a6f565b6007546000805b611c69600184612c4d565b811015611df7578115611d0e576007611c83826001612af9565b81548110611ca157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600780546001600160a01b039092169183908110611cdb57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611de5565b60078181548110611d2f57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0385811691161415611de557600191506007611d5e8284612af9565b81548110611d7c57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600780546001600160a01b039092169183908110611db657634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80611def81612c64565b915050611c5e565b506007805480611e1757634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0385168252600a905260408120611e5a916124de565b6001600160a01b0383166000818152600b602090815260408083209290925590519182527fdf37b3d1502ca40a9183a7bdeb4fbd04eef4b4cc9b26280b32f990e9d39f828b9101610e68565b6000546001600160a01b03163314611ed05760405162461bcd60e51b815260040161051690612a6f565b6001600160a01b0384166000908152600a60205260409020611ef3908484612493565b506001600160a01b0384166000818152600b60205260408082208490556007805460018101825592527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b031916909217909155517f701db5ae5c81ee95860300dd8a35d9fddc1170c333b8656199f60acbd90e1a4e90610b8690869086908690869061295f565b6000546001600160a01b03163314611fb05760405162461bcd60e51b815260040161051690612a6f565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527ffd545ac0e45f33d5e02c616bce4495f62c610b3525df183421aaa5cb30ddc88b90602001610569565b6000546001600160a01b031633146120285760405162461bcd60e51b815260040161051690612a6f565b6001600160a01b03811661208d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610516565b61209681612443565b50565b600960205281600052604060002081600281106120b557600080fd5b01549150829050565b6001600160a01b0382166000908152600b602052604081205480156120ea576120e78184612284565b91505b5092915050565b6000805b865181101561227a576000858789848151811061212257634e487b7160e01b600052603260045260246000fd5b60200260200101516121349190612c2e565b61213e9190612b11565b9050600085838151811061216257634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156121a257600080fd5b505afa1580156121b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121da919061290a565b60ff169050600085848151811061220157634e487b7160e01b600052603260045260246000fd5b602002602001015190506004600a6122199190612b80565b61222483600a612b74565b6122306012600a612b80565b61223a8487612c2e565b6122449190612c2e565b61224e9190612b11565b6122589190612b11565b6122629086612af9565b9450505050808061227290612c64565b9150506120f5565b5095945050505050565b6005546040516393f1a40b60e01b8152600481018490526001600160a01b03838116602483015260009283929116906393f1a40b90604401604080518083038186803b1580156122d357600080fd5b505afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612833565b80516004549093509091506001600160a01b0316158015906123ae57506005546040516384e7966160e01b81526001600160a01b03858116600483015260248201879052909116906384e796619060440160206040518083038186803b15801561237457600080fd5b505afa158015612388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ac91906127fb565b155b156120ea57600480546040516393f1a40b60e01b81529182018690526001600160a01b03858116602484015216906393f1a40b90604401604080518083038186803b1580156123fc57600080fd5b505afa158015612410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124349190612833565b80519091506120e79083612af9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280548282559060005260206000209081019282156124ce579160200282015b828111156124ce5782358255916020019190600101906124b3565b506124da929150612565565b5090565b50805460008255906000526020600020908101906120969190612565565b60405180606001604052806003906020820280368337509192915050565b60405180606001604052806003905b612531612547565b8152602001906001900390816125295790505090565b60405180604001604052806002906020820280368337509192915050565b5b808211156124da5760008155600101612566565b600082601f83011261258a578081fd5b8151602061259f61259a83612ad5565b612aa4565b80838252828201915082860187848660051b89010111156125be578586fd5b855b858110156125dc578151845292840192908401906001016125c0565b5090979650505050505050565b80516001600160701b038116811461260057600080fd5b919050565b600060208284031215612616578081fd5b813561262181612cab565b9392505050565b600060208284031215612639578081fd5b815161262181612cab565b60008060008060608587031215612659578283fd5b843561266481612cab565b9350602085013567ffffffffffffffff80821115612680578485fd5b818701915087601f830112612693578485fd5b8135818111156126a1578586fd5b8860208260051b85010111156126b5578586fd5b95986020929092019750949560400135945092505050565b600080604083850312156126df578182fd5b82356126ea81612cab565b946020939093013593505050565b60008060006060848603121561270c578283fd5b833561271781612cab565b95602085013595506040909401359392505050565b600080600060608486031215612740578283fd5b835167ffffffffffffffff80821115612757578485fd5b818601915086601f83011261276a578485fd5b8151602061277a61259a83612ad5565b8083825282820191508286018b848660051b890101111561279957898afd5b8996505b848710156127c45780516127b081612cab565b83526001969096019591830191830161279d565b50918901519197509093505050808211156127dd578384fd5b506127ea8682870161257a565b925050604084015190509250925092565b60006020828403121561280c578081fd5b81518015158114612621578182fd5b60006020828403121561282c578081fd5b5051919050565b600060408284031215612844578081fd5b6040516040810181811067ffffffffffffffff8211171561286757612867612c95565b604052825181526020928301519281019290925250919050565b600080600060608486031215612895578081fd5b61289e846125e9565b92506128ac602085016125e9565b9150604084015163ffffffff811681146128c4578182fd5b809150509250925092565b6000602082840312156128e0578081fd5b5035919050565b600080604083850312156128f9578182fd5b505080516020909101519092909150565b60006020828403121561291b578081fd5b815160ff81168114612621578182fd5b81835260006001600160fb1b03831115612943578081fd5b8260051b80836020870137939093016020019283525090919050565b6001600160a01b0385168152606060208201819052600090612984908301858761292b565b905082604083015295945050505050565b6020808252825182820181905260009190848201906040850190845b818110156129d65783516001600160a01b0316835292840192918401916001016129b1565b50909695505050505050565b60408101818360005b6002811015612a0a5781518352602092830192909101906001016129eb565b50505092915050565b604081526000612a2760408301858761292b565b9050826020830152949350505050565b6020808252825182820181905260009190848201906040850190845b818110156129d657835183529284019291840191600101612a53565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612acd57612acd612c95565b604052919050565b600067ffffffffffffffff821115612aef57612aef612c95565b5060051b60200190565b60008219821115612b0c57612b0c612c7f565b500190565b600082612b2c57634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115612b6c578160001904821115612b5257612b52612c7f565b80851615612b5f57918102915b93841c9390800290612b36565b509250929050565b60006126218383612b8b565b600061262160ff8416835b600082612b9a57506001612c28565b81612ba757506000612c28565b8160018114612bbd5760028114612bc757612be3565b6001915050612c28565b60ff841115612bd857612bd8612c7f565b50506001821b612c28565b5060208310610133831016604e8410600b8410161715612c06575081810a612c28565b612c108383612b31565b8060001904821115612c2457612c24612c7f565b0290505b92915050565b6000816000190483118215151615612c4857612c48612c7f565b500290565b600082821015612c5f57612c5f612c7f565b500390565b6000600019821415612c7857612c78612c7f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461209657600080fdfea26469706673582212208b6a380559323a807a1fcb09571247abac31f7726b74e5fbdd7763ab1e10eba864736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003ec8798b81485a254928b70cda1cf0a2bb0b74d7000000000000000000000000748218256afe0a19a88ebeb2e0c5ce86d2178360000000000000000000000000f43c6bdd2f9158b5a78dccf732d190c490e286440000000000000000000000000537d3da1ed1dd7350ff1f3b92b727dfdbab80f1000000000000000000000000001c249c09090d79dc350a286247479f08c7aad70000000000000000000000002e32bad45a1c29c1ea27cf4dd588df9e68ed376c
-----Decoded View---------------
Arg [0] : _gro (address): 0x3Ec8798B81485A254928B70CDA1cf0A2BB0B74D7
Arg [1] : _mainVesting (address): 0x748218256AfE0A19a88EBEB2E0C5Ce86d2178360
Arg [2] : _empVesting (address): 0xF43c6bDD2F9158B5A78DCcf732D190C490e28644
Arg [3] : _invVesting (address): 0x0537d3DA1Ed1dd7350fF1f3B92b727dfdBAB80f1
Arg [4] : _stakerOld (address): 0x001C249c09090D79Dc350A286247479F08c7aaD7
Arg [5] : _stakerNew (address): 0x2E32bAd45a1C29c1EA27cf4dD588DF9e68ED376C
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000003ec8798b81485a254928b70cda1cf0a2bb0b74d7
Arg [1] : 000000000000000000000000748218256afe0a19a88ebeb2e0c5ce86d2178360
Arg [2] : 000000000000000000000000f43c6bdd2f9158b5a78dccf732d190c490e28644
Arg [3] : 0000000000000000000000000537d3da1ed1dd7350ff1f3b92b727dfdbab80f1
Arg [4] : 000000000000000000000000001c249c09090d79dc350a286247479f08c7aad7
Arg [5] : 0000000000000000000000002e32bad45a1c29c1ea27cf4dd588df9e68ed376c
Deployed Bytecode Sourcemap
1901:11038:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4225:130;;;;;;:::i;:::-;;:::i;:::-;;2265:34;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7631:32:7;;;7613:51;;7601:2;7586:18;2265:34:1;;;;;;;;2022:33;;;;;-1:-1:-1;;;;;2022:33:1;;;2462:46;;;;;;:::i;:::-;;:::i;:::-;;;11440:25:7;;;11428:2;11413:18;2462:46:1;11395:76:7;11268:107:1;;;:::i;:::-;;;;;;;:::i;9352:964::-;;;;;;:::i;:::-;;:::i;2130:24::-;;;;;-1:-1:-1;;;;;2130:24:1;;;2061:33;;;;;-1:-1:-1;;;;;2061:33:1;;;4961:313;;;;;;:::i;:::-;;:::i;4497:130::-;;;;;;:::i;:::-;;:::i;5280:581::-;;;;;;:::i;:::-;;:::i;11155:107::-;;;:::i;1986:30::-;;;;;-1:-1:-1;;;;;1986:30:1;;;7130:2216;;;;;;:::i;:::-;;:::i;1605:92:2:-;;;:::i;2515:43:1:-;;;;;;:::i;:::-;;;;;;;;;;;;;;3889:162;;;;;;:::i;:::-;;:::i;10322:827::-;;;;;;:::i;:::-;;:::i;11520:116::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4057:162::-;;;;;;:::i;:::-;;:::i;2305:34::-;;;;;;:::i;:::-;;:::i;973:85:2:-;1019:7;1045:6;-1:-1:-1;;;;;1045:6:2;973:85;;1953:27:1;;;;;4633:322;;;;;;:::i;:::-;;:::i;4361:130::-;;;;;;:::i;:::-;;:::i;2100:24::-;;;;;-1:-1:-1;;;;;2100:24:1;;;6773:351;;;;;;:::i;:::-;;:::i;11381:133::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6186:581::-;;;;;;:::i;:::-;;:::i;5867:313::-;;;;;;:::i;:::-;;:::i;2212:46::-;;2257:1;2212:46;;3722:161;;;;;;:::i;:::-;;:::i;2374:24::-;;;;;;1846:189:2;;;;;;:::i;:::-;;:::i;2404:52:1:-;;;;;;:::i;:::-;;:::i;4225:130::-;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;;;;;;;;;4292:9:1::1;:18:::0;;-1:-1:-1;;;;;;4292:18:1::1;-1:-1:-1::0;;;;;4292:18:1;::::1;::::0;;::::1;::::0;;;4325:23:::1;::::0;7613:51:7;;;4325:23:1::1;::::0;7601:2:7;7586:18;4325:23:1::1;;;;;;;;4225:130:::0;:::o;2265:34::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2265:34:1;;-1:-1:-1;2265:34:1;:::o;2462:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11268:107::-;11316:23;11358:10;11351:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11351:17:1;;;;;;;;;;;;;;;;;;;;;;;11268:107;:::o;9352:964::-;9460:10;:17;9418:16;;;9487:823;9511:3;9507:1;:7;9487:823;;;9535:19;9557:10;9568:1;9557:13;;;;;;-1:-1:-1;;;9557:13:1;;;;;;;;;;;;;;;;;;9603:23;;-1:-1:-1;;;9603:23:1;;-1:-1:-1;;;;;7631:32:7;;;9603:23:1;;;7613:51:7;9557:13:1;;;;-1:-1:-1;9557:13:1;;9603:14;;7586:18:7;;9603:23:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9584:42;;9652:43;9680:4;9687:7;9652:19;:43::i;:::-;9640:55;;;;:::i;:::-;;-1:-1:-1;9714:12:1;;9710:590;;9747:12;9761;9779:4;-1:-1:-1;;;;;9779:16:1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9746:51;;;;;9815:10;9828:4;-1:-1:-1;;;;;9828:16:1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9891:16;;;9905:1;9891:16;;;;;;;;9815:31;;-1:-1:-1;9864:24:1;;9891:16;;;;;;;;;;;;-1:-1:-1;9891:16:1;9864:43;;9938:4;-1:-1:-1;;;;;9925:17:1;:7;9933:1;9925:10;;;;;;-1:-1:-1;;;9925:10:1;;;;;;;;;;;;;;:17;;;;;9973:4;-1:-1:-1;;;;;9960:17:1;:7;9968:1;9960:10;;;;;;-1:-1:-1;;;9960:10:1;;;;;;;;;;;;;;;;;;:17;10021:16;;;10035:1;10021:16;;;;;;;;;9995:23;;10021:16;;;;;;;;;;;;-1:-1:-1;10021:16:1;9995:42;;10067:4;-1:-1:-1;;;;;10067:11:1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10055:6;10062:1;10055:9;;;;;;-1:-1:-1;;;10055:9:1;;;;;;;;;;;;;;:25;-1:-1:-1;;;;;10055:25:1;;;-1:-1:-1;;;;;10055:25:1;;;;;10110:4;-1:-1:-1;;;;;10110:11:1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10098:6;10105:1;10098:9;;;;;;-1:-1:-1;;;10098:9:1;;;;;;;;;-1:-1:-1;;;;;10098:25:1;;;:9;;;;;;;;;;:25;;;;10168:24;;;10141;10168;;;:9;:24;;;;;;10141:51;;;;;;;;;;;;;;;;;:24;;:51;;10168:24;;10141:51;;10168:24;10141:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10223:62;10246:7;10255:8;10265:2;10269:6;10277:7;10223:22;:62::i;:::-;10211:74;;;;:::i;:::-;;;9710:590;;;;;;;9487:823;;9516:3;;;;;:::i;:::-;;;;9487:823;;;;9352:964;;;;:::o;4961:313::-;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;5103:15:1;::::1;;::::0;;;:9:::1;:15;::::0;;;;:25:::1;::::0;5121:7;;5103:25:::1;:::i;:::-;-1:-1:-1::0;;;;;;5138:14:1;::::1;;::::0;;;:8:::1;:14;::::0;;;;;:26;;;5174:10:::1;:37:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;5174:37:1::1;::::0;;::::1;::::0;;;5226:41;::::1;::::0;::::1;::::0;5147:4;;5248:7;;;;5155:9;;5226:41:::1;:::i;:::-;;;;;;;;4961:313:::0;;;;:::o;4497:130::-;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;4564:9:1::1;:18:::0;;;4597:23:::1;::::0;11440:25:7;;;4597:23:1::1;::::0;11428:2:7;11413:18;4597:23:1::1;11395:76:7::0;5280:581:1;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;5362:10:1::1;:17:::0;5348:11:::1;::::0;5408:319:::1;5432:7;5438:1;5432:3:::0;:7:::1;:::i;:::-;5428:1;:11;5408:319;;;5464:4;5460:257;;;5504:10;5515:5;:1:::0;5519::::1;5515:5;:::i;:::-;5504:17;;;;;;-1:-1:-1::0;;;5504:17:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;5488:10:::1;:13:::0;;-1:-1:-1;;;;;5504:17:1;;::::1;::::0;5499:1;;5488:13;::::1;;;-1:-1:-1::0;;;5488:13:1::1;;;;;;;;;;;;;;;;;:33;;;;;-1:-1:-1::0;;;;;5488:33:1::1;;;;;-1:-1:-1::0;;;;;5488:33:1::1;;;;;;5460:257;;;5580:10;5591:1;5580:13;;;;;;-1:-1:-1::0;;;5580:13:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;5564:30:1;;::::1;5580:13:::0;::::1;5564:30;5560:143;;;5625:4;::::0;-1:-1:-1;5667:10:1::1;5678:5;:1:::0;5625:4;5678:5:::1;:::i;:::-;5667:17;;;;;;-1:-1:-1::0;;;5667:17:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;5651:10:::1;:13:::0;;-1:-1:-1;;;;;5667:17:1;;::::1;::::0;5662:1;;5651:13;::::1;;;-1:-1:-1::0;;;5651:13:1::1;;;;;;;;;;;;;;;;;:33;;;;;-1:-1:-1::0;;;;;5651:33:1::1;;;;;-1:-1:-1::0;;;;;5651:33:1::1;;;;;;5560:143;5441:3:::0;::::1;::::0;::::1;:::i;:::-;;;;5408:319;;;;5736:10;:16;;;;;-1:-1:-1::0;;;5736:16:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;5736:16:1;;;;;-1:-1:-1;;;;;;5736:16:1::1;::::0;;;;;;;;-1:-1:-1;;;;;5769:15:1;::::1;::::0;;:9:::1;:15:::0;;;;;5762:22:::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;5801:14:1;::::1;;::::0;;;:8:::1;:14;::::0;;;;;;;5794:21;;;;5830:24;;7613:51:7;;;5830:24:1::1;::::0;7586:18:7;5830:24:1::1;;;;;;;;1255:1:2;;5280:581:1::0;:::o;11155:107::-;11203:23;11245:10;11238:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11238:17:1;;;;;;;;;;;;;;;;;;;;;;11155:107;:::o;7130:2216::-;7271:22;;-1:-1:-1;;;7271:22:1;;-1:-1:-1;;;;;7631:32:7;;;7271:22:1;;;7613:51:7;7189:13:1;;;;7271:3;:13;;;;7586:18:7;;7271:22:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7254:39;;7313:48;2257:1;7353:7;7313:19;:48::i;:::-;7303:58;;;;:::i;:::-;;-1:-1:-1;573:32:0;512:1;581:2;573:32;:::i;:::-;7389:9:1;;7380:18;;:6;:18;:::i;:::-;7379:48;;;;:::i;:::-;7371:56;;7628:26;;:::i;:::-;8010:28;;:::i;:::-;8071:11;;-1:-1:-1;;;;;8071:11:1;;;8049:34;;;8109:35;;-1:-1:-1;;;8109:35:1;;7631:32:7;;;8109:35:1;;;7613:51:7;8071:11:1;8109:26;;7586:18:7;;8109:35:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8093:10;;:51;8170:11;;:34;;-1:-1:-1;;;8170:34:1;;-1:-1:-1;;;;;7631:32:7;;;8170:34:1;;;7613:51:7;8170:11:1;;;;:25;;7586:18:7;;8170:34:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8154:10;;;:13;:50;8262:10;;:32;;-1:-1:-1;;;8262:32:1;;-1:-1:-1;;;;;7631:32:7;;;8262::1;;;7613:51:7;8162:1:1;;8262:10;;:23;;7586:18:7;;8262:32:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8246:10;;;;;:48;;;;8308:10;:13;:17;8304:220;;8374:10;;:33;;-1:-1:-1;;;8374:33:1;;-1:-1:-1;;;;;7631:32:7;;;8374:33:1;;;7613:51:7;8374:10:1;;;;:24;;7586:18:7;;8374:33:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8357:10;;;;;;:13;;;8341:66;;;;8437:10;:13;8341:66;;-1:-1:-1;8437:29:1;;8341:66;;8437:29;:::i;:::-;8421:10;;;;;:45;;;;8502:10;;-1:-1:-1;;;;;8502:10:1;8480:11;;;:33;8304:220;8550:10;;:32;;-1:-1:-1;;;8550:32:1;;-1:-1:-1;;;;;7631:32:7;;;8550::1;;;7613:51:7;8550:10:1;;;;:23;;7586:18:7;;8550:32:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8534:10;;;;;:48;;;;8596:10;:13;:17;8592:220;;8662:10;;:33;;-1:-1:-1;;;8662:33:1;;-1:-1:-1;;;;;7631:32:7;;;8662:33:1;;;7613:51:7;8662:10:1;;;;:24;;7586:18:7;;8662:33:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8645:10;;;;;;:13;8629:66;;;;8725:10;:13;8629:66;;-1:-1:-1;8725:29:1;;8629:66;;8725:29;:::i;:::-;8709:10;;;;;:45;;;;8790:10;;-1:-1:-1;;;;;8790:10:1;8768:11;;;:33;8592:220;8827:9;8822:425;8846:15;8842:1;:19;8822:425;;;8902:1;8886:7;8894:1;8886:10;;;;;-1:-1:-1;;;8886:10:1;;;;;;;;;;;;;:13;:17;;:38;;;8923:1;8907:7;8915:1;8907:10;;;;;-1:-1:-1;;;8907:10:1;;;;;;;;;;;;;8918:1;8907:13;;;;:17;8886:38;8882:355;;;8944:26;8973:14;:27;8988:8;8997:1;8988:11;;;;;-1:-1:-1;;;8988:11:1;;;;;;;;;;;;;-1:-1:-1;;;;;8973:27:1;-1:-1:-1;;;;;8973:27:1;;;;;;;;;;;;8944:56;;9018:20;9041:7;9049:1;9041:10;;;;;-1:-1:-1;;;9041:10:1;;;;;;;;;;;9102:1;9094:10;;;9041;;-1:-1:-1;573:32:0;512:1;581:2;573:32;:::i;:::-;9179:14:1;9163:7;9171:1;9163:10;;;;;-1:-1:-1;;;9163:10:1;;;;;;;;;;;;;9174:1;9163:13;;;;:30;;;;:::i;:::-;9148:12;9132:7;9140:1;9132:10;;;;;-1:-1:-1;;;9132:10:1;;;;;;;;;;;;;:13;:28;;;;:::i;:::-;:61;;;;:::i;:::-;9131:91;;;;:::i;:::-;9122:100;;;;:::i;:::-;;;8882:355;;;;8863:3;;;;:::i;:::-;;;;8822:425;;;;9266:27;9285:7;9266:18;:27::i;:::-;9257:36;;;;:::i;:::-;;;9312:27;9331:7;9312:18;:27::i;:::-;9303:36;;;;:::i;:::-;;7130:2216;-1:-1:-1;;;;;;7130:2216:1:o;1605:92:2:-;1019:7;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;1669:21:::1;1687:1;1669:9;:21::i;:::-;1605:92::o:0;3889:162:1:-;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;3961:10:1::1;:40:::0;;-1:-1:-1;;;;;;3961:40:1::1;-1:-1:-1::0;;;;;3961:40:1;::::1;::::0;;::::1;::::0;;;4016:28:::1;::::0;7613:51:7;;;4016:28:1::1;::::0;7601:2:7;7586:18;4016:28:1::1;7568:102:7::0;10322:827:1;10430:10;:17;10388:16;;;10457:686;10481:3;10477:1;:7;10457:686;;;10505:19;10527:10;10538:1;10527:13;;;;;;-1:-1:-1;;;10527:13:1;;;;;;;;;;;;;;;;;;10573:23;;-1:-1:-1;;;10573:23:1;;-1:-1:-1;;;;;7631:32:7;;;10573:23:1;;;7613:51:7;10527:13:1;;;;-1:-1:-1;10527:13:1;;10573:14;;7586:18:7;;10573:23:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10554:42;;10622:43;10650:4;10657:7;10622:19;:43::i;:::-;10610:55;;;;:::i;:::-;;-1:-1:-1;10684:12:1;;10680:453;;10716:19;10738:4;-1:-1:-1;;;;;10738:13:1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10716:37;;10771:14;10788:4;-1:-1:-1;;;;;10788:14:1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10771:33;;10823:23;10848:25;10879:5;-1:-1:-1;;;;;10879:19:1;;10899:6;10879:27;;;;;;;;;;;;;11440:25:7;;11428:2;11413:18;;11395:76;10879:27:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10879:27:1;;;;;;;;;;;;:::i;:::-;10822:84;;;;;10924:10;10937:4;-1:-1:-1;;;;;10937:16:1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11000:24:1;;10973;11000;;;:9;:24;;;;;;;;10973:51;;;;;;;;;;;;;;;;;10924:31;;-1:-1:-1;10973:24:1;;:51;;11000:24;10973:51;;11000:24;10973:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11055:63;11078:8;11088;11098:2;11102:6;11110:7;11055:22;:63::i;:::-;11043:75;;;;:::i;:::-;;;10680:453;;;;;;;10457:686;;10486:3;;;;;:::i;:::-;;;;10457:686;;11520:116;-1:-1:-1;;;;;11614:15:1;;;;;;:9;:15;;;;;;;;;11607:22;;;;;;;;;;;;;;;;;11579:16;;11607:22;;;11614:15;11607:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11520:116;;;:::o;4057:162::-;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;4129:10:1::1;:40:::0;;-1:-1:-1;;;;;;4129:40:1::1;-1:-1:-1::0;;;;;4129:40:1;::::1;::::0;;::::1;::::0;;;4184:28:::1;::::0;7613:51:7;;;4184:28:1::1;::::0;7601:2:7;7586:18;4184:28:1::1;7568:102:7::0;2305:34:1;;;;;;;;;;;;4633:322;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;4781:23:1;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;:41;;;4856:1:::1;4832:26;:43:::0;;;4890:58;;14018:25:7;;;14059:18;;;14052:34;;;4890:58:1::1;::::0;13991:18:7;4890:58:1::1;;;;;;;4633:322:::0;;;:::o;4361:130::-;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;4428:9:1::1;:18:::0;;-1:-1:-1;;;;;;4428:18:1::1;-1:-1:-1::0;;;;;4428:18:1;::::1;::::0;;::::1;::::0;;;4461:23:::1;::::0;7613:51:7;;;4461:23:1::1;::::0;7601:2:7;7586:18;4461:23:1::1;7568:102:7::0;6773:351:1;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;6916:18:1;;6912:74:::1;;-1:-1:-1::0;;;;;6950:15:1;::::1;;::::0;;;:9:::1;:15;::::0;;;;:25:::1;::::0;6968:7;;6950:25:::1;:::i;:::-;;6912:74;6999:13:::0;;6995:70:::1;;-1:-1:-1::0;;;;;7028:14:1;::::1;;::::0;;;:8:::1;:14;::::0;;;;:26;;;6995:70:::1;7092:4;-1:-1:-1::0;;;;;7079:38:1::1;;7098:7;;7107:9;7079:38;;;;;;;;:::i;:::-;;;;;;;;6773:351:::0;;;;:::o;11381:133::-;11448:17;;:::i;:::-;-1:-1:-1;;;;;11484:23:1;;;;;;:14;:23;;;;;;;11477:30;;;;;;;;;;11484:23;11477:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;11381:133;;;:::o;6186:581::-;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;6268:10:1::1;:17:::0;6254:11:::1;::::0;6314:319:::1;6338:7;6344:1;6338:3:::0;:7:::1;:::i;:::-;6334:1;:11;6314:319;;;6370:4;6366:257;;;6410:10;6421:5;:1:::0;6425::::1;6421:5;:::i;:::-;6410:17;;;;;;-1:-1:-1::0;;;6410:17:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;6394:10:::1;:13:::0;;-1:-1:-1;;;;;6410:17:1;;::::1;::::0;6405:1;;6394:13;::::1;;;-1:-1:-1::0;;;6394:13:1::1;;;;;;;;;;;;;;;;;:33;;;;;-1:-1:-1::0;;;;;6394:33:1::1;;;;;-1:-1:-1::0;;;;;6394:33:1::1;;;;;;6366:257;;;6486:10;6497:1;6486:13;;;;;;-1:-1:-1::0;;;6486:13:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;6470:30:1;;::::1;6486:13:::0;::::1;6470:30;6466:143;;;6531:4;::::0;-1:-1:-1;6573:10:1::1;6584:5;:1:::0;6531:4;6584:5:::1;:::i;:::-;6573:17;;;;;;-1:-1:-1::0;;;6573:17:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;6557:10:::1;:13:::0;;-1:-1:-1;;;;;6573:17:1;;::::1;::::0;6568:1;;6557:13;::::1;;;-1:-1:-1::0;;;6557:13:1::1;;;;;;;;;;;;;;;;;:33;;;;;-1:-1:-1::0;;;;;6557:33:1::1;;;;;-1:-1:-1::0;;;;;6557:33:1::1;;;;;;6466:143;6347:3:::0;::::1;::::0;::::1;:::i;:::-;;;;6314:319;;;;6642:10;:16;;;;;-1:-1:-1::0;;;6642:16:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;6642:16:1;;;;;-1:-1:-1;;;;;;6642:16:1::1;::::0;;;;;;;;-1:-1:-1;;;;;6675:15:1;::::1;::::0;;:9:::1;:15:::0;;;;;6668:22:::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;6707:14:1;::::1;;::::0;;;:8:::1;:14;::::0;;;;;;;6700:21;;;;6736:24;;7613:51:7;;;6736:24:1::1;::::0;7586:18:7;6736:24:1::1;7568:102:7::0;5867:313:1;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;6009:15:1;::::1;;::::0;;;:9:::1;:15;::::0;;;;:25:::1;::::0;6027:7;;6009:25:::1;:::i;:::-;-1:-1:-1::0;;;;;;6044:14:1;::::1;;::::0;;;:8:::1;:14;::::0;;;;;:26;;;6080:10:::1;:37:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;6080:37:1::1;::::0;;::::1;::::0;;;6132:41;::::1;::::0;::::1;::::0;6053:4;;6154:7;;;;6061:9;;6132:41:::1;:::i;3722:161::-:0;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;3795:11:1::1;:37:::0;;-1:-1:-1;;;;;;3795:37:1::1;-1:-1:-1::0;;;;;3795:37:1;::::1;::::0;;::::1;::::0;;;3847:29:::1;::::0;7613:51:7;;;3847:29:1::1;::::0;7601:2:7;7586:18;3847:29:1::1;7568:102:7::0;1846:189:2;1019:7;1045:6;-1:-1:-1;;;;;1045:6:2;666:10:6;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;1934:22:2;::::1;1926:73;;;::::0;-1:-1:-1;;;1926:73:2;;12817:2:7;1926:73:2::1;::::0;::::1;12799:21:7::0;12856:2;12836:18;;;12829:30;12895:34;12875:18;;;12868:62;-1:-1:-1;;;12946:18:7;;;12939:36;12992:19;;1926:73:2::1;12789:228:7::0;1926:73:2::1;2009:19;2019:8;2009:9;:19::i;:::-;1846:189:::0;:::o;2404:52:1:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2404:52:1;;-1:-1:-1;2404:52:1:o;11642:245::-;-1:-1:-1;;;;;11769:16:1;;11726:14;11769:16;;;:8;:16;;;;;;11799:10;;11795:86;;11834:36;11854:6;11862:7;11834:19;:36::i;:::-;11825:45;;11795:86;11642:245;;;;;:::o;12325:612::-;12548:13;;12573:358;12597:12;:19;12593:1;:23;12573:358;;;12637:14;12685:13;12673:8;12655:12;12668:1;12655:15;;;;;;-1:-1:-1;;;12655:15:1;;;;;;;;;;;;;;;:26;;;;:::i;:::-;12654:44;;;;:::i;:::-;12637:61;;12712:16;12737:6;12744:1;12737:9;;;;;;-1:-1:-1;;;12737:9:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;12731:25:1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12712:46;;;;12772:14;12789:7;12797:1;12789:10;;;;;;-1:-1:-1;;;12789:10:1;;;;;;;;;;;;;;;12772:27;;512:1:0;581:2;573:32;;;;:::i;:::-;12870:21:1;12883:8;12878:2;12870:21;:::i;:::-;271:29:0;168:2;279;271:29;:::i;:::-;12824:15:1;12833:6;12824;:15;:::i;:::-;:41;;;;:::i;:::-;12823:69;;;;:::i;:::-;:97;;;;:::i;:::-;12814:106;;;;:::i;:::-;;;12573:358;;;12618:3;;;;;:::i;:::-;;;;12573:358;;;;12325:612;;;;;;;:::o;11893:426::-;12035:9;;12024:47;;-1:-1:-1;;;12024:47:1;;;;;13739:25:7;;;-1:-1:-1;;;;;13800:32:7;;;13780:18;;;13773:60;11977:14:1;;;;12035:9;;;12024:30;;13712:18:7;;12024:47:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12090:9;;12113;;12090;;-1:-1:-1;12003:68:1;;-1:-1:-1;;;;;;12113:9:1;:23;;;;:88;;-1:-1:-1;12161:9:1;;12141:60;;-1:-1:-1;;;12141:60:1;;-1:-1:-1;;;;;8328:32:7;;;12141:60:1;;;8310:51:7;8377:18;;;8370:34;;;12161:9:1;;;;12141:43;;8283:18:7;;12141:60:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12140:61;12113:88;12109:204;;;12233:9;;;12222:47;;-1:-1:-1;;;12222:47:1;;;;;13739:25:7;;;-1:-1:-1;;;;;13800:32:7;;;13780:18;;;13773:60;12233:9:1;;12222:30;;13712:18:7;;12222:47:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12293:9;;12217:52;;-1:-1:-1;12283:19:1;;;;:::i;2041:169:2:-;2096:16;2115:6;;-1:-1:-1;;;;;2131:17:2;;;-1:-1:-1;;;;;;2131:17:2;;;;;;2163:40;;2115:6;;;;;;;2163:40;;2096:16;2163:40;2041:169;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:690:7;79:5;132:3;125:4;117:6;113:17;109:27;99:2;;154:5;147;140:20;99:2;187:6;181:13;213:4;237:60;253:43;293:2;253:43;:::i;:::-;237:60;:::i;:::-;319:3;343:2;338:3;331:15;371:2;366:3;362:12;355:19;;406:2;398:6;394:15;458:3;453:2;447;444:1;440:10;432:6;428:23;424:32;421:41;418:2;;;479:5;472;465:20;418:2;505:5;519:156;533:2;530:1;527:9;519:156;;;590:10;;578:23;;621:12;;;;653;;;;551:1;544:9;519:156;;;-1:-1:-1;693:5:7;;89:615;-1:-1:-1;;;;;;;89:615:7:o;709:188::-;788:13;;-1:-1:-1;;;;;830:42:7;;820:53;;810:2;;887:1;884;877:12;810:2;769:128;;;:::o;902:257::-;961:6;1014:2;1002:9;993:7;989:23;985:32;982:2;;;1035:6;1027;1020:22;982:2;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;972:187;-1:-1:-1;;;972:187:7:o;1164:261::-;1234:6;1287:2;1275:9;1266:7;1262:23;1258:32;1255:2;;;1308:6;1300;1293:22;1255:2;1345:9;1339:16;1364:31;1389:5;1364:31;:::i;1430:868::-;1534:6;1542;1550;1558;1611:2;1599:9;1590:7;1586:23;1582:32;1579:2;;;1632:6;1624;1617:22;1579:2;1676:9;1663:23;1695:31;1720:5;1695:31;:::i;:::-;1745:5;-1:-1:-1;1801:2:7;1786:18;;1773:32;1824:18;1854:14;;;1851:2;;;1886:6;1878;1871:22;1851:2;1929:6;1918:9;1914:22;1904:32;;1974:7;1967:4;1963:2;1959:13;1955:27;1945:2;;2001:6;1993;1986:22;1945:2;2046;2033:16;2072:2;2064:6;2061:14;2058:2;;;2093:6;2085;2078:22;2058:2;2151:7;2146:2;2136:6;2133:1;2129:14;2125:2;2121:23;2117:32;2114:45;2111:2;;;2177:6;2169;2162:22;2111:2;1569:729;;2213:2;2205:11;;;;;-1:-1:-1;2235:6:7;;2288:2;2273:18;2260:32;;-1:-1:-1;1569:729:7;-1:-1:-1;;;1569:729:7:o;2303:325::-;2371:6;2379;2432:2;2420:9;2411:7;2407:23;2403:32;2400:2;;;2453:6;2445;2438:22;2400:2;2497:9;2484:23;2516:31;2541:5;2516:31;:::i;:::-;2566:5;2618:2;2603:18;;;;2590:32;;-1:-1:-1;;;2390:238:7:o;2633:393::-;2710:6;2718;2726;2779:2;2767:9;2758:7;2754:23;2750:32;2747:2;;;2800:6;2792;2785:22;2747:2;2844:9;2831:23;2863:31;2888:5;2863:31;:::i;:::-;2913:5;2965:2;2950:18;;2937:32;;-1:-1:-1;3016:2:7;3001:18;;;2988:32;;2737:289;-1:-1:-1;;;2737:289:7:o;3031:1336::-;3169:6;3177;3185;3238:2;3226:9;3217:7;3213:23;3209:32;3206:2;;;3259:6;3251;3244:22;3206:2;3297:9;3291:16;3326:18;3367:2;3359:6;3356:14;3353:2;;;3388:6;3380;3373:22;3353:2;3431:6;3420:9;3416:22;3406:32;;3476:7;3469:4;3465:2;3461:13;3457:27;3447:2;;3503:6;3495;3488:22;3447:2;3537;3531:9;3559:4;3583:60;3599:43;3639:2;3599:43;:::i;3583:60::-;3665:3;3689:2;3684:3;3677:15;3717:2;3712:3;3708:12;3701:19;;3748:2;3744;3740:11;3796:7;3791:2;3785;3782:1;3778:10;3774:2;3770:19;3766:28;3763:41;3760:2;;;3822:6;3814;3807:22;3760:2;3849:6;3840:15;;3864:231;3878:2;3875:1;3872:9;3864:231;;;3942:3;3936:10;3959:31;3984:5;3959:31;:::i;:::-;4003:18;;3896:1;3889:9;;;;;4041:12;;;;4073;;3864:231;;;-1:-1:-1;4150:18:7;;;4144:25;4114:5;;-1:-1:-1;4144:25:7;;-1:-1:-1;;;4181:16:7;;;4178:2;;;4215:6;4207;4200:22;4178:2;;4243:74;4309:7;4298:8;4287:9;4283:24;4243:74;:::i;:::-;4233:84;;;4357:2;4346:9;4342:18;4336:25;4326:35;;3196:1171;;;;;:::o;4372:297::-;4439:6;4492:2;4480:9;4471:7;4467:23;4463:32;4460:2;;;4513:6;4505;4498:22;4460:2;4550:9;4544:16;4603:5;4596:13;4589:21;4582:5;4579:32;4569:2;;4630:6;4622;4615:22;4674:194;4744:6;4797:2;4785:9;4776:7;4772:23;4768:32;4765:2;;;4818:6;4810;4803:22;4765:2;-1:-1:-1;4846:16:7;;4755:113;-1:-1:-1;4755:113:7:o;5160:510::-;5254:6;5307:2;5295:9;5286:7;5282:23;5278:32;5275:2;;;5328:6;5320;5313:22;5275:2;5366;5360:9;5408:2;5400:6;5396:15;5477:6;5465:10;5462:22;5441:18;5429:10;5426:34;5423:62;5420:2;;;5488:18;;:::i;:::-;5524:2;5517:22;5563:16;;5548:32;;5634:2;5619:18;;;5613:25;5596:15;;;5589:50;;;;-1:-1:-1;5555:6:7;5265:405;-1:-1:-1;5265:405:7:o;5675:470::-;5762:6;5770;5778;5831:2;5819:9;5810:7;5806:23;5802:32;5799:2;;;5852:6;5844;5837:22;5799:2;5880:40;5910:9;5880:40;:::i;:::-;5870:50;;5939:49;5984:2;5973:9;5969:18;5939:49;:::i;:::-;5929:59;;6031:2;6020:9;6016:18;6010:25;6075:10;6068:5;6064:22;6057:5;6054:33;6044:2;;6106:6;6098;6091:22;6044:2;6134:5;6124:15;;;5789:356;;;;;:::o;6150:190::-;6209:6;6262:2;6250:9;6241:7;6237:23;6233:32;6230:2;;;6283:6;6275;6268:22;6230:2;-1:-1:-1;6311:23:7;;6220:120;-1:-1:-1;6220:120:7:o;6544:255::-;6623:6;6631;6684:2;6672:9;6663:7;6659:23;6655:32;6652:2;;;6705:6;6697;6690:22;6652:2;-1:-1:-1;;6733:16:7;;6789:2;6774:18;;;6768:25;6733:16;;6768:25;;-1:-1:-1;6642:157:7:o;6804:293::-;6872:6;6925:2;6913:9;6904:7;6900:23;6896:32;6893:2;;;6946:6;6938;6931:22;6893:2;6983:9;6977:16;7033:4;7026:5;7022:16;7015:5;7012:27;7002:2;;7058:6;7050;7043:22;7102:360;7190:19;;;7172:3;-1:-1:-1;;;;;7221:31:7;;7218:2;;;7267:3;7262;7255:16;7218:2;7305:6;7302:1;7298:14;7357:8;7350:5;7343:4;7338:3;7334:14;7321:45;7389:18;;;;7409:4;7385:29;7423:15;;;-1:-1:-1;7385:29:7;;7180:282;-1:-1:-1;7180:282:7:o;7675:456::-;-1:-1:-1;;;;;7920:32:7;;7902:51;;7989:2;7984;7969:18;;7962:30;;;-1:-1:-1;;8009:73:7;;8063:18;;8055:6;8047;8009:73;:::i;:::-;8001:81;;8118:6;8113:2;8102:9;8098:18;8091:34;7892:239;;;;;;;:::o;8415:683::-;8608:2;8660:21;;;8730:13;;8633:18;;;8752:22;;;8579:4;;8608:2;8831:15;;;;8805:2;8790:18;;;8579:4;8877:195;8891:6;8888:1;8885:13;8877:195;;;8956:13;;-1:-1:-1;;;;;8952:39:7;8940:52;;9047:15;;;;9012:12;;;;8988:1;8906:9;8877:195;;;-1:-1:-1;9089:3:7;;8588:510;-1:-1:-1;;;;;;8588:510:7:o;9791:494::-;9971:2;9956:18;;9960:9;10051:6;9929:4;10085:194;10099:4;10096:1;10093:11;10085:194;;;10158:13;;10146:26;;10195:4;10219:12;;;;10254:15;;;;10119:1;10112:9;10085:194;;;10089:3;;;9938:347;;;;:::o;10290:359::-;10507:2;10496:9;10489:21;10470:4;10527:73;10596:2;10585:9;10581:18;10573:6;10565;10527:73;:::i;:::-;10519:81;;10636:6;10631:2;10620:9;10616:18;10609:34;10479:170;;;;;;:::o;10654:635::-;10825:2;10877:21;;;10947:13;;10850:18;;;10969:22;;;10796:4;;10825:2;11048:15;;;;11022:2;11007:18;;;10796:4;11094:169;11108:6;11105:1;11102:13;11094:169;;;11169:13;;11157:26;;11238:15;;;;11203:12;;;;11130:1;11123:9;11094:169;;13022:356;13224:2;13206:21;;;13243:18;;;13236:30;13302:34;13297:2;13282:18;;13275:62;13369:2;13354:18;;13196:182::o;14097:275::-;14168:2;14162:9;14233:2;14214:13;;-1:-1:-1;;14210:27:7;14198:40;;14268:18;14253:34;;14289:22;;;14250:62;14247:2;;;14315:18;;:::i;:::-;14351:2;14344:22;14142:230;;-1:-1:-1;14142:230:7:o;14377:183::-;14437:4;14470:18;14462:6;14459:30;14456:2;;;14492:18;;:::i;:::-;-1:-1:-1;14537:1:7;14533:14;14549:4;14529:25;;14446:114::o;14565:128::-;14605:3;14636:1;14632:6;14629:1;14626:13;14623:2;;;14642:18;;:::i;:::-;-1:-1:-1;14678:9:7;;14613:80::o;14698:217::-;14738:1;14764;14754:2;;-1:-1:-1;;;14789:31:7;;14843:4;14840:1;14833:15;14871:4;14796:1;14861:15;14754:2;-1:-1:-1;14900:9:7;;14744:171::o;14920:422::-;15009:1;15052:5;15009:1;15066:270;15087:7;15077:8;15074:21;15066:270;;;15146:4;15142:1;15138:6;15134:17;15128:4;15125:27;15122:2;;;15155:18;;:::i;:::-;15205:7;15195:8;15191:22;15188:2;;;15225:16;;;;15188:2;15304:22;;;;15264:15;;;;15066:270;;;15070:3;14984:358;;;;;:::o;15347:131::-;15407:5;15436:36;15463:8;15457:4;15436:36;:::i;15483:140::-;15541:5;15570:47;15611:4;15601:8;15597:19;15591:4;15628:806;15677:5;15707:8;15697:2;;-1:-1:-1;15748:1:7;15762:5;;15697:2;15796:4;15786:2;;-1:-1:-1;15833:1:7;15847:5;;15786:2;15878:4;15896:1;15891:59;;;;15964:1;15959:130;;;;15871:218;;15891:59;15921:1;15912:10;;15935:5;;;15959:130;15996:3;15986:8;15983:17;15980:2;;;16003:18;;:::i;:::-;-1:-1:-1;;16059:1:7;16045:16;;16074:5;;15871:218;;16173:2;16163:8;16160:16;16154:3;16148:4;16145:13;16141:36;16135:2;16125:8;16122:16;16117:2;16111:4;16108:12;16104:35;16101:77;16098:2;;;-1:-1:-1;16210:19:7;;;16242:5;;16098:2;16289:34;16314:8;16308:4;16289:34;:::i;:::-;16359:6;16355:1;16351:6;16347:19;16338:7;16335:32;16332:2;;;16370:18;;:::i;:::-;16408:20;;-1:-1:-1;15687:747:7;;;;;:::o;16439:168::-;16479:7;16545:1;16541;16537:6;16533:14;16530:1;16527:21;16522:1;16515:9;16508:17;16504:45;16501:2;;;16552:18;;:::i;:::-;-1:-1:-1;16592:9:7;;16491:116::o;16612:125::-;16652:4;16680:1;16677;16674:8;16671:2;;;16685:18;;:::i;:::-;-1:-1:-1;16722:9:7;;16661:76::o;16742:135::-;16781:3;-1:-1:-1;;16802:17:7;;16799:2;;;16822:18;;:::i;:::-;-1:-1:-1;16869:1:7;16858:13;;16789:88::o;16882:127::-;16943:10;16938:3;16934:20;16931:1;16924:31;16974:4;16971:1;16964:15;16998:4;16995:1;16988:15;17014:127;17075:10;17070:3;17066:20;17063:1;17056:31;17106:4;17103:1;17096:15;17130:4;17127:1;17120:15;17146:131;-1:-1:-1;;;;;17221:31:7;;17211:42;;17201:2;;17267:1;17264;17257:12
Swarm Source
ipfs://8b6a380559323a807a1fcb09571247abac31f7726b74e5fbdd7763ab1e10eba8
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
[ 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.