Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
LidSimplifiedPresale
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-08-13 */ pragma solidity ^0.5.16; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ 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); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context is Initializable { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } contract PauserRole is Initializable, Context { using Roles for Roles.Role; event PauserAdded(address indexed account); event PauserRemoved(address indexed account); Roles.Role private _pausers; function initialize(address sender) public initializer { if (!isPauser(sender)) { _addPauser(sender); } } modifier onlyPauser() { require(isPauser(_msgSender()), "PauserRole: caller does not have the Pauser role"); _; } function isPauser(address account) public view returns (bool) { return _pausers.has(account); } function addPauser(address account) public onlyPauser { _addPauser(account); } function renouncePauser() public { _removePauser(_msgSender()); } function _addPauser(address account) internal { _pausers.add(account); emit PauserAdded(account); } function _removePauser(address account) internal { _pausers.remove(account); emit PauserRemoved(account); } uint256[50] private ______gap; } /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ contract Pausable is Initializable, Context, PauserRole { /** * @dev Emitted when the pause is triggered by a pauser (`account`). */ event Paused(address account); /** * @dev Emitted when the pause is lifted by a pauser (`account`). */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. Assigns the Pauser role * to the deployer. */ function initialize(address sender) public initializer { PauserRole.initialize(sender); _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Called by a pauser to pause, triggers stopped state. */ function pause() public onlyPauser whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Called by a pauser to unpause, returns to normal state. */ function unpause() public onlyPauser whenPaused { _paused = false; emit Unpaused(_msgSender()); } uint256[50] private ______gap; } /** * @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. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be aplied to your functions to restrict their use to * the owner. */ contract Ownable is Initializable, Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function initialize(address sender) public initializer { _owner = sender; emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * > Note: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[50] private ______gap; } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. */ contract ReentrancyGuard is Initializable { // counter to allow mutex lock with only one SSTORE operation uint256 private _guardCounter; function initialize() public initializer { // The counter starts at one to prevent changing it from zero to a non-zero // value, which is a more expensive operation. _guardCounter = 1; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call"); } uint256[50] private ______gap; } interface IUniswapV2Router01 { function factory() external pure returns (address); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); function WETH() external view returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); } library BasisPoints { using SafeMath for uint; uint constant private BASIS_POINTS = 10000; function mulBP(uint amt, uint bp) internal pure returns (uint) { if (amt == 0) return 0; return amt.mul(bp).div(BASIS_POINTS); } function divBP(uint amt, uint bp) internal pure returns (uint) { require(bp > 0, "Cannot divide by zero."); if (amt == 0) return 0; return amt.mul(BASIS_POINTS).div(bp); } function addBP(uint amt, uint bp) internal pure returns (uint) { if (amt == 0) return 0; if (bp == 0) return amt; return amt.add(mulBP(amt, bp)); } function subBP(uint amt, uint bp) internal pure returns (uint) { if (amt == 0) return 0; if (bp == 0) return amt; return amt.sub(mulBP(amt, bp)); } } contract LidSimplifiedPresaleTimer is Initializable, Ownable { using SafeMath for uint; uint public startTime; uint public endTime; uint public hardCapTimer; uint public softCap; address public presale; function initialize( uint _startTime, uint _hardCapTimer, uint _softCap, address _presale, address owner ) external initializer { Ownable.initialize(msg.sender); startTime = _startTime; hardCapTimer = _hardCapTimer; softCap = _softCap; presale = _presale; //Due to issue in oz testing suite, the msg.sender might not be owner _transferOwnership(owner); } function setStartTime(uint time) external onlyOwner { startTime = time; } function setEndTime(uint time) external onlyOwner { endTime = time; } function updateEndTime() external returns (uint) { if (endTime != 0) return endTime; if (presale.balance >= softCap) { endTime = now.add(hardCapTimer); return endTime; } return 0; } function isStarted() external view returns (bool) { return (startTime != 0 && now > startTime); } } contract LidSimplifiedPresaleRedeemer is Initializable, Ownable { using BasisPoints for uint; using SafeMath for uint; uint public redeemBP; uint public redeemInterval; uint[] public bonusRangeStart; uint[] public bonusRangeBP; uint public currentBonusIndex; uint public totalShares; uint public totalDepositors; mapping(address => uint) public accountDeposits; mapping(address => uint) public accountShares; mapping(address => uint) public accountClaimedTokens; address private presale; modifier onlyPresaleContract { require(msg.sender == presale, "Only callable by presale contract."); _; } function initialize( uint _redeemBP, uint _redeemInterval, uint[] calldata _bonusRangeStart, uint[] calldata _bonusRangeBP, address _presale, address owner ) external initializer { Ownable.initialize(msg.sender); redeemBP = _redeemBP; redeemInterval = _redeemInterval; presale = _presale; require( _bonusRangeStart.length == _bonusRangeBP.length, "Must have equal values for bonus range start and BP" ); require(_bonusRangeStart.length <= 10, "Cannot have more than 10 items in bonusRange"); for (uint i = 0; i < _bonusRangeStart.length; ++i) { bonusRangeStart.push(_bonusRangeStart[i]); } for (uint i = 0; i < _bonusRangeBP.length; ++i) { bonusRangeBP.push(_bonusRangeBP[i]); } //Due to issue in oz testing suite, the msg.sender might not be owner _transferOwnership(owner); } function setClaimed(address account, uint amount) external onlyPresaleContract { accountClaimedTokens[account] = accountClaimedTokens[account].add(amount); } function setDeposit(address account, uint deposit, uint postDepositEth) external onlyPresaleContract { if (accountDeposits[account] == 0) totalDepositors = totalDepositors.add(1); accountDeposits[account] = accountDeposits[account].add(deposit); if (currentBonusIndex.add(1) > bonusRangeBP.length) { //final bonus rate accountShares[account] = accountShares[account].add(deposit.addBP(bonusRangeBP[currentBonusIndex])); } else if (postDepositEth < bonusRangeStart[currentBonusIndex.add(1)]) { //Purchase doesnt push to next start accountShares[account] = accountShares[account].add(deposit.addBP(bonusRangeBP[currentBonusIndex])); } else { //purchase straddles next start uint previousBonusBP = bonusRangeBP[currentBonusIndex]; uint newBonusBP = bonusRangeBP[currentBonusIndex.add(1)]; uint newBonusDeposit = postDepositEth.sub(bonusRangeStart[currentBonusIndex.add(1)]); uint previousBonusDeposit = deposit.sub(newBonusDeposit); accountShares[account] = accountShares[account].add( newBonusDeposit.addBP(newBonusBP) ).add( previousBonusDeposit.addBP(previousBonusBP) ); currentBonusIndex = currentBonusIndex.add(1); } } function calculateRatePerEth(uint totalPresaleTokens, uint depositEth, uint hardCap) external view returns (uint) { uint tokensPerEtherShare = totalPresaleTokens .mul(1 ether) .div( getMaxShares(hardCap) ); uint bp; if (depositEth >= bonusRangeStart[bonusRangeStart.length.sub(1)]) { bp = bonusRangeBP[bonusRangeBP.length.sub(1)]; } else { for (uint i = 1; i < bonusRangeStart.length; ++i) { if (bp == 0) { if (depositEth < bonusRangeStart[i]) { bp = bonusRangeBP[i.sub(1)]; } } } } return tokensPerEtherShare.addBP(bp); } function calculateReedemable( address account, uint finalEndTime, uint totalPresaleTokens ) external view returns (uint) { if (finalEndTime == 0) return 0; uint earnedTokens = accountShares[account].mul(totalPresaleTokens).div(accountShares[account]); uint claimedTokens = accountClaimedTokens[account]; uint cycles = now.sub(finalEndTime).div(redeemInterval).add(1); uint totalRedeemable = earnedTokens.mulBP(redeemBP).mul(cycles); uint claimable; if (totalRedeemable >= earnedTokens) { claimable = earnedTokens.sub(claimedTokens); } else { claimable = totalRedeemable.sub(claimedTokens); } return claimable; } function getMaxShares(uint hardCap) public view returns (uint) { uint maxShares; for (uint i = 0; i < bonusRangeStart.length; ++i) { uint amt; if (i < bonusRangeStart.length.sub(1)) { amt = bonusRangeStart[i.add(1)].sub(bonusRangeStart[i]); } else { amt = hardCap.sub(bonusRangeStart[i]); } maxShares = maxShares.add(amt.addBP(bonusRangeBP[i])); } return maxShares; } } contract LidSimplifiedPresale is Initializable, Ownable, ReentrancyGuard, Pausable { using BasisPoints for uint; using SafeMath for uint; uint public maxBuyPerAddress; uint public maxBuyWithoutWhitelisting; uint public referralBP; uint public uniswapEthBP; uint public lidEthBP; uint public uniswapTokenBP; uint public presaleTokenBP; address[] public tokenPools; uint[] public tokenPoolBPs; uint public hardcap; uint public totalTokens; bool public hasSentToUniswap; bool public hasIssuedTokens; uint public finalEndTime; uint public finalEth; IERC20 private token; IUniswapV2Router01 private uniswapRouter; LidSimplifiedPresaleTimer private timer; LidSimplifiedPresaleRedeemer private redeemer; address payable private lidFund; mapping(address => uint) public accountEthDeposit; mapping(address => bool) public whitelist; mapping(address => uint) public earnedReferrals; mapping(address => uint) public referralCounts; modifier whenPresaleActive { require(timer.isStarted(), "Presale not yet started."); require(!isPresaleEnded(), "Presale has ended."); _; } modifier whenPresaleFinished { require(timer.isStarted(), "Presale not yet started."); require(isPresaleEnded(), "Presale has not yet ended."); _; } function initialize( uint _maxBuyPerAddress, uint _maxBuyWithoutWhitelisting, uint _uniswapEthBP, uint _lidEthBP, uint _referralBP, uint _hardcap, address owner, LidSimplifiedPresaleTimer _timer, LidSimplifiedPresaleRedeemer _redeemer, IERC20 _token, IUniswapV2Router01 _uniswapRouter, address payable _lidFund ) external initializer { Ownable.initialize(msg.sender); Pausable.initialize(msg.sender); ReentrancyGuard.initialize(); token = _token; timer = _timer; redeemer = _redeemer; lidFund = _lidFund; maxBuyPerAddress = _maxBuyPerAddress; maxBuyWithoutWhitelisting = _maxBuyWithoutWhitelisting; uniswapEthBP = _uniswapEthBP; lidEthBP = _lidEthBP; referralBP = _referralBP; hardcap = _hardcap; uniswapRouter = _uniswapRouter; totalTokens = token.totalSupply(); token.approve(address(uniswapRouter), token.totalSupply()); //Due to issue in oz testing suite, the msg.sender might not be owner _transferOwnership(owner); } function deposit() external payable whenNotPaused { deposit(address(0x0)); } function setTokenPools( uint _uniswapTokenBP, uint _presaleTokenBP, address[] calldata _tokenPools, uint[] calldata _tokenPoolBPs ) external onlyOwner whenNotPaused { require(_tokenPools.length == _tokenPoolBPs.length, "Must have exactly one tokenPool addresses for each BP."); delete tokenPools; delete tokenPoolBPs; uniswapTokenBP = _uniswapTokenBP; presaleTokenBP = _presaleTokenBP; for (uint i = 0; i < _tokenPools.length; ++i) { tokenPools.push(_tokenPools[i]); } uint totalTokenPoolBPs = uniswapTokenBP.add(presaleTokenBP); for (uint i = 0; i < _tokenPoolBPs.length; ++i) { tokenPoolBPs.push(_tokenPoolBPs[i]); totalTokenPoolBPs = totalTokenPoolBPs.add(_tokenPoolBPs[i]); } require(totalTokenPoolBPs == 10000, "Must allocate exactly 100% (10000 BP) of tokens to pools"); } function sendToUniswap() external whenPresaleFinished nonReentrant whenNotPaused { require(tokenPools.length > 0, "Must have set token pools"); require(!hasSentToUniswap, "Has already sent to Uniswap."); finalEndTime = now; finalEth = address(this).balance; hasSentToUniswap = true; uint uniswapTokens = totalTokens.mulBP(uniswapTokenBP); uint uniswapEth = finalEth.mulBP(uniswapEthBP); uniswapRouter.addLiquidityETH.value(uniswapEth)( address(token), uniswapTokens, uniswapTokens, uniswapEth, address(0x000000000000000000000000000000000000dEaD), now ); } function issueTokens() external whenPresaleFinished whenNotPaused { require(hasSentToUniswap, "Has not yet sent to Uniswap."); require(!hasIssuedTokens, "Has already issued tokens."); hasIssuedTokens = true; for (uint i = 0; i < tokenPools.length; ++i) { token.transfer( tokenPools[i], totalTokens.mulBP(tokenPoolBPs[i]) ); } } function releaseEthToAddress(address payable receiver, uint amount) external onlyOwner whenNotPaused returns(uint) { require(hasSentToUniswap, "Has not yet sent to Uniswap."); receiver.transfer(amount); } function setWhitelist(address account, bool value) external onlyOwner whenNotPaused { whitelist[account] = value; } function setWhitelistForAll(address[] calldata account, bool value) external onlyOwner whenNotPaused { for (uint i=0; i < account.length; i++) { whitelist[account[i]] = value; } } function redeem() external whenPresaleFinished whenNotPaused { require(hasSentToUniswap, "Must have sent to Uniswap before any redeems."); uint claimable = redeemer.calculateReedemable(msg.sender, timer.endTime(), totalTokens.mulBP(presaleTokenBP)); redeemer.setClaimed(msg.sender, claimable); token.transfer(msg.sender, claimable); } function deposit(address payable referrer) public payable whenPresaleActive nonReentrant whenNotPaused { require(timer.updateEndTime() <= now, "Endtime past."); uint accountCurrentDeposit = redeemer.accountDeposits(msg.sender); uint fee = msg.value.mulBP(referralBP); //Remove fee in case final purchase needed to end sale without dust errors if (msg.value < 0.01 ether) fee = 0; if (whitelist[msg.sender]) { require( accountCurrentDeposit.add(msg.value) <= getMaxWhitelistedDeposit(), "Deposit exceeds max buy per address for whitelisted addresses." ); } else { require( accountCurrentDeposit.add(msg.value) <= maxBuyWithoutWhitelisting, "Deposit exceeds max buy per address for non-whitelisted addresses." ); } require(address(this).balance.sub(fee) <= hardcap, "Cannot deposit more than hardcap."); redeemer.setDeposit(msg.sender, msg.value.sub(fee), address(this).balance.sub(fee)); if (referrer != address(0x0) && referrer != msg.sender) { earnedReferrals[referrer] = earnedReferrals[referrer].add(fee); referralCounts[referrer] = referralCounts[referrer].add(1); referrer.transfer(fee); } else { lidFund.transfer(fee); } } function getMaxWhitelistedDeposit() public view returns (uint) { return maxBuyPerAddress; } function isPresaleEnded() public view returns (bool) { uint endTime = timer.endTime(); return ( (address(this).balance >= hardcap) || (timer.isStarted() && (now > endTime && endTime != 0)) ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accountEthDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"referrer","type":"address"}],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"earnedReferrals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"finalEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"finalEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMaxWhitelistedDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hardcap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hasIssuedTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hasSentToUniswap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_maxBuyPerAddress","type":"uint256"},{"internalType":"uint256","name":"_maxBuyWithoutWhitelisting","type":"uint256"},{"internalType":"uint256","name":"_uniswapEthBP","type":"uint256"},{"internalType":"uint256","name":"_lidEthBP","type":"uint256"},{"internalType":"uint256","name":"_referralBP","type":"uint256"},{"internalType":"uint256","name":"_hardcap","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"contract LidSimplifiedPresaleTimer","name":"_timer","type":"address"},{"internalType":"contract LidSimplifiedPresaleRedeemer","name":"_redeemer","type":"address"},{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"contract IUniswapV2Router01","name":"_uniswapRouter","type":"address"},{"internalType":"address payable","name":"_lidFund","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isPresaleEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"issueTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lidEthBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxBuyPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxBuyWithoutWhitelisting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"presaleTokenBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"referralBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"releaseEthToAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"sendToUniswap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_uniswapTokenBP","type":"uint256"},{"internalType":"uint256","name":"_presaleTokenBP","type":"uint256"},{"internalType":"address[]","name":"_tokenPools","type":"address[]"},{"internalType":"uint256[]","name":"_tokenPoolBPs","type":"uint256[]"}],"name":"setTokenPools","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"account","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setWhitelistForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenPoolBPs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenPools","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"uniswapEthBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"uniswapTokenBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526133da806100136000396000f3fe60806040526004361061025f5760003560e060020a900480637decf27f11610148578063be040fb0116100ba578063d7ca81661161007e578063d7ca816614610874578063e05ba89a14610889578063e668d6d81461089e578063f2fde38b146108c8578063f340fa01146108fb578063f562e736146109215761025f565b8063be040fb0146107dc578063bed68374146107f1578063c4d66de814610806578063cec297a014610839578063d0e30db01461086c5761025f565b80638da5cb5b1161010c5780638da5cb5b146106d65780638f32d59b146106eb5780639b19251a146107005780639b86912014610733578063adf09c4b14610748578063b071cbe6146107c75761025f565b80637decf27f1461064f5780637e1c0c09146106645780638129fc1c1461067957806382dc1ec41461068e5780638456cb59146106c15761025f565b806348868baa116101e157806360ab5852116101a557806360ab5852146105ad5780636a73c404146105c25780636ef8d66d146105d7578063715018a6146105ec57806376c80776146106015780637b6f299c1461063a5761025f565b806348868baa146104af5780634c17989a146105335780634da17e681461054857806353d6fd591461055d5780635c975abb146105985761025f565b80633529626f116102285780633529626f1461032e5780633f4ba83a1461036157806341f059fa1461037857806344cbe5de1461045357806346fbf68e146104685761025f565b8062c0f9161461026457806302249d9b146102aa5780630655e400146102d157806306e95096146102e657806330c9b11414610319575b600080fd5b34801561027057600080fd5b5061028e6004803603602081101561028757600080fd5b5035610936565b60408051600160a060020a039092168252519081900360200190f35b3480156102b657600080fd5b506102bf61095e565b60408051918252519081900360200190f35b3480156102dd57600080fd5b506102bf610965565b3480156102f257600080fd5b506102bf6004803603602081101561030957600080fd5b5035600160a060020a031661096c565b34801561032557600080fd5b506102bf61097f565b34801561033a57600080fd5b506102bf6004803603602081101561035157600080fd5b5035600160a060020a0316610986565b34801561036d57600080fd5b50610376610999565b005b34801561038457600080fd5b506103766004803603608081101561039b57600080fd5b8135916020810135918101906060810160408201356401000000008111156103c257600080fd5b8201836020820111156103d457600080fd5b803590602001918460208302840111640100000000831117156103f657600080fd5b91939092909160208101903564010000000081111561041457600080fd5b82018360208201111561042657600080fd5b8035906020019184602083028401116401000000008311171561044857600080fd5b509092509050610a91565b34801561045f57600080fd5b50610376610ccb565b34801561047457600080fd5b5061049b6004803603602081101561048b57600080fd5b5035600160a060020a031661105f565b604080519115158252519081900360200190f35b3480156104bb57600080fd5b5061037660048036036101808110156104d357600080fd5b5080359060208101359060408101359060608101359060808101359060a081013590600160a060020a0360c082013581169160e0810135821691610100820135811691610120810135821691610140820135811691610160013516611078565b34801561053f57600080fd5b506102bf6113d8565b34801561055457600080fd5b506102bf6113df565b34801561056957600080fd5b506103766004803603604081101561058057600080fd5b50600160a060020a03813516906020013515156113e6565b3480156105a457600080fd5b5061049b6114a5565b3480156105b957600080fd5b506103766114af565b3480156105ce57600080fd5b506102bf6117e6565b3480156105e357600080fd5b506103766117ec565b3480156105f857600080fd5b506103766117fe565b34801561060d57600080fd5b506102bf6004803603604081101561062457600080fd5b50600160a060020a03813516906020013561189f565b34801561064657600080fd5b506102bf6119cc565b34801561065b57600080fd5b5061049b6119d3565b34801561067057600080fd5b506102bf611afe565b34801561068557600080fd5b50610376611b05565b34801561069a57600080fd5b50610376600480360360208110156106b157600080fd5b5035600160a060020a0316611bae565b3480156106cd57600080fd5b50610376611c00565b3480156106e257600080fd5b5061028e611cc8565b3480156106f757600080fd5b5061049b611cd7565b34801561070c57600080fd5b5061049b6004803603602081101561072357600080fd5b5035600160a060020a0316611cfd565b34801561073f57600080fd5b506102bf611d13565b34801561075457600080fd5b506103766004803603604081101561076b57600080fd5b81019060208101813564010000000081111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460208302840111640100000000831117156107ba57600080fd5b9193509150351515611d19565b3480156107d357600080fd5b506102bf611e08565b3480156107e857600080fd5b50610376611e0f565b3480156107fd57600080fd5b5061049b612216565b34801561081257600080fd5b506103766004803603602081101561082957600080fd5b5035600160a060020a0316612220565b34801561084557600080fd5b506102bf6004803603602081101561085c57600080fd5b5035600160a060020a03166122d9565b6103766122ec565b34801561088057600080fd5b506102bf61233f565b34801561089557600080fd5b506102bf612346565b3480156108aa57600080fd5b506102bf600480360360208110156108c157600080fd5b503561234d565b3480156108d457600080fd5b50610376600480360360208110156108eb57600080fd5b5035600160a060020a031661236c565b6103766004803603602081101561091157600080fd5b5035600160a060020a03166123bf565b34801561092d57600080fd5b5061049b612a05565b610106818154811061094457fe5b600091825260209091200154600160a060020a0316905081565b61010c5481565b6101035481565b6101146020526000908152604090205481565b6101015481565b6101126020526000908152604090205481565b6109a96109a4612a14565b61105f565b6109e75760405160e560020a62461bcd0281526004018080602001828103825260308152602001806131226030913960400191505060405180910390fd5b60cc5460ff16610a41576040805160e560020a62461bcd02815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60cc805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610a74612a14565b60408051600160a060020a039092168252519081900360200190a1565b610a99611cd7565b610adb576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613261833981519152604482015290519081900360640190fd5b60cc5460ff1615610b24576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b828114610b655760405160e560020a62461bcd0281526004018080602001828103825260368152602001806132d16036913960400191505060405180910390fd5b610b7261010660006130ea565b610b7f61010760006130ea565b61010486905561010585905560005b83811015610bf557610106858583818110610ba557fe5b8354600181810186556000958652602095869020909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0396909302949094013594909416179091555001610b8e565b506000610c116101055461010454612a1890919063ffffffff16565b905060005b82811015610c7e57610107848483818110610c2d57fe5b83546001810185556000948552602094859020919094029290920135919092015550610c74848483818110610c5e57fe5b9050602002013583612a1890919063ffffffff16565b9150600101610c16565b508061271014610cc25760405160e560020a62461bcd0281526004018080602001828103825260388152602001806131ba6038913960400191505060405180910390fd5b50505050505050565b61010f60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d6020811015610d4757600080fd5b5051610d8b576040805160e560020a62461bcd0281526020600482015260186024820152600080516020613327833981519152604482015290519081900360640190fd5b610d936119d3565b610de7576040805160e560020a62461bcd02815260206004820152601a60248201527f50726573616c6520686173206e6f742079657420656e6465642e000000000000604482015290519081900360640190fd5b606680546001019081905560cc5460ff1615610e3b576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b61010654610e93576040805160e560020a62461bcd02815260206004820152601960248201527f4d75737420686176652073657420746f6b656e20706f6f6c7300000000000000604482015290519081900360640190fd5b61010a5460ff1615610eef576040805160e560020a62461bcd02815260206004820152601c60248201527f48617320616c72656164792073656e7420746f20556e69737761702e00000000604482015290519081900360640190fd5b4261010b55303161010c5561010a805460ff191660011790556101045461010954600091610f23919063ffffffff612a7c16565b90506000610f406101025461010c54612a7c90919063ffffffff16565b61010e5461010d54604080517ff305d719000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101879052604481018790526064810185905261dead60848201524260a4820152905193945091169163f305d71991849160c480830192606092919082900301818588803b158015610fd257600080fd5b505af1158015610fe6573d6000803e3d6000fd5b50505050506040513d6060811015610ffd57600080fd5b50506066548314915061105c9050576040805160e560020a62461bcd02815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b50565b600061107260998363ffffffff612aad16565b92915050565b600054610100900460ff16806110915750611091612b17565b8061109f575060005460ff16155b6110dd5760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806132a3602e913960400191505060405180910390fd5b600054610100900460ff16158015611108576000805460ff1961ff0019909116610100171660011790555b61111133612b1d565b61111a33612220565b611122611b05565b8361010d60006101000a815481600160a060020a030219169083600160a060020a031602179055508561010f60006101000a815481600160a060020a030219169083600160a060020a031602179055508461011060006101000a815481600160a060020a030219169083600160a060020a031602179055508161011160006101000a815481600160a060020a030219169083600160a060020a031602179055508c60ff819055508b610100819055508a610102819055508961010381905550886101018190555087610108819055508261010e60006101000a815481600160a060020a030219169083600160a060020a0316021790555061010d60009054906101000a9004600160a060020a0316600160a060020a03166318160ddd6040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561126b57600080fd5b505afa15801561127f573d6000803e3d6000fd5b505050506040513d602081101561129557600080fd5b50516101095561010d5461010e54604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a039384169363095ea7b393169184916318160ddd91600480820192602092909190829003018186803b15801561130857600080fd5b505afa15801561131c573d6000803e3d6000fd5b505050506040513d602081101561133257600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561138157600080fd5b505af1158015611395573d6000803e3d6000fd5b505050506040513d60208110156113ab57600080fd5b506113b7905087612c1e565b80156113c9576000805461ff00191690555b50505050505050505050505050565b6101025481565b6101005481565b6113ee611cd7565b611430576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613261833981519152604482015290519081900360640190fd5b60cc5460ff1615611479576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b600160a060020a0391909116600090815261011360205260409020805460ff1916911515919091179055565b60cc5460ff165b90565b61010f60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561150157600080fd5b505afa158015611515573d6000803e3d6000fd5b505050506040513d602081101561152b57600080fd5b505161156f576040805160e560020a62461bcd0281526020600482015260186024820152600080516020613327833981519152604482015290519081900360640190fd5b6115776119d3565b6115cb576040805160e560020a62461bcd02815260206004820152601a60248201527f50726573616c6520686173206e6f742079657420656e6465642e000000000000604482015290519081900360640190fd5b60cc5460ff1615611614576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b61010a5460ff1661166f576040805160e560020a62461bcd02815260206004820152601c60248201527f486173206e6f74207965742073656e7420746f20556e69737761702e00000000604482015290519081900360640190fd5b61010a54610100900460ff16156116d0576040805160e560020a62461bcd02815260206004820152601a60248201527f48617320616c72656164792069737375656420746f6b656e732e000000000000604482015290519081900360640190fd5b61010a805461ff00191661010017905560005b6101065481101561105c5761010d546101068054600160a060020a039092169163a9059cbb91908490811061171457fe5b9060005260206000200160009054906101000a9004600160a060020a0316611760610107858154811061174357fe5b906000526020600020015461010954612a7c90919063ffffffff16565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156117b257600080fd5b505af11580156117c6573d6000803e3d6000fd5b505050506040513d60208110156117dc57600080fd5b50506001016116e3565b60ff5481565b6117fc6117f7612a14565b612ccf565b565b611806611cd7565b611848576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613261833981519152604482015290519081900360640190fd5b603354604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36033805473ffffffffffffffffffffffffffffffffffffffff19169055565b60006118a9611cd7565b6118eb576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613261833981519152604482015290519081900360640190fd5b60cc5460ff1615611934576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b61010a5460ff1661198f576040805160e560020a62461bcd02815260206004820152601c60248201527f486173206e6f74207965742073656e7420746f20556e69737761702e00000000604482015290519081900360640190fd5b604051600160a060020a0384169083156108fc029084906000818181858888f193505050501580156119c5573d6000803e3d6000fd5b5092915050565b6101045481565b60008061010f60009054906101000a9004600160a060020a0316600160a060020a0316633197cbb66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611a2857600080fd5b505afa158015611a3c573d6000803e3d6000fd5b505050506040513d6020811015611a5257600080fd5b5051610108549091503031101580611af8575061010f60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611ab757600080fd5b505afa158015611acb573d6000803e3d6000fd5b505050506040513d6020811015611ae157600080fd5b50518015611af857508042118015611af857508015155b91505090565b6101095481565b600054610100900460ff1680611b1e5750611b1e612b17565b80611b2c575060005460ff16155b611b6a5760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806132a3602e913960400191505060405180910390fd5b600054610100900460ff16158015611b95576000805460ff1961ff0019909116610100171660011790555b6001606655801561105c576000805461ff001916905550565b611bb96109a4612a14565b611bf75760405160e560020a62461bcd0281526004018080602001828103825260308152602001806131226030913960400191505060405180910390fd5b61105c81612d17565b611c0b6109a4612a14565b611c495760405160e560020a62461bcd0281526004018080602001828103825260308152602001806131226030913960400191505060405180910390fd5b60cc5460ff1615611c92576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b60cc805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a74612a14565b603354600160a060020a031690565b603354600090600160a060020a0316611cee612a14565b600160a060020a031614905090565b6101136020526000908152604090205460ff1681565b60ff5490565b611d21611cd7565b611d63576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613261833981519152604482015290519081900360640190fd5b60cc5460ff1615611dac576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b60005b82811015611e0257816101136000868685818110611dc957fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff1916911515919091179055600101611daf565b50505050565b6101085481565b61010f60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611e6157600080fd5b505afa158015611e75573d6000803e3d6000fd5b505050506040513d6020811015611e8b57600080fd5b5051611ecf576040805160e560020a62461bcd0281526020600482015260186024820152600080516020613327833981519152604482015290519081900360640190fd5b611ed76119d3565b611f2b576040805160e560020a62461bcd02815260206004820152601a60248201527f50726573616c6520686173206e6f742079657420656e6465642e000000000000604482015290519081900360640190fd5b60cc5460ff1615611f74576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b61010a5460ff16611fb95760405160e560020a62461bcd02815260040180806020018281038252602d815260200180613234602d913960400191505060405180910390fd5b6101105461010f54604080517f3197cbb60000000000000000000000000000000000000000000000000000000081529051600093600160a060020a039081169363c6db01ad9333939190921691633197cbb6916004808301926020929190829003018186803b15801561202b57600080fd5b505afa15801561203f573d6000803e3d6000fd5b505050506040513d602081101561205557600080fd5b5051610105546101095461206e9163ffffffff612a7c16565b6040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060206040518083038186803b1580156120c557600080fd5b505afa1580156120d9573d6000803e3d6000fd5b505050506040513d60208110156120ef57600080fd5b505161011054604080517f2fab59ed000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051929350600160a060020a0390911691632fab59ed9160448082019260009290919082900301818387803b15801561216157600080fd5b505af1158015612175573d6000803e3d6000fd5b505061010d54604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a03909216935063a9059cbb92506044808201926020929091908290030181600087803b1580156121e757600080fd5b505af11580156121fb573d6000803e3d6000fd5b505050506040513d602081101561221157600080fd5b505050565b61010a5460ff1681565b600054610100900460ff16806122395750612239612b17565b80612247575060005460ff16155b6122855760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806132a3602e913960400191505060405180910390fd5b600054610100900460ff161580156122b0576000805460ff1961ff0019909116610100171660011790555b6122b982612d5f565b60cc805460ff1916905580156122d5576000805461ff00191690555b5050565b6101156020526000908152604090205481565b60cc5460ff1615612335576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b6117fc60006123bf565b61010b5481565b6101055481565b610107818154811061235b57fe5b600091825260209091200154905081565b612374611cd7565b6123b6576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613261833981519152604482015290519081900360640190fd5b61105c81612c1e565b61010f60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561241157600080fd5b505afa158015612425573d6000803e3d6000fd5b505050506040513d602081101561243b57600080fd5b505161247f576040805160e560020a62461bcd0281526020600482015260186024820152600080516020613327833981519152604482015290519081900360640190fd5b6124876119d3565b156124dc576040805160e560020a62461bcd02815260206004820152601260248201527f50726573616c652068617320656e6465642e0000000000000000000000000000604482015290519081900360640190fd5b606680546001019081905560cc5460ff1615612530576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b61010f54604080517f29d5a07300000000000000000000000000000000000000000000000000000000815290514292600160a060020a0316916329d5a0739160048083019260209291908290030181600087803b15801561259057600080fd5b505af11580156125a4573d6000803e3d6000fd5b505050506040513d60208110156125ba57600080fd5b50511115612612576040805160e560020a62461bcd02815260206004820152600d60248201527f456e6474696d6520706173742e00000000000000000000000000000000000000604482015290519081900360640190fd5b61011054604080517f835dada00000000000000000000000000000000000000000000000000000000081523360048201529051600092600160a060020a03169163835dada0916024808301926020929190829003018186803b15801561267757600080fd5b505afa15801561268b573d6000803e3d6000fd5b505050506040513d60208110156126a157600080fd5b5051610101549091506000906126be90349063ffffffff612a7c16565b9050662386f26fc100003410156126d3575060005b336000908152610113602052604090205460ff1615612749576126f4611d13565b612704833463ffffffff612a1816565b11156127445760405160e560020a62461bcd02815260040180806020018281038252603e815260200180613347603e913960400191505060405180910390fd5b61279d565b6101005461275d833463ffffffff612a1816565b111561279d5760405160e560020a62461bcd0281526004018080602001828103825260428152602001806131526042913960600191505060405180910390fd5b610108546127b230318363ffffffff612e1a16565b11156127f25760405160e560020a62461bcd0281526004018080602001828103825260218152602001806133856021913960400191505060405180910390fd5b61011054600160a060020a031663a13a75ca33612815348563ffffffff612e1a16565b61282630318663ffffffff612e1a16565b6040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050600060405180830381600087803b15801561287f57600080fd5b505af1158015612893573d6000803e3d6000fd5b50505050600160a060020a038416158015906128b85750600160a060020a0384163314155b1561296d57600160a060020a038416600090815261011460205260409020546128e7908263ffffffff612a1816565b600160a060020a038516600090815261011460209081526040808320939093556101159052205461291f90600163ffffffff612a1816565b600160a060020a03851660008181526101156020526040808220939093559151909183156108fc02918491818181858888f19350505050158015612967573d6000803e3d6000fd5b506129aa565b61011154604051600160a060020a039091169082156108fc029083906000818181858888f193505050501580156129a8573d6000803e3d6000fd5b505b505060665481146122d5576040805160e560020a62461bcd02815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b61010a54610100900460ff1681565b3390565b600082820183811015612a75576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082612a8b57506000611072565b612a75612710612aa1858563ffffffff612e5c16565b9063ffffffff612eb816565b6000600160a060020a038216612af75760405160e560020a62461bcd0281526004018080602001828103825260228152602001806132816022913960400191505060405180910390fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b303b1590565b600054610100900460ff1680612b365750612b36612b17565b80612b44575060005460ff16155b612b825760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806132a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612bad576000805460ff1961ff0019909116610100171660011790555b6033805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384811691909117918290556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a380156122d5576000805461ff00191690555050565b600160a060020a038116612c665760405160e560020a62461bcd0281526004018080602001828103825260268152602001806131946026913960400191505060405180910390fd5b603354604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36033805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b612ce060998263ffffffff612efa16565b604051600160a060020a038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b612d2860998263ffffffff612f6416565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b600054610100900460ff1680612d785750612d78612b17565b80612d86575060005460ff16155b612dc45760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806132a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612def576000805460ff1961ff0019909116610100171660011790555b612df88261105f565b612e0557612e0582612d17565b80156122d5576000805461ff00191690555050565b6000612a7583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fe8565b600082612e6b57506000611072565b82820282848281612e7857fe5b0414612a755760405160e560020a62461bcd0281526004018080602001828103825260218152602001806132136021913960400191505060405180910390fd5b6000612a7583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613082565b612f048282612aad565b612f425760405160e560020a62461bcd0281526004018080602001828103825260218152602001806131f26021913960400191505060405180910390fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b612f6e8282612aad565b15612fc3576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000818484111561307a5760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561303f578181015183820152602001613027565b50505050905090810190601f16801561306c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836130d45760405160e560020a62461bcd02815260206004820181815283516024840152835190928392604490910191908501908083836000831561303f578181015183820152602001613027565b5060008385816130e057fe5b0495945050505050565b508054600082559060005260206000209081019061105c91906114ac91905b8082111561311d5760008155600101613109565b509056fe506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c654465706f7369742065786365656473206d61782062757920706572206164647265737320666f72206e6f6e2d77686974656c6973746564206164647265737365732e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d75737420616c6c6f636174652065786163746c7920313030252028313030303020425029206f6620746f6b656e7320746f20706f6f6c73526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774d75737420686176652073656e7420746f20556e6973776170206265666f726520616e792072656465656d732e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644d75737420686176652065786163746c79206f6e6520746f6b656e506f6f6c2061646472657373657320666f7220656163682042502e5061757361626c653a207061757365640000000000000000000000000000000050726573616c65206e6f742079657420737461727465642e00000000000000004465706f7369742065786365656473206d61782062757920706572206164647265737320666f722077686974656c6973746564206164647265737365732e43616e6e6f74206465706f736974206d6f7265207468616e20686172646361702ea265627a7a72315820ad2992ece0558ddefe879056e3affecedad7514f74657f8fb301dc1cfa8bbe2364736f6c63430005100032
Deployed Bytecode
0x60806040526004361061025f5760003560e060020a900480637decf27f11610148578063be040fb0116100ba578063d7ca81661161007e578063d7ca816614610874578063e05ba89a14610889578063e668d6d81461089e578063f2fde38b146108c8578063f340fa01146108fb578063f562e736146109215761025f565b8063be040fb0146107dc578063bed68374146107f1578063c4d66de814610806578063cec297a014610839578063d0e30db01461086c5761025f565b80638da5cb5b1161010c5780638da5cb5b146106d65780638f32d59b146106eb5780639b19251a146107005780639b86912014610733578063adf09c4b14610748578063b071cbe6146107c75761025f565b80637decf27f1461064f5780637e1c0c09146106645780638129fc1c1461067957806382dc1ec41461068e5780638456cb59146106c15761025f565b806348868baa116101e157806360ab5852116101a557806360ab5852146105ad5780636a73c404146105c25780636ef8d66d146105d7578063715018a6146105ec57806376c80776146106015780637b6f299c1461063a5761025f565b806348868baa146104af5780634c17989a146105335780634da17e681461054857806353d6fd591461055d5780635c975abb146105985761025f565b80633529626f116102285780633529626f1461032e5780633f4ba83a1461036157806341f059fa1461037857806344cbe5de1461045357806346fbf68e146104685761025f565b8062c0f9161461026457806302249d9b146102aa5780630655e400146102d157806306e95096146102e657806330c9b11414610319575b600080fd5b34801561027057600080fd5b5061028e6004803603602081101561028757600080fd5b5035610936565b60408051600160a060020a039092168252519081900360200190f35b3480156102b657600080fd5b506102bf61095e565b60408051918252519081900360200190f35b3480156102dd57600080fd5b506102bf610965565b3480156102f257600080fd5b506102bf6004803603602081101561030957600080fd5b5035600160a060020a031661096c565b34801561032557600080fd5b506102bf61097f565b34801561033a57600080fd5b506102bf6004803603602081101561035157600080fd5b5035600160a060020a0316610986565b34801561036d57600080fd5b50610376610999565b005b34801561038457600080fd5b506103766004803603608081101561039b57600080fd5b8135916020810135918101906060810160408201356401000000008111156103c257600080fd5b8201836020820111156103d457600080fd5b803590602001918460208302840111640100000000831117156103f657600080fd5b91939092909160208101903564010000000081111561041457600080fd5b82018360208201111561042657600080fd5b8035906020019184602083028401116401000000008311171561044857600080fd5b509092509050610a91565b34801561045f57600080fd5b50610376610ccb565b34801561047457600080fd5b5061049b6004803603602081101561048b57600080fd5b5035600160a060020a031661105f565b604080519115158252519081900360200190f35b3480156104bb57600080fd5b5061037660048036036101808110156104d357600080fd5b5080359060208101359060408101359060608101359060808101359060a081013590600160a060020a0360c082013581169160e0810135821691610100820135811691610120810135821691610140820135811691610160013516611078565b34801561053f57600080fd5b506102bf6113d8565b34801561055457600080fd5b506102bf6113df565b34801561056957600080fd5b506103766004803603604081101561058057600080fd5b50600160a060020a03813516906020013515156113e6565b3480156105a457600080fd5b5061049b6114a5565b3480156105b957600080fd5b506103766114af565b3480156105ce57600080fd5b506102bf6117e6565b3480156105e357600080fd5b506103766117ec565b3480156105f857600080fd5b506103766117fe565b34801561060d57600080fd5b506102bf6004803603604081101561062457600080fd5b50600160a060020a03813516906020013561189f565b34801561064657600080fd5b506102bf6119cc565b34801561065b57600080fd5b5061049b6119d3565b34801561067057600080fd5b506102bf611afe565b34801561068557600080fd5b50610376611b05565b34801561069a57600080fd5b50610376600480360360208110156106b157600080fd5b5035600160a060020a0316611bae565b3480156106cd57600080fd5b50610376611c00565b3480156106e257600080fd5b5061028e611cc8565b3480156106f757600080fd5b5061049b611cd7565b34801561070c57600080fd5b5061049b6004803603602081101561072357600080fd5b5035600160a060020a0316611cfd565b34801561073f57600080fd5b506102bf611d13565b34801561075457600080fd5b506103766004803603604081101561076b57600080fd5b81019060208101813564010000000081111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460208302840111640100000000831117156107ba57600080fd5b9193509150351515611d19565b3480156107d357600080fd5b506102bf611e08565b3480156107e857600080fd5b50610376611e0f565b3480156107fd57600080fd5b5061049b612216565b34801561081257600080fd5b506103766004803603602081101561082957600080fd5b5035600160a060020a0316612220565b34801561084557600080fd5b506102bf6004803603602081101561085c57600080fd5b5035600160a060020a03166122d9565b6103766122ec565b34801561088057600080fd5b506102bf61233f565b34801561089557600080fd5b506102bf612346565b3480156108aa57600080fd5b506102bf600480360360208110156108c157600080fd5b503561234d565b3480156108d457600080fd5b50610376600480360360208110156108eb57600080fd5b5035600160a060020a031661236c565b6103766004803603602081101561091157600080fd5b5035600160a060020a03166123bf565b34801561092d57600080fd5b5061049b612a05565b610106818154811061094457fe5b600091825260209091200154600160a060020a0316905081565b61010c5481565b6101035481565b6101146020526000908152604090205481565b6101015481565b6101126020526000908152604090205481565b6109a96109a4612a14565b61105f565b6109e75760405160e560020a62461bcd0281526004018080602001828103825260308152602001806131226030913960400191505060405180910390fd5b60cc5460ff16610a41576040805160e560020a62461bcd02815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60cc805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610a74612a14565b60408051600160a060020a039092168252519081900360200190a1565b610a99611cd7565b610adb576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613261833981519152604482015290519081900360640190fd5b60cc5460ff1615610b24576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b828114610b655760405160e560020a62461bcd0281526004018080602001828103825260368152602001806132d16036913960400191505060405180910390fd5b610b7261010660006130ea565b610b7f61010760006130ea565b61010486905561010585905560005b83811015610bf557610106858583818110610ba557fe5b8354600181810186556000958652602095869020909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0396909302949094013594909416179091555001610b8e565b506000610c116101055461010454612a1890919063ffffffff16565b905060005b82811015610c7e57610107848483818110610c2d57fe5b83546001810185556000948552602094859020919094029290920135919092015550610c74848483818110610c5e57fe5b9050602002013583612a1890919063ffffffff16565b9150600101610c16565b508061271014610cc25760405160e560020a62461bcd0281526004018080602001828103825260388152602001806131ba6038913960400191505060405180910390fd5b50505050505050565b61010f60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d6020811015610d4757600080fd5b5051610d8b576040805160e560020a62461bcd0281526020600482015260186024820152600080516020613327833981519152604482015290519081900360640190fd5b610d936119d3565b610de7576040805160e560020a62461bcd02815260206004820152601a60248201527f50726573616c6520686173206e6f742079657420656e6465642e000000000000604482015290519081900360640190fd5b606680546001019081905560cc5460ff1615610e3b576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b61010654610e93576040805160e560020a62461bcd02815260206004820152601960248201527f4d75737420686176652073657420746f6b656e20706f6f6c7300000000000000604482015290519081900360640190fd5b61010a5460ff1615610eef576040805160e560020a62461bcd02815260206004820152601c60248201527f48617320616c72656164792073656e7420746f20556e69737761702e00000000604482015290519081900360640190fd5b4261010b55303161010c5561010a805460ff191660011790556101045461010954600091610f23919063ffffffff612a7c16565b90506000610f406101025461010c54612a7c90919063ffffffff16565b61010e5461010d54604080517ff305d719000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101879052604481018790526064810185905261dead60848201524260a4820152905193945091169163f305d71991849160c480830192606092919082900301818588803b158015610fd257600080fd5b505af1158015610fe6573d6000803e3d6000fd5b50505050506040513d6060811015610ffd57600080fd5b50506066548314915061105c9050576040805160e560020a62461bcd02815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b50565b600061107260998363ffffffff612aad16565b92915050565b600054610100900460ff16806110915750611091612b17565b8061109f575060005460ff16155b6110dd5760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806132a3602e913960400191505060405180910390fd5b600054610100900460ff16158015611108576000805460ff1961ff0019909116610100171660011790555b61111133612b1d565b61111a33612220565b611122611b05565b8361010d60006101000a815481600160a060020a030219169083600160a060020a031602179055508561010f60006101000a815481600160a060020a030219169083600160a060020a031602179055508461011060006101000a815481600160a060020a030219169083600160a060020a031602179055508161011160006101000a815481600160a060020a030219169083600160a060020a031602179055508c60ff819055508b610100819055508a610102819055508961010381905550886101018190555087610108819055508261010e60006101000a815481600160a060020a030219169083600160a060020a0316021790555061010d60009054906101000a9004600160a060020a0316600160a060020a03166318160ddd6040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561126b57600080fd5b505afa15801561127f573d6000803e3d6000fd5b505050506040513d602081101561129557600080fd5b50516101095561010d5461010e54604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a039384169363095ea7b393169184916318160ddd91600480820192602092909190829003018186803b15801561130857600080fd5b505afa15801561131c573d6000803e3d6000fd5b505050506040513d602081101561133257600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561138157600080fd5b505af1158015611395573d6000803e3d6000fd5b505050506040513d60208110156113ab57600080fd5b506113b7905087612c1e565b80156113c9576000805461ff00191690555b50505050505050505050505050565b6101025481565b6101005481565b6113ee611cd7565b611430576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613261833981519152604482015290519081900360640190fd5b60cc5460ff1615611479576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b600160a060020a0391909116600090815261011360205260409020805460ff1916911515919091179055565b60cc5460ff165b90565b61010f60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561150157600080fd5b505afa158015611515573d6000803e3d6000fd5b505050506040513d602081101561152b57600080fd5b505161156f576040805160e560020a62461bcd0281526020600482015260186024820152600080516020613327833981519152604482015290519081900360640190fd5b6115776119d3565b6115cb576040805160e560020a62461bcd02815260206004820152601a60248201527f50726573616c6520686173206e6f742079657420656e6465642e000000000000604482015290519081900360640190fd5b60cc5460ff1615611614576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b61010a5460ff1661166f576040805160e560020a62461bcd02815260206004820152601c60248201527f486173206e6f74207965742073656e7420746f20556e69737761702e00000000604482015290519081900360640190fd5b61010a54610100900460ff16156116d0576040805160e560020a62461bcd02815260206004820152601a60248201527f48617320616c72656164792069737375656420746f6b656e732e000000000000604482015290519081900360640190fd5b61010a805461ff00191661010017905560005b6101065481101561105c5761010d546101068054600160a060020a039092169163a9059cbb91908490811061171457fe5b9060005260206000200160009054906101000a9004600160a060020a0316611760610107858154811061174357fe5b906000526020600020015461010954612a7c90919063ffffffff16565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156117b257600080fd5b505af11580156117c6573d6000803e3d6000fd5b505050506040513d60208110156117dc57600080fd5b50506001016116e3565b60ff5481565b6117fc6117f7612a14565b612ccf565b565b611806611cd7565b611848576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613261833981519152604482015290519081900360640190fd5b603354604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36033805473ffffffffffffffffffffffffffffffffffffffff19169055565b60006118a9611cd7565b6118eb576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613261833981519152604482015290519081900360640190fd5b60cc5460ff1615611934576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b61010a5460ff1661198f576040805160e560020a62461bcd02815260206004820152601c60248201527f486173206e6f74207965742073656e7420746f20556e69737761702e00000000604482015290519081900360640190fd5b604051600160a060020a0384169083156108fc029084906000818181858888f193505050501580156119c5573d6000803e3d6000fd5b5092915050565b6101045481565b60008061010f60009054906101000a9004600160a060020a0316600160a060020a0316633197cbb66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611a2857600080fd5b505afa158015611a3c573d6000803e3d6000fd5b505050506040513d6020811015611a5257600080fd5b5051610108549091503031101580611af8575061010f60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611ab757600080fd5b505afa158015611acb573d6000803e3d6000fd5b505050506040513d6020811015611ae157600080fd5b50518015611af857508042118015611af857508015155b91505090565b6101095481565b600054610100900460ff1680611b1e5750611b1e612b17565b80611b2c575060005460ff16155b611b6a5760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806132a3602e913960400191505060405180910390fd5b600054610100900460ff16158015611b95576000805460ff1961ff0019909116610100171660011790555b6001606655801561105c576000805461ff001916905550565b611bb96109a4612a14565b611bf75760405160e560020a62461bcd0281526004018080602001828103825260308152602001806131226030913960400191505060405180910390fd5b61105c81612d17565b611c0b6109a4612a14565b611c495760405160e560020a62461bcd0281526004018080602001828103825260308152602001806131226030913960400191505060405180910390fd5b60cc5460ff1615611c92576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b60cc805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a74612a14565b603354600160a060020a031690565b603354600090600160a060020a0316611cee612a14565b600160a060020a031614905090565b6101136020526000908152604090205460ff1681565b60ff5490565b611d21611cd7565b611d63576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613261833981519152604482015290519081900360640190fd5b60cc5460ff1615611dac576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b60005b82811015611e0257816101136000868685818110611dc957fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff1916911515919091179055600101611daf565b50505050565b6101085481565b61010f60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611e6157600080fd5b505afa158015611e75573d6000803e3d6000fd5b505050506040513d6020811015611e8b57600080fd5b5051611ecf576040805160e560020a62461bcd0281526020600482015260186024820152600080516020613327833981519152604482015290519081900360640190fd5b611ed76119d3565b611f2b576040805160e560020a62461bcd02815260206004820152601a60248201527f50726573616c6520686173206e6f742079657420656e6465642e000000000000604482015290519081900360640190fd5b60cc5460ff1615611f74576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b61010a5460ff16611fb95760405160e560020a62461bcd02815260040180806020018281038252602d815260200180613234602d913960400191505060405180910390fd5b6101105461010f54604080517f3197cbb60000000000000000000000000000000000000000000000000000000081529051600093600160a060020a039081169363c6db01ad9333939190921691633197cbb6916004808301926020929190829003018186803b15801561202b57600080fd5b505afa15801561203f573d6000803e3d6000fd5b505050506040513d602081101561205557600080fd5b5051610105546101095461206e9163ffffffff612a7c16565b6040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060206040518083038186803b1580156120c557600080fd5b505afa1580156120d9573d6000803e3d6000fd5b505050506040513d60208110156120ef57600080fd5b505161011054604080517f2fab59ed000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051929350600160a060020a0390911691632fab59ed9160448082019260009290919082900301818387803b15801561216157600080fd5b505af1158015612175573d6000803e3d6000fd5b505061010d54604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a03909216935063a9059cbb92506044808201926020929091908290030181600087803b1580156121e757600080fd5b505af11580156121fb573d6000803e3d6000fd5b505050506040513d602081101561221157600080fd5b505050565b61010a5460ff1681565b600054610100900460ff16806122395750612239612b17565b80612247575060005460ff16155b6122855760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806132a3602e913960400191505060405180910390fd5b600054610100900460ff161580156122b0576000805460ff1961ff0019909116610100171660011790555b6122b982612d5f565b60cc805460ff1916905580156122d5576000805461ff00191690555b5050565b6101156020526000908152604090205481565b60cc5460ff1615612335576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b6117fc60006123bf565b61010b5481565b6101055481565b610107818154811061235b57fe5b600091825260209091200154905081565b612374611cd7565b6123b6576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613261833981519152604482015290519081900360640190fd5b61105c81612c1e565b61010f60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561241157600080fd5b505afa158015612425573d6000803e3d6000fd5b505050506040513d602081101561243b57600080fd5b505161247f576040805160e560020a62461bcd0281526020600482015260186024820152600080516020613327833981519152604482015290519081900360640190fd5b6124876119d3565b156124dc576040805160e560020a62461bcd02815260206004820152601260248201527f50726573616c652068617320656e6465642e0000000000000000000000000000604482015290519081900360640190fd5b606680546001019081905560cc5460ff1615612530576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613307833981519152604482015290519081900360640190fd5b61010f54604080517f29d5a07300000000000000000000000000000000000000000000000000000000815290514292600160a060020a0316916329d5a0739160048083019260209291908290030181600087803b15801561259057600080fd5b505af11580156125a4573d6000803e3d6000fd5b505050506040513d60208110156125ba57600080fd5b50511115612612576040805160e560020a62461bcd02815260206004820152600d60248201527f456e6474696d6520706173742e00000000000000000000000000000000000000604482015290519081900360640190fd5b61011054604080517f835dada00000000000000000000000000000000000000000000000000000000081523360048201529051600092600160a060020a03169163835dada0916024808301926020929190829003018186803b15801561267757600080fd5b505afa15801561268b573d6000803e3d6000fd5b505050506040513d60208110156126a157600080fd5b5051610101549091506000906126be90349063ffffffff612a7c16565b9050662386f26fc100003410156126d3575060005b336000908152610113602052604090205460ff1615612749576126f4611d13565b612704833463ffffffff612a1816565b11156127445760405160e560020a62461bcd02815260040180806020018281038252603e815260200180613347603e913960400191505060405180910390fd5b61279d565b6101005461275d833463ffffffff612a1816565b111561279d5760405160e560020a62461bcd0281526004018080602001828103825260428152602001806131526042913960600191505060405180910390fd5b610108546127b230318363ffffffff612e1a16565b11156127f25760405160e560020a62461bcd0281526004018080602001828103825260218152602001806133856021913960400191505060405180910390fd5b61011054600160a060020a031663a13a75ca33612815348563ffffffff612e1a16565b61282630318663ffffffff612e1a16565b6040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050600060405180830381600087803b15801561287f57600080fd5b505af1158015612893573d6000803e3d6000fd5b50505050600160a060020a038416158015906128b85750600160a060020a0384163314155b1561296d57600160a060020a038416600090815261011460205260409020546128e7908263ffffffff612a1816565b600160a060020a038516600090815261011460209081526040808320939093556101159052205461291f90600163ffffffff612a1816565b600160a060020a03851660008181526101156020526040808220939093559151909183156108fc02918491818181858888f19350505050158015612967573d6000803e3d6000fd5b506129aa565b61011154604051600160a060020a039091169082156108fc029083906000818181858888f193505050501580156129a8573d6000803e3d6000fd5b505b505060665481146122d5576040805160e560020a62461bcd02815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b61010a54610100900460ff1681565b3390565b600082820183811015612a75576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082612a8b57506000611072565b612a75612710612aa1858563ffffffff612e5c16565b9063ffffffff612eb816565b6000600160a060020a038216612af75760405160e560020a62461bcd0281526004018080602001828103825260228152602001806132816022913960400191505060405180910390fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b303b1590565b600054610100900460ff1680612b365750612b36612b17565b80612b44575060005460ff16155b612b825760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806132a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612bad576000805460ff1961ff0019909116610100171660011790555b6033805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384811691909117918290556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a380156122d5576000805461ff00191690555050565b600160a060020a038116612c665760405160e560020a62461bcd0281526004018080602001828103825260268152602001806131946026913960400191505060405180910390fd5b603354604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36033805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b612ce060998263ffffffff612efa16565b604051600160a060020a038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b612d2860998263ffffffff612f6416565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b600054610100900460ff1680612d785750612d78612b17565b80612d86575060005460ff16155b612dc45760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806132a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612def576000805460ff1961ff0019909116610100171660011790555b612df88261105f565b612e0557612e0582612d17565b80156122d5576000805461ff00191690555050565b6000612a7583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fe8565b600082612e6b57506000611072565b82820282848281612e7857fe5b0414612a755760405160e560020a62461bcd0281526004018080602001828103825260218152602001806132136021913960400191505060405180910390fd5b6000612a7583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613082565b612f048282612aad565b612f425760405160e560020a62461bcd0281526004018080602001828103825260218152602001806131f26021913960400191505060405180910390fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b612f6e8282612aad565b15612fc3576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000818484111561307a5760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561303f578181015183820152602001613027565b50505050905090810190601f16801561306c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836130d45760405160e560020a62461bcd02815260206004820181815283516024840152835190928392604490910191908501908083836000831561303f578181015183820152602001613027565b5060008385816130e057fe5b0495945050505050565b508054600082559060005260206000209081019061105c91906114ac91905b8082111561311d5760008155600101613109565b509056fe506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c654465706f7369742065786365656473206d61782062757920706572206164647265737320666f72206e6f6e2d77686974656c6973746564206164647265737365732e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d75737420616c6c6f636174652065786163746c7920313030252028313030303020425029206f6620746f6b656e7320746f20706f6f6c73526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774d75737420686176652073656e7420746f20556e6973776170206265666f726520616e792072656465656d732e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644d75737420686176652065786163746c79206f6e6520746f6b656e506f6f6c2061646472657373657320666f7220656163682042502e5061757361626c653a207061757365640000000000000000000000000000000050726573616c65206e6f742079657420737461727465642e00000000000000004465706f7369742065786365656473206d61782062757920706572206164647265737320666f722077686974656c6973746564206164647265737365732e43616e6e6f74206465706f736974206d6f7265207468616e20686172646361702ea265627a7a72315820ad2992ece0558ddefe879056e3affecedad7514f74657f8fb301dc1cfa8bbe2364736f6c63430005100032
Deployed Bytecode Sourcemap
30791:7689:0:-;;;;;;;;;;-1:-1:-1;;;30791:7689:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31184:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31184:27:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31184:27:0;;:::i;:::-;;;;-1:-1:-1;;;;;31184:27:0;;;;;;;;;;;;;;31413:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31413:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;31089;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31089:20:0;;;:::i;31758:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31758:47:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31758:47:0;-1:-1:-1;;;;;31758:47:0;;:::i;31027:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31027:22:0;;;:::i;31654:49::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31654:49:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31654:49:0;-1:-1:-1;;;;;31654:49:0;;:::i;15509:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15509:120:0;;;:::i;:::-;;33556:962;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33556:962:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;33556:962:0;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;33556:962:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33556:962:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33556:962:0;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;33556:962:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33556:962:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;33556:962:0;;-1:-1:-1;33556:962:0;-1:-1:-1;33556:962:0;:::i;34526:719::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34526:719:0;;;:::i;12950:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12950:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12950:109:0;-1:-1:-1;;;;;12950:109:0;;:::i;:::-;;;;;;;;;;;;;;;;;;32236:1214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32236:1214:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;32236:1214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32236:1214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31058:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31058:24:0;;;:::i;30981:37::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30981:37:0;;;:::i;35933:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35933:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;35933:129:0;;;;;;;;;;:::i;14716:78::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14716:78:0;;;:::i;35253:437::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35253:437:0;;;:::i;30946:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30946:28:0;;;:::i;13167:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13167:79:0;;;:::i;17356:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17356:140:0;;;:::i;35698:227::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35698:227:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;35698:227:0;;;;;;;;:::i;31118:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31118:26:0;;;:::i;38223:252::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38223:252:0;;;:::i;31279:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31279:23:0;;;:::i;18840:218::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18840:218:0;;;:::i;13067:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13067:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13067:92:0;-1:-1:-1;;;;;13067:92:0;;:::i;15296:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15296:118:0;;;:::i;16543:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16543:79:0;;;:::i;16909:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16909:94:0;;;:::i;31710:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31710:41:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31710:41:0;-1:-1:-1;;;;;31710:41:0;;:::i;38110:105::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38110:105:0;;;:::i;36070:215::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36070:215:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36070:215:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;36070:215:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;36070:215:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36070:215:0;;-1:-1:-1;36070:215:0;-1:-1:-1;36070:215:0;;;;:::i;31253:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31253:19:0;;;:::i;36293:375::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36293:375:0;;;:::i;31311:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31311:28:0;;;:::i;14485:131::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14485:131:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14485:131:0;-1:-1:-1;;;;;14485:131:0;;:::i;31814:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31814:46:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31814:46:0;-1:-1:-1;;;;;31814:46:0;;:::i;33458:90::-;;;:::i;31382:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31382:24:0;;;:::i;31151:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31151:26:0;;;:::i;31218:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31218:26:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31218:26:0;;:::i;17651:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17651:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17651:109:0;-1:-1:-1;;;;;17651:109:0;;:::i;36676:1426::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36676:1426:0;-1:-1:-1;;;;;36676:1426:0;;:::i;31346:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31346:27:0;;;:::i;31184:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31184:27:0;;-1:-1:-1;31184:27:0;:::o;31413:20::-;;;;:::o;31089:::-;;;;:::o;31758:47::-;;;;;;;;;;;;;:::o;31027:22::-;;;;:::o;31654:49::-;;;;;;;;;;;;;:::o;15509:120::-;12847:22;12856:12;:10;:12::i;:::-;12847:8;:22::i;:::-;12839:83;;;;-1:-1:-1;;;;;12839:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15152:7;;;;15144:40;;;;;-1:-1:-1;;;;;15144:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15568:7;:15;;-1:-1:-1;;15568:15:0;;;15599:22;15608:12;:10;:12::i;:::-;15599:22;;;-1:-1:-1;;;;;15599:22:0;;;;;;;;;;;;;;15509:120::o;33556:962::-;16755:9;:7;:9::i;:::-;16747:54;;;;;-1:-1:-1;;;;;16747:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16747:54:0;;;;;;;;;;;;;;;14953:7;;;;14952:8;14944:37;;;;;-1:-1:-1;;;;;14944:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14944:37:0;;;;;;;;;;;;;;;33781:42;;;33773:109;;;;-1:-1:-1;;;;;33773:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33893:17;33900:10;;33893:17;:::i;:::-;33921:19;33928:12;;33921:19;:::i;:::-;33951:14;:32;;;33994:14;:32;;;-1:-1:-1;34037:104:0;34054:22;;;34037:104;;;34098:10;34114:11;;34126:1;34114:14;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;34098:31:0;;;34114:14;34098:31;;;;;;;;;-1:-1:-1;;34098:31:0;-1:-1:-1;;;;;34114:14:0;;;;;;;;;;;;;34098:31;;;;-1:-1:-1;34078:3:0;34037:104;;;;34151:22;34176:34;34195:14;;34176;;:18;;:34;;;;:::i;:::-;34151:59;-1:-1:-1;34226:6:0;34221:184;34238:24;;;34221:184;;;34284:12;34302:13;;34316:1;34302:16;;;;;;;27:10:-1;;39:1;23:18;;45:23;;-1:-1;34284:35:0;;;34302:16;34284:35;;;;34302:16;;;;;;;;;34284:35;;;;;-1:-1:-1;34354:39:0;34376:13;;34390:1;34376:16;;;;;;;;;;;;;34354:17;:21;;:39;;;;:::i;:::-;34334:59;-1:-1:-1;34264:3:0;;34221:184;;;;34423:17;34444:5;34423:26;34415:95;;;;-1:-1:-1;;;;;34415:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14992:1;33556:962;;;;;;:::o;34526:719::-;32096:5;;;;;;;;;-1:-1:-1;;;;;32096:5:0;-1:-1:-1;;;;;32096:15:0;;:17;;;;;-1:-1:-1;;;32096:17:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32096:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32096:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32096:17:0;32088:54;;;;;-1:-1:-1;;;;;32088:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32088:54:0;;;;;;;;;;;;;;;32161:16;:14;:16::i;:::-;32153:55;;;;;-1:-1:-1;;;;;32153:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19477:13;:18;;19494:1;19477:18;;;;;14953:7;;;;14952:8;14944:37;;;;;-1:-1:-1;;;;;14944:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14944:37:0;;;;;;;;;;;;;;;34626:10;:17;34618:59;;;;;-1:-1:-1;;;;;34618:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34697:16;;;;34696:17;34688:58;;;;;-1:-1:-1;;;;;34688:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34772:3;34757:12;:18;34805:4;34797:21;34786:8;:32;34829:16;:23;;-1:-1:-1;;34829:23:0;34848:4;34829:23;;;34902:14;;34884:11;;-1:-1:-1;;34884:33:0;;:11;:33;:17;:33;:::i;:::-;34863:54;;34928:15;34946:28;34961:12;;34946:8;;:14;;:28;;;;:::i;:::-;34985:13;;35055:5;;34985:252;;;;;;-1:-1:-1;;;;;35055:5:0;;;34985:252;;;;;;;;;;;;;;;;;;;;;;35165:42;34985:252;;;;35223:3;34985:252;;;;;;34928:46;;-1:-1:-1;34985:13:0;;;:29;;34928:46;;34985:252;;;;;;;;;;;;;;34928:46;34985:13;:252;;;5:2:-1;;;;30:1;27;20:12;5:2;34985:252:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34985:252:0;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;19589:13:0;;19573:29;;;-1:-1:-1;19565:73:0;;-1:-1:-1;19565:73:0;;;;-1:-1:-1;;;;;19565:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32219:1;34526:719::o;12950:109::-;13006:4;13030:21;:8;13043:7;13030:21;:12;:21;:::i;:::-;13023:28;12950:109;-1:-1:-1;;12950:109:0:o;32236:1214::-;9274:12;;;;;;;;:31;;;9290:15;:13;:15::i;:::-;9274:47;;;-1:-1:-1;9310:11:0;;;;9309:12;9274:47;9266:106;;;;-1:-1:-1;;;;;9266:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9381:19;9404:12;;;;;;9403:13;9423:83;;;;9452:12;:19;;-1:-1:-1;;;;9452:19:0;;;;;9480:18;9467:4;9480:18;;;9423:83;32694:30;32713:10;32694:18;:30::i;:::-;32735:31;32755:10;32735:19;:31::i;:::-;32777:28;:26;:28::i;:::-;32826:6;32818:5;;:14;;;;;-1:-1:-1;;;;;32818:14:0;;;;;-1:-1:-1;;;;;32818:14:0;;;;;;32851:6;32843:5;;:14;;;;;-1:-1:-1;;;;;32843:14:0;;;;;-1:-1:-1;;;;;32843:14:0;;;;;;32879:9;32868:8;;:20;;;;;-1:-1:-1;;;;;32868:20:0;;;;;-1:-1:-1;;;;;32868:20:0;;;;;;32909:8;32899:7;;:18;;;;;-1:-1:-1;;;;;32899:18:0;;;;;-1:-1:-1;;;;;32899:18:0;;;;;;32949:17;32930:16;:36;;;;33005:26;32977:25;:54;;;;33059:13;33044:12;:28;;;;33094:9;33083:8;:20;;;;33129:11;33116:10;:24;;;;33161:8;33151:7;:18;;;;33198:14;33182:13;;:30;;;;;-1:-1:-1;;;;;33182:30:0;;;;;-1:-1:-1;;;;;33182:30:0;;;;;;33237:5;;;;;;;;;-1:-1:-1;;;;;33237:5:0;-1:-1:-1;;;;;33237:17:0;;:19;;;;;-1:-1:-1;;;33237:19:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33237:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33237:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33237:19:0;33223:11;:33;33267:5;;33289:13;;33305:19;;;;;;;;-1:-1:-1;;;;;33267:5:0;;;;:13;;33289;;33267:5;;33305:17;;:19;;;;;33237;;33305;;;;;;;;33267:5;33305:19;;;5:2:-1;;;;30:1;27;20:12;5:2;33305:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33305:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33305:19:0;33267:58;;;-1:-1:-1;;;33267:58:0;;;;;;-1:-1:-1;;;;;33267:58:0;;;;;;;;;;;;;;;;;;;;33305:19;;33267:58;;;;;;;-1:-1:-1;33267:58:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;33267:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33267:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33417:25:0;;-1:-1:-1;33436:5:0;33417:18;:25::i;:::-;9528:14;9524:57;;;9568:5;9553:20;;-1:-1:-1;;9553:20:0;;;9524:57;32236:1214;;;;;;;;;;;;;:::o;31058:24::-;;;;:::o;30981:37::-;;;;:::o;35933:129::-;16755:9;:7;:9::i;:::-;16747:54;;;;;-1:-1:-1;;;;;16747:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16747:54:0;;;;;;;;;;;;;;;14953:7;;;;14952:8;14944:37;;;;;-1:-1:-1;;;;;14944:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14944:37:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36028:18:0;;;;;;;;:9;:18;;;;;:26;;-1:-1:-1;;36028:26:0;;;;;;;;;;35933:129::o;14716:78::-;14779:7;;;;14716:78;;:::o;35253:437::-;32096:5;;;;;;;;;-1:-1:-1;;;;;32096:5:0;-1:-1:-1;;;;;32096:15:0;;:17;;;;;-1:-1:-1;;;32096:17:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32096:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32096:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32096:17:0;32088:54;;;;;-1:-1:-1;;;;;32088:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32088:54:0;;;;;;;;;;;;;;;32161:16;:14;:16::i;:::-;32153:55;;;;;-1:-1:-1;;;;;32153:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14953:7;;;;14952:8;14944:37;;;;;-1:-1:-1;;;;;14944:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14944:37:0;;;;;;;;;;;;;;;35338:16;;;;35330:57;;;;;-1:-1:-1;;;;;35330:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35407:15;;;;;;;35406:16;35398:55;;;;;-1:-1:-1;;;;;35398:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35464:15;:22;;-1:-1:-1;;35464:22:0;;;;;;35497:186;35518:10;:17;35514:21;;35497:186;;;35557:5;;35590:10;:13;;-1:-1:-1;;;;;35557:5:0;;;;:14;;35590:10;35601:1;;35590:13;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35590:13:0;35622:34;35640:12;35653:1;35640:15;;;;;;;;;;;;;;;;35622:11;;:17;;:34;;;;:::i;:::-;35557:114;;;;;-1:-1:-1;;;35557:114:0;;;;;;;-1:-1:-1;;;;;35557:114:0;-1:-1:-1;;;;;35557:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35557:114:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35557:114:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;35537:3:0;;35497:186;;30946:28;;;;:::o;13167:79::-;13211:27;13225:12;:10;:12::i;:::-;13211:13;:27::i;:::-;13167:79::o;17356:140::-;16755:9;:7;:9::i;:::-;16747:54;;;;;-1:-1:-1;;;;;16747:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16747:54:0;;;;;;;;;;;;;;;17439:6;;17418:40;;17455:1;;-1:-1:-1;;;;;17439:6:0;;17418:40;;17455:1;;17418:40;17469:6;:19;;-1:-1:-1;;17469:19:0;;;17356:140::o;35698:227::-;35807:4;16755:9;:7;:9::i;:::-;16747:54;;;;;-1:-1:-1;;;;;16747:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16747:54:0;;;;;;;;;;;;;;;14953:7;;;;14952:8;14944:37;;;;;-1:-1:-1;;;;;14944:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14944:37:0;;;;;;;;;;;;;;;35832:16;;;;35824:57;;;;;-1:-1:-1;;;;;35824:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35892:25;;-1:-1:-1;;;;;35892:17:0;;;:25;;;;;35910:6;;35892:25;;;;35910:6;35892:17;:25;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35892:25:0;35698:227;;;;:::o;31118:26::-;;;;:::o;38223:252::-;38270:4;38287:12;38303:5;;;;;;;;;-1:-1:-1;;;;;38303:5:0;-1:-1:-1;;;;;38303:13:0;;:15;;;;;-1:-1:-1;;;38303:15:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38303:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38303:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38303:15:0;38377:7;;38303:15;;-1:-1:-1;38360:4:0;38352:21;:32;;;38351:105;;;38403:5;;;;;;;;;-1:-1:-1;;;;;38403:5:0;-1:-1:-1;;;;;38403:15:0;;:17;;;;;-1:-1:-1;;;38403:17:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38403:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38403:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38403:17:0;:52;;;;;38431:7;38425:3;:13;:29;;;;-1:-1:-1;38442:12:0;;;38425:29;38329:138;;;38223:252;:::o;31279:23::-;;;;:::o;18840:218::-;9274:12;;;;;;;;:31;;;9290:15;:13;:15::i;:::-;9274:47;;;-1:-1:-1;9310:11:0;;;;9309:12;9274:47;9266:106;;;;-1:-1:-1;;;;;9266:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9381:19;9404:12;;;;;;9403:13;9423:83;;;;9452:12;:19;;-1:-1:-1;;;;9452:19:0;;;;;9480:18;9467:4;9480:18;;;9423:83;19049:1;19033:13;:17;9524:57;;;;9568:5;9553:20;;-1:-1:-1;;9553:20:0;;;18840:218;:::o;13067:92::-;12847:22;12856:12;:10;:12::i;12847:22::-;12839:83;;;;-1:-1:-1;;;;;12839:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13132:19;13143:7;13132:10;:19::i;15296:118::-;12847:22;12856:12;:10;:12::i;12847:22::-;12839:83;;;;-1:-1:-1;;;;;12839:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14953:7;;;;14952:8;14944:37;;;;;-1:-1:-1;;;;;14944:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14944:37:0;;;;;;;;;;;;;;;15356:7;:14;;-1:-1:-1;;15356:14:0;15366:4;15356:14;;;15386:20;15393:12;:10;:12::i;16543:79::-;16608:6;;-1:-1:-1;;;;;16608:6:0;16543:79;:::o;16909:94::-;16989:6;;16949:4;;-1:-1:-1;;;;;16989:6:0;16973:12;:10;:12::i;:::-;-1:-1:-1;;;;;16973:22:0;;16966:29;;16909:94;:::o;31710:41::-;;;;;;;;;;;;;;;:::o;38110:105::-;38191:16;;38110:105;:::o;36070:215::-;16755:9;:7;:9::i;:::-;16747:54;;;;;-1:-1:-1;;;;;16747:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16747:54:0;;;;;;;;;;;;;;;14953:7;;;;14952:8;14944:37;;;;;-1:-1:-1;;;;;14944:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14944:37:0;;;;;;;;;;;;;;;36187:6;36182:96;36197:18;;;36182:96;;;36261:5;36237:9;:21;36247:7;;36255:1;36247:10;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36247:10:0;36237:21;;-1:-1:-1;36237:21:0;;;;;;;;-1:-1:-1;36237:21:0;:29;;-1:-1:-1;;36237:29:0;;;;;;;;;;-1:-1:-1;36217:3:0;36182:96;;;;36070:215;;;:::o;31253:19::-;;;;:::o;36293:375::-;32096:5;;;;;;;;;-1:-1:-1;;;;;32096:5:0;-1:-1:-1;;;;;32096:15:0;;:17;;;;;-1:-1:-1;;;32096:17:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32096:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32096:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32096:17:0;32088:54;;;;;-1:-1:-1;;;;;32088:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32088:54:0;;;;;;;;;;;;;;;32161:16;:14;:16::i;:::-;32153:55;;;;;-1:-1:-1;;;;;32153:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14953:7;;;;14952:8;14944:37;;;;;-1:-1:-1;;;;;14944:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14944:37:0;;;;;;;;;;;;;;;36373:16;;;;36365:74;;;;-1:-1:-1;;;;;36365:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36467:8;;36508:5;;:15;;;;;;;;36450:14;;-1:-1:-1;;;;;36467:8:0;;;;:28;;36496:10;;36508:5;;;;;:13;;:15;;;;;;;;;;;;;;:5;:15;;;5:2:-1;;;;30:1;27;20:12;5:2;36508:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36508:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36508:15:0;36543:14;;36525:11;;:33;;;:17;:33;:::i;:::-;36467:92;;;;;-1:-1:-1;;;36467:92:0;;;;;;;-1:-1:-1;;;;;36467:92:0;-1:-1:-1;;;;;36467:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36467:92:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36467:92:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36467:92:0;36570:8;;:42;;;;;;36590:10;36570:42;;;;;;;;;;;;36467:92;;-1:-1:-1;;;;;;36570:8:0;;;;:19;;:42;;;;;:8;;:42;;;;;;;;:8;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;36570:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;36623:5:0;;:37;;;;;;36638:10;36623:37;;;;;;;;;;;;-1:-1:-1;;;;;36623:5:0;;;;-1:-1:-1;36623:14:0;;-1:-1:-1;36623:37:0;;;;;;;;;;;;;;;:5;;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;36623:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36623:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;36293:375:0:o;31311:28::-;;;;;;:::o;14485:131::-;9274:12;;;;;;;;:31;;;9290:15;:13;:15::i;:::-;9274:47;;;-1:-1:-1;9310:11:0;;;;9309:12;9274:47;9266:106;;;;-1:-1:-1;;;;;9266:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9381:19;9404:12;;;;;;9403:13;9423:83;;;;9452:12;:19;;-1:-1:-1;;;;9452:19:0;;;;;9480:18;9467:4;9480:18;;;9423:83;14551:29;14573:6;14551:21;:29::i;:::-;14593:7;:15;;-1:-1:-1;;14593:15:0;;;9524:57;;;;9568:5;9553:20;;-1:-1:-1;;9553:20:0;;;9524:57;14485:131;;:::o;31814:46::-;;;;;;;;;;;;;:::o;33458:90::-;14953:7;;;;14952:8;14944:37;;;;;-1:-1:-1;;;;;14944:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14944:37:0;;;;;;;;;;;;;;;33519:21;33535:3;33519:7;:21::i;31382:24::-;;;;:::o;31151:26::-;;;;:::o;31218:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31218:26:0;:::o;17651:109::-;16755:9;:7;:9::i;:::-;16747:54;;;;;-1:-1:-1;;;;;16747:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16747:54:0;;;;;;;;;;;;;;;17724:28;17743:8;17724:18;:28::i;36676:1426::-;31915:5;;;;;;;;;-1:-1:-1;;;;;31915:5:0;-1:-1:-1;;;;;31915:15:0;;:17;;;;;-1:-1:-1;;;31915:17:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31915:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31915:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31915:17:0;31907:54;;;;;-1:-1:-1;;;;;31907:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31907:54:0;;;;;;;;;;;;;;;31981:16;:14;:16::i;:::-;31980:17;31972:48;;;;;-1:-1:-1;;;;;31972:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19477:13;:18;;19494:1;19477:18;;;;;14953:7;;;;14952:8;14944:37;;;;;-1:-1:-1;;;;;14944:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14944:37:0;;;;;;;;;;;;;;;36798:5;;:21;;;;;;;;36823:3;;-1:-1:-1;;;;;36798:5:0;;:19;;:21;;;;;;;;;;;;;;:5;;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;36798:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36798:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36798:21:0;:28;;36790:54;;;;;-1:-1:-1;;;;;36790:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36884:8;;:36;;;;;;36909:10;36884:36;;;;;;36855:26;;-1:-1:-1;;;;;36884:8:0;;:24;;:36;;;;;;;;;;;;;;:8;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;36884:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36884:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36884:36:0;36958:10;;36884:36;;-1:-1:-1;36931:8:0;;36942:27;;:9;;:27;:15;:27;:::i;:::-;36931:38;;37080:10;37068:9;:22;37064:35;;;-1:-1:-1;37098:1:0;37064:35;37124:10;37114:21;;;;:9;:21;;;;;;;;37110:470;;;37218:26;:24;:26::i;:::-;37178:36;:21;37204:9;37178:36;:25;:36;:::i;:::-;:66;;37152:190;;;;-1:-1:-1;;;;;37152:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37110:470;;;37441:25;;37401:36;:21;37427:9;37401:36;:25;:36;:::i;:::-;:65;;37375:193;;;;-1:-1:-1;;;;;37375:193:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37632:7;;37598:30;37606:4;37598:21;37624:3;37598:30;:25;:30;:::i;:::-;:41;;37590:87;;;;-1:-1:-1;;;;;37590:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37690:8;;-1:-1:-1;;;;;37690:8:0;:19;37710:10;37722:18;:9;37736:3;37722:18;:13;:18;:::i;:::-;37742:30;37750:4;37742:21;37768:3;37742:30;:25;:30;:::i;:::-;37690:83;;;;;-1:-1:-1;;;37690:83:0;;;;;;;-1:-1:-1;;;;;37690:83:0;-1:-1:-1;;;;;37690:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37690:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;;;;37790:24:0;;;;;;:50;;-1:-1:-1;;;;;;37818:22:0;;37830:10;37818:22;;37790:50;37786:309;;;-1:-1:-1;;;;;37885:25:0;;;;;;:15;:25;;;;;;:34;;37915:3;37885:34;:29;:34;:::i;:::-;-1:-1:-1;;;;;37857:25:0;;;;;;:15;:25;;;;;;;;:62;;;;37961:14;:24;;;;:31;;37990:1;37961:31;:28;:31;:::i;:::-;-1:-1:-1;;;;;37934:24:0;;;;;;:14;:24;;;;;;:58;;;;38007:22;;37934:24;;38007:22;;;;;38025:3;;38007:22;37934:24;38007:22;38025:3;37934:24;38007:22;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38007:22:0;37786:309;;;38062:7;;:21;;-1:-1:-1;;;;;38062:7:0;;;;:21;;;;;38079:3;;38062:7;:21;:7;:21;38079:3;38062:7;:21;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38062:21:0;37786:309;14992:1;;19589:13;;19573:12;:29;19565:73;;;;;-1:-1:-1;;;;;19565:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;31346:27;;;;;;;;;:::o;11096:98::-;11176:10;11096:98;:::o;3658:181::-;3716:7;3748:5;;;3772:6;;;;3764:46;;;;;-1:-1:-1;;;;;3764:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3830:1;3658:181;-1:-1:-1;;;3658:181:0:o;23402:151::-;23459:4;23480:8;23476:22;;-1:-1:-1;23497:1:0;23490:8;;23476:22;23516:29;23388:5;23516:11;:3;23524:2;23516:11;:7;:11;:::i;:::-;:15;:29;:15;:29;:::i;12219:203::-;12291:4;-1:-1:-1;;;;;12316:21:0;;12308:68;;;;-1:-1:-1;;;;;12308:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12394:20:0;:11;:20;;;;;;;;;;;;;;;12219:203::o;9675:508::-;10092:4;10138:17;10170:7;9675:508;:::o;16317:145::-;9274:12;;;;;;;;:31;;;9290:15;:13;:15::i;:::-;9274:47;;;-1:-1:-1;9310:11:0;;;;9309:12;9274:47;9266:106;;;;-1:-1:-1;;;;;9266:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9381:19;9404:12;;;;;;9403:13;9423:83;;;;9452:12;:19;;-1:-1:-1;;;;9452:19:0;;;;;9480:18;9467:4;9480:18;;;9423:83;16383:6;:15;;-1:-1:-1;;16383:15:0;-1:-1:-1;;;;;16383:15:0;;;;;;;;;;;16414:40;;16447:6;;;-1:-1:-1;;16414:40:0;;-1:-1:-1;;16414:40:0;9528:14;9524:57;;;9568:5;9553:20;;-1:-1:-1;;9553:20:0;;;16317:145;;:::o;17866:229::-;-1:-1:-1;;;;;17940:22:0;;17932:73;;;;-1:-1:-1;;;;;17932:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18042:6;;18021:38;;-1:-1:-1;;;;;18021:38:0;;;;18042:6;;18021:38;;18042:6;;18021:38;18070:6;:17;;-1:-1:-1;;18070:17:0;-1:-1:-1;;;;;18070:17:0;;;;;;;;;;17866:229::o;13384:130::-;13444:24;:8;13460:7;13444:24;:15;:24;:::i;:::-;13484:22;;-1:-1:-1;;;;;13484:22:0;;;;;;;;13384:130;:::o;13254:122::-;13311:21;:8;13324:7;13311:21;:12;:21;:::i;:::-;13348:20;;-1:-1:-1;;;;;13348:20:0;;;;;;;;13254:122;:::o;12657:141::-;9274:12;;;;;;;;:31;;;9290:15;:13;:15::i;:::-;9274:47;;;-1:-1:-1;9310:11:0;;;;9309:12;9274:47;9266:106;;;;-1:-1:-1;;;;;9266:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9381:19;9404:12;;;;;;9403:13;9423:83;;;;9452:12;:19;;-1:-1:-1;;;;9452:19:0;;;;;9480:18;9467:4;9480:18;;;9423:83;12728:16;12737:6;12728:8;:16::i;:::-;12723:68;;12761:18;12772:6;12761:10;:18::i;:::-;9528:14;9524:57;;;9568:5;9553:20;;-1:-1:-1;;9553:20:0;;;12657:141;;:::o;4114:136::-;4172:7;4199:43;4203:1;4206;4199:43;;;;;;;;;;;;;;;;;:3;:43::i;5030:471::-;5088:7;5333:6;5329:47;;-1:-1:-1;5363:1:0;5356:8;;5329:47;5400:5;;;5404:1;5400;:5;:1;5424:5;;;;;:10;5416:56;;;;-1:-1:-1;;;;;5416:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5969:132;6027:7;6054:39;6058:1;6061;6054:39;;;;;;;;;;;;;;;;;:3;:39::i;11941:183::-;12021:18;12025:4;12031:7;12021:3;:18::i;:::-;12013:64;;;;-1:-1:-1;;;;;12013:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12088:20:0;12111:5;12088:20;;;;;;;;;;;:28;;-1:-1:-1;;12088:28:0;;;11941:183::o;11683:178::-;11761:18;11765:4;11771:7;11761:3;:18::i;:::-;11760:19;11752:63;;;;;-1:-1:-1;;;;;11752:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11826:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;11826:27:0;11849:4;11826:27;;;11683:178::o;4587:192::-;4673:7;4709:12;4701:6;;;;4693:29;;;;-1:-1:-1;;;;;4693:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4693:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4745:5:0;;;4587:192::o;6631:345::-;6717:7;6819:12;6812:5;6804:28;;;;-1:-1:-1;;;;;6804:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6804:28:0;;6843:9;6859:1;6855;:5;;;;;;;6631:345;-1:-1:-1;;;;;6631:345:0:o;30791:7689::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://ad2992ece0558ddefe879056e3affecedad7514f74657f8fb301dc1cfa8bbe23
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.