Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
LidSimplifiedPresale
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-12-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 softCap;
address public presale;
uint public refundTime;
uint public maxBalance;
function initialize(
uint _startTime,
uint _refundTime,
uint _endTime,
uint _softCap,
address _presale,
address owner
) external initializer {
Ownable.initialize(msg.sender);
startTime = _startTime;
refundTime = _refundTime;
endTime = _endTime;
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 setRefundTime(uint time) external onlyOwner {
refundTime = time;
}
function setEndTime(uint time) external onlyOwner {
endTime = time;
}
function updateSoftCap(uint valueWei) external onlyOwner {
softCap = valueWei;
}
function updateRefunding() external returns (bool) {
if (maxBalance < presale.balance) maxBalance = presale.balance;
if (maxBalance < softCap && now > refundTime) return true;
return false;
}
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 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,
address _presale,
address owner
) external initializer {
Ownable.initialize(owner);
redeemBP = _redeemBP;
redeemInterval = _redeemInterval;
presale = _presale;
}
function setClaimed(address account, uint amount) external onlyPresaleContract {
accountClaimedTokens[account] = accountClaimedTokens[account].add(amount);
}
function setDeposit(address account, uint deposit) external onlyPresaleContract {
if (accountDeposits[account] == 0) totalDepositors = totalDepositors.add(1);
accountDeposits[account] = accountDeposits[account].add(deposit);
uint sharesToAdd = deposit;
accountShares[account] = accountShares[account].add(sharesToAdd);
totalShares = totalShares.add(sharesToAdd);
}
function calculateRatePerEth(uint totalPresaleTokens, uint hardCap) external pure returns (uint) {
return totalPresaleTokens
.mul(1 ether)
.div(
getMaxShares(hardCap)
);
}
function calculateReedemable(
address account,
uint finalEndTime,
uint totalPresaleTokens
) external view returns (uint) {
if (finalEndTime == 0) return 0;
if (finalEndTime >= now) return 0;
uint earnedTokens = accountShares[account].mul(totalPresaleTokens).div(totalShares);
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 pure returns (uint) {
return hardCap;
}
}
interface IStakeHandler {
function handleStake(address staker, uint stakerDeltaValue, uint stakerFinalValue) external;
function handleUnstake(address staker, uint stakerDeltaValue, uint stakerFinalValue) external;
}
interface ILidCertifiableToken {
function activateTransfers() external;
function activateTax() external;
function mint(address account, uint256 amount) external returns (bool);
function addMinter(address account) external;
function renounceMinter() external;
function transfer(address recipient, uint256 amount) external returns (bool);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function isMinter(address account) external view returns (bool);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract LidStaking is Initializable, Ownable {
using BasisPoints for uint;
using SafeMath for uint;
uint256 constant internal DISTRIBUTION_MULTIPLIER = 2 ** 64;
uint public stakingTaxBP;
uint public unstakingTaxBP;
ILidCertifiableToken private lidToken;
mapping(address => uint) public stakeValue;
mapping(address => int) public stakerPayouts;
uint public totalDistributions;
uint public totalStaked;
uint public totalStakers;
uint public profitPerShare;
uint private emptyStakeTokens; //These are tokens given to the contract when there are no stakers.
IStakeHandler[] public stakeHandlers;
uint public startTime;
uint public registrationFeeWithReferrer;
uint public registrationFeeWithoutReferrer;
mapping(address => uint) public accountReferrals;
mapping(address => bool) public stakerIsRegistered;
event OnDistribute(address sender, uint amountSent);
event OnStake(address sender, uint amount, uint tax);
event OnUnstake(address sender, uint amount, uint tax);
event OnReinvest(address sender, uint amount, uint tax);
event OnWithdraw(address sender, uint amount);
modifier onlyLidToken {
require(msg.sender == address(lidToken), "Can only be called by LidToken contract.");
_;
}
modifier whenStakingActive {
require(startTime != 0 && now > startTime, "Staking not yet started.");
_;
}
function initialize(
uint _stakingTaxBP,
uint _ustakingTaxBP,
uint _registrationFeeWithReferrer,
uint _registrationFeeWithoutReferrer,
address owner,
ILidCertifiableToken _lidToken
) external initializer {
Ownable.initialize(msg.sender);
stakingTaxBP = _stakingTaxBP;
unstakingTaxBP = _ustakingTaxBP;
lidToken = _lidToken;
registrationFeeWithReferrer = _registrationFeeWithReferrer;
registrationFeeWithoutReferrer = _registrationFeeWithoutReferrer;
//Due to issue in oz testing suite, the msg.sender might not be owner
_transferOwnership(owner);
}
function registerAndStake(uint amount) public {
registerAndStake(amount, address(0x0));
}
function registerAndStake(uint amount, address referrer) public whenStakingActive {
require(!stakerIsRegistered[msg.sender], "Staker must not be registered");
require(lidToken.balanceOf(msg.sender) >= amount, "Must have enough balance to stake amount");
uint finalAmount;
if(address(0x0) == referrer) {
//No referrer
require(amount >= registrationFeeWithoutReferrer, "Must send at least enough LID to pay registration fee.");
distribute(registrationFeeWithoutReferrer);
finalAmount = amount.sub(registrationFeeWithoutReferrer);
} else {
//has referrer
require(amount >= registrationFeeWithReferrer, "Must send at least enough LID to pay registration fee.");
require(lidToken.transferFrom(msg.sender, referrer, registrationFeeWithReferrer), "Stake failed due to failed referral transfer.");
accountReferrals[referrer] = accountReferrals[referrer].add(1);
finalAmount = amount.sub(registrationFeeWithReferrer);
}
stakerIsRegistered[msg.sender] = true;
stake(finalAmount);
}
function stake(uint amount) public whenStakingActive {
require(stakerIsRegistered[msg.sender] == true, "Must be registered to stake.");
require(amount >= 1e18, "Must stake at least one LID.");
require(lidToken.balanceOf(msg.sender) >= amount, "Cannot stake more LID than you hold unstaked.");
if (stakeValue[msg.sender] == 0) totalStakers = totalStakers.add(1);
uint tax = _addStake(amount);
require(lidToken.transferFrom(msg.sender, address(this), amount), "Stake failed due to failed transfer.");
emit OnStake(msg.sender, amount, tax);
}
function unstake(uint amount) external whenStakingActive {
require(amount >= 1e18, "Must unstake at least one LID.");
require(stakeValue[msg.sender] >= amount, "Cannot unstake more LID than you have staked.");
//must withdraw all dividends, to prevent overflows
withdraw(dividendsOf(msg.sender));
if (stakeValue[msg.sender] == amount) totalStakers = totalStakers.sub(1);
totalStaked = totalStaked.sub(amount);
stakeValue[msg.sender] = stakeValue[msg.sender].sub(amount);
uint tax = findTaxAmount(amount, unstakingTaxBP);
uint earnings = amount.sub(tax);
_increaseProfitPerShare(tax);
stakerPayouts[msg.sender] = uintToInt(profitPerShare.mul(stakeValue[msg.sender]));
for (uint i=0; i < stakeHandlers.length; i++) {
stakeHandlers[i].handleUnstake(msg.sender, amount, stakeValue[msg.sender]);
}
require(lidToken.transferFrom(address(this), msg.sender, earnings), "Unstake failed due to failed transfer.");
emit OnUnstake(msg.sender, amount, tax);
}
function withdraw(uint amount) public whenStakingActive {
require(dividendsOf(msg.sender) >= amount, "Cannot withdraw more dividends than you have earned.");
stakerPayouts[msg.sender] = stakerPayouts[msg.sender] + uintToInt(amount.mul(DISTRIBUTION_MULTIPLIER));
lidToken.transfer(msg.sender, amount);
emit OnWithdraw(msg.sender, amount);
}
function reinvest(uint amount) external whenStakingActive {
require(dividendsOf(msg.sender) >= amount, "Cannot reinvest more dividends than you have earned.");
uint payout = amount.mul(DISTRIBUTION_MULTIPLIER);
stakerPayouts[msg.sender] = stakerPayouts[msg.sender] + uintToInt(payout);
uint tax = _addStake(amount);
emit OnReinvest(msg.sender, amount, tax);
}
function distribute(uint amount) public {
require(lidToken.balanceOf(msg.sender) >= amount, "Cannot distribute more LID than you hold unstaked.");
totalDistributions = totalDistributions.add(amount);
_increaseProfitPerShare(amount);
require(
lidToken.transferFrom(msg.sender, address(this), amount),
"Distribution failed due to failed transfer."
);
emit OnDistribute(msg.sender, amount);
}
function handleTaxDistribution(uint amount) external onlyLidToken {
totalDistributions = totalDistributions.add(amount);
_increaseProfitPerShare(amount);
emit OnDistribute(msg.sender, amount);
}
function dividendsOf(address staker) public view returns (uint) {
int divPayout = uintToInt(profitPerShare.mul(stakeValue[staker]));
require(divPayout >= stakerPayouts[staker], "dividend calc overflow");
return uint(divPayout - stakerPayouts[staker])
.div(DISTRIBUTION_MULTIPLIER);
}
function findTaxAmount(uint value, uint taxBP) public pure returns (uint) {
return value.mulBP(taxBP);
}
function numberStakeHandlersRegistered() external view returns (uint) {
return stakeHandlers.length;
}
function registerStakeHandler(IStakeHandler sc) external onlyOwner {
stakeHandlers.push(sc);
}
function unregisterStakeHandler(uint index) external onlyOwner {
IStakeHandler sc = stakeHandlers[stakeHandlers.length-1];
stakeHandlers.pop();
stakeHandlers[index] = sc;
}
function setStakingBP(uint valueBP) external onlyOwner {
require(valueBP < 10000, "Tax connot be over 100% (10000 BP)");
stakingTaxBP = valueBP;
}
function setUnstakingBP(uint valueBP) external onlyOwner {
require(valueBP < 10000, "Tax connot be over 100% (10000 BP)");
unstakingTaxBP = valueBP;
}
function setStartTime(uint _startTime) external onlyOwner {
startTime = _startTime;
}
function setRegistrationFees(uint valueWithReferrer, uint valueWithoutReferrer) external onlyOwner {
registrationFeeWithReferrer = valueWithReferrer;
registrationFeeWithoutReferrer = valueWithoutReferrer;
}
function uintToInt(uint val) internal pure returns (int) {
if (val >= uint(-1).div(2)) {
require(false, "Overflow. Cannot convert uint to int.");
} else {
return int(val);
}
}
function _addStake(uint amount) internal returns (uint tax) {
tax = findTaxAmount(amount, stakingTaxBP);
uint stakeAmount = amount.sub(tax);
totalStaked = totalStaked.add(stakeAmount);
stakeValue[msg.sender] = stakeValue[msg.sender].add(stakeAmount);
for (uint i=0; i < stakeHandlers.length; i++) {
stakeHandlers[i].handleStake(msg.sender, stakeAmount, stakeValue[msg.sender]);
}
uint payout = profitPerShare.mul(stakeAmount);
stakerPayouts[msg.sender] = stakerPayouts[msg.sender] + uintToInt(payout);
_increaseProfitPerShare(tax);
}
function _increaseProfitPerShare(uint amount) internal {
if (totalStaked != 0) {
if (emptyStakeTokens != 0) {
amount = amount.add(emptyStakeTokens);
emptyStakeTokens = 0;
}
profitPerShare = profitPerShare.add(amount.mul(DISTRIBUTION_MULTIPLIER).div(totalStaked));
} else {
emptyStakeTokens = emptyStakeTokens.add(amount);
}
}
}
// File: contracts\LidSimplifiedPresaleAccess.sol
pragma solidity 0.5.16;
//TODO: Replace with abstract sc or interface. mocks should only be for testing
contract LidSimplifiedPresaleAccess is Initializable {
using SafeMath for uint;
LidStaking private staking;
uint[5] private cutoffs;
function initialize(LidStaking _staking) external initializer {
staking = _staking;
//Precalculated
cutoffs = [
500000 ether,
100000 ether,
50000 ether,
25000 ether,
1 ether
];
}
function getAccessTime(address account, uint startTime) external view returns (uint accessTime) {
uint stakeValue = staking.stakeValue(account);
if (stakeValue == 0) return startTime.add(15 minutes);
if (stakeValue >= cutoffs[0]) return startTime;
uint i=0;
uint stake2 = cutoffs[0];
while (stake2 > stakeValue && i < cutoffs.length) {
i++;
stake2 = cutoffs[i];
}
return startTime.add(i.mul(3 minutes));
}
}
contract LidSimplifiedPresale is Initializable, Ownable, ReentrancyGuard, Pausable {
using BasisPoints for uint;
using SafeMath for uint;
uint public maxBuyPerAddress;
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;
LidSimplifiedPresaleAccess private access;
address payable private lidFund;
mapping(address => uint) public earnedReferrals;
mapping(address => uint) public referralCounts;
mapping(address => uint) public refundedEth;
bool public isRefunding;
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 _uniswapEthBP,
uint _lidEthBP,
uint _hardcap,
address owner,
LidSimplifiedPresaleTimer _timer,
LidSimplifiedPresaleRedeemer _redeemer,
LidSimplifiedPresaleAccess _access,
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;
access = _access;
lidFund = _lidFund;
maxBuyPerAddress = _maxBuyPerAddress;
uniswapEthBP = _uniswapEthBP;
lidEthBP = _lidEthBP;
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(msg.sender == tx.origin, "Sender must be origin - no contract calls.");
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;
uint last = tokenPools.length.sub(1);
for (uint i = 0; i < last; ++i) {
token.transfer(
tokenPools[i],
totalTokens.mulBP(tokenPoolBPs[i])
);
}
// in case rounding error, send all to final
token.transfer(
tokenPools[last],
totalTokens.mulBP(tokenPoolBPs[last])
);
}
function releaseEthToAddress(address payable receiver, uint amount) external onlyOwner whenNotPaused returns(uint) {
require(hasSentToUniswap, "Has not yet sent to Uniswap.");
receiver.transfer(amount);
}
function redeem() external whenPresaleFinished whenNotPaused {
require(hasSentToUniswap, "Must have sent to Uniswap before any redeems.");
uint claimable = redeemer.calculateReedemable(msg.sender, finalEndTime, totalTokens.mulBP(presaleTokenBP));
redeemer.setClaimed(msg.sender, claimable);
token.transfer(msg.sender, claimable);
}
function startRefund() external onlyOwner {
_startRefund();
}
function recoverTokens(address _receiver) external onlyOwner {
require(isRefunding, "Refunds not active");
token.transfer(_receiver,token.balanceOf(address(this)));
}
function claimRefund(address payable account) external whenPaused {
require(isRefunding, "Refunds not active");
uint refundAmt = getRefundableEth(account);
require(refundAmt > 0, "Nothing to refund");
refundedEth[account] = refundedEth[account].add(refundAmt);
account.transfer(refundAmt);
}
function updateHardcap(uint valueWei) external onlyOwner {
hardcap = valueWei;
}
function updateMaxBuy(uint valueWei) external onlyOwner {
maxBuyPerAddress = valueWei;
}
function updateEthBP(uint _uniswapEthBP, uint _lidEthBP) external onlyOwner {
uniswapEthBP = _uniswapEthBP;
lidEthBP = _lidEthBP;
}
function deposit(address payable referrer) public payable nonReentrant whenNotPaused {
require(timer.isStarted(), "Presale not yet started.");
require(now >= access.getAccessTime(msg.sender, timer.startTime()), "Time must be at least access time.");
require(msg.sender != referrer, "Sender cannot be referrer.");
require(address(this).balance.sub(msg.value) <= hardcap, "Cannot deposit more than hardcap.");
require(!hasSentToUniswap, "Presale Ended, Uniswap has been called.");
uint endTime = timer.endTime();
require(!(now > endTime && endTime != 0), "Presale Ended, time over limit.");
require(
redeemer.accountDeposits(msg.sender).add(msg.value) <= maxBuyPerAddress,
"Deposit exceeds max buy per address."
);
bool _isRefunding = timer.updateRefunding();
if(_isRefunding) {
_startRefund();
return;
}
uint depositEther = msg.value;
uint excess = 0;
//Refund eth in case final purchase needed to end sale without dust errors
if (address(this).balance > hardcap) {
excess = address(this).balance.sub(hardcap);
depositEther = depositEther.sub(excess);
}
redeemer.setDeposit(msg.sender, depositEther);
if (excess != 0) {
msg.sender.transfer(excess);
}
}
function getRefundableEth(address account) public view returns (uint) {
if (!isRefunding) return 0;
return redeemer.accountDeposits(account)
.sub(refundedEth[account]);
}
function isPresaleEnded() public view returns (bool) {
uint endTime = timer.endTime();
if (hasSentToUniswap) return true;
return (
(address(this).balance >= hardcap) ||
(timer.isStarted() && (now > endTime && endTime != 0))
);
}
function _startRefund() internal {
//TODO: Automatically start refund after timer is passed for softcap reach
pause();
isRefunding = true;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"claimRefund","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":[{"internalType":"address","name":"account","type":"address"}],"name":"getRefundableEth","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":[],"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":false,"inputs":[{"internalType":"uint256","name":"_maxBuyPerAddress","type":"uint256"},{"internalType":"uint256","name":"_uniswapEthBP","type":"uint256"},{"internalType":"uint256","name":"_lidEthBP","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 LidSimplifiedPresaleAccess","name":"_access","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":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":true,"inputs":[],"name":"isRefunding","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":"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":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"recoverTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","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":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"refundedEth","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":[],"name":"startRefund","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":false,"inputs":[{"internalType":"uint256","name":"_uniswapEthBP","type":"uint256"},{"internalType":"uint256","name":"_lidEthBP","type":"uint256"}],"name":"updateEthBP","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"valueWei","type":"uint256"}],"name":"updateHardcap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"valueWei","type":"uint256"}],"name":"updateMaxBuy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526138af806100136000396000f3fe6080604052600436106102755760003560e060020a900480638129fc1c11610153578063bed68374116100c5578063d7ca81661161007e578063d7ca8166146108a2578063e05ba89a146108b7578063e668d6d8146108cc578063f2fde38b146108f6578063f340fa0114610929578063f562e7361461094f57610275565b8063bed683741461076b578063bffa55d514610780578063c4d66de8146107b3578063c79ce30d146107e6578063cec297a014610867578063d0e30db01461089a57610275565b806393daed4c1161011757806393daed4c146106b1578063974499da146106e45780639d6fb02014610717578063adf4a1441461072c578063b071cbe614610741578063be040fb01461075657610275565b80638129fc1c1461062a57806382dc1ec41461063f5780638456cb59146106725780638da5cb5b146106875780638f32d59b1461069c57610275565b806358881304116101ec578063715018a6116101b0578063715018a61461057357806376c80776146105885780637b31a859146105c15780637b6f299c146105eb5780637decf27f146106005780637e1c0c091461061557610275565b806358881304146104f55780635c975abb1461051f57806360ab5852146105345780636a73c404146105495780636ef8d66d1461055e57610275565b80633c4eb4de1161023e5780633c4eb4de146103645780633f4ba83a1461039457806341f059fa146103a957806344cbe5de1461048457806346fbf68e146104995780634c17989a146104e057610275565b8062c0f9161461027a57806302249d9b146102c05780630655e400146102e757806306e95096146102fc57806316114acd1461032f575b600080fd5b34801561028657600080fd5b506102a46004803603602081101561029d57600080fd5b5035610964565b60408051600160a060020a039092168252519081900360200190f35b3480156102cc57600080fd5b506102d561098c565b60408051918252519081900360200190f35b3480156102f357600080fd5b506102d5610993565b34801561030857600080fd5b506102d56004803603602081101561031f57600080fd5b5035600160a060020a031661099a565b34801561033b57600080fd5b506103626004803603602081101561035257600080fd5b5035600160a060020a03166109ad565b005b34801561037057600080fd5b506103626004803603604081101561038757600080fd5b5080359060200135610b68565b3480156103a057600080fd5b50610362610bbf565b3480156103b557600080fd5b50610362600480360360808110156103cc57600080fd5b8135916020810135918101906060810160408201356401000000008111156103f357600080fd5b82018360208201111561040557600080fd5b8035906020019184602083028401116401000000008311171561042757600080fd5b91939092909160208101903564010000000081111561044557600080fd5b82018360208201111561045757600080fd5b8035906020019184602083028401116401000000008311171561047957600080fd5b509092509050610cb7565b34801561049057600080fd5b50610362610ef1565b3480156104a557600080fd5b506104cc600480360360208110156104bc57600080fd5b5035600160a060020a03166112c6565b604080519115158252519081900360200190f35b3480156104ec57600080fd5b506102d56112e1565b34801561050157600080fd5b506103626004803603602081101561051857600080fd5b50356112e8565b34801561052b57600080fd5b506104cc611337565b34801561054057600080fd5b50610362611341565b34801561055557600080fd5b506102d5611737565b34801561056a57600080fd5b5061036261173d565b34801561057f57600080fd5b5061036261174f565b34801561059457600080fd5b506102d5600480360360408110156105ab57600080fd5b50600160a060020a0381351690602001356117f0565b3480156105cd57600080fd5b50610362600480360360208110156105e457600080fd5b503561191d565b3480156105f757600080fd5b506102d561196d565b34801561060c57600080fd5b506104cc611974565b34801561062157600080fd5b506102d5611ab5565b34801561063657600080fd5b50610362611abc565b34801561064b57600080fd5b506103626004803603602081101561066257600080fd5b5035600160a060020a0316611b65565b34801561067e57600080fd5b50610362611bb7565b34801561069357600080fd5b506102a4611c7f565b3480156106a857600080fd5b506104cc611c8e565b3480156106bd57600080fd5b506102d5600480360360208110156106d457600080fd5b5035600160a060020a0316611cb4565b3480156106f057600080fd5b506102d56004803603602081101561070757600080fd5b5035600160a060020a0316611cc7565b34801561072357600080fd5b506104cc611d94565b34801561073857600080fd5b50610362611d9e565b34801561074d57600080fd5b506102d5611df0565b34801561076257600080fd5b50610362611df7565b34801561077757600080fd5b506104cc61214e565b34801561078c57600080fd5b50610362600480360360208110156107a357600080fd5b5035600160a060020a0316612158565b3480156107bf57600080fd5b50610362600480360360208110156107d657600080fd5b5035600160a060020a03166122e4565b3480156107f257600080fd5b50610362600480360361016081101561080a57600080fd5b50803590602081013590604081013590606081013590600160a060020a03608082013581169160a081013582169160c082013581169160e0810135821691610100820135811691610120810135821691610140909101351661239d565b34801561087357600080fd5b506102d56004803603602081101561088a57600080fd5b5035600160a060020a0316612692565b6103626126a5565b3480156108ae57600080fd5b506102d56126f8565b3480156108c357600080fd5b506102d56126ff565b3480156108d857600080fd5b506102d5600480360360208110156108ef57600080fd5b5035612706565b34801561090257600080fd5b506103626004803603602081101561091957600080fd5b5035600160a060020a0316612725565b6103626004803603602081101561093f57600080fd5b5035600160a060020a0316612778565b34801561095b57600080fd5b506104cc612ea9565b610104818154811061097257fe5b600091825260209091200154600160a060020a0316905081565b61010a5481565b6101015481565b6101116020526000908152604090205481565b6109b5611c8e565b6109f7576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b6101145460ff16610a52576040805160e560020a62461bcd02815260206004820152601260248201527f526566756e6473206e6f74206163746976650000000000000000000000000000604482015290519081900360640190fd5b61010b54604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a039092169163a9059cbb91849184916370a08231916024808301926020929190829003018186803b158015610ac057600080fd5b505afa158015610ad4573d6000803e3d6000fd5b505050506040513d6020811015610aea57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610b3957600080fd5b505af1158015610b4d573d6000803e3d6000fd5b505050506040513d6020811015610b6357600080fd5b505050565b610b70611c8e565b610bb2576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b6101009190915561010155565b610bcf610bca612eb8565b6112c6565b610c0d5760405160e560020a62461bcd02815260040180806020018281038252603081526020018061362e6030913960400191505060405180910390fd5b60cc5460ff16610c67576040805160e560020a62461bcd02815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60cc805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610c9a612eb8565b60408051600160a060020a039092168252519081900360200190a1565b610cbf611c8e565b610d01576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b60cc5460ff1615610d4a576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b828114610d8b5760405160e560020a62461bcd0281526004018080602001828103825260368152602001806137e46036913960400191505060405180910390fd5b610d9861010460006135a8565b610da561010560006135a8565b61010286905561010385905560005b83811015610e1b57610104858583818110610dcb57fe5b8354600181810186556000958652602095869020909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0396909302949094013594909416179091555001610db4565b506000610e376101035461010254612ebc90919063ffffffff16565b905060005b82811015610ea457610105848483818110610e5357fe5b83546001810185556000948552602094859020919094029290920135919092015550610e9a848483818110610e8457fe5b9050602002013583612ebc90919063ffffffff16565b9150600101610e3c565b508061271014610ee85760405160e560020a62461bcd0281526004018080602001828103825260388152602001806136cd6038913960400191505060405180910390fd5b50505050505050565b61010d60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610f4357600080fd5b505afa158015610f57573d6000803e3d6000fd5b505050506040513d6020811015610f6d57600080fd5b5051610fb1576040805160e560020a62461bcd028152602060048201526018602482015260008051602061383a833981519152604482015290519081900360640190fd5b610fb9611974565b61100d576040805160e560020a62461bcd02815260206004820152601a60248201527f50726573616c6520686173206e6f742079657420656e6465642e000000000000604482015290519081900360640190fd5b606680546001019081905560cc5460ff1615611061576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b3332146110a25760405160e560020a62461bcd02815260040180806020018281038252602a8152602001806135e0602a913960400191505060405180910390fd5b610104546110fa576040805160e560020a62461bcd02815260206004820152601960248201527f4d75737420686176652073657420746f6b656e20706f6f6c7300000000000000604482015290519081900360640190fd5b6101085460ff1615611156576040805160e560020a62461bcd02815260206004820152601c60248201527f48617320616c72656164792073656e7420746f20556e69737761702e00000000604482015290519081900360640190fd5b4261010955303161010a55610108805460ff19166001179055610102546101075460009161118a919063ffffffff612f2216565b905060006111a76101005461010a54612f2290919063ffffffff16565b61010c5461010b54604080517ff305d719000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101879052604481018790526064810185905261dead60848201524260a4820152905193945091169163f305d71991849160c480830192606092919082900301818588803b15801561123957600080fd5b505af115801561124d573d6000803e3d6000fd5b50505050506040513d606081101561126457600080fd5b5050606654831491506112c39050576040805160e560020a62461bcd02815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b50565b60006112d960998363ffffffff612f5316565b90505b919050565b6101005481565b6112f0611c8e565b611332576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b60ff55565b60cc5460ff165b90565b61010d60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561139357600080fd5b505afa1580156113a7573d6000803e3d6000fd5b505050506040513d60208110156113bd57600080fd5b5051611401576040805160e560020a62461bcd028152602060048201526018602482015260008051602061383a833981519152604482015290519081900360640190fd5b611409611974565b61145d576040805160e560020a62461bcd02815260206004820152601a60248201527f50726573616c6520686173206e6f742079657420656e6465642e000000000000604482015290519081900360640190fd5b60cc5460ff16156114a6576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b6101085460ff16611501576040805160e560020a62461bcd02815260206004820152601c60248201527f486173206e6f74207965742073656e7420746f20556e69737761702e00000000604482015290519081900360640190fd5b61010854610100900460ff1615611562576040805160e560020a62461bcd02815260206004820152601a60248201527f48617320616c72656164792069737375656420746f6b656e732e000000000000604482015290519081900360640190fd5b610108805461ff0019166101001790556101045460009061158a90600163ffffffff612fbd16565b905060005b8181101561168f5761010b546101048054600160a060020a039092169163a9059cbb9190849081106115bd57fe5b9060005260206000200160009054906101000a9004600160a060020a031661160961010585815481106115ec57fe5b906000526020600020015461010754612f2290919063ffffffff16565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561165b57600080fd5b505af115801561166f573d6000803e3d6000fd5b505050506040513d602081101561168557600080fd5b505060010161158f565b5061010b546101048054600160a060020a039092169163a9059cbb9190849081106116b657fe5b9060005260206000200160009054906101000a9004600160a060020a03166116e561010585815481106115ec57fe5b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610b3957600080fd5b60ff5481565b61174d611748612eb8565b612fff565b565b611757611c8e565b611799576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b603354604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36033805473ffffffffffffffffffffffffffffffffffffffff19169055565b60006117fa611c8e565b61183c576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b60cc5460ff1615611885576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b6101085460ff166118e0576040805160e560020a62461bcd02815260206004820152601c60248201527f486173206e6f74207965742073656e7420746f20556e69737761702e00000000604482015290519081900360640190fd5b604051600160a060020a0384169083156108fc029084906000818181858888f19350505050158015611916573d6000803e3d6000fd5b5092915050565b611925611c8e565b611967576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b61010655565b6101025481565b60008061010d60009054906101000a9004600160a060020a0316600160a060020a0316633197cbb66040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156119c957600080fd5b505afa1580156119dd573d6000803e3d6000fd5b505050506040513d60208110156119f357600080fd5b50516101085490915060ff1615611a0e57600191505061133e565b610106543031101580611aaf575061010d60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611a6e57600080fd5b505afa158015611a82573d6000803e3d6000fd5b505050506040513d6020811015611a9857600080fd5b50518015611aaf57508042118015611aaf57508015155b91505090565b6101075481565b600054610100900460ff1680611ad55750611ad5613047565b80611ae3575060005460ff16155b611b215760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806137b6602e913960400191505060405180910390fd5b600054610100900460ff16158015611b4c576000805460ff1961ff0019909116610100171660011790555b600160665580156112c3576000805461ff001916905550565b611b70610bca612eb8565b611bae5760405160e560020a62461bcd02815260040180806020018281038252603081526020018061362e6030913960400191505060405180910390fd5b6112c38161304d565b611bc2610bca612eb8565b611c005760405160e560020a62461bcd02815260040180806020018281038252603081526020018061362e6030913960400191505060405180910390fd5b60cc5460ff1615611c49576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b60cc805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c9a612eb8565b603354600160a060020a031690565b603354600090600160a060020a0316611ca5612eb8565b600160a060020a031614905090565b6101136020526000908152604090205481565b6101145460009060ff16611cdd575060006112dc565b600160a060020a03808316600081815261011360209081526040918290205461010e5483517f835dada0000000000000000000000000000000000000000000000000000000008152600481019590955292516112d9959194939091169263835dada0926024808301939192829003018186803b158015611d5c57600080fd5b505afa158015611d70573d6000803e3d6000fd5b505050506040513d6020811015611d8657600080fd5b50519063ffffffff612fbd16565b6101145460ff1681565b611da6611c8e565b611de8576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b61174d613095565b6101065481565b61010d60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611e4957600080fd5b505afa158015611e5d573d6000803e3d6000fd5b505050506040513d6020811015611e7357600080fd5b5051611eb7576040805160e560020a62461bcd028152602060048201526018602482015260008051602061383a833981519152604482015290519081900360640190fd5b611ebf611974565b611f13576040805160e560020a62461bcd02815260206004820152601a60248201527f50726573616c6520686173206e6f742079657420656e6465642e000000000000604482015290519081900360640190fd5b60cc5460ff1615611f5c576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b6101085460ff16611fa15760405160e560020a62461bcd02815260040180806020018281038252602d815260200180613747602d913960400191505060405180910390fd5b61010e54610109546101035461010754600093600160a060020a03169263c6db01ad923392611fd59163ffffffff612f2216565b6040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060206040518083038186803b15801561202c57600080fd5b505afa158015612040573d6000803e3d6000fd5b505050506040513d602081101561205657600080fd5b505161010e54604080517f2fab59ed000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051929350600160a060020a0390911691632fab59ed9160448082019260009290919082900301818387803b1580156120c857600080fd5b505af11580156120dc573d6000803e3d6000fd5b505061010b54604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a03909216935063a9059cbb92506044808201926020929091908290030181600087803b158015610b3957600080fd5b6101085460ff1681565b60cc5460ff166121b2576040805160e560020a62461bcd02815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b6101145460ff1661220d576040805160e560020a62461bcd02815260206004820152601260248201527f526566756e6473206e6f74206163746976650000000000000000000000000000604482015290519081900360640190fd5b600061221882611cc7565b905060008111612272576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7468696e6720746f20726566756e64000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382166000908152610113602052604090205461229c908263ffffffff612ebc16565b600160a060020a03831660008181526101136020526040808220939093559151909183156108fc02918491818181858888f19350505050158015610b63573d6000803e3d6000fd5b600054610100900460ff16806122fd57506122fd613047565b8061230b575060005460ff16155b6123495760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806137b6602e913960400191505060405180910390fd5b600054610100900460ff16158015612374576000805460ff1961ff0019909116610100171660011790555b61237d826130ad565b60cc805460ff191690558015612399576000805461ff00191690555b5050565b600054610100900460ff16806123b657506123b6613047565b806123c4575060005460ff16155b6124025760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806137b6602e913960400191505060405180910390fd5b600054610100900460ff1615801561242d576000805460ff1961ff0019909116610100171660011790555b61243633613168565b61243f336122e4565b612447611abc565b61010b805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03878116919091179283905561010d805483168b831617905561010e805483168a831617905561010f805483168983161790556101108054831686831617905560ff8f90556101008e90556101018d90556101068c905561010c805490921686821617909155604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905192909116916318160ddd91600481810192602092909190829003018186803b15801561252657600080fd5b505afa15801561253a573d6000803e3d6000fd5b505050506040513d602081101561255057600080fd5b50516101075561010b5461010c54604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a039384169363095ea7b393169184916318160ddd91600480820192602092909190829003018186803b1580156125c357600080fd5b505afa1580156125d7573d6000803e3d6000fd5b505050506040513d60208110156125ed57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561263c57600080fd5b505af1158015612650573d6000803e3d6000fd5b505050506040513d602081101561266657600080fd5b50612672905088613269565b8015612684576000805461ff00191690555b505050505050505050505050565b6101126020526000908152604090205481565b60cc5460ff16156126ee576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b61174d6000612778565b6101095481565b6101035481565b610105818154811061271457fe5b600091825260209091200154905081565b61272d611c8e565b61276f576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b6112c381613269565b606680546001019081905560cc5460ff16156127cc576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b61010d60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561281e57600080fd5b505afa158015612832573d6000803e3d6000fd5b505050506040513d602081101561284857600080fd5b505161288c576040805160e560020a62461bcd028152602060048201526018602482015260008051602061383a833981519152604482015290519081900360640190fd5b61010f5461010d54604080517f78e979250000000000000000000000000000000000000000000000000000000081529051600160a060020a039384169363fa04fcfb9333939116916378e9792591600480820192602092909190829003018186803b1580156128fa57600080fd5b505afa15801561290e573d6000803e3d6000fd5b505050506040513d602081101561292457600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a0390931660048401526024830191909152516044808301926020929190829003018186803b15801561297157600080fd5b505afa158015612985573d6000803e3d6000fd5b505050506040513d602081101561299b57600080fd5b50514210156129de5760405160e560020a62461bcd0281526004018080602001828103825260228152602001806136ab6022913960400191505060405180910390fd5b33600160a060020a0383161415612a3f576040805160e560020a62461bcd02815260206004820152601a60248201527f53656e6465722063616e6e6f742062652072656665727265722e000000000000604482015290519081900360640190fd5b61010654612a5430313463ffffffff612fbd16565b1115612a945760405160e560020a62461bcd02815260040180806020018281038252602181526020018061385a6021913960400191505060405180910390fd5b6101085460ff1615612ada5760405160e560020a62461bcd0281526004018080602001828103825260278152602001806136846027913960400191505060405180910390fd5b61010d54604080517f3197cbb60000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691633197cbb6916004808301926020929190829003018186803b158015612b3957600080fd5b505afa158015612b4d573d6000803e3d6000fd5b505050506040513d6020811015612b6357600080fd5b505190504281108015612b7557508015155b15612bca576040805160e560020a62461bcd02815260206004820152601f60248201527f50726573616c6520456e6465642c2074696d65206f766572206c696d69742e00604482015290519081900360640190fd5b60ff5461010e54604080517f835dada00000000000000000000000000000000000000000000000000000000081523360048201529051612c70923492600160a060020a039091169163835dada091602480820192602092909190829003018186803b158015612c3857600080fd5b505afa158015612c4c573d6000803e3d6000fd5b505050506040513d6020811015612c6257600080fd5b50519063ffffffff612ebc16565b1115612cb05760405160e560020a62461bcd02815260040180806020018281038252602481526020018061360a6024913960400191505060405180910390fd5b61010d54604080517f7192cb550000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691637192cb5591600480830192602092919082900301818787803b158015612d1057600080fd5b505af1158015612d24573d6000803e3d6000fd5b505050506040513d6020811015612d3a57600080fd5b505190508015612d5357612d4c613095565b5050612e50565b61010654349060009030311115612d8f5761010654612d7a9030319063ffffffff612fbd16565b9050612d8c828263ffffffff612fbd16565b91505b61010e54604080517fc6b21b02000000000000000000000000000000000000000000000000000000008152336004820152602481018590529051600160a060020a039092169163c6b21b029160448082019260009290919082900301818387803b158015612dfc57600080fd5b505af1158015612e10573d6000803e3d6000fd5b5050505080600014612e4b57604051339082156108fc029083906000818181858888f19350505050158015612e49573d6000803e3d6000fd5b505b505050505b6066548114612399576040805160e560020a62461bcd02815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b61010854610100900460ff1681565b3390565b600082820183811015612f19576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600082612f3157506000612f1c565b612f19612710612f47858563ffffffff61331a16565b9063ffffffff61337616565b6000600160a060020a038216612f9d5760405160e560020a62461bcd0281526004018080602001828103825260228152602001806137946022913960400191505060405180910390fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6000612f1983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506133b8565b61301060998263ffffffff61345216565b604051600160a060020a038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b303b1590565b61305e60998263ffffffff6134bc16565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b61309d611bb7565b610114805460ff19166001179055565b600054610100900460ff16806130c657506130c6613047565b806130d4575060005460ff16155b6131125760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806137b6602e913960400191505060405180910390fd5b600054610100900460ff1615801561313d576000805460ff1961ff0019909116610100171660011790555b613146826112c6565b613153576131538261304d565b8015612399576000805461ff00191690555050565b600054610100900460ff16806131815750613181613047565b8061318f575060005460ff16155b6131cd5760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806137b6602e913960400191505060405180910390fd5b600054610100900460ff161580156131f8576000805460ff1961ff0019909116610100171660011790555b6033805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384811691909117918290556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38015612399576000805461ff00191690555050565b600160a060020a0381166132b15760405160e560020a62461bcd02815260040180806020018281038252602681526020018061365e6026913960400191505060405180910390fd5b603354604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36033805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008261332957506000612f1c565b8282028284828161333657fe5b0414612f195760405160e560020a62461bcd0281526004018080602001828103825260218152602001806137266021913960400191505060405180910390fd5b6000612f1983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613540565b6000818484111561344a5760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561340f5781810151838201526020016133f7565b50505050905090810190601f16801561343c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b61345c8282612f53565b61349a5760405160e560020a62461bcd0281526004018080602001828103825260218152602001806137056021913960400191505060405180910390fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b6134c68282612f53565b1561351b576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600081836135925760405160e560020a62461bcd02815260206004820181815283516024840152835190928392604490910191908501908083836000831561340f5781810151838201526020016133f7565b50600083858161359e57fe5b0495945050505050565b50805460008255906000526020600020908101906112c3919061133e91905b808211156135db57600081556001016135c7565b509056fe53656e646572206d757374206265206f726967696e202d206e6f20636f6e74726163742063616c6c732e4465706f7369742065786365656473206d6178206275792070657220616464726573732e506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737350726573616c6520456e6465642c20556e697377617020686173206265656e2063616c6c65642e54696d65206d757374206265206174206c65617374206163636573732074696d652e4d75737420616c6c6f636174652065786163746c7920313030252028313030303020425029206f6620746f6b656e7320746f20706f6f6c73526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774d75737420686176652073656e7420746f20556e6973776170206265666f726520616e792072656465656d732e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644d75737420686176652065786163746c79206f6e6520746f6b656e506f6f6c2061646472657373657320666f7220656163682042502e5061757361626c653a207061757365640000000000000000000000000000000050726573616c65206e6f742079657420737461727465642e000000000000000043616e6e6f74206465706f736974206d6f7265207468616e20686172646361702ea265627a7a723158207f46f317372df8bb53f9611b707523778cb17d1827fef41f7357793335fd5bea64736f6c63430005100032
Deployed Bytecode
0x6080604052600436106102755760003560e060020a900480638129fc1c11610153578063bed68374116100c5578063d7ca81661161007e578063d7ca8166146108a2578063e05ba89a146108b7578063e668d6d8146108cc578063f2fde38b146108f6578063f340fa0114610929578063f562e7361461094f57610275565b8063bed683741461076b578063bffa55d514610780578063c4d66de8146107b3578063c79ce30d146107e6578063cec297a014610867578063d0e30db01461089a57610275565b806393daed4c1161011757806393daed4c146106b1578063974499da146106e45780639d6fb02014610717578063adf4a1441461072c578063b071cbe614610741578063be040fb01461075657610275565b80638129fc1c1461062a57806382dc1ec41461063f5780638456cb59146106725780638da5cb5b146106875780638f32d59b1461069c57610275565b806358881304116101ec578063715018a6116101b0578063715018a61461057357806376c80776146105885780637b31a859146105c15780637b6f299c146105eb5780637decf27f146106005780637e1c0c091461061557610275565b806358881304146104f55780635c975abb1461051f57806360ab5852146105345780636a73c404146105495780636ef8d66d1461055e57610275565b80633c4eb4de1161023e5780633c4eb4de146103645780633f4ba83a1461039457806341f059fa146103a957806344cbe5de1461048457806346fbf68e146104995780634c17989a146104e057610275565b8062c0f9161461027a57806302249d9b146102c05780630655e400146102e757806306e95096146102fc57806316114acd1461032f575b600080fd5b34801561028657600080fd5b506102a46004803603602081101561029d57600080fd5b5035610964565b60408051600160a060020a039092168252519081900360200190f35b3480156102cc57600080fd5b506102d561098c565b60408051918252519081900360200190f35b3480156102f357600080fd5b506102d5610993565b34801561030857600080fd5b506102d56004803603602081101561031f57600080fd5b5035600160a060020a031661099a565b34801561033b57600080fd5b506103626004803603602081101561035257600080fd5b5035600160a060020a03166109ad565b005b34801561037057600080fd5b506103626004803603604081101561038757600080fd5b5080359060200135610b68565b3480156103a057600080fd5b50610362610bbf565b3480156103b557600080fd5b50610362600480360360808110156103cc57600080fd5b8135916020810135918101906060810160408201356401000000008111156103f357600080fd5b82018360208201111561040557600080fd5b8035906020019184602083028401116401000000008311171561042757600080fd5b91939092909160208101903564010000000081111561044557600080fd5b82018360208201111561045757600080fd5b8035906020019184602083028401116401000000008311171561047957600080fd5b509092509050610cb7565b34801561049057600080fd5b50610362610ef1565b3480156104a557600080fd5b506104cc600480360360208110156104bc57600080fd5b5035600160a060020a03166112c6565b604080519115158252519081900360200190f35b3480156104ec57600080fd5b506102d56112e1565b34801561050157600080fd5b506103626004803603602081101561051857600080fd5b50356112e8565b34801561052b57600080fd5b506104cc611337565b34801561054057600080fd5b50610362611341565b34801561055557600080fd5b506102d5611737565b34801561056a57600080fd5b5061036261173d565b34801561057f57600080fd5b5061036261174f565b34801561059457600080fd5b506102d5600480360360408110156105ab57600080fd5b50600160a060020a0381351690602001356117f0565b3480156105cd57600080fd5b50610362600480360360208110156105e457600080fd5b503561191d565b3480156105f757600080fd5b506102d561196d565b34801561060c57600080fd5b506104cc611974565b34801561062157600080fd5b506102d5611ab5565b34801561063657600080fd5b50610362611abc565b34801561064b57600080fd5b506103626004803603602081101561066257600080fd5b5035600160a060020a0316611b65565b34801561067e57600080fd5b50610362611bb7565b34801561069357600080fd5b506102a4611c7f565b3480156106a857600080fd5b506104cc611c8e565b3480156106bd57600080fd5b506102d5600480360360208110156106d457600080fd5b5035600160a060020a0316611cb4565b3480156106f057600080fd5b506102d56004803603602081101561070757600080fd5b5035600160a060020a0316611cc7565b34801561072357600080fd5b506104cc611d94565b34801561073857600080fd5b50610362611d9e565b34801561074d57600080fd5b506102d5611df0565b34801561076257600080fd5b50610362611df7565b34801561077757600080fd5b506104cc61214e565b34801561078c57600080fd5b50610362600480360360208110156107a357600080fd5b5035600160a060020a0316612158565b3480156107bf57600080fd5b50610362600480360360208110156107d657600080fd5b5035600160a060020a03166122e4565b3480156107f257600080fd5b50610362600480360361016081101561080a57600080fd5b50803590602081013590604081013590606081013590600160a060020a03608082013581169160a081013582169160c082013581169160e0810135821691610100820135811691610120810135821691610140909101351661239d565b34801561087357600080fd5b506102d56004803603602081101561088a57600080fd5b5035600160a060020a0316612692565b6103626126a5565b3480156108ae57600080fd5b506102d56126f8565b3480156108c357600080fd5b506102d56126ff565b3480156108d857600080fd5b506102d5600480360360208110156108ef57600080fd5b5035612706565b34801561090257600080fd5b506103626004803603602081101561091957600080fd5b5035600160a060020a0316612725565b6103626004803603602081101561093f57600080fd5b5035600160a060020a0316612778565b34801561095b57600080fd5b506104cc612ea9565b610104818154811061097257fe5b600091825260209091200154600160a060020a0316905081565b61010a5481565b6101015481565b6101116020526000908152604090205481565b6109b5611c8e565b6109f7576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b6101145460ff16610a52576040805160e560020a62461bcd02815260206004820152601260248201527f526566756e6473206e6f74206163746976650000000000000000000000000000604482015290519081900360640190fd5b61010b54604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a039092169163a9059cbb91849184916370a08231916024808301926020929190829003018186803b158015610ac057600080fd5b505afa158015610ad4573d6000803e3d6000fd5b505050506040513d6020811015610aea57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610b3957600080fd5b505af1158015610b4d573d6000803e3d6000fd5b505050506040513d6020811015610b6357600080fd5b505050565b610b70611c8e565b610bb2576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b6101009190915561010155565b610bcf610bca612eb8565b6112c6565b610c0d5760405160e560020a62461bcd02815260040180806020018281038252603081526020018061362e6030913960400191505060405180910390fd5b60cc5460ff16610c67576040805160e560020a62461bcd02815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60cc805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610c9a612eb8565b60408051600160a060020a039092168252519081900360200190a1565b610cbf611c8e565b610d01576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b60cc5460ff1615610d4a576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b828114610d8b5760405160e560020a62461bcd0281526004018080602001828103825260368152602001806137e46036913960400191505060405180910390fd5b610d9861010460006135a8565b610da561010560006135a8565b61010286905561010385905560005b83811015610e1b57610104858583818110610dcb57fe5b8354600181810186556000958652602095869020909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0396909302949094013594909416179091555001610db4565b506000610e376101035461010254612ebc90919063ffffffff16565b905060005b82811015610ea457610105848483818110610e5357fe5b83546001810185556000948552602094859020919094029290920135919092015550610e9a848483818110610e8457fe5b9050602002013583612ebc90919063ffffffff16565b9150600101610e3c565b508061271014610ee85760405160e560020a62461bcd0281526004018080602001828103825260388152602001806136cd6038913960400191505060405180910390fd5b50505050505050565b61010d60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610f4357600080fd5b505afa158015610f57573d6000803e3d6000fd5b505050506040513d6020811015610f6d57600080fd5b5051610fb1576040805160e560020a62461bcd028152602060048201526018602482015260008051602061383a833981519152604482015290519081900360640190fd5b610fb9611974565b61100d576040805160e560020a62461bcd02815260206004820152601a60248201527f50726573616c6520686173206e6f742079657420656e6465642e000000000000604482015290519081900360640190fd5b606680546001019081905560cc5460ff1615611061576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b3332146110a25760405160e560020a62461bcd02815260040180806020018281038252602a8152602001806135e0602a913960400191505060405180910390fd5b610104546110fa576040805160e560020a62461bcd02815260206004820152601960248201527f4d75737420686176652073657420746f6b656e20706f6f6c7300000000000000604482015290519081900360640190fd5b6101085460ff1615611156576040805160e560020a62461bcd02815260206004820152601c60248201527f48617320616c72656164792073656e7420746f20556e69737761702e00000000604482015290519081900360640190fd5b4261010955303161010a55610108805460ff19166001179055610102546101075460009161118a919063ffffffff612f2216565b905060006111a76101005461010a54612f2290919063ffffffff16565b61010c5461010b54604080517ff305d719000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101879052604481018790526064810185905261dead60848201524260a4820152905193945091169163f305d71991849160c480830192606092919082900301818588803b15801561123957600080fd5b505af115801561124d573d6000803e3d6000fd5b50505050506040513d606081101561126457600080fd5b5050606654831491506112c39050576040805160e560020a62461bcd02815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b50565b60006112d960998363ffffffff612f5316565b90505b919050565b6101005481565b6112f0611c8e565b611332576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b60ff55565b60cc5460ff165b90565b61010d60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561139357600080fd5b505afa1580156113a7573d6000803e3d6000fd5b505050506040513d60208110156113bd57600080fd5b5051611401576040805160e560020a62461bcd028152602060048201526018602482015260008051602061383a833981519152604482015290519081900360640190fd5b611409611974565b61145d576040805160e560020a62461bcd02815260206004820152601a60248201527f50726573616c6520686173206e6f742079657420656e6465642e000000000000604482015290519081900360640190fd5b60cc5460ff16156114a6576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b6101085460ff16611501576040805160e560020a62461bcd02815260206004820152601c60248201527f486173206e6f74207965742073656e7420746f20556e69737761702e00000000604482015290519081900360640190fd5b61010854610100900460ff1615611562576040805160e560020a62461bcd02815260206004820152601a60248201527f48617320616c72656164792069737375656420746f6b656e732e000000000000604482015290519081900360640190fd5b610108805461ff0019166101001790556101045460009061158a90600163ffffffff612fbd16565b905060005b8181101561168f5761010b546101048054600160a060020a039092169163a9059cbb9190849081106115bd57fe5b9060005260206000200160009054906101000a9004600160a060020a031661160961010585815481106115ec57fe5b906000526020600020015461010754612f2290919063ffffffff16565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561165b57600080fd5b505af115801561166f573d6000803e3d6000fd5b505050506040513d602081101561168557600080fd5b505060010161158f565b5061010b546101048054600160a060020a039092169163a9059cbb9190849081106116b657fe5b9060005260206000200160009054906101000a9004600160a060020a03166116e561010585815481106115ec57fe5b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610b3957600080fd5b60ff5481565b61174d611748612eb8565b612fff565b565b611757611c8e565b611799576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b603354604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36033805473ffffffffffffffffffffffffffffffffffffffff19169055565b60006117fa611c8e565b61183c576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b60cc5460ff1615611885576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b6101085460ff166118e0576040805160e560020a62461bcd02815260206004820152601c60248201527f486173206e6f74207965742073656e7420746f20556e69737761702e00000000604482015290519081900360640190fd5b604051600160a060020a0384169083156108fc029084906000818181858888f19350505050158015611916573d6000803e3d6000fd5b5092915050565b611925611c8e565b611967576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b61010655565b6101025481565b60008061010d60009054906101000a9004600160a060020a0316600160a060020a0316633197cbb66040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156119c957600080fd5b505afa1580156119dd573d6000803e3d6000fd5b505050506040513d60208110156119f357600080fd5b50516101085490915060ff1615611a0e57600191505061133e565b610106543031101580611aaf575061010d60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611a6e57600080fd5b505afa158015611a82573d6000803e3d6000fd5b505050506040513d6020811015611a9857600080fd5b50518015611aaf57508042118015611aaf57508015155b91505090565b6101075481565b600054610100900460ff1680611ad55750611ad5613047565b80611ae3575060005460ff16155b611b215760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806137b6602e913960400191505060405180910390fd5b600054610100900460ff16158015611b4c576000805460ff1961ff0019909116610100171660011790555b600160665580156112c3576000805461ff001916905550565b611b70610bca612eb8565b611bae5760405160e560020a62461bcd02815260040180806020018281038252603081526020018061362e6030913960400191505060405180910390fd5b6112c38161304d565b611bc2610bca612eb8565b611c005760405160e560020a62461bcd02815260040180806020018281038252603081526020018061362e6030913960400191505060405180910390fd5b60cc5460ff1615611c49576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b60cc805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c9a612eb8565b603354600160a060020a031690565b603354600090600160a060020a0316611ca5612eb8565b600160a060020a031614905090565b6101136020526000908152604090205481565b6101145460009060ff16611cdd575060006112dc565b600160a060020a03808316600081815261011360209081526040918290205461010e5483517f835dada0000000000000000000000000000000000000000000000000000000008152600481019590955292516112d9959194939091169263835dada0926024808301939192829003018186803b158015611d5c57600080fd5b505afa158015611d70573d6000803e3d6000fd5b505050506040513d6020811015611d8657600080fd5b50519063ffffffff612fbd16565b6101145460ff1681565b611da6611c8e565b611de8576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b61174d613095565b6101065481565b61010d60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611e4957600080fd5b505afa158015611e5d573d6000803e3d6000fd5b505050506040513d6020811015611e7357600080fd5b5051611eb7576040805160e560020a62461bcd028152602060048201526018602482015260008051602061383a833981519152604482015290519081900360640190fd5b611ebf611974565b611f13576040805160e560020a62461bcd02815260206004820152601a60248201527f50726573616c6520686173206e6f742079657420656e6465642e000000000000604482015290519081900360640190fd5b60cc5460ff1615611f5c576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b6101085460ff16611fa15760405160e560020a62461bcd02815260040180806020018281038252602d815260200180613747602d913960400191505060405180910390fd5b61010e54610109546101035461010754600093600160a060020a03169263c6db01ad923392611fd59163ffffffff612f2216565b6040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060206040518083038186803b15801561202c57600080fd5b505afa158015612040573d6000803e3d6000fd5b505050506040513d602081101561205657600080fd5b505161010e54604080517f2fab59ed000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051929350600160a060020a0390911691632fab59ed9160448082019260009290919082900301818387803b1580156120c857600080fd5b505af11580156120dc573d6000803e3d6000fd5b505061010b54604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a03909216935063a9059cbb92506044808201926020929091908290030181600087803b158015610b3957600080fd5b6101085460ff1681565b60cc5460ff166121b2576040805160e560020a62461bcd02815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b6101145460ff1661220d576040805160e560020a62461bcd02815260206004820152601260248201527f526566756e6473206e6f74206163746976650000000000000000000000000000604482015290519081900360640190fd5b600061221882611cc7565b905060008111612272576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7468696e6720746f20726566756e64000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382166000908152610113602052604090205461229c908263ffffffff612ebc16565b600160a060020a03831660008181526101136020526040808220939093559151909183156108fc02918491818181858888f19350505050158015610b63573d6000803e3d6000fd5b600054610100900460ff16806122fd57506122fd613047565b8061230b575060005460ff16155b6123495760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806137b6602e913960400191505060405180910390fd5b600054610100900460ff16158015612374576000805460ff1961ff0019909116610100171660011790555b61237d826130ad565b60cc805460ff191690558015612399576000805461ff00191690555b5050565b600054610100900460ff16806123b657506123b6613047565b806123c4575060005460ff16155b6124025760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806137b6602e913960400191505060405180910390fd5b600054610100900460ff1615801561242d576000805460ff1961ff0019909116610100171660011790555b61243633613168565b61243f336122e4565b612447611abc565b61010b805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03878116919091179283905561010d805483168b831617905561010e805483168a831617905561010f805483168983161790556101108054831686831617905560ff8f90556101008e90556101018d90556101068c905561010c805490921686821617909155604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905192909116916318160ddd91600481810192602092909190829003018186803b15801561252657600080fd5b505afa15801561253a573d6000803e3d6000fd5b505050506040513d602081101561255057600080fd5b50516101075561010b5461010c54604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a039384169363095ea7b393169184916318160ddd91600480820192602092909190829003018186803b1580156125c357600080fd5b505afa1580156125d7573d6000803e3d6000fd5b505050506040513d60208110156125ed57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561263c57600080fd5b505af1158015612650573d6000803e3d6000fd5b505050506040513d602081101561266657600080fd5b50612672905088613269565b8015612684576000805461ff00191690555b505050505050505050505050565b6101126020526000908152604090205481565b60cc5460ff16156126ee576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b61174d6000612778565b6101095481565b6101035481565b610105818154811061271457fe5b600091825260209091200154905081565b61272d611c8e565b61276f576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613774833981519152604482015290519081900360640190fd5b6112c381613269565b606680546001019081905560cc5460ff16156127cc576040805160e560020a62461bcd028152602060048201526010602482015260008051602061381a833981519152604482015290519081900360640190fd5b61010d60009054906101000a9004600160a060020a0316600160a060020a031663544736e66040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561281e57600080fd5b505afa158015612832573d6000803e3d6000fd5b505050506040513d602081101561284857600080fd5b505161288c576040805160e560020a62461bcd028152602060048201526018602482015260008051602061383a833981519152604482015290519081900360640190fd5b61010f5461010d54604080517f78e979250000000000000000000000000000000000000000000000000000000081529051600160a060020a039384169363fa04fcfb9333939116916378e9792591600480820192602092909190829003018186803b1580156128fa57600080fd5b505afa15801561290e573d6000803e3d6000fd5b505050506040513d602081101561292457600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a0390931660048401526024830191909152516044808301926020929190829003018186803b15801561297157600080fd5b505afa158015612985573d6000803e3d6000fd5b505050506040513d602081101561299b57600080fd5b50514210156129de5760405160e560020a62461bcd0281526004018080602001828103825260228152602001806136ab6022913960400191505060405180910390fd5b33600160a060020a0383161415612a3f576040805160e560020a62461bcd02815260206004820152601a60248201527f53656e6465722063616e6e6f742062652072656665727265722e000000000000604482015290519081900360640190fd5b61010654612a5430313463ffffffff612fbd16565b1115612a945760405160e560020a62461bcd02815260040180806020018281038252602181526020018061385a6021913960400191505060405180910390fd5b6101085460ff1615612ada5760405160e560020a62461bcd0281526004018080602001828103825260278152602001806136846027913960400191505060405180910390fd5b61010d54604080517f3197cbb60000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691633197cbb6916004808301926020929190829003018186803b158015612b3957600080fd5b505afa158015612b4d573d6000803e3d6000fd5b505050506040513d6020811015612b6357600080fd5b505190504281108015612b7557508015155b15612bca576040805160e560020a62461bcd02815260206004820152601f60248201527f50726573616c6520456e6465642c2074696d65206f766572206c696d69742e00604482015290519081900360640190fd5b60ff5461010e54604080517f835dada00000000000000000000000000000000000000000000000000000000081523360048201529051612c70923492600160a060020a039091169163835dada091602480820192602092909190829003018186803b158015612c3857600080fd5b505afa158015612c4c573d6000803e3d6000fd5b505050506040513d6020811015612c6257600080fd5b50519063ffffffff612ebc16565b1115612cb05760405160e560020a62461bcd02815260040180806020018281038252602481526020018061360a6024913960400191505060405180910390fd5b61010d54604080517f7192cb550000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691637192cb5591600480830192602092919082900301818787803b158015612d1057600080fd5b505af1158015612d24573d6000803e3d6000fd5b505050506040513d6020811015612d3a57600080fd5b505190508015612d5357612d4c613095565b5050612e50565b61010654349060009030311115612d8f5761010654612d7a9030319063ffffffff612fbd16565b9050612d8c828263ffffffff612fbd16565b91505b61010e54604080517fc6b21b02000000000000000000000000000000000000000000000000000000008152336004820152602481018590529051600160a060020a039092169163c6b21b029160448082019260009290919082900301818387803b158015612dfc57600080fd5b505af1158015612e10573d6000803e3d6000fd5b5050505080600014612e4b57604051339082156108fc029083906000818181858888f19350505050158015612e49573d6000803e3d6000fd5b505b505050505b6066548114612399576040805160e560020a62461bcd02815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b61010854610100900460ff1681565b3390565b600082820183811015612f19576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600082612f3157506000612f1c565b612f19612710612f47858563ffffffff61331a16565b9063ffffffff61337616565b6000600160a060020a038216612f9d5760405160e560020a62461bcd0281526004018080602001828103825260228152602001806137946022913960400191505060405180910390fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6000612f1983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506133b8565b61301060998263ffffffff61345216565b604051600160a060020a038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b303b1590565b61305e60998263ffffffff6134bc16565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b61309d611bb7565b610114805460ff19166001179055565b600054610100900460ff16806130c657506130c6613047565b806130d4575060005460ff16155b6131125760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806137b6602e913960400191505060405180910390fd5b600054610100900460ff1615801561313d576000805460ff1961ff0019909116610100171660011790555b613146826112c6565b613153576131538261304d565b8015612399576000805461ff00191690555050565b600054610100900460ff16806131815750613181613047565b8061318f575060005460ff16155b6131cd5760405160e560020a62461bcd02815260040180806020018281038252602e8152602001806137b6602e913960400191505060405180910390fd5b600054610100900460ff161580156131f8576000805460ff1961ff0019909116610100171660011790555b6033805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384811691909117918290556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38015612399576000805461ff00191690555050565b600160a060020a0381166132b15760405160e560020a62461bcd02815260040180806020018281038252602681526020018061365e6026913960400191505060405180910390fd5b603354604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36033805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008261332957506000612f1c565b8282028284828161333657fe5b0414612f195760405160e560020a62461bcd0281526004018080602001828103825260218152602001806137266021913960400191505060405180910390fd5b6000612f1983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613540565b6000818484111561344a5760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561340f5781810151838201526020016133f7565b50505050905090810190601f16801561343c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b61345c8282612f53565b61349a5760405160e560020a62461bcd0281526004018080602001828103825260218152602001806137056021913960400191505060405180910390fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b6134c68282612f53565b1561351b576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600081836135925760405160e560020a62461bcd02815260206004820181815283516024840152835190928392604490910191908501908083836000831561340f5781810151838201526020016133f7565b50600083858161359e57fe5b0495945050505050565b50805460008255906000526020600020908101906112c3919061133e91905b808211156135db57600081556001016135c7565b509056fe53656e646572206d757374206265206f726967696e202d206e6f20636f6e74726163742063616c6c732e4465706f7369742065786365656473206d6178206275792070657220616464726573732e506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737350726573616c6520456e6465642c20556e697377617020686173206265656e2063616c6c65642e54696d65206d757374206265206174206c65617374206163636573732074696d652e4d75737420616c6c6f636174652065786163746c7920313030252028313030303020425029206f6620746f6b656e7320746f20706f6f6c73526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774d75737420686176652073656e7420746f20556e6973776170206265666f726520616e792072656465656d732e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644d75737420686176652065786163746c79206f6e6520746f6b656e506f6f6c2061646472657373657320666f7220656163682042502e5061757361626c653a207061757365640000000000000000000000000000000050726573616c65206e6f742079657420737461727465642e000000000000000043616e6e6f74206465706f736974206d6f7265207468616e20686172646361702ea265627a7a723158207f46f317372df8bb53f9611b707523778cb17d1827fef41f7357793335fd5bea64736f6c63430005100032
Deployed Bytecode Sourcemap
40381:8809:0:-;;;;;;;;;;-1:-1:-1;;;40381:8809:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40699:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40699:27:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40699:27:0;;:::i;:::-;;;;-1:-1:-1;;;;;40699:27:0;;;;;;;;;;;;;;40928:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40928:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;40604;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40604:20:0;;;:::i;41217:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41217:47:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41217:47:0;-1:-1:-1;;;;;41217:47:0;;:::i;46134:187::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46134:187:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46134:187:0;-1:-1:-1;;;;;46134:187:0;;:::i;:::-;;46890:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46890:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46890:154:0;;;;;;;:::i;15506:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15506:120:0;;;:::i;43002:962::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43002:962:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;43002:962:0;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;43002:962:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;43002: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;43002:962:0;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;43002:962:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;43002: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;43002:962:0;;-1:-1:-1;43002:962:0;-1:-1:-1;43002:962:0;:::i;43972:808::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43972:808:0;;;:::i;12947:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12947:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12947:109:0;-1:-1:-1;;;;;12947:109:0;;:::i;:::-;;;;;;;;;;;;;;;;;;40573:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40573:24:0;;;:::i;46780:102::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46780:102:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46780:102:0;;:::i;14713:78::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14713:78:0;;;:::i;44788:644::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44788:644:0;;;:::i;40536:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40536:28:0;;;:::i;13164:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13164:79:0;;;:::i;17353:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17353:140:0;;;:::i;45440:227::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45440:227:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;45440:227:0;;;;;;;;:::i;46678:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46678:94:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46678:94:0;;:::i;40633:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40633:26:0;;;:::i;48709:296::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48709:296:0;;;:::i;40794:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40794:23:0;;;:::i;18837:218::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18837:218:0;;;:::i;13064:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13064:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13064:92:0;-1:-1:-1;;;;;13064:92:0;;:::i;15293:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15293:118:0;;;:::i;16540:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16540:79:0;;;:::i;16906:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16906:94:0;;;:::i;41328:43::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41328:43:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41328:43:0;-1:-1:-1;;;;;41328:43:0;;:::i;48493:208::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48493:208:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48493:208:0;-1:-1:-1;;;;;48493:208:0;;:::i;41380:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41380:23:0;;;:::i;46055:75::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46055:75:0;;;:::i;40768:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40768:19:0;;;:::i;45675:372::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45675:372:0;;;:::i;40826:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40826:28:0;;;:::i;46329:341::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46329:341:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46329:341:0;-1:-1:-1;;;;;46329:341:0;;:::i;14482:131::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14482:131:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14482:131:0;-1:-1:-1;;;;;14482:131:0;;:::i;41779:1117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41779:1117:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;41779:1117:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41779:1117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41273:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41273:46:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41273:46:0;-1:-1:-1;;;;;41273:46:0;;:::i;42904:90::-;;;:::i;40897:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40897:24:0;;;:::i;40666:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40666:26:0;;;:::i;40733:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40733:26:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40733:26:0;;:::i;17648:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17648:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17648:109:0;-1:-1:-1;;;;;17648:109:0;;:::i;47052:1433::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47052:1433:0;-1:-1:-1;;;;;47052:1433:0;;:::i;40861:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40861:27:0;;;:::i;40699:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40699:27:0;;-1:-1:-1;40699:27:0;:::o;40928:20::-;;;;:::o;40604:::-;;;;:::o;41217:47::-;;;;;;;;;;;;;:::o;46134:187::-;16752:9;:7;:9::i;:::-;16744:54;;;;;-1:-1:-1;;;;;16744:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16744:54:0;;;;;;;;;;;;;;;46213:11;;;;46205:42;;;;;-1:-1:-1;;;;;46205:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;46257:5;;46282:30;;;;;;46306:4;46282:30;;;;;;-1:-1:-1;;;;;46257:5:0;;;;:14;;46272:9;;46257:5;;46282:15;;:30;;;;;;;;;;;;;;46257:5;46282:30;;;5:2:-1;;;;30:1;27;20:12;5:2;46282:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46282:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46282:30:0;46257:56;;;-1:-1:-1;;;46257:56:0;;;;;;-1:-1:-1;;;;;46257:56:0;;;;;;;;;;;;;;;;;;;;46282:30;;46257:56;;;;;;;-1:-1:-1;46257:56:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;46257:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46257:56:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;46134:187:0:o;46890:154::-;16752:9;:7;:9::i;:::-;16744:54;;;;;-1:-1:-1;;;;;16744:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16744:54:0;;;;;;;;;;;;;;;46977:12;:28;;;;47016:8;:20;46890:154::o;15506:120::-;12844:22;12853:12;:10;:12::i;:::-;12844:8;:22::i;:::-;12836:83;;;;-1:-1:-1;;;;;12836:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15149:7;;;;15141:40;;;;;-1:-1:-1;;;;;15141:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15565:7;:15;;-1:-1:-1;;15565:15:0;;;15596:22;15605:12;:10;:12::i;:::-;15596:22;;;-1:-1:-1;;;;;15596:22:0;;;;;;;;;;;;;;15506:120::o;43002:962::-;16752:9;:7;:9::i;:::-;16744:54;;;;;-1:-1:-1;;;;;16744:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16744:54:0;;;;;;;;;;;;;;;14950:7;;;;14949:8;14941:37;;;;;-1:-1:-1;;;;;14941:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14941:37:0;;;;;;;;;;;;;;;43227:42;;;43219:109;;;;-1:-1:-1;;;;;43219:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43339:17;43346:10;;43339:17;:::i;:::-;43367:19;43374:12;;43367:19;:::i;:::-;43397:14;:32;;;43440:14;:32;;;-1:-1:-1;43483:104:0;43500:22;;;43483:104;;;43544:10;43560:11;;43572:1;43560:14;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;43544:31:0;;;43560:14;43544:31;;;;;;;;;-1:-1:-1;;43544:31:0;-1:-1:-1;;;;;43560:14:0;;;;;;;;;;;;;43544:31;;;;-1:-1:-1;43524:3:0;43483:104;;;;43597:22;43622:34;43641:14;;43622;;:18;;:34;;;;:::i;:::-;43597:59;-1:-1:-1;43672:6:0;43667:184;43684:24;;;43667:184;;;43730:12;43748:13;;43762:1;43748:16;;;;;;;27:10:-1;;39:1;23:18;;45:23;;-1:-1;43730:35:0;;;43748:16;43730:35;;;;43748:16;;;;;;;;;43730:35;;;;;-1:-1:-1;43800:39:0;43822:13;;43836:1;43822:16;;;;;;;;;;;;;43800:17;:21;;:39;;;;:::i;:::-;43780:59;-1:-1:-1;43710:3:0;;43667:184;;;;43869:17;43890:5;43869:26;43861:95;;;;-1:-1:-1;;;;;43861:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14989:1;43002:962;;;;;;:::o;43972:808::-;41639:5;;;;;;;;;-1:-1:-1;;;;;41639:5:0;-1:-1:-1;;;;;41639:15:0;;:17;;;;;-1:-1:-1;;;41639:17:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41639:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41639:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41639:17:0;41631:54;;;;;-1:-1:-1;;;;;41631:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41631:54:0;;;;;;;;;;;;;;;41704:16;:14;:16::i;:::-;41696:55;;;;;-1:-1:-1;;;;;41696:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19474:13;:18;;19491:1;19474:18;;;;;14950:7;;;;14949:8;14941:37;;;;;-1:-1:-1;;;;;14941:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14941:37:0;;;;;;;;;;;;;;;44072:10;44086:9;44072:23;44064:78;;;;-1:-1:-1;;;;;44064:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44161:10;:17;44153:59;;;;;-1:-1:-1;;;;;44153:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44232:16;;;;44231:17;44223:58;;;;;-1:-1:-1;;;;;44223:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44307:3;44292:12;:18;44340:4;44332:21;44321:8;:32;44364:16;:23;;-1:-1:-1;;44364:23:0;44383:4;44364:23;;;44437:14;;44419:11;;-1:-1:-1;;44419:33:0;;:11;:33;:17;:33;:::i;:::-;44398:54;;44463:15;44481:28;44496:12;;44481:8;;:14;;:28;;;;:::i;:::-;44520:13;;44590:5;;44520:252;;;;;;-1:-1:-1;;;;;44590:5:0;;;44520:252;;;;;;;;;;;;;;;;;;;;;;44700:42;44520:252;;;;44758:3;44520:252;;;;;;44463:46;;-1:-1:-1;44520:13:0;;;:29;;44463:46;;44520:252;;;;;;;;;;;;;;44463:46;44520:13;:252;;;5:2:-1;;;;30:1;27;20:12;5:2;44520:252:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44520:252:0;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;19586:13:0;;19570:29;;;-1:-1:-1;19562:73:0;;-1:-1:-1;19562:73:0;;;;-1:-1:-1;;;;;19562:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41762:1;43972:808::o;12947:109::-;13003:4;13027:21;:8;13040:7;13027:21;:12;:21;:::i;:::-;13020:28;;12947:109;;;;:::o;40573:24::-;;;;:::o;46780:102::-;16752:9;:7;:9::i;:::-;16744:54;;;;;-1:-1:-1;;;;;16744:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16744:54:0;;;;;;;;;;;;;;;46847:16;:27;46780:102::o;14713:78::-;14776:7;;;;14713:78;;:::o;44788:644::-;41639:5;;;;;;;;;-1:-1:-1;;;;;41639:5:0;-1:-1:-1;;;;;41639:15:0;;:17;;;;;-1:-1:-1;;;41639:17:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41639:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41639:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41639:17:0;41631:54;;;;;-1:-1:-1;;;;;41631:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41631:54:0;;;;;;;;;;;;;;;41704:16;:14;:16::i;:::-;41696:55;;;;;-1:-1:-1;;;;;41696:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14950:7;;;;14949:8;14941:37;;;;;-1:-1:-1;;;;;14941:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14941:37:0;;;;;;;;;;;;;;;44873:16;;;;44865:57;;;;;-1:-1:-1;;;;;44865:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44942:15;;;;;;;44941:16;44933:55;;;;;-1:-1:-1;;;;;44933:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44999:15;:22;;-1:-1:-1;;44999:22:0;;;;;45044:10;:17;44999:22;;45044:24;;45017:4;45044:24;:21;:24;:::i;:::-;45032:36;-1:-1:-1;45084:6:0;45079:173;45100:4;45096:1;:8;45079:173;;;45126:5;;45159:10;:13;;-1:-1:-1;;;;;45126:5:0;;;;:14;;45159:10;45170:1;;45159:13;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45159:13:0;45191:34;45209:12;45222:1;45209:15;;;;;;;;;;;;;;;;45191:11;;:17;;:34;;;;:::i;:::-;45126:114;;;;;-1:-1:-1;;;45126:114:0;;;;;;;-1:-1:-1;;;;;45126:114:0;-1:-1:-1;;;;;45126:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45126:114:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45126:114:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;45106:3:0;;45079:173;;;-1:-1:-1;45316:5:0;;45345:10;:16;;-1:-1:-1;;;;;45316:5:0;;;;:14;;45345:10;45356:4;;45345:16;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45345:16:0;45376:37;45394:12;45407:4;45394:18;;;;;;;45376:37;45316:108;;;;;-1:-1:-1;;;45316:108:0;;;;;;;-1:-1:-1;;;;;45316:108:0;-1:-1:-1;;;;;45316:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;40536:28:0;;;;:::o;13164:79::-;13208:27;13222:12;:10;:12::i;:::-;13208:13;:27::i;:::-;13164:79::o;17353:140::-;16752:9;:7;:9::i;:::-;16744:54;;;;;-1:-1:-1;;;;;16744:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16744:54:0;;;;;;;;;;;;;;;17436:6;;17415:40;;17452:1;;-1:-1:-1;;;;;17436:6:0;;17415:40;;17452:1;;17415:40;17466:6;:19;;-1:-1:-1;;17466:19:0;;;17353:140::o;45440:227::-;45549:4;16752:9;:7;:9::i;:::-;16744:54;;;;;-1:-1:-1;;;;;16744:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16744:54:0;;;;;;;;;;;;;;;14950:7;;;;14949:8;14941:37;;;;;-1:-1:-1;;;;;14941:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14941:37:0;;;;;;;;;;;;;;;45574:16;;;;45566:57;;;;;-1:-1:-1;;;;;45566:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;45634:25;;-1:-1:-1;;;;;45634:17:0;;;:25;;;;;45652:6;;45634:25;;;;45652:6;45634:17;:25;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45634:25:0;45440:227;;;;:::o;46678:94::-;16752:9;:7;:9::i;:::-;16744:54;;;;;-1:-1:-1;;;;;16744:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16744:54:0;;;;;;;;;;;;;;;46746:7;:18;46678:94::o;40633:26::-;;;;:::o;48709:296::-;48756:4;48773:12;48789:5;;;;;;;;;-1:-1:-1;;;;;48789:5:0;-1:-1:-1;;;;;48789:13:0;;:15;;;;;-1:-1:-1;;;48789:15:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48789:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48789:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48789:15:0;48819:16;;48789:15;;-1:-1:-1;48819:16:0;;48815:33;;;48844:4;48837:11;;;;;48815:33;48907:7;;48890:4;48882:21;:32;;;48881:105;;;48933:5;;;;;;;;;-1:-1:-1;;;;;48933:5:0;-1:-1:-1;;;;;48933:15:0;;:17;;;;;-1:-1:-1;;;48933:17:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48933:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48933:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48933:17:0;:52;;;;;48961:7;48955:3;:13;:29;;;;-1:-1:-1;48972:12:0;;;48955:29;48859:138;;;48709:296;:::o;40794:23::-;;;;:::o;18837:218::-;9271:12;;;;;;;;:31;;;9287:15;:13;:15::i;:::-;9271:47;;;-1:-1:-1;9307:11:0;;;;9306:12;9271:47;9263:106;;;;-1:-1:-1;;;;;9263:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9378:19;9401:12;;;;;;9400:13;9420:83;;;;9449:12;:19;;-1:-1:-1;;;;9449:19:0;;;;;9477:18;9464:4;9477:18;;;9420:83;19046:1;19030:13;:17;9521:57;;;;9565:5;9550:20;;-1:-1:-1;;9550:20:0;;;18837:218;:::o;13064:92::-;12844:22;12853:12;:10;:12::i;12844:22::-;12836:83;;;;-1:-1:-1;;;;;12836:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13129:19;13140:7;13129:10;:19::i;15293:118::-;12844:22;12853:12;:10;:12::i;12844:22::-;12836:83;;;;-1:-1:-1;;;;;12836:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14950:7;;;;14949:8;14941:37;;;;;-1:-1:-1;;;;;14941:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14941:37:0;;;;;;;;;;;;;;;15353:7;:14;;-1:-1:-1;;15353:14:0;15363:4;15353:14;;;15383:20;15390:12;:10;:12::i;16540:79::-;16605:6;;-1:-1:-1;;;;;16605:6:0;16540:79;:::o;16906:94::-;16986:6;;16946:4;;-1:-1:-1;;;;;16986:6:0;16970:12;:10;:12::i;:::-;-1:-1:-1;;;;;16970:22:0;;16963:29;;16906:94;:::o;41328:43::-;;;;;;;;;;;;;:::o;48493:208::-;48579:11;;48557:4;;48579:11;;48574:26;;-1:-1:-1;48599:1:0;48592:8;;48574:26;-1:-1:-1;;;;;48672:20:0;;;;;;;:11;:20;;;;;;;;;;48620:8;;:33;;;;;;;;;;;;;;:73;;48672:20;;48620:8;;;;;:24;;:33;;;;;48672:20;;48620:33;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;48620:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48620:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48620:33:0;;:73;:51;:73;:::i;41380:23::-;;;;;;:::o;46055:75::-;16752:9;:7;:9::i;:::-;16744:54;;;;;-1:-1:-1;;;;;16744:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16744:54:0;;;;;;;;;;;;;;;46108:14;:12;:14::i;40768:19::-;;;;:::o;45675:372::-;41639:5;;;;;;;;;-1:-1:-1;;;;;41639:5:0;-1:-1:-1;;;;;41639:15:0;;:17;;;;;-1:-1:-1;;;41639:17:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41639:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41639:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41639:17:0;41631:54;;;;;-1:-1:-1;;;;;41631:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41631:54:0;;;;;;;;;;;;;;;41704:16;:14;:16::i;:::-;41696:55;;;;;-1:-1:-1;;;;;41696:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14950:7;;;;14949:8;14941:37;;;;;-1:-1:-1;;;;;14941:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14941:37:0;;;;;;;;;;;;;;;45755:16;;;;45747:74;;;;-1:-1:-1;;;;;45747:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45849:8;;45890:12;;45922:14;;45904:11;;45832:14;;-1:-1:-1;;;;;45849:8:0;;:28;;45878:10;;45904:33;;;:17;:33;:::i;:::-;45849:89;;;;;-1:-1:-1;;;45849:89:0;;;;;;;-1:-1:-1;;;;;45849:89:0;-1:-1:-1;;;;;45849:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45849:89:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45849:89:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45849:89:0;45949:8;;:42;;;;;;45969:10;45949:42;;;;;;;;;;;;45849:89;;-1:-1:-1;;;;;;45949:8:0;;;;:19;;:42;;;;;:8;;:42;;;;;;;;:8;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;45949:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;46002:5:0;;:37;;;;;;46017:10;46002:37;;;;;;;;;;;;-1:-1:-1;;;;;46002:5:0;;;;-1:-1:-1;46002:14:0;;-1:-1:-1;46002:37:0;;;;;;;;;;;;;;;:5;;:37;;;5:2:-1;;;;30:1;27;20:12;40826:28:0;;;;;;:::o;46329:341::-;15149:7;;;;15141:40;;;;;-1:-1:-1;;;;;15141:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;46414:11;;;;46406:42;;;;;-1:-1:-1;;;;;46406:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;46459:14;46476:25;46493:7;46476:16;:25::i;:::-;46459:42;;46532:1;46520:9;:13;46512:43;;;;;-1:-1:-1;;;;;46512:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46589:20:0;;;;;;:11;:20;;;;;;:35;;46614:9;46589:35;:24;:35;:::i;:::-;-1:-1:-1;;;;;46566:20:0;;;;;;:11;:20;;;;;;:58;;;;46635:27;;46566:20;;46635:27;;;;;46652:9;;46635:27;46566:20;46635:27;46652:9;46566:20;46635:27;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;14482:131:0;9271:12;;;;;;;;:31;;;9287:15;:13;:15::i;:::-;9271:47;;;-1:-1:-1;9307:11:0;;;;9306:12;9271:47;9263:106;;;;-1:-1:-1;;;;;9263:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9378:19;9401:12;;;;;;9400:13;9420:83;;;;9449:12;:19;;-1:-1:-1;;;;9449:19:0;;;;;9477:18;9464:4;9477:18;;;9420:83;14548:29;14570:6;14548:21;:29::i;:::-;14590:7;:15;;-1:-1:-1;;14590:15:0;;;9521:57;;;;9565:5;9550:20;;-1:-1:-1;;9550:20:0;;;9521:57;14482:131;;:::o;41779:1117::-;9271:12;;;;;;;;:31;;;9287:15;:13;:15::i;:::-;9271:47;;;-1:-1:-1;9307:11:0;;;;9306:12;9271:47;9263:106;;;;-1:-1:-1;;;;;9263:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9378:19;9401:12;;;;;;9400:13;9420:83;;;;9449:12;:19;;-1:-1:-1;;;;9449:19:0;;;;;9477:18;9464:4;9477:18;;;9420:83;42213:30;42232:10;42213:18;:30::i;:::-;42254:31;42274:10;42254:19;:31::i;:::-;42296:28;:26;:28::i;:::-;42337:5;:14;;-1:-1:-1;;42337:14:0;;;-1:-1:-1;;;;;42337:14:0;;;;;;;;;;;42362:5;:14;;;;;;;;;;42387:8;:20;;;;;;;;;;42418:6;:16;;;;;;;;;;42445:7;:18;;;;;;;;;;42476:16;:36;;;42337:14;42525:28;;;42564:8;:20;;;42597:7;:18;;;42628:13;:30;;;;;;;;;;;;42683:19;;;;;;;;:5;;;;;:17;;-1:-1:-1;42683:19:0;;;;;;;;;;;;;;:5;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;42683:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42683:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42683:19:0;42669:11;:33;42713:5;;42735:13;;42751:19;;;;;;;;-1:-1:-1;;;;;42713:5:0;;;;:13;;42735;;42713:5;;42751:17;;:19;;;;;42683;;42751;;;;;;;;42713:5;42751:19;;;5:2:-1;;;;30:1;27;20:12;5:2;42751:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42751:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42751:19:0;42713:58;;;-1:-1:-1;;;42713:58:0;;;;;;-1:-1:-1;;;;;42713:58:0;;;;;;;;;;;;;;;;;;;;42751:19;;42713:58;;;;;;;-1:-1:-1;42713:58:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;42713:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42713:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42863:25:0;;-1:-1:-1;42882:5:0;42863:18;:25::i;:::-;9525:14;9521:57;;;9565:5;9550:20;;-1:-1:-1;;9550:20:0;;;9521:57;41779:1117;;;;;;;;;;;;:::o;41273:46::-;;;;;;;;;;;;;:::o;42904:90::-;14950:7;;;;14949:8;14941:37;;;;;-1:-1:-1;;;;;14941:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14941:37:0;;;;;;;;;;;;;;;42965:21;42981:3;42965:7;:21::i;40897:24::-;;;;:::o;40666:26::-;;;;:::o;40733:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40733:26:0;:::o;17648:109::-;16752:9;:7;:9::i;:::-;16744:54;;;;;-1:-1:-1;;;;;16744:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16744:54:0;;;;;;;;;;;;;;;17721:28;17740:8;17721:18;:28::i;47052:1433::-;19474:13;:18;;19491:1;19474:18;;;;;14950:7;;;;14949:8;14941:37;;;;;-1:-1:-1;;;;;14941:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14941:37:0;;;;;;;;;;;;;;;47156:5;;;;;;;;;-1:-1:-1;;;;;47156:5:0;-1:-1:-1;;;;;47156:15:0;;:17;;;;;-1:-1:-1;;;47156:17:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47156:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47156:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47156:17:0;47148:54;;;;;-1:-1:-1;;;;;47148:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;47148:54:0;;;;;;;;;;;;;;;47228:6;;47261:5;;:17;;;;;;;;-1:-1:-1;;;;;47228:6:0;;;;:20;;47249:10;;47261:5;;;:15;;:17;;;;;;;;;;;;;;;:5;:17;;;5:2:-1;;;;30:1;27;20:12;5:2;47261:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47261:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47261:17:0;47228:51;;;-1:-1:-1;;;47228:51:0;;;;;;-1:-1:-1;;;;;47228:51:0;;;;;;;;;;;;;;;;;;;;47261:17;;47228:51;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;47228:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47228:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47228:51:0;47221:3;:58;;47213:105;;;;-1:-1:-1;;;;;47213:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47337:10;-1:-1:-1;;;;;47337:22:0;;;;47329:61;;;;;-1:-1:-1;;;;;47329:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;47449:7;;47409:36;47417:4;47409:21;47435:9;47409:36;:25;:36;:::i;:::-;:47;;47401:93;;;;-1:-1:-1;;;;;47401:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47514:16;;;;47513:17;47505:69;;;;-1:-1:-1;;;;;47505:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47600:5;;:15;;;;;;;;47585:12;;-1:-1:-1;;;;;47600:5:0;;:13;;:15;;;;;;;;;;;;;;:5;:15;;;5:2:-1;;;;30:1;27;20:12;5:2;47600:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47600:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47600:15:0;;-1:-1:-1;47636:3:0;:13;-1:-1:-1;47636:29:0;;;;-1:-1:-1;47653:12:0;;;47636:29;47634:32;47626:76;;;;;-1:-1:-1;;;;;47626:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;47790:16;;47735:8;;:36;;;;;;47760:10;47735:36;;;;;;:51;;47776:9;;-1:-1:-1;;;;;47735:8:0;;;;:24;;:36;;;;;;;;;;;;;;;:8;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;47735:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47735:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47735:36:0;;:51;:40;:51;:::i;:::-;:71;;47713:157;;;;-1:-1:-1;;;;;47713:157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47901:5;;:23;;;;;;;;47881:17;;-1:-1:-1;;;;;47901:5:0;;:21;;:23;;;;;;;;;;;;;;47881:17;47901:5;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;47901:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47901:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47901:23:0;;-1:-1:-1;47935:79:0;;;;47967:14;:12;:14::i;:::-;47996:7;;;;47935:79;48204:7;;48044:9;;48024:17;;48188:4;48180:21;:31;48176:161;;;48263:7;;48237:34;;48245:4;48237:21;;:34;:25;:34;:::i;:::-;48228:43;-1:-1:-1;48301:24:0;:12;48228:43;48301:24;:16;:24;:::i;:::-;48286:39;;48176:161;48349:8;;:45;;;;;;48369:10;48349:45;;;;;;;;;;;;-1:-1:-1;;;;;48349:8:0;;;;:19;;:45;;;;;:8;;:45;;;;;;;;:8;;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;48349:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48349:45:0;;;;48411:6;48421:1;48411:11;48407:71;;48439:27;;:10;;:27;;;;;48459:6;;48439:27;;;;48459:6;48439:10;:27;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48439:27:0;48407:71;14989:1;;;;;19586:13;;19570:12;:29;19562:73;;;;;-1:-1:-1;;;;;19562:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;40861:27;;;;;;;;;:::o;11093:98::-;11173:10;11093:98;:::o;3655:181::-;3713:7;3745:5;;;3769:6;;;;3761:46;;;;;-1:-1:-1;;;;;3761:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3827:1;-1:-1:-1;3655:181:0;;;;;:::o;23399:151::-;23456:4;23477:8;23473:22;;-1:-1:-1;23494:1:0;23487:8;;23473:22;23513:29;23385:5;23513:11;:3;23521:2;23513:11;:7;:11;:::i;:::-;:15;:29;:15;:29;:::i;12216:203::-;12288:4;-1:-1:-1;;;;;12313:21:0;;12305:68;;;;-1:-1:-1;;;;;12305:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12391:20:0;:11;:20;;;;;;;;;;;;;;;12216:203::o;4111:136::-;4169:7;4196:43;4200:1;4203;4196:43;;;;;;;;;;;;;;;;;:3;:43::i;13381:130::-;13441:24;:8;13457:7;13441:24;:15;:24;:::i;:::-;13481:22;;-1:-1:-1;;;;;13481:22:0;;;;;;;;13381:130;:::o;9672:508::-;10089:4;10135:17;10167:7;9672:508;:::o;13251:122::-;13308:21;:8;13321:7;13308:21;:12;:21;:::i;:::-;13345:20;;-1:-1:-1;;;;;13345:20:0;;;;;;;;13251:122;:::o;49013:172::-;49141:7;:5;:7::i;:::-;49159:11;:18;;-1:-1:-1;;49159:18:0;49173:4;49159:18;;;49013:172::o;12654:141::-;9271:12;;;;;;;;:31;;;9287:15;:13;:15::i;:::-;9271:47;;;-1:-1:-1;9307:11:0;;;;9306:12;9271:47;9263:106;;;;-1:-1:-1;;;;;9263:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9378:19;9401:12;;;;;;9400:13;9420:83;;;;9449:12;:19;;-1:-1:-1;;;;9449:19:0;;;;;9477:18;9464:4;9477:18;;;9420:83;12725:16;12734:6;12725:8;:16::i;:::-;12720:68;;12758:18;12769:6;12758:10;:18::i;:::-;9525:14;9521:57;;;9565:5;9550:20;;-1:-1:-1;;9550:20:0;;;12654:141;;:::o;16314:145::-;9271:12;;;;;;;;:31;;;9287:15;:13;:15::i;:::-;9271:47;;;-1:-1:-1;9307:11:0;;;;9306:12;9271:47;9263:106;;;;-1:-1:-1;;;;;9263:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9378:19;9401:12;;;;;;9400:13;9420:83;;;;9449:12;:19;;-1:-1:-1;;;;9449:19:0;;;;;9477:18;9464:4;9477:18;;;9420:83;16380:6;:15;;-1:-1:-1;;16380:15:0;-1:-1:-1;;;;;16380:15:0;;;;;;;;;;;16411:40;;16444:6;;;-1:-1:-1;;16411:40:0;;-1:-1:-1;;16411:40:0;9525:14;9521:57;;;9565:5;9550:20;;-1:-1:-1;;9550:20:0;;;16314:145;;:::o;17863:229::-;-1:-1:-1;;;;;17937:22:0;;17929:73;;;;-1:-1:-1;;;;;17929:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18039:6;;18018:38;;-1:-1:-1;;;;;18018:38:0;;;;18039:6;;18018:38;;18039:6;;18018:38;18067:6;:17;;-1:-1:-1;;18067:17:0;-1:-1:-1;;;;;18067:17:0;;;;;;;;;;17863:229::o;5027:471::-;5085:7;5330:6;5326:47;;-1:-1:-1;5360:1:0;5353:8;;5326:47;5397:5;;;5401:1;5397;:5;:1;5421:5;;;;;:10;5413:56;;;;-1:-1:-1;;;;;5413:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5966:132;6024:7;6051:39;6055:1;6058;6051:39;;;;;;;;;;;;;;;;;:3;:39::i;4584:192::-;4670:7;4706:12;4698:6;;;;4690:29;;;;-1:-1:-1;;;;;4690: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;4690:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4742:5:0;;;4584:192::o;11938:183::-;12018:18;12022:4;12028:7;12018:3;:18::i;:::-;12010:64;;;;-1:-1:-1;;;;;12010:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12085:20:0;12108:5;12085:20;;;;;;;;;;;:28;;-1:-1:-1;;12085:28:0;;;11938:183::o;11680:178::-;11758:18;11762:4;11768:7;11758:3;:18::i;:::-;11757:19;11749:63;;;;;-1:-1:-1;;;;;11749:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11823:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;11823:27:0;11846:4;11823:27;;;11680:178::o;6628:345::-;6714:7;6816:12;6809:5;6801:28;;;;-1:-1:-1;;;;;6801:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6801:28:0;;6840:9;6856:1;6852;:5;;;;;;;6628:345;-1:-1:-1;;;;;6628:345:0:o;40381:8809::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://7f46f317372df8bb53f9611b707523778cb17d1827fef41f7357793335fd5bea
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.