Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 127 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Zap In | 11211202 | 1344 days ago | IN | 0.05 ETH | 0.05215463 | ||||
Zap In | 11203480 | 1345 days ago | IN | 0.15 ETH | 0.02346958 | ||||
Zap In | 11188351 | 1347 days ago | IN | 0.96839182 ETH | 0.01633438 | ||||
Zap In | 11163066 | 1351 days ago | IN | 9.89500011 ETH | 0.01082694 | ||||
Zap In | 11156945 | 1352 days ago | IN | 1 ETH | 0.02472935 | ||||
Zap In | 11149780 | 1353 days ago | IN | 2 ETH | 0.00719483 | ||||
Zap In | 11144573 | 1354 days ago | IN | 0.2 ETH | 0.02027757 | ||||
Zap In | 11143682 | 1354 days ago | IN | 0.1 ETH | 0.01565678 | ||||
Zap In | 11142205 | 1354 days ago | IN | 0.25 ETH | 0.01357784 | ||||
Zap In | 11138886 | 1355 days ago | IN | 1.5 ETH | 0.01603427 | ||||
Zap In | 11137712 | 1355 days ago | IN | 0.75 ETH | 0.01532982 | ||||
Zap In | 11137070 | 1355 days ago | IN | 0.3 ETH | 0.00915988 | ||||
Zap In | 11136825 | 1355 days ago | IN | 6 ETH | 0.00947695 | ||||
Zap In | 11136820 | 1355 days ago | IN | 0.11435524 ETH | 0.00753728 | ||||
Zap In | 11136810 | 1355 days ago | IN | 1.089407 ETH | 0.00803027 | ||||
Zap In | 11136810 | 1355 days ago | IN | 0.25 ETH | 0.00891872 | ||||
Zap In | 11136772 | 1355 days ago | IN | 0.34314106 ETH | 0.00767737 | ||||
Zap In | 11136764 | 1355 days ago | IN | 0.32694395 ETH | 0.0073459 | ||||
Zap In | 11136763 | 1355 days ago | IN | 6 ETH | 0.01483761 | ||||
Zap In | 11136745 | 1355 days ago | IN | 6 ETH | 0.01528761 | ||||
Zap In | 11134730 | 1355 days ago | IN | 0.44870432 ETH | 0.01059947 | ||||
Zap In | 11134374 | 1356 days ago | IN | 0.05 ETH | 0.01233564 | ||||
Zap In | 11134048 | 1356 days ago | IN | 0.7 ETH | 0.01138724 | ||||
Zap In | 11133486 | 1356 days ago | IN | 26.78724367 ETH | 0.0521906 | ||||
Zap In | 11132982 | 1356 days ago | IN | 30 ETH | 0.05935044 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
11211202 | 1344 days ago | 0.045 ETH | ||||
11211202 | 1344 days ago | 0.005 ETH | ||||
11203480 | 1345 days ago | 0.135 ETH | ||||
11203480 | 1345 days ago | 0.015 ETH | ||||
11188351 | 1347 days ago | 0.89576243 ETH | ||||
11188351 | 1347 days ago | 0.04841959 ETH | ||||
11188351 | 1347 days ago | 0.02420979 ETH | ||||
11163066 | 1351 days ago | 9.1528751 ETH | ||||
11163066 | 1351 days ago | 0.49475 ETH | ||||
11163066 | 1351 days ago | 0.247375 ETH | ||||
11156945 | 1352 days ago | 0.925 ETH | ||||
11156945 | 1352 days ago | 0.05 ETH | ||||
11156945 | 1352 days ago | 0.025 ETH | ||||
11149780 | 1353 days ago | 1.85 ETH | ||||
11149780 | 1353 days ago | 0.1 ETH | ||||
11149780 | 1353 days ago | 0.05 ETH | ||||
11144573 | 1354 days ago | 0.185 ETH | ||||
11144573 | 1354 days ago | 0.01 ETH | ||||
11144573 | 1354 days ago | 0.005 ETH | ||||
11143682 | 1354 days ago | 0.09 ETH | ||||
11143682 | 1354 days ago | 0.01 ETH | ||||
11142205 | 1354 days ago | 0.225 ETH | ||||
11142205 | 1354 days ago | 0.025 ETH | ||||
11138886 | 1355 days ago | 1.3875 ETH | ||||
11138886 | 1355 days ago | 0.075 ETH |
Loading...
Loading
Contract Name:
ZapIn_711_V2
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-24 */ // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, 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; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.5.0; /** * @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); } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.5.5; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.5.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol pragma solidity ^0.5.0; /** * @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. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. * * _Since v2.5.0:_ this module is now much more gas efficient, given net gas * metering changes introduced in the Istanbul hardfork. */ contract ReentrancyGuard { bool private _notEntered; constructor () internal { // Storing an initial non-zero value makes deployment a bit more // expensive, but in exchange the refund on every call to nonReentrant // will be lower in amount. Since refunds are capped to a percetange of // the total transaction's gas, it is best to keep them low in cases // like this one, to increase the likelihood of the full refund coming // into effect. _notEntered = true; } /** * @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() { // On the first call to nonReentrant, _notEntered will be true require(_notEntered, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _notEntered = true; } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.5.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // 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; } } // File: @openzeppelin/contracts/ownership/Ownable.sol pragma solidity ^0.5.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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; } } // File: contracts/711/dependencies/IWETH.sol pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } // File: contracts/711/dependencies/uniswapv2/interfaces/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function migrator() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setMigrator(address) external; } // File: contracts/711/dependencies/uniswapv2/interfaces/IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: contracts/711/dependencies/uniswapv2/interfaces/IUniswapV2Router02.sol pragma solidity >=0.5.0; interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure 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); 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 removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: contracts/711/dependencies/IStakingRewards.sol pragma solidity ^0.5.0; interface IStakingRewards { // Views function lastTimeRewardApplicable() external view returns (uint256); function rewardPerToken() external view returns (uint256); function earned(address account) external view returns (uint256); function getRewardForDuration() external view returns (uint256); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function rewardsToken() external view returns (IERC20); function stakingToken() external view returns (IERC20); function rewardRate() external view returns (uint256); // Mutative function stake(uint256 amount) external; function stakeFor(address to, uint256 amount) external; function withdraw() external; function getReward() external; function exit() external; function notifyRewardAmount(uint256 reward) external; } // File: contracts/711/dependencies/IAgentRegistry.sol pragma solidity >=0.5.0; interface IAgentRegistry { function agents() external returns (uint256); function register(string calldata _nameString) external payable; function getAgentAddressById(uint256 _agentId) external view returns (address payable); function getAgentAddressByName(bytes32 _agentName) external view returns (address payable); function isAgent(address _agent) external view returns (bool); } // File: contracts/711/ADDRESSBOOK.sol pragma solidity ^0.5.0; contract ADDRESSBOOK { address constant public FEE_APPROVER = 0x6C70d504932AA318f8070De13F3c4Ab69A87953f; address payable constant public VAULT = 0xB1ff949285107B7b967c0d05886F2513488D0042; address constant public REWARDS_DISTRIBUTOR = 0xB3c39777142320F7C5329bF87287A707C77266e3; address constant public STAKING_CONTRACT = 0x29d44e1726e4368e5A7Abf4fbC481a874AebCf00; address constant public ZAP = 0x0797778B9110D03FF64fF25192e2a980Bf4523b8; address constant public TOKEN_ADDRESS_711 = 0x9d4709e7C38e7857636c342a37547E191125E028; address constant public AGENT_REGISTRY = 0x35C9Dbd51D926838cAc8eB33ebDbEA5e2930b247; address constant public UNISWAP_V2_PAIR_711_WETH = 0xF295b0fa1A89c8a06109fB2D2c860a96Fb39dca5; } // File: contracts/711/ZapIn_711_V2.sol // ███████╗░█████╗░██████╗░██████╗░███████╗██████╗░░░░███████╗██╗ // ╚════██║██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗░░░██╔════╝██║ // ░░███╔═╝███████║██████╔╝██████╔╝█████╗░░██████╔╝░░░█████╗░░██║ // ██╔══╝░░██╔══██║██╔═══╝░██╔═══╝░██╔══╝░░██╔══██╗░░░██╔══╝░░██║ // ███████╗██║░░██║██║░░░░░██║░░░░░███████╗██║░░██║██╗██║░░░░░██║ // ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░░░░╚══════╝╚═╝░░╚═╝╚═╝╚═╝░░░░░╚═╝ // Copyright (C) 2020 zapper, nodar, suhail, seb, sumit, apoorv // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // SPDX-License-Identifier: GPLv2 pragma solidity ^0.5.16; // import "@uniswap/lib/contracts/libraries/Babylonian.sol"; library Babylonian { function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } // else z = 0 } } contract ZapIn_711_V2 is ReentrancyGuard, Ownable, ADDRESSBOOK { using SafeMath for uint256; using Address for address; using SafeERC20 for IERC20; event AmountToAgent(address indexed from, address indexed agent, uint256 ethAmount); event AmountToVault(address indexed from, uint256 ethAmount); event AmountToInvest(address indexed from, uint256 ethAmount, uint256 lpBought); mapping (address => uint256) public referralRewards; bool public stopped = false; uint16 public goodwill; address payable public vault; address public stakingContract; IAgentRegistry public agentRegistry; IUniswapV2Router02 private constant uniswapRouter = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); IUniswapV2Factory private constant UniSwapV2FactoryAddress = IUniswapV2Factory( 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f ); uint256 private constant deadline = 0xf000000000000000000000000000000000000000000000000000000000000000; address private constant wethTokenAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address private constant ethTokenAddress = address(0); // only accepts ETH constructor() public { goodwill = 1000; vault = VAULT; stakingContract = STAKING_CONTRACT; agentRegistry = IAgentRegistry(AGENT_REGISTRY); } // circuit breaker modifiers modifier stopInEmergency { if (stopped) { revert("Temporarily Paused"); } else { _; } } // Zap in with referral id function ZapInWithId( address _staker, uint256 _minPoolTokens, uint256 _agentId ) public payable stopInEmergency returns (uint256) { //query agent address payable _agent = agentRegistry.getAgentAddressById(_agentId); ZapIn(_staker, _minPoolTokens, _agent); } // Zap in with referral name function ZapInWithName( address _staker, uint256 _minPoolTokens, bytes32 _agentName ) public payable stopInEmergency returns (uint256) { //query agent address payable _agent = agentRegistry.getAgentAddressByName(_agentName); ZapIn(_staker, _minPoolTokens, _agent); } /** @notice This function is used to single sided add liquidity to Uniswap V2 ETH/7-11 pair and stake @param _minPoolTokens Reverts if less tokens received than this @return Amount of stake amount */ function ZapIn( address _staker, uint256 _minPoolTokens, address payable _agent ) public payable nonReentrant stopInEmergency returns (uint256) { require(msg.value > 0, "Error: ETH not sent"); if(msg.sender == _agent || !(agentRegistry.isAgent(_agent))){ _agent = address(0); } // Default uint256 toVault = msg.value.mul(goodwill).div(10000); // 10% to vault uint256 toInvest = msg.value.sub(toVault); // 90% to swap // And if it is referred by an agent if(_agent != address(0)){ toVault = msg.value.mul(500).div(10000); // 5% to vault toInvest = msg.value.mul(9250).div(10000); // 92.5% to swap uint256 toAgent = msg.value.sub(toVault).sub(toInvest); // 2.5% to agent // Transfer to agnet _agent.transfer(toAgent); referralRewards[_agent] = referralRewards[_agent].add(toAgent); emit AmountToAgent(msg.sender, _agent, toAgent); } // Transfer to vault vault.transfer(toVault); emit AmountToVault(msg.sender, toVault); // Single sided add liquidity uint256 LPBought = _performZapIn( _staker, ethTokenAddress, TOKEN_ADDRESS_711, wethTokenAddress, toInvest ); emit AmountToInvest(msg.sender, toInvest, LPBought); require(LPBought >= _minPoolTokens, "ERR: High Slippage"); // Stake LP token IERC20(UNISWAP_V2_PAIR_711_WETH).safeApprove(stakingContract, LPBought); IStakingRewards(stakingContract).stakeFor(_staker, LPBought); return LPBought; } function _performZapIn( address _toWhomToIssue, address _FromTokenContractAddress, address _ToUnipoolToken0, address _ToUnipoolToken1, uint256 _amount ) internal returns (uint256) { address intermediate = _getIntermediate( _FromTokenContractAddress, _amount, _ToUnipoolToken0, _ToUnipoolToken1 ); // swap to intermediate uint256 interAmt = _token2Token( _FromTokenContractAddress, intermediate, _amount ); // divide to swap in amounts uint256 token0Bought; uint256 token1Bought; IUniswapV2Pair pair = IUniswapV2Pair( UniSwapV2FactoryAddress.getPair(_ToUnipoolToken0, _ToUnipoolToken1) ); (uint256 res0, uint256 res1, ) = pair.getReserves(); if (intermediate == _ToUnipoolToken0) { uint256 amountToSwap = calculateSwapInAmount(res0, interAmt); //if no reserve or a new pair is created if (amountToSwap <= 0) amountToSwap = interAmt.div(2); token1Bought = _token2Token( intermediate, _ToUnipoolToken1, amountToSwap ); token0Bought = interAmt.sub(amountToSwap); } else { uint256 amountToSwap = calculateSwapInAmount(res1, interAmt); //if no reserve or a new pair is created if (amountToSwap <= 0) amountToSwap = interAmt.div(2); token0Bought = _token2Token( intermediate, _ToUnipoolToken0, amountToSwap ); token1Bought = interAmt.sub(amountToSwap); } return _uniDeposit( _toWhomToIssue, _ToUnipoolToken0, _ToUnipoolToken1, token0Bought, token1Bought ); } function _uniDeposit( address _toWhomToIssue, address _ToUnipoolToken0, address _ToUnipoolToken1, uint256 token0Bought, uint256 token1Bought ) internal returns (uint256) { IERC20(_ToUnipoolToken0).safeIncreaseAllowance( address(uniswapRouter), token0Bought ); IERC20(_ToUnipoolToken1).safeIncreaseAllowance( address(uniswapRouter), token1Bought ); (uint256 amountA, uint256 amountB, uint256 LP) = uniswapRouter .addLiquidity( _ToUnipoolToken0, _ToUnipoolToken1, token0Bought, token1Bought, 1, 1, address(this), deadline ); //Returning Residue in token0, if any. if (token0Bought.sub(amountA) > 0) { IERC20(_ToUnipoolToken0).safeTransfer( _toWhomToIssue, token0Bought.sub(amountA) ); } //Returning Residue in token1, if any if (token1Bought.sub(amountB) > 0) { IERC20(_ToUnipoolToken1).safeTransfer( _toWhomToIssue, token1Bought.sub(amountB) ); } return LP; } function _getIntermediate( address _FromTokenContractAddress, uint256 _amount, address _ToUnipoolToken0, address _ToUnipoolToken1 ) internal view returns (address) { // set from to weth for eth input if (_FromTokenContractAddress == address(0)) { _FromTokenContractAddress = wethTokenAddress; } if (_FromTokenContractAddress == _ToUnipoolToken0) { return _ToUnipoolToken0; } else if (_FromTokenContractAddress == _ToUnipoolToken1) { return _ToUnipoolToken1; } else { IUniswapV2Pair pair = IUniswapV2Pair( UniSwapV2FactoryAddress.getPair( _ToUnipoolToken0, _ToUnipoolToken1 ) ); (uint256 res0, uint256 res1, ) = pair.getReserves(); uint256 ratio; bool isToken0Numerator; if (res0 >= res1) { ratio = res0 / res1; isToken0Numerator = true; } else { ratio = res1 / res0; } //find outputs on swap uint256 output0 = _calculateSwapOutput( _FromTokenContractAddress, _amount, _ToUnipoolToken0 ); uint256 output1 = _calculateSwapOutput( _FromTokenContractAddress, _amount, _ToUnipoolToken1 ); if (isToken0Numerator) { if (output1 * ratio >= output0) return _ToUnipoolToken1; else return _ToUnipoolToken0; } else { if (output0 * ratio >= output1) return _ToUnipoolToken0; else return _ToUnipoolToken1; } } } function _calculateSwapOutput( address _from, uint256 _amt, address _to ) internal view returns (uint256) { // check output via tokenA -> tokenB address pairA = UniSwapV2FactoryAddress.getPair(_from, _to); uint256 amtA; if (pairA != address(0)) { address[] memory pathA = new address[](2); pathA[0] = _from; pathA[1] = _to; amtA = uniswapRouter.getAmountsOut(_amt, pathA)[1]; } uint256 amtB; // check output via tokenA -> weth -> tokenB if ((_from != wethTokenAddress) && _to != wethTokenAddress) { address[] memory pathB = new address[](3); pathB[0] = _from; pathB[1] = wethTokenAddress; pathB[2] = _to; amtB = uniswapRouter.getAmountsOut(_amt, pathB)[2]; } if (amtA >= amtB) { return amtA; } else { return amtB; } } function calculateSwapInAmount(uint256 reserveIn, uint256 userIn) public pure returns (uint256) { return Babylonian .sqrt( reserveIn.mul(userIn.mul(3988000) + reserveIn.mul(3988009)) ) .sub(reserveIn.mul(1997)) / 1994; } /** @notice This function is used to swap ETH/ERC20 <> ETH/ERC20 @param _FromTokenContractAddress The token address to swap from. (0x00 for ETH) @param _ToTokenContractAddress The token address to swap to. (0x00 for ETH) @param tokens2Trade The amount of tokens to swap @return tokenBought The quantity of tokens bought */ function _token2Token( address _FromTokenContractAddress, address _ToTokenContractAddress, uint256 tokens2Trade ) internal returns (uint256 tokenBought) { if (_FromTokenContractAddress == _ToTokenContractAddress) { return tokens2Trade; } if (_FromTokenContractAddress == address(0)) { if (_ToTokenContractAddress == wethTokenAddress) { IWETH(wethTokenAddress).deposit.value(tokens2Trade)(); return tokens2Trade; } address[] memory path = new address[](2); path[0] = wethTokenAddress; path[1] = _ToTokenContractAddress; tokenBought = uniswapRouter.swapExactETHForTokens.value( tokens2Trade )(1, path, address(this), deadline)[path.length - 1]; } else if (_ToTokenContractAddress == address(0)) { if (_FromTokenContractAddress == wethTokenAddress) { IWETH(wethTokenAddress).withdraw(tokens2Trade); return tokens2Trade; } IERC20(_FromTokenContractAddress).safeIncreaseAllowance( address(uniswapRouter), tokens2Trade ); address[] memory path = new address[](2); path[0] = _FromTokenContractAddress; path[1] = wethTokenAddress; tokenBought = uniswapRouter.swapExactTokensForETH( tokens2Trade, 1, path, address(this), deadline )[path.length - 1]; } else { IERC20(_FromTokenContractAddress).safeIncreaseAllowance( address(uniswapRouter), tokens2Trade ); if (_FromTokenContractAddress != wethTokenAddress) { if (_ToTokenContractAddress != wethTokenAddress) { // check output via tokenA -> tokenB address pairA = UniSwapV2FactoryAddress.getPair( _FromTokenContractAddress, _ToTokenContractAddress ); address[] memory pathA = new address[](2); pathA[0] = _FromTokenContractAddress; pathA[1] = _ToTokenContractAddress; uint256 amtA; if (pairA != address(0)) { amtA = uniswapRouter.getAmountsOut( tokens2Trade, pathA )[1]; } // check output via tokenA -> weth -> tokenB address[] memory pathB = new address[](3); pathB[0] = _FromTokenContractAddress; pathB[1] = wethTokenAddress; pathB[2] = _ToTokenContractAddress; uint256 amtB = uniswapRouter.getAmountsOut( tokens2Trade, pathB )[2]; if (amtA >= amtB) { tokenBought = uniswapRouter.swapExactTokensForTokens( tokens2Trade, 1, pathA, address(this), deadline )[pathA.length - 1]; } else { tokenBought = uniswapRouter.swapExactTokensForTokens( tokens2Trade, 1, pathB, address(this), deadline )[pathB.length - 1]; } } else { address[] memory path = new address[](2); path[0] = _FromTokenContractAddress; path[1] = wethTokenAddress; tokenBought = uniswapRouter.swapExactTokensForTokens( tokens2Trade, 1, path, address(this), deadline )[path.length - 1]; } } else { address[] memory path = new address[](2); path[0] = wethTokenAddress; path[1] = _ToTokenContractAddress; tokenBought = uniswapRouter.swapExactTokensForTokens( tokens2Trade, 1, path, address(this), deadline )[path.length - 1]; } } require(tokenBought > 0, "Error Swapping Tokens"); } /** @notice This function is used to calculate and transfer goodwill @param _tokenContractAddress Token in which goodwill is deducted @param tokens2Trade The total amount of tokens to be zapped in @return The quantity of goodwill deducted */ function _transferGoodwill( address _tokenContractAddress, uint256 tokens2Trade ) internal returns (uint256 goodwillPortion) { goodwillPortion = SafeMath.div( SafeMath.mul(tokens2Trade, goodwill), 10000 ); if (goodwillPortion == 0) { return 0; } IERC20(_tokenContractAddress).safeTransfer( vault, goodwillPortion ); } function set_new_goodwill(uint16 _new_goodwill) public onlyOwner { require( _new_goodwill >= 0 && _new_goodwill < 10000, "GoodWill Value not allowed" ); goodwill = _new_goodwill; } function inCaseTokengetsStuck(IERC20 _TokenAddress) public onlyOwner { uint256 qty = _TokenAddress.balanceOf(address(this)); _TokenAddress.safeTransfer(owner(), qty); } // - to Pause the contract function toggleContractActive() public onlyOwner { stopped = !stopped; } // - to withdraw any ETH balance sitting in the contract function withdraw() public onlyOwner { uint256 contractBalance = address(this).balance; address payable _to = owner().toPayable(); _to.transfer(contractBalance); } function() external payable { require(msg.sender != tx.origin, "Do not send ETH directly"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"agent","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"AmountToAgent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpBought","type":"uint256"}],"name":"AmountToInvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"AmountToVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"AGENT_REGISTRY","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FEE_APPROVER","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REWARDS_DISTRIBUTOR","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"STAKING_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_ADDRESS_711","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UNISWAP_V2_PAIR_711_WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"VAULT","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ZAP","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_minPoolTokens","type":"uint256"},{"internalType":"address payable","name":"_agent","type":"address"}],"name":"ZapIn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_minPoolTokens","type":"uint256"},{"internalType":"uint256","name":"_agentId","type":"uint256"}],"name":"ZapInWithId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_minPoolTokens","type":"uint256"},{"internalType":"bytes32","name":"_agentName","type":"bytes32"}],"name":"ZapInWithName","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"agentRegistry","outputs":[{"internalType":"contract IAgentRegistry","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"userIn","type":"uint256"}],"name":"calculateSwapInAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"goodwill","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_TokenAddress","type":"address"}],"name":"inCaseTokengetsStuck","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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"_new_goodwill","type":"uint16"}],"name":"set_new_goodwill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"toggleContractActive","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526002805460ff191690553480156200001b57600080fd5b506000805460ff191660011781556200003c6001600160e01b036200011516565b60008054610100600160a81b0319166101006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506002805462ffff0019166203e800176301000000600160b81b03191676b1ff949285107b7b967c0d05886f2513488d0042000000179055600380547329d44e1726e4368e5a7abf4fbc481a874aebcf006001600160a01b031991821617909155600480547335c9dbd51d926838cac8eb33ebdbea5e2930b247921691909117905562000119565b3390565b61357980620001296000396000f3fe6080604052600436106101815760003560e01c806382ee50ed116100d1578063d67c07bd1161008a578063e4155ee211610064578063e4155ee2146104ca578063ee99205c146104df578063f2fde38b146104f4578063fbfa77cf1461052757610181565b8063d67c07bd1461048b578063d994ec78146104a0578063da19ddfb146104b557610181565b806382ee50ed146103bc5780638d7e41a8146103d15780638da5cb5b146104015780638f32d59b14610416578063af61661c1461042b578063b10e1dbc1461045d57610181565b8063551196d51161013e5780635de0398e116101185780635de0398e1461031c578063715018a61461034857806375f12b211461035d5780637cfbfcb31461038657610181565b8063551196d5146102a257806358de7fe3146102d55780635af586ca1461030757610181565b80630d1cfcae146101d85780631385d24c146102095780633ccfd60b1461021e5780633e09ed9614610233578063411557d11461024857806353aaa63b1461025d575b333214156101d6576040805162461bcd60e51b815260206004820152601860248201527f446f206e6f742073656e6420455448206469726563746c790000000000000000604482015290519081900360640190fd5b005b3480156101e457600080fd5b506101ed61053c565b604080516001600160a01b039092168252519081900360200190f35b34801561021557600080fd5b506101d661054b565b34801561022a57600080fd5b506101d66105a6565b34801561023f57600080fd5b506101ed610647565b34801561025457600080fd5b506101ed61065f565b34801561026957600080fd5b506102906004803603602081101561028057600080fd5b50356001600160a01b0316610677565b60408051918252519081900360200190f35b3480156102ae57600080fd5b506101d6600480360360208110156102c557600080fd5b50356001600160a01b0316610689565b610290600480360360608110156102eb57600080fd5b506001600160a01b03813516906020810135906040013561076e565b34801561031357600080fd5b506101ed61084e565b34801561032857600080fd5b50610331610866565b6040805161ffff9092168252519081900360200190f35b34801561035457600080fd5b506101d6610875565b34801561036957600080fd5b5061037261090b565b604080519115158252519081900360200190f35b6102906004803603606081101561039c57600080fd5b506001600160a01b03813581169160208101359160409091013516610914565b3480156103c857600080fd5b506101ed610df7565b3480156103dd57600080fd5b50610290600480360360408110156103f457600080fd5b5080359060200135610e0f565b34801561040d57600080fd5b506101ed610e79565b34801561042257600080fd5b50610372610e8d565b6102906004803603606081101561044157600080fd5b506001600160a01b038135169060208101359060400135610eb6565b34801561046957600080fd5b506101d66004803603602081101561048057600080fd5b503561ffff16610f53565b34801561049757600080fd5b506101ed611012565b3480156104ac57600080fd5b506101ed61102a565b3480156104c157600080fd5b506101ed611042565b3480156104d657600080fd5b506101ed61105a565b3480156104eb57600080fd5b506101ed611072565b34801561050057600080fd5b506101d66004803603602081101561051757600080fd5b50356001600160a01b0316611081565b34801561053357600080fd5b506101ed6110d4565b6004546001600160a01b031681565b610553610e8d565b610592576040805162461bcd60e51b815260206004820181905260248201526000805160206134c5833981519152604482015290519081900360640190fd5b6002805460ff19811660ff90911615179055565b6105ae610e8d565b6105ed576040805162461bcd60e51b815260206004820181905260248201526000805160206134c5833981519152604482015290519081900360640190fd5b4760006106096105fb610e79565b6001600160a01b03166110ea565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610642573d6000803e3d6000fd5b505050565b730797778b9110d03ff64ff25192e2a980bf4523b881565b73b1ff949285107b7b967c0d05886f2513488d004281565b60016020526000908152604090205481565b610691610e8d565b6106d0576040805162461bcd60e51b815260206004820181905260248201526000805160206134c5833981519152604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561071a57600080fd5b505afa15801561072e573d6000803e3d6000fd5b505050506040513d602081101561074457600080fd5b5051905061076a610753610e79565b6001600160a01b038416908363ffffffff6110f116565b5050565b60025460009060ff16156107be576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6004805460408051630ef5bc1760e41b8152928301859052516000926001600160a01b039092169163ef5bc170916024808301926020929190829003018186803b15801561080b57600080fd5b505afa15801561081f573d6000803e3d6000fd5b505050506040513d602081101561083557600080fd5b50519050610844858583610914565b50505b9392505050565b7335c9dbd51d926838cac8eb33ebdbea5e2930b24781565b600254610100900461ffff1681565b61087d610e8d565b6108bc576040805162461bcd60e51b815260206004820181905260248201526000805160206134c5833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b60025460ff1681565b6000805460ff1661096c576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff1916905560025460ff16156109c3576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b60003411610a0e576040805162461bcd60e51b8152602060048201526013602482015272115c9c9bdc8e88115512081b9bdd081cd95b9d606a1b604482015290519081900360640190fd5b336001600160a01b0383161480610a9f575060048054604080516307feec1960e21b81526001600160a01b038681169482019490945290519290911691631ffbb06491602480820192602092909190829003018186803b158015610a7157600080fd5b505afa158015610a85573d6000803e3d6000fd5b505050506040513d6020811015610a9b57600080fd5b5051155b15610aa957600091505b600254600090610ad79061271090610acb903490610100900461ffff16611143565b9063ffffffff61119c16565b90506000610aeb348363ffffffff6111de16565b90506001600160a01b03841615610c0c57610b14612710610acb346101f463ffffffff61114316565b9150610b2e612710610acb3461242263ffffffff61114316565b90506000610b5282610b46348663ffffffff6111de16565b9063ffffffff6111de16565b6040519091506001600160a01b0386169082156108fc029083906000818181858888f19350505050158015610b8b573d6000803e3d6000fd5b506001600160a01b038516600090815260016020526040902054610bb5908263ffffffff61122016565b6001600160a01b0386166000818152600160209081526040918290209390935580518481529051919233927f0380719f46bb25418ade3ba78fed735026ea979614d20be06720fc15178b508b9281900390910190a3505b60025460405163010000009091046001600160a01b0316906108fc8415029084906000818181858888f19350505050158015610c4c573d6000803e3d6000fd5b5060408051838152905133917f232ebab1958d4cbaeb7c68cca4e6d5324a20a1d7f417c611e4659dda2f7654ed919081900360200190a26000610cb5876000739d4709e7c38e7857636c342a37547e191125e02860008051602061343e8339815191528661127a565b6040805184815260208101839052815192935033927fe74856d8982aea4c5af9a1cbcc4deb3738a3af827e73344a4eb43030254248de929181900390910190a285811015610d3f576040805162461bcd60e51b81526020600482015260126024820152714552523a204869676820536c69707061676560701b604482015290519081900360640190fd5b600354610d719073f295b0fa1a89c8a06109fb2d2c860a96fb39dca5906001600160a01b03168363ffffffff61148816565b600354604080516305dc812160e31b81526001600160a01b038a811660048301526024820185905291519190921691632ee4090891604480830192600092919082900301818387803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b5092955050505050506000805460ff191660011790559392505050565b73f295b0fa1a89c8a06109fb2d2c860a96fb39dca581565b60006107ca610e68610e29856107cd63ffffffff61114316565b610b46610e63610e4288623cda2963ffffffff61114316565b610e5588623cda2063ffffffff61114316565b89910163ffffffff61114316565b61159b565b81610e6f57fe5b0490505b92915050565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610ea76115ec565b6001600160a01b031614905090565b60025460009060ff1615610f06576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b600480546040805163b0107de760e01b8152928301859052516000926001600160a01b039092169163b0107de7916024808301926020929190829003018186803b15801561080b57600080fd5b610f5b610e8d565b610f9a576040805162461bcd60e51b815260206004820181905260248201526000805160206134c5833981519152604482015290519081900360640190fd5b6127108161ffff1610610ff4576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6002805461ffff9092166101000262ffff0019909216919091179055565b73b3c39777142320f7c5329bf87287a707c77266e381565b739d4709e7c38e7857636c342a37547e191125e02881565b7329d44e1726e4368e5a7abf4fbc481a874aebcf0081565b736c70d504932aa318f8070de13f3c4ab69a87953f81565b6003546001600160a01b031681565b611089610e8d565b6110c8576040805162461bcd60e51b815260206004820181905260248201526000805160206134c5833981519152604482015290519081900360640190fd5b6110d1816115f0565b50565b600254630100000090046001600160a01b031681565b805b919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261064290849061169b565b60008261115257506000610e73565b8282028284828161115f57fe5b04146108475760405162461bcd60e51b81526004018080602001828103825260218152602001806134a46021913960400191505060405180910390fd5b600061084783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611859565b600061084783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118fb565b600082820183811015610847576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008061128986848787611955565b90506000611298878386611b79565b6040805163e6a4390560e01b81526001600160a01b03898116600483015288166024820152905191925060009182918291735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a43905916044808301926020929190829003018186803b15801561130457600080fd5b505afa158015611318573d6000803e3d6000fd5b505050506040513d602081101561132e57600080fd5b505160408051630240bc6b60e21b8152905191925060009182916001600160a01b03851691630902f1ac91600480820192606092909190829003018186803b15801561137957600080fd5b505afa15801561138d573d6000803e3d6000fd5b505050506040513d60608110156113a357600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908c16141561141f5760006113dc8388610e0f565b9050600081116113fa576113f787600263ffffffff61119c16565b90505b611405888c83611b79565b9450611417878263ffffffff6111de16565b95505061146a565b600061142b8288610e0f565b9050600081116114495761144687600263ffffffff61119c16565b90505b611454888d83611b79565b9550611466878263ffffffff6111de16565b9450505b6114778d8c8c8888612c63565b9d9c50505050505050505050505050565b80158061150e575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156114e057600080fd5b505afa1580156114f4573d6000803e3d6000fd5b505050506040513d602081101561150a57600080fd5b5051155b6115495760405162461bcd60e51b815260040180806020018281038252603681526020018061350f6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261064290849061169b565b600060038211156115de575080600160028204015b818110156115d8578091506002818285816115c757fe5b0401816115d057fe5b0490506115b0565b506110ec565b81156110ec57506001919050565b3390565b6001600160a01b0381166116355760405162461bcd60e51b815260040180806020018281038252602681526020018061345e6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6116ad826001600160a01b0316612e18565b6116fe576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061173c5780518252601f19909201916020918201910161171d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461179e576040519150601f19603f3d011682016040523d82523d6000602084013e6117a3565b606091505b5091509150816117fa576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156118535780806020019051602081101561181657600080fd5b50516118535760405162461bcd60e51b815260040180806020018281038252602a8152602001806134e5602a913960400191505060405180910390fd5b50505050565b600081836118e55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118aa578181015183820152602001611892565b50505050905090810190601f1680156118d75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816118f157fe5b0495945050505050565b6000818484111561194d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156118aa578181015183820152602001611892565b505050900390565b60006001600160a01b0385166119775760008051602061343e83398151915294505b826001600160a01b0316856001600160a01b03161415611998575081611b71565b816001600160a01b0316856001600160a01b031614156119b9575080611b71565b6040805163e6a4390560e01b81526001600160a01b038581166004830152841660248201529051600091735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a4390591604480820192602092909190829003018186803b158015611a1f57600080fd5b505afa158015611a33573d6000803e3d6000fd5b505050506040513d6020811015611a4957600080fd5b505160408051630240bc6b60e21b8152905191925060009182916001600160a01b03851691630902f1ac91600480820192606092909190829003018186803b158015611a9457600080fd5b505afa158015611aa8573d6000803e3d6000fd5b505050506040513d6060811015611abe57600080fd5b5080516020909101516001600160701b039182169350169050600080828410611af657828481611aea57fe5b04915060019050611b03565b838381611aff57fe5b0491505b6000611b108b8b8b612e51565b90506000611b1f8c8c8b612e51565b90508215611b4e578184820210611b3f5788975050505050505050611b71565b89975050505050505050611b71565b8084830210611b665789975050505050505050611b71565b889750505050505050505b949350505050565b6000826001600160a01b0316846001600160a01b03161415611b9c575080610847565b6001600160a01b038416611e48576001600160a01b03831660008051602061343e8339815191521415611c335760008051602061343e8339815191526001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611c1257600080fd5b505af1158015611c26573d6000803e3d6000fd5b5050505050819050610847565b604080516002808252606080830184529260208301908038833901905050905060008051602061343e83398151915281600081518110611c6f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110611c9d57fe5b6001600160a01b03909216602092830291909101820152604051637ff36ab560e01b81526001600482018181523060448401819052600f60fc1b6064850181905260806024860190815287516084870152875160008051602061348483398151915297637ff36ab5978c97968b9695949093909260a490920191878101910280838360005b83811015611d3a578181015183820152602001611d22565b50505050905001955050505050506000604051808303818588803b158015611d6157600080fd5b505af1158015611d75573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526020811015611d9f57600080fd5b8101908080516040519392919084600160201b821115611dbe57600080fd5b908301906020820185811115611dd357600080fd5b82518660208202830111600160201b82111715611def57600080fd5b82525081516020918201928201910280838360005b83811015611e1c578181015183820152602001611e04565b50505050905001604052505050600182510381518110611e3857fe5b6020026020010151915050612c16565b6001600160a01b038316612084576001600160a01b03841660008051602061343e8339815191521415611ee95760008051602061343e8339815191526001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ec957600080fd5b505af1158015611edd573d6000803e3d6000fd5b50505050819050610847565b611f116001600160a01b0385166000805160206134848339815191528463ffffffff61335716565b60408051600280825260608083018452926020830190803883390190505090508481600081518110611f3f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008051602061343e83398151915281600181518110611f7b57fe5b6001600160a01b039092166020928302919091018201526040516318cbafe560e01b8152600481018581526001602483018190523060648401819052600f60fc1b6084850181905260a060448601908152875160a48701528751600080516020613484833981519152976318cbafe5978c978b9695949093909260c490920191878101910280838360005b8381101561201e578181015183820152602001612006565b505050509050019650505050505050600060405180830381600087803b15801561204757600080fd5b505af115801561205b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611d9f57600080fd5b6120ac6001600160a01b0385166000805160206134848339815191528463ffffffff61335716565b6001600160a01b03841660008051602061343e833981519152146129fe576001600160a01b03831660008051602061343e833981519152146128ee576040805163e6a4390560e01b81526001600160a01b038681166004830152851660248201529051600091735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a4390591604480820192602092909190829003018186803b15801561214e57600080fd5b505afa158015612162573d6000803e3d6000fd5b505050506040513d602081101561217857600080fd5b505160408051600280825260608083018452939450909160208301908038833901905050905085816000815181106121ac57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084816001815181106121da57fe5b6001600160a01b039283166020918202929092010152600090831615612367576040805163d06ca61f60e01b815260048101878152602482019283528451604483015284516000805160206134848339815191529363d06ca61f938a938893909291606401906020808601910280838360005b8381101561226557818101518382015260200161224d565b50505050905001935050505060006040518083038186803b15801561228957600080fd5b505afa15801561229d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156122c657600080fd5b8101908080516040519392919084600160201b8211156122e557600080fd5b9083019060208201858111156122fa57600080fd5b82518660208202830111600160201b8211171561231657600080fd5b82525081516020918201928201910280838360005b8381101561234357818101518382015260200161232b565b5050505090500160405250505060018151811061235c57fe5b602002602001015190505b60408051600380825260808201909252606091602082018380388339019050509050878160008151811061239757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008051602061343e833981519152816001815181106123d357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160028151811061240157fe5b6001600160a01b039092166020928302919091018201526040805163d06ca61f60e01b815260048101898152602482019283528451604483015284516000946000805160206134848339815191529463d06ca61f948d948994909360649092019185810191028083838c5b8381101561248457818101518382015260200161246c565b50505050905001935050505060006040518083038186803b1580156124a857600080fd5b505afa1580156124bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156124e557600080fd5b8101908080516040519392919084600160201b82111561250457600080fd5b90830190602082018581111561251957600080fd5b82518660208202830111600160201b8211171561253557600080fd5b82525081516020918201928201910280838360005b8381101561256257818101518382015260200161254a565b5050505090500160405250505060028151811061257b57fe5b6020026020010151905080831061273a576000805160206134848339815191526001600160a01b03166338ed17398860018730600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561262c578181015183820152602001612614565b505050509050019650505050505050600060405180830381600087803b15801561265557600080fd5b505af1158015612669573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561269257600080fd5b8101908080516040519392919084600160201b8211156126b157600080fd5b9083019060208201858111156126c657600080fd5b82518660208202830111600160201b821117156126e257600080fd5b82525081516020918201928201910280838360005b8381101561270f5781810151838201526020016126f7565b5050505090500160405250505060018551038151811061272b57fe5b602002602001015195506128e4565b6000805160206134848339815191526001600160a01b03166338ed17398860018530600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156127da5781810151838201526020016127c2565b505050509050019650505050505050600060405180830381600087803b15801561280357600080fd5b505af1158015612817573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561284057600080fd5b8101908080516040519392919084600160201b82111561285f57600080fd5b90830190602082018581111561287457600080fd5b82518660208202830111600160201b8211171561289057600080fd5b82525081516020918201928201910280838360005b838110156128bd5781810151838201526020016128a5565b505050509050016040525050506001835103815181106128d957fe5b602002602001015195505b50505050506129f9565b6040805160028082526060808301845292602083019080388339019050509050848160008151811061291c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008051602061343e8339815191528160018151811061295857fe5b6001600160a01b03929092166020928302919091018201526040516338ed173960e01b8152600481018581526001602483018190523060648401819052600f60fc1b6084850181905260a060448601908152875160a48701528751600080516020613484833981519152976338ed1739978c978b9695949093909260c49092019187810191028083836000831561201e578181015183820152602001612006565b612c16565b604080516002808252606080830184529260208301908038833901905050905060008051602061343e83398151915281600081518110612a3a57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110612a6857fe5b6001600160a01b039092166020928302919091018201526040516338ed173960e01b8152600481018581526001602483018190523060648401819052600f60fc1b6084850181905260a060448601908152875160a48701528751600080516020613484833981519152976338ed1739978c978b9695949093909260c490920191878101910280838360005b83811015612b0b578181015183820152602001612af3565b505050509050019650505050505050600060405180830381600087803b158015612b3457600080fd5b505af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612b7157600080fd5b8101908080516040519392919084600160201b821115612b9057600080fd5b908301906020820185811115612ba557600080fd5b82518660208202830111600160201b82111715612bc157600080fd5b82525081516020918201928201910280838360005b83811015612bee578181015183820152602001612bd6565b50505050905001604052505050600182510381518110612c0a57fe5b60200260200101519150505b60008111610847576040805162461bcd60e51b81526020600482015260156024820152744572726f72205377617070696e6720546f6b656e7360581b604482015290519081900360640190fd5b6000612c8d6001600160a01b0386166000805160206134848339815191528563ffffffff61335716565b612cb56001600160a01b0385166000805160206134848339815191528463ffffffff61335716565b6040805162e8e33760e81b81526001600160a01b03878116600483015286166024820152604481018590526064810184905260016084820181905260a48201523060c4820152600f60fc1b60e48201529051600091829182916000805160206134848339815191529163e8e33700916101048082019260609290919082900301818787803b158015612d4657600080fd5b505af1158015612d5a573d6000803e3d6000fd5b505050506040513d6060811015612d7057600080fd5b508051602082015160409092015190945090925090506000612d98878563ffffffff6111de16565b1115612dc957612dc989612db2888663ffffffff6111de16565b6001600160a01b038b16919063ffffffff6110f116565b6000612ddb868463ffffffff6111de16565b1115612e0c57612e0c89612df5878563ffffffff6111de16565b6001600160a01b038a16919063ffffffff6110f116565b98975050505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611b71575050151592915050565b6040805163e6a4390560e01b81526001600160a01b0385811660048301528316602482015290516000918291735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a43905916044808301926020929190829003018186803b158015612eb857600080fd5b505afa158015612ecc573d6000803e3d6000fd5b505050506040513d6020811015612ee257600080fd5b5051905060006001600160a01b038216156130d85760408051600280825260608083018452926020830190803883390190505090508681600081518110612f2557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508481600181518110612f5357fe5b6001600160a01b039092166020928302919091018201526040805163d06ca61f60e01b815260048101898152602482019283528451604483015284516000805160206134848339815191529463d06ca61f948c948894939192606490910191858201910280838360005b83811015612fd5578181015183820152602001612fbd565b50505050905001935050505060006040518083038186803b158015612ff957600080fd5b505afa15801561300d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561303657600080fd5b8101908080516040519392919084600160201b82111561305557600080fd5b90830190602082018581111561306a57600080fd5b82518660208202830111600160201b8211171561308657600080fd5b82525081516020918201928201910280838360005b838110156130b357818101518382015260200161309b565b505050509050016040525050506001815181106130cc57fe5b60200260200101519150505b60006001600160a01b03871660008051602061343e8339815191521480159061311857506001600160a01b03851660008051602061343e83398151915214155b1561333c5760408051600380825260808201909252606091602082018380388339019050509050878160008151811061314d57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008051602061343e8339815191528160018151811061318957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505085816002815181106131b757fe5b6001600160a01b039092166020928302919091018201526040805163d06ca61f60e01b8152600481018a8152602482019283528451604483015284516000805160206134848339815191529463d06ca61f948d948894939192606490910191858201910280838360005b83811015613239578181015183820152602001613221565b50505050905001935050505060006040518083038186803b15801561325d57600080fd5b505afa158015613271573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561329a57600080fd5b8101908080516040519392919084600160201b8211156132b957600080fd5b9083019060208201858111156132ce57600080fd5b82518660208202830111600160201b821117156132ea57600080fd5b82525081516020918201928201910280838360005b838110156133175781810151838201526020016132ff565b5050505090500160405250505060028151811061333057fe5b60200260200101519150505b80821061334d575091506108479050565b9250610847915050565b60408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291516000926133e89285929188169163dd62ed3e91604480820192602092909190829003018186803b1580156133b057600080fd5b505afa1580156133c4573d6000803e3d6000fd5b505050506040513d60208110156133da57600080fd5b50519063ffffffff61122016565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905290915061185390859061169b56fe000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc24f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573730000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a72315820e37591a1c764df9420b90657e9202d4e22cfb5e365950e3f243fa0e65cdbebbe64736f6c63430005100032
Deployed Bytecode
0x6080604052600436106101815760003560e01c806382ee50ed116100d1578063d67c07bd1161008a578063e4155ee211610064578063e4155ee2146104ca578063ee99205c146104df578063f2fde38b146104f4578063fbfa77cf1461052757610181565b8063d67c07bd1461048b578063d994ec78146104a0578063da19ddfb146104b557610181565b806382ee50ed146103bc5780638d7e41a8146103d15780638da5cb5b146104015780638f32d59b14610416578063af61661c1461042b578063b10e1dbc1461045d57610181565b8063551196d51161013e5780635de0398e116101185780635de0398e1461031c578063715018a61461034857806375f12b211461035d5780637cfbfcb31461038657610181565b8063551196d5146102a257806358de7fe3146102d55780635af586ca1461030757610181565b80630d1cfcae146101d85780631385d24c146102095780633ccfd60b1461021e5780633e09ed9614610233578063411557d11461024857806353aaa63b1461025d575b333214156101d6576040805162461bcd60e51b815260206004820152601860248201527f446f206e6f742073656e6420455448206469726563746c790000000000000000604482015290519081900360640190fd5b005b3480156101e457600080fd5b506101ed61053c565b604080516001600160a01b039092168252519081900360200190f35b34801561021557600080fd5b506101d661054b565b34801561022a57600080fd5b506101d66105a6565b34801561023f57600080fd5b506101ed610647565b34801561025457600080fd5b506101ed61065f565b34801561026957600080fd5b506102906004803603602081101561028057600080fd5b50356001600160a01b0316610677565b60408051918252519081900360200190f35b3480156102ae57600080fd5b506101d6600480360360208110156102c557600080fd5b50356001600160a01b0316610689565b610290600480360360608110156102eb57600080fd5b506001600160a01b03813516906020810135906040013561076e565b34801561031357600080fd5b506101ed61084e565b34801561032857600080fd5b50610331610866565b6040805161ffff9092168252519081900360200190f35b34801561035457600080fd5b506101d6610875565b34801561036957600080fd5b5061037261090b565b604080519115158252519081900360200190f35b6102906004803603606081101561039c57600080fd5b506001600160a01b03813581169160208101359160409091013516610914565b3480156103c857600080fd5b506101ed610df7565b3480156103dd57600080fd5b50610290600480360360408110156103f457600080fd5b5080359060200135610e0f565b34801561040d57600080fd5b506101ed610e79565b34801561042257600080fd5b50610372610e8d565b6102906004803603606081101561044157600080fd5b506001600160a01b038135169060208101359060400135610eb6565b34801561046957600080fd5b506101d66004803603602081101561048057600080fd5b503561ffff16610f53565b34801561049757600080fd5b506101ed611012565b3480156104ac57600080fd5b506101ed61102a565b3480156104c157600080fd5b506101ed611042565b3480156104d657600080fd5b506101ed61105a565b3480156104eb57600080fd5b506101ed611072565b34801561050057600080fd5b506101d66004803603602081101561051757600080fd5b50356001600160a01b0316611081565b34801561053357600080fd5b506101ed6110d4565b6004546001600160a01b031681565b610553610e8d565b610592576040805162461bcd60e51b815260206004820181905260248201526000805160206134c5833981519152604482015290519081900360640190fd5b6002805460ff19811660ff90911615179055565b6105ae610e8d565b6105ed576040805162461bcd60e51b815260206004820181905260248201526000805160206134c5833981519152604482015290519081900360640190fd5b4760006106096105fb610e79565b6001600160a01b03166110ea565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610642573d6000803e3d6000fd5b505050565b730797778b9110d03ff64ff25192e2a980bf4523b881565b73b1ff949285107b7b967c0d05886f2513488d004281565b60016020526000908152604090205481565b610691610e8d565b6106d0576040805162461bcd60e51b815260206004820181905260248201526000805160206134c5833981519152604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561071a57600080fd5b505afa15801561072e573d6000803e3d6000fd5b505050506040513d602081101561074457600080fd5b5051905061076a610753610e79565b6001600160a01b038416908363ffffffff6110f116565b5050565b60025460009060ff16156107be576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6004805460408051630ef5bc1760e41b8152928301859052516000926001600160a01b039092169163ef5bc170916024808301926020929190829003018186803b15801561080b57600080fd5b505afa15801561081f573d6000803e3d6000fd5b505050506040513d602081101561083557600080fd5b50519050610844858583610914565b50505b9392505050565b7335c9dbd51d926838cac8eb33ebdbea5e2930b24781565b600254610100900461ffff1681565b61087d610e8d565b6108bc576040805162461bcd60e51b815260206004820181905260248201526000805160206134c5833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b60025460ff1681565b6000805460ff1661096c576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff1916905560025460ff16156109c3576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b60003411610a0e576040805162461bcd60e51b8152602060048201526013602482015272115c9c9bdc8e88115512081b9bdd081cd95b9d606a1b604482015290519081900360640190fd5b336001600160a01b0383161480610a9f575060048054604080516307feec1960e21b81526001600160a01b038681169482019490945290519290911691631ffbb06491602480820192602092909190829003018186803b158015610a7157600080fd5b505afa158015610a85573d6000803e3d6000fd5b505050506040513d6020811015610a9b57600080fd5b5051155b15610aa957600091505b600254600090610ad79061271090610acb903490610100900461ffff16611143565b9063ffffffff61119c16565b90506000610aeb348363ffffffff6111de16565b90506001600160a01b03841615610c0c57610b14612710610acb346101f463ffffffff61114316565b9150610b2e612710610acb3461242263ffffffff61114316565b90506000610b5282610b46348663ffffffff6111de16565b9063ffffffff6111de16565b6040519091506001600160a01b0386169082156108fc029083906000818181858888f19350505050158015610b8b573d6000803e3d6000fd5b506001600160a01b038516600090815260016020526040902054610bb5908263ffffffff61122016565b6001600160a01b0386166000818152600160209081526040918290209390935580518481529051919233927f0380719f46bb25418ade3ba78fed735026ea979614d20be06720fc15178b508b9281900390910190a3505b60025460405163010000009091046001600160a01b0316906108fc8415029084906000818181858888f19350505050158015610c4c573d6000803e3d6000fd5b5060408051838152905133917f232ebab1958d4cbaeb7c68cca4e6d5324a20a1d7f417c611e4659dda2f7654ed919081900360200190a26000610cb5876000739d4709e7c38e7857636c342a37547e191125e02860008051602061343e8339815191528661127a565b6040805184815260208101839052815192935033927fe74856d8982aea4c5af9a1cbcc4deb3738a3af827e73344a4eb43030254248de929181900390910190a285811015610d3f576040805162461bcd60e51b81526020600482015260126024820152714552523a204869676820536c69707061676560701b604482015290519081900360640190fd5b600354610d719073f295b0fa1a89c8a06109fb2d2c860a96fb39dca5906001600160a01b03168363ffffffff61148816565b600354604080516305dc812160e31b81526001600160a01b038a811660048301526024820185905291519190921691632ee4090891604480830192600092919082900301818387803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b5092955050505050506000805460ff191660011790559392505050565b73f295b0fa1a89c8a06109fb2d2c860a96fb39dca581565b60006107ca610e68610e29856107cd63ffffffff61114316565b610b46610e63610e4288623cda2963ffffffff61114316565b610e5588623cda2063ffffffff61114316565b89910163ffffffff61114316565b61159b565b81610e6f57fe5b0490505b92915050565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610ea76115ec565b6001600160a01b031614905090565b60025460009060ff1615610f06576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b600480546040805163b0107de760e01b8152928301859052516000926001600160a01b039092169163b0107de7916024808301926020929190829003018186803b15801561080b57600080fd5b610f5b610e8d565b610f9a576040805162461bcd60e51b815260206004820181905260248201526000805160206134c5833981519152604482015290519081900360640190fd5b6127108161ffff1610610ff4576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6002805461ffff9092166101000262ffff0019909216919091179055565b73b3c39777142320f7c5329bf87287a707c77266e381565b739d4709e7c38e7857636c342a37547e191125e02881565b7329d44e1726e4368e5a7abf4fbc481a874aebcf0081565b736c70d504932aa318f8070de13f3c4ab69a87953f81565b6003546001600160a01b031681565b611089610e8d565b6110c8576040805162461bcd60e51b815260206004820181905260248201526000805160206134c5833981519152604482015290519081900360640190fd5b6110d1816115f0565b50565b600254630100000090046001600160a01b031681565b805b919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261064290849061169b565b60008261115257506000610e73565b8282028284828161115f57fe5b04146108475760405162461bcd60e51b81526004018080602001828103825260218152602001806134a46021913960400191505060405180910390fd5b600061084783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611859565b600061084783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118fb565b600082820183811015610847576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008061128986848787611955565b90506000611298878386611b79565b6040805163e6a4390560e01b81526001600160a01b03898116600483015288166024820152905191925060009182918291735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a43905916044808301926020929190829003018186803b15801561130457600080fd5b505afa158015611318573d6000803e3d6000fd5b505050506040513d602081101561132e57600080fd5b505160408051630240bc6b60e21b8152905191925060009182916001600160a01b03851691630902f1ac91600480820192606092909190829003018186803b15801561137957600080fd5b505afa15801561138d573d6000803e3d6000fd5b505050506040513d60608110156113a357600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908c16141561141f5760006113dc8388610e0f565b9050600081116113fa576113f787600263ffffffff61119c16565b90505b611405888c83611b79565b9450611417878263ffffffff6111de16565b95505061146a565b600061142b8288610e0f565b9050600081116114495761144687600263ffffffff61119c16565b90505b611454888d83611b79565b9550611466878263ffffffff6111de16565b9450505b6114778d8c8c8888612c63565b9d9c50505050505050505050505050565b80158061150e575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156114e057600080fd5b505afa1580156114f4573d6000803e3d6000fd5b505050506040513d602081101561150a57600080fd5b5051155b6115495760405162461bcd60e51b815260040180806020018281038252603681526020018061350f6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261064290849061169b565b600060038211156115de575080600160028204015b818110156115d8578091506002818285816115c757fe5b0401816115d057fe5b0490506115b0565b506110ec565b81156110ec57506001919050565b3390565b6001600160a01b0381166116355760405162461bcd60e51b815260040180806020018281038252602681526020018061345e6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6116ad826001600160a01b0316612e18565b6116fe576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061173c5780518252601f19909201916020918201910161171d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461179e576040519150601f19603f3d011682016040523d82523d6000602084013e6117a3565b606091505b5091509150816117fa576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156118535780806020019051602081101561181657600080fd5b50516118535760405162461bcd60e51b815260040180806020018281038252602a8152602001806134e5602a913960400191505060405180910390fd5b50505050565b600081836118e55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118aa578181015183820152602001611892565b50505050905090810190601f1680156118d75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816118f157fe5b0495945050505050565b6000818484111561194d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156118aa578181015183820152602001611892565b505050900390565b60006001600160a01b0385166119775760008051602061343e83398151915294505b826001600160a01b0316856001600160a01b03161415611998575081611b71565b816001600160a01b0316856001600160a01b031614156119b9575080611b71565b6040805163e6a4390560e01b81526001600160a01b038581166004830152841660248201529051600091735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a4390591604480820192602092909190829003018186803b158015611a1f57600080fd5b505afa158015611a33573d6000803e3d6000fd5b505050506040513d6020811015611a4957600080fd5b505160408051630240bc6b60e21b8152905191925060009182916001600160a01b03851691630902f1ac91600480820192606092909190829003018186803b158015611a9457600080fd5b505afa158015611aa8573d6000803e3d6000fd5b505050506040513d6060811015611abe57600080fd5b5080516020909101516001600160701b039182169350169050600080828410611af657828481611aea57fe5b04915060019050611b03565b838381611aff57fe5b0491505b6000611b108b8b8b612e51565b90506000611b1f8c8c8b612e51565b90508215611b4e578184820210611b3f5788975050505050505050611b71565b89975050505050505050611b71565b8084830210611b665789975050505050505050611b71565b889750505050505050505b949350505050565b6000826001600160a01b0316846001600160a01b03161415611b9c575080610847565b6001600160a01b038416611e48576001600160a01b03831660008051602061343e8339815191521415611c335760008051602061343e8339815191526001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611c1257600080fd5b505af1158015611c26573d6000803e3d6000fd5b5050505050819050610847565b604080516002808252606080830184529260208301908038833901905050905060008051602061343e83398151915281600081518110611c6f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110611c9d57fe5b6001600160a01b03909216602092830291909101820152604051637ff36ab560e01b81526001600482018181523060448401819052600f60fc1b6064850181905260806024860190815287516084870152875160008051602061348483398151915297637ff36ab5978c97968b9695949093909260a490920191878101910280838360005b83811015611d3a578181015183820152602001611d22565b50505050905001955050505050506000604051808303818588803b158015611d6157600080fd5b505af1158015611d75573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526020811015611d9f57600080fd5b8101908080516040519392919084600160201b821115611dbe57600080fd5b908301906020820185811115611dd357600080fd5b82518660208202830111600160201b82111715611def57600080fd5b82525081516020918201928201910280838360005b83811015611e1c578181015183820152602001611e04565b50505050905001604052505050600182510381518110611e3857fe5b6020026020010151915050612c16565b6001600160a01b038316612084576001600160a01b03841660008051602061343e8339815191521415611ee95760008051602061343e8339815191526001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ec957600080fd5b505af1158015611edd573d6000803e3d6000fd5b50505050819050610847565b611f116001600160a01b0385166000805160206134848339815191528463ffffffff61335716565b60408051600280825260608083018452926020830190803883390190505090508481600081518110611f3f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008051602061343e83398151915281600181518110611f7b57fe5b6001600160a01b039092166020928302919091018201526040516318cbafe560e01b8152600481018581526001602483018190523060648401819052600f60fc1b6084850181905260a060448601908152875160a48701528751600080516020613484833981519152976318cbafe5978c978b9695949093909260c490920191878101910280838360005b8381101561201e578181015183820152602001612006565b505050509050019650505050505050600060405180830381600087803b15801561204757600080fd5b505af115801561205b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611d9f57600080fd5b6120ac6001600160a01b0385166000805160206134848339815191528463ffffffff61335716565b6001600160a01b03841660008051602061343e833981519152146129fe576001600160a01b03831660008051602061343e833981519152146128ee576040805163e6a4390560e01b81526001600160a01b038681166004830152851660248201529051600091735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a4390591604480820192602092909190829003018186803b15801561214e57600080fd5b505afa158015612162573d6000803e3d6000fd5b505050506040513d602081101561217857600080fd5b505160408051600280825260608083018452939450909160208301908038833901905050905085816000815181106121ac57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084816001815181106121da57fe5b6001600160a01b039283166020918202929092010152600090831615612367576040805163d06ca61f60e01b815260048101878152602482019283528451604483015284516000805160206134848339815191529363d06ca61f938a938893909291606401906020808601910280838360005b8381101561226557818101518382015260200161224d565b50505050905001935050505060006040518083038186803b15801561228957600080fd5b505afa15801561229d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156122c657600080fd5b8101908080516040519392919084600160201b8211156122e557600080fd5b9083019060208201858111156122fa57600080fd5b82518660208202830111600160201b8211171561231657600080fd5b82525081516020918201928201910280838360005b8381101561234357818101518382015260200161232b565b5050505090500160405250505060018151811061235c57fe5b602002602001015190505b60408051600380825260808201909252606091602082018380388339019050509050878160008151811061239757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008051602061343e833981519152816001815181106123d357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160028151811061240157fe5b6001600160a01b039092166020928302919091018201526040805163d06ca61f60e01b815260048101898152602482019283528451604483015284516000946000805160206134848339815191529463d06ca61f948d948994909360649092019185810191028083838c5b8381101561248457818101518382015260200161246c565b50505050905001935050505060006040518083038186803b1580156124a857600080fd5b505afa1580156124bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156124e557600080fd5b8101908080516040519392919084600160201b82111561250457600080fd5b90830190602082018581111561251957600080fd5b82518660208202830111600160201b8211171561253557600080fd5b82525081516020918201928201910280838360005b8381101561256257818101518382015260200161254a565b5050505090500160405250505060028151811061257b57fe5b6020026020010151905080831061273a576000805160206134848339815191526001600160a01b03166338ed17398860018730600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561262c578181015183820152602001612614565b505050509050019650505050505050600060405180830381600087803b15801561265557600080fd5b505af1158015612669573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561269257600080fd5b8101908080516040519392919084600160201b8211156126b157600080fd5b9083019060208201858111156126c657600080fd5b82518660208202830111600160201b821117156126e257600080fd5b82525081516020918201928201910280838360005b8381101561270f5781810151838201526020016126f7565b5050505090500160405250505060018551038151811061272b57fe5b602002602001015195506128e4565b6000805160206134848339815191526001600160a01b03166338ed17398860018530600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156127da5781810151838201526020016127c2565b505050509050019650505050505050600060405180830381600087803b15801561280357600080fd5b505af1158015612817573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561284057600080fd5b8101908080516040519392919084600160201b82111561285f57600080fd5b90830190602082018581111561287457600080fd5b82518660208202830111600160201b8211171561289057600080fd5b82525081516020918201928201910280838360005b838110156128bd5781810151838201526020016128a5565b505050509050016040525050506001835103815181106128d957fe5b602002602001015195505b50505050506129f9565b6040805160028082526060808301845292602083019080388339019050509050848160008151811061291c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008051602061343e8339815191528160018151811061295857fe5b6001600160a01b03929092166020928302919091018201526040516338ed173960e01b8152600481018581526001602483018190523060648401819052600f60fc1b6084850181905260a060448601908152875160a48701528751600080516020613484833981519152976338ed1739978c978b9695949093909260c49092019187810191028083836000831561201e578181015183820152602001612006565b612c16565b604080516002808252606080830184529260208301908038833901905050905060008051602061343e83398151915281600081518110612a3a57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110612a6857fe5b6001600160a01b039092166020928302919091018201526040516338ed173960e01b8152600481018581526001602483018190523060648401819052600f60fc1b6084850181905260a060448601908152875160a48701528751600080516020613484833981519152976338ed1739978c978b9695949093909260c490920191878101910280838360005b83811015612b0b578181015183820152602001612af3565b505050509050019650505050505050600060405180830381600087803b158015612b3457600080fd5b505af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612b7157600080fd5b8101908080516040519392919084600160201b821115612b9057600080fd5b908301906020820185811115612ba557600080fd5b82518660208202830111600160201b82111715612bc157600080fd5b82525081516020918201928201910280838360005b83811015612bee578181015183820152602001612bd6565b50505050905001604052505050600182510381518110612c0a57fe5b60200260200101519150505b60008111610847576040805162461bcd60e51b81526020600482015260156024820152744572726f72205377617070696e6720546f6b656e7360581b604482015290519081900360640190fd5b6000612c8d6001600160a01b0386166000805160206134848339815191528563ffffffff61335716565b612cb56001600160a01b0385166000805160206134848339815191528463ffffffff61335716565b6040805162e8e33760e81b81526001600160a01b03878116600483015286166024820152604481018590526064810184905260016084820181905260a48201523060c4820152600f60fc1b60e48201529051600091829182916000805160206134848339815191529163e8e33700916101048082019260609290919082900301818787803b158015612d4657600080fd5b505af1158015612d5a573d6000803e3d6000fd5b505050506040513d6060811015612d7057600080fd5b508051602082015160409092015190945090925090506000612d98878563ffffffff6111de16565b1115612dc957612dc989612db2888663ffffffff6111de16565b6001600160a01b038b16919063ffffffff6110f116565b6000612ddb868463ffffffff6111de16565b1115612e0c57612e0c89612df5878563ffffffff6111de16565b6001600160a01b038a16919063ffffffff6110f116565b98975050505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611b71575050151592915050565b6040805163e6a4390560e01b81526001600160a01b0385811660048301528316602482015290516000918291735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a43905916044808301926020929190829003018186803b158015612eb857600080fd5b505afa158015612ecc573d6000803e3d6000fd5b505050506040513d6020811015612ee257600080fd5b5051905060006001600160a01b038216156130d85760408051600280825260608083018452926020830190803883390190505090508681600081518110612f2557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508481600181518110612f5357fe5b6001600160a01b039092166020928302919091018201526040805163d06ca61f60e01b815260048101898152602482019283528451604483015284516000805160206134848339815191529463d06ca61f948c948894939192606490910191858201910280838360005b83811015612fd5578181015183820152602001612fbd565b50505050905001935050505060006040518083038186803b158015612ff957600080fd5b505afa15801561300d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561303657600080fd5b8101908080516040519392919084600160201b82111561305557600080fd5b90830190602082018581111561306a57600080fd5b82518660208202830111600160201b8211171561308657600080fd5b82525081516020918201928201910280838360005b838110156130b357818101518382015260200161309b565b505050509050016040525050506001815181106130cc57fe5b60200260200101519150505b60006001600160a01b03871660008051602061343e8339815191521480159061311857506001600160a01b03851660008051602061343e83398151915214155b1561333c5760408051600380825260808201909252606091602082018380388339019050509050878160008151811061314d57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008051602061343e8339815191528160018151811061318957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505085816002815181106131b757fe5b6001600160a01b039092166020928302919091018201526040805163d06ca61f60e01b8152600481018a8152602482019283528451604483015284516000805160206134848339815191529463d06ca61f948d948894939192606490910191858201910280838360005b83811015613239578181015183820152602001613221565b50505050905001935050505060006040518083038186803b15801561325d57600080fd5b505afa158015613271573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561329a57600080fd5b8101908080516040519392919084600160201b8211156132b957600080fd5b9083019060208201858111156132ce57600080fd5b82518660208202830111600160201b821117156132ea57600080fd5b82525081516020918201928201910280838360005b838110156133175781810151838201526020016132ff565b5050505090500160405250505060028151811061333057fe5b60200260200101519150505b80821061334d575091506108479050565b9250610847915050565b60408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291516000926133e89285929188169163dd62ed3e91604480820192602092909190829003018186803b1580156133b057600080fd5b505afa1580156133c4573d6000803e3d6000fd5b505050506040513d60208110156133da57600080fd5b50519063ffffffff61122016565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905290915061185390859061169b56fe000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc24f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573730000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a72315820e37591a1c764df9420b90657e9202d4e22cfb5e365950e3f243fa0e65cdbebbe64736f6c63430005100032
Deployed Bytecode Sourcemap
34611:17920:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52468:10;52482:9;52468:23;;52460:60;;;;;-1:-1:-1;;;52460:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34611:17920;35221:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35221:35:0;;;:::i;:::-;;;;-1:-1:-1;;;;;35221:35:0;;;;;;;;;;;;;;52062:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52062:86:0;;;:::i;52218:195::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52218:195:0;;;:::i;31943:72::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31943:72:0;;;:::i;31667:82::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31667:82:0;;;:::i;35026:51::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35026:51:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35026:51:0;-1:-1:-1;;;;;35026:51:0;;:::i;:::-;;;;;;;;;;;;;;;;51831:191;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51831:191:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51831:191:0;-1:-1:-1;;;;;51831:191:0;;:::i;36275:322::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;36275:322:0;;;;;;;;;;;;;:::i;32115:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32115:83:0;;;:::i;35120:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35120:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20624:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20624:140:0;;;:::i;35086:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35086:27:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;37203:1761;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;37203:1761:0;;;;;;;;;;;;;;;;;:::i;32205:93::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32205:93:0;;;:::i;45228:343::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45228:343:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45228:343:0;;;;;;;:::i;19813:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19813:79:0;;;:::i;20179:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20179:94:0;;;:::i;36639:330::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;36639:330:0;;;;;;;;;;;;;:::i;51585:238::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51585:238:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51585:238:0;;;;:::i;31756:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31756:88:0;;;:::i;32022:86::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32022:86:0;;;:::i;31851:85::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31851:85:0;;;:::i;31579:81::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31579:81:0;;;:::i;35184:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35184:30:0;;;:::i;20919:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20919:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20919:109:0;-1:-1:-1;;;;;20919:109:0;;:::i;35149:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35149:28:0;;;:::i;35221:35::-;;;-1:-1:-1;;;;;35221:35:0;;:::o;52062:86::-;20025:9;:7;:9::i;:::-;20017:54;;;;;-1:-1:-1;;;20017:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20017:54:0;;;;;;;;;;;;;;;52133:7;;;-1:-1:-1;;52122:18:0;;52133:7;;;;52132:8;52122:18;;;52062:86::o;52218:195::-;20025:9;:7;:9::i;:::-;20017:54;;;;;-1:-1:-1;;;20017:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20017:54:0;;;;;;;;;;;;;;;52292:21;52266:23;52346:19;:7;:5;:7::i;:::-;-1:-1:-1;;;;;52346:17:0;;:19::i;:::-;52376:29;;52324:41;;-1:-1:-1;;;;;;52376:12:0;;;:29;;;;;52389:15;;52376:29;;;;52389:15;52376:12;:29;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52376:29:0;20082:1;;52218:195::o;31943:72::-;31973:42;31943:72;:::o;31667:82::-;31707:42;31667:82;:::o;35026:51::-;;;;;;;;;;;;;:::o;51831:191::-;20025:9;:7;:9::i;:::-;20017:54;;;;;-1:-1:-1;;;20017:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20017:54:0;;;;;;;;;;;;;;;51925:38;;;-1:-1:-1;;;51925:38:0;;51957:4;51925:38;;;;;;51911:11;;-1:-1:-1;;;;;51925:23:0;;;;;:38;;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;51925:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51925:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51925:38:0;;-1:-1:-1;51974:40:0;52001:7;:5;:7::i;:::-;-1:-1:-1;;;;;51974:26:0;;;52010:3;51974:40;:26;:40;:::i;:::-;20082:1;51831:191;:::o;36275:322::-;36130:7;;36429;;36130;;36126:102;;;36154:28;;;-1:-1:-1;;;36154:28:0;;;;;;;;;;;;-1:-1:-1;;;36154:28:0;;;;;;;;;;;;;;36126:102;36497:13;;;:43;;;-1:-1:-1;;;36497:43:0;;;;;;;;;36472:22;;-1:-1:-1;;;;;36497:13:0;;;;:33;;:43;;;;;;;;;;;;;;:13;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;36497:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36497:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36497:43:0;;-1:-1:-1;36551:38:0;36557:7;36566:14;36497:43;36551:5;:38::i;:::-;;36215:1;36126:102;36275:322;;;;;:::o;32115:83::-;32156:42;32115:83;:::o;35120:22::-;;;;;;;;;:::o;20624:140::-;20025:9;:7;:9::i;:::-;20017:54;;;;;-1:-1:-1;;;20017:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20017:54:0;;;;;;;;;;;;;;;20723:1;20707:6;;20686:40;;20707:6;;;;-1:-1:-1;;;;;20707:6:0;;20686:40;;20723:1;;20686:40;20754:1;20737:19;;-1:-1:-1;;;;;;20737:19:0;;;20624:140::o;35086:27::-;;;;;;:::o;37203:1761::-;37370:7;17323:11;;;;17315:55;;;;;-1:-1:-1;;;17315:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17462:5;17448:19;;-1:-1:-1;;17448:19:0;;;36130:7;;17448:19;36130:7;36126:102;;;36154:28;;;-1:-1:-1;;;36154:28:0;;;;;;;;;;;;-1:-1:-1;;;36154:28:0;;;;;;;;;;;;;;36126:102;37410:1;37398:9;:13;37390:45;;;;;-1:-1:-1;;;37390:45:0;;;;;;;;;;;;-1:-1:-1;;;37390:45:0;;;;;;;;;;;;;;;37449:10;-1:-1:-1;;;;;37449:20:0;;;;:56;;-1:-1:-1;37475:13:0;;;:29;;;-1:-1:-1;;;37475:29:0;;-1:-1:-1;;;;;37475:29:0;;;;;;;;;;;;:13;;;;;:21;;:29;;;;;;;;;;;;;;;:13;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;37475:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37475:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37475:29:0;37473:32;37449:56;37446:106;;;37538:1;37521:19;;37446:106;37624:8;;37592:15;;37610:34;;37638:5;;37610:23;;:9;;37624:8;;;;;37610:13;:23::i;:::-;:27;:34;:27;:34;:::i;:::-;37592:52;-1:-1:-1;37671:16:0;37690:22;:9;37592:52;37690:22;:13;:22;:::i;:::-;37671:41;-1:-1:-1;;;;;;37797:20:0;;;37794:476;;37843:29;37866:5;37843:18;:9;37857:3;37843:18;:13;:18;:::i;:29::-;37833:39;-1:-1:-1;37913:30:0;37937:5;37913:19;:9;37927:4;37913:19;:13;:19;:::i;:30::-;37902:41;-1:-1:-1;37975:15:0;37993:36;37902:41;37993:22;:9;38007:7;37993:22;:13;:22;:::i;:::-;:26;:36;:26;:36;:::i;:::-;38095:24;;37975:54;;-1:-1:-1;;;;;;38095:15:0;;;:24;;;;;37975:54;;38095:24;;;;37975:54;38095:15;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;38160:23:0;;;;;;:15;:23;;;;;;:36;;38188:7;38160:36;:27;:36;:::i;:::-;-1:-1:-1;;;;;38134:23:0;;;;;;:15;:23;;;;;;;;;:62;;;;38216:42;;;;;;;38134:23;;38230:10;;38216:42;;;;;;;;;;37794:476;;38312:5;;:23;;:5;;;;-1:-1:-1;;;;;38312:5:0;;:23;;;;;;;;;;;;:5;:23;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;38351:34:0;;;;;;;;38365:10;;38351:34;;;;;;;;;;38435:16;38454:162;38482:7;35836:1;32066:42;-1:-1:-1;;;;;;;;;;;38597:8:0;38454:13;:162::i;:::-;38632:46;;;;;;;;;;;;;;38435:181;;-1:-1:-1;38647:10:0;;38632:46;;;;;;;;;;;38709:14;38697:8;:26;;38689:57;;;;;-1:-1:-1;;;38689:57:0;;;;;;;;;;;;-1:-1:-1;;;38689:57:0;;;;;;;;;;;;;;;38831:15;;38786:71;;32256:42;;-1:-1:-1;;;;;38831:15:0;38848:8;38786:71;:44;:71;:::i;:::-;38884:15;;38868:60;;;-1:-1:-1;;;38868:60:0;;-1:-1:-1;;;;;38868:60:0;;;;;;;;;;;;;;;38884:15;;;;;38868:41;;:60;;;;;38884:15;;38868:60;;;;;;;38884:15;;38868:60;;;5:2:-1;;;;30:1;27;20:12;5:2;38868:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;38948:8:0;;-1:-1:-1;;;;;;17628:11:0;:18;;-1:-1:-1;;17628:18:0;17642:4;17628:18;;;37203:1761;;-1:-1:-1;;;37203:1761:0:o;32205:93::-;32256:42;32205:93;:::o;45228:343::-;45342:7;45559:4;45387:169;45536:19;:9;45550:4;45536:19;:13;:19;:::i;:::-;45387:126;45439:59;45475:22;:9;45489:7;45475:22;:13;:22;:::i;:::-;45453:19;:6;45464:7;45453:19;:10;:19;:::i;:::-;45439:9;;45453:44;45439:59;:13;:59;:::i;:::-;45387:33;:126::i;:169::-;:176;;;;;;45367:196;;45228:343;;;;;:::o;19813:79::-;19851:7;19878:6;;;;-1:-1:-1;;;;;19878:6:0;;19813:79::o;20179:94::-;20219:4;20259:6;;;;;-1:-1:-1;;;;;20259:6:0;20243:12;:10;:12::i;:::-;-1:-1:-1;;;;;20243:22:0;;20236:29;;20179:94;:::o;36639:330::-;36130:7;;36797;;36130;;36126:102;;;36154:28;;;-1:-1:-1;;;36154:28:0;;;;;;;;;;;;-1:-1:-1;;;36154:28:0;;;;;;;;;;;;;;36126:102;36865:13;;;:47;;;-1:-1:-1;;;36865:47:0;;;;;;;;;36840:22;;-1:-1:-1;;;;;36865:13:0;;;;:35;;:47;;;;;;;;;;;;;;:13;:47;;;5:2:-1;;;;30:1;27;20:12;51585:238:0;20025:9;:7;:9::i;:::-;20017:54;;;;;-1:-1:-1;;;20017:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20017:54:0;;;;;;;;;;;;;;;51721:5;51705:13;:21;;;51661:119;;;;;-1:-1:-1;;;51661:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;51791:8;:24;;;;;;;;-1:-1:-1;;51791:24:0;;;;;;;;;51585:238::o;31756:88::-;31802:42;31756:88;:::o;32022:86::-;32066:42;32022:86;:::o;31851:85::-;31894:42;31851:85;:::o;31579:81::-;31618:42;31579:81;:::o;35184:30::-;;;-1:-1:-1;;;;;35184:30:0;;:::o;20919:109::-;20025:9;:7;:9::i;:::-;20017:54;;;;;-1:-1:-1;;;20017:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20017:54:0;;;;;;;;;;;;;;;20992:28;21011:8;20992:18;:28::i;:::-;20919:109;:::o;35149:28::-;;;;;;-1:-1:-1;;;;;35149:28:0;;:::o;9989:127::-;10099:7;9989:127;;;;:::o;12124:176::-;12233:58;;;-1:-1:-1;;;;;12233:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12233:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;12207:85:0;;12226:5;;12207:18;:85::i;2285:471::-;2343:7;2588:6;2584:47;;-1:-1:-1;2618:1:0;2611:8;;2584:47;2655:5;;;2659:1;2655;:5;:1;2679:5;;;;;:10;2671:56;;;;-1:-1:-1;;;2671:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3224:132;3282:7;3309:39;3313:1;3316;3309:39;;;;;;;;;;;;;;;;;:3;:39::i;1369:136::-;1427:7;1454:43;1458:1;1461;1454:43;;;;;;;;;;;;;;;;;:3;:43::i;913:181::-;971:7;1003:5;;;1027:6;;;;1019:46;;;;;-1:-1:-1;;;1019:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;38972:2024;39193:7;39213:20;39236:151;39267:25;39307:7;39329:16;39360;39236;:151::i;:::-;39213:174;;39433:16;39452:112;39479:25;39519:12;39546:7;39452:12;:112::i;:::-;39730:67;;;-1:-1:-1;;;39730:67:0;;-1:-1:-1;;;;;39730:67:0;;;;;;;;;;;;;;;39433:131;;-1:-1:-1;39615:20:0;;;;;;35500:42;;39730:31;;:67;;;;;;;;;;;;;;35500:42;39730:67;;;5:2:-1;;;;30:1;27;20:12;5:2;39730:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39730:67:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39730:67:0;39852:18;;;-1:-1:-1;;;39852:18:0;;;;39730:67;;-1:-1:-1;39820:12:0;;;;-1:-1:-1;;;;;39852:16:0;;;;;:18;;;;;;;;;;;;;;;:16;:18;;;5:2:-1;;;;30:1;27;20:12;5:2;39852:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39852:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39852:18:0;;;;;;;-1:-1:-1;;;;;39819:51:0;;;;-1:-1:-1;39819:51:0;;-1:-1:-1;;;;;;39887:32:0;;;;;;;39883:882;;;39936:20;39959:37;39981:4;39987:8;39959:21;:37::i;:::-;39936:60;;40085:1;40069:12;:17;40065:53;;40103:15;:8;40116:1;40103:15;:12;:15;:::i;:::-;40088:30;;40065:53;40148:124;40179:12;40210:16;40245:12;40148;:124::i;:::-;40133:139;-1:-1:-1;40302:26:0;:8;40315:12;40302:26;:12;:26;:::i;:::-;40287:41;;39883:882;;;;40361:20;40384:37;40406:4;40412:8;40384:21;:37::i;:::-;40361:60;;40510:1;40494:12;:17;40490:53;;40528:15;:8;40541:1;40528:15;:12;:15;:::i;:::-;40513:30;;40490:53;40573:124;40604:12;40635:16;40670:12;40573;:124::i;:::-;40558:139;-1:-1:-1;40727:26:0;:8;40740:12;40727:26;:12;:26;:::i;:::-;40712:41;;39883:882;;40797:191;40827:14;40860:16;40895;40930:12;40961;40797:11;:191::i;:::-;40777:211;38972:2024;-1:-1:-1;;;;;;;;;;;;;38972:2024:0:o;12520:621::-;12890:10;;;12889:62;;-1:-1:-1;12906:39:0;;;-1:-1:-1;;;12906:39:0;;12930:4;12906:39;;;;-1:-1:-1;;;;;12906:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;12906:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12906:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12906:39:0;:44;12889:62;12881:152;;;;-1:-1:-1;;;12881:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13070:62;;;-1:-1:-1;;;;;13070:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;13070:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;13044:89:0;;13063:5;;13044:18;:89::i;34269:335::-;34317:9;34347:1;34343;:5;34339:235;;;-1:-1:-1;34369:1:0;34405;34401;34397:5;;:9;34421:92;34432:1;34428;:5;34421:92;;;34458:1;34454:5;;34496:1;34491;34487;34483;:5;;;;;;:9;34482:15;;;;;;34478:19;;34421:92;;;34339:235;;;;34534:6;;34530:44;;-1:-1:-1;34561:1:0;34269:335;;;:::o;18519:98::-;18599:10;18519:98;:::o;21134:229::-;-1:-1:-1;;;;;21208:22:0;;21200:73;;;;-1:-1:-1;;;21200:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21310:6;;;21289:38;;-1:-1:-1;;;;;21289:38:0;;;;21310:6;;;;;;21289:38;;;21338:6;:17;;-1:-1:-1;;;;;21338:17:0;;;;;-1:-1:-1;;;;;;21338:17:0;;;;;;;;;21134:229::o;14163:1114::-;14767:27;14775:5;-1:-1:-1;;;;;14767:25:0;;:27::i;:::-;14759:71;;;;;-1:-1:-1;;;14759:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14904:12;14918:23;14953:5;-1:-1:-1;;;;;14945:19:0;14965:4;14945:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14945:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;14903:67:0;;;;14989:7;14981:52;;;;;-1:-1:-1;;;14981:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15050:17;;:21;15046:224;;15192:10;15181:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15181:30:0;15173:85;;;;-1:-1:-1;;;15173:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14163:1114;;;;:::o;3886:345::-;3972:7;4074:12;4067:5;4059:28;;;;-1:-1:-1;;;4059:28: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;4059:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4098:9;4114:1;4110;:5;;;;;;;3886:345;-1:-1:-1;;;;;3886:345:0:o;1842:192::-;1928:7;1964:12;1956:6;;;;1948:29;;;;-1:-1:-1;;;1948:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1948:29:0;-1:-1:-1;;;2000:5:0;;;1842:192::o;42339:1858::-;42535:7;-1:-1:-1;;;;;42602:39:0;;42598:116;;-1:-1:-1;;;;;;;;;;;42658:44:0;;42598:116;42759:16;-1:-1:-1;;;;;42730:45:0;:25;-1:-1:-1;;;;;42730:45:0;;42726:1464;;;-1:-1:-1;42799:16:0;42792:23;;42726:1464;42866:16;-1:-1:-1;;;;;42837:45:0;:25;-1:-1:-1;;;;;42837:45:0;;42833:1357;;;-1:-1:-1;42906:16:0;42899:23;;42833:1357;43010:128;;;-1:-1:-1;;;43010:128:0;;-1:-1:-1;;;;;43010:128:0;;;;;;;;;;;;;;;42955:19;;35500:42;;43010:31;;:128;;;;;;;;;;;;;;;35500:42;43010:128;;;5:2:-1;;;;30:1;27;20:12;5:2;43010:128:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43010:128:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43010:128:0;43201:18;;;-1:-1:-1;;;43201:18:0;;;;43010:128;;-1:-1:-1;43169:12:0;;;;-1:-1:-1;;;;;43201:16:0;;;;;:18;;;;;;;;;;;;;;;:16;:18;;;5:2:-1;;;;30:1;27;20:12;5:2;43201:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43201:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43201:18:0;;;;;;;-1:-1:-1;;;;;43168:51:0;;;;-1:-1:-1;43168:51:0;;-1:-1:-1;43236:13:0;;43305:12;;;43301:175;;43353:4;43346;:11;;;;;;43338:19;;43396:4;43376:24;;43301:175;;;43456:4;43449;:11;;;;;;43441:19;;43301:175;43528:15;43546:140;43585:25;43629:7;43655:16;43546:20;:140::i;:::-;43528:158;;43701:15;43719:140;43758:25;43802:7;43828:16;43719:20;:140::i;:::-;43701:158;;43880:17;43876:303;;;43941:7;43932:5;43922:7;:15;:26;43918:102;;43957:16;43950:23;;;;;;;;;;;43918:102;44004:16;43997:23;;;;;;;;;;;43876:303;44084:7;44075:5;44065:7;:15;:26;44061:102;;44100:16;44093:23;;;;;;;;;;;44061:102;44147:16;44140:23;;;;;;;;;42833:1357;42339:1858;;;;;;:::o;45937:4891::-;46101:19;46166:23;-1:-1:-1;;;;;46137:52:0;:25;-1:-1:-1;;;;;46137:52:0;;46133:104;;;-1:-1:-1;46213:12:0;46206:19;;46133:104;-1:-1:-1;;;;;46253:39:0;;46249:4512;;-1:-1:-1;;;;;46313:43:0;;-1:-1:-1;;;;;;;;;;;46313:43:0;46309:175;;;-1:-1:-1;;;;;;;;;;;;;;;;46377:31:0;;46415:12;46377:53;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46377:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46377:53:0;;;;;46456:12;46449:19;;;;46309:175;46524:16;;;46538:1;46524:16;;;46500:21;46524:16;;;;;46500:21;46524:16;;;;;105:10:-1;46524:16:0;88:34:-1;136:17;;-1:-1;46524:16:0;46500:40;;-1:-1:-1;;;;;;;;;;;46555:4:0;46560:1;46555:7;;;;;;;;;;;;;:26;-1:-1:-1;;;;;46555:26:0;;;-1:-1:-1;;;;;46555:26:0;;;;;46606:23;46596:4;46601:1;46596:7;;;;;;;;-1:-1:-1;;;;;46596:33:0;;;:7;;;;;;;;;;:33;46658:121;;-1:-1:-1;;;46658:121:0;;46746:1;46658:121;;;;;;46763:4;46658:121;;;;;;-1:-1:-1;;;46658:121:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35346:42:0;46658:35;;46718:12;;46746:1;46749:4;;46763;35601:66;46658:121;;;;;;;;;;;;;;;;;-1:-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;46658:121:0;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46658:121:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46658:121:0;;;;;;;39:16:-1;36:1;17:17;2:54;101:4;46658:121:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;46658:121:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;46658:121:0;;421:4:-1;412:14;;;;46658:121:0;;;;;412:14:-1;46658:121: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;46658:121:0;;;;;;;;;;;46794:1;46780:4;:11;:15;46658:138;;;;;;;;;;;;;;46644:152;;46249:4512;;;;-1:-1:-1;;;;;46818:37:0;;46814:3947;;-1:-1:-1;;;;;46876:45:0;;-1:-1:-1;;;;;;;;;;;46876:45:0;46872:170;;;-1:-1:-1;;;;;;;;;;;;;;;;46942:32:0;;46975:12;46942:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46942:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46942:46:0;;;;47014:12;47007:19;;;;46872:170;47058:142;-1:-1:-1;;;;;47058:55:0;;-1:-1:-1;;;;;;;;;;;47173:12:0;47058:142;:55;:142;:::i;:::-;47241:16;;;47255:1;47241:16;;;47217:21;47241:16;;;;;47217:21;47241:16;;;;;105:10:-1;47241:16:0;88:34:-1;136:17;;-1:-1;47241:16:0;47217:40;;47282:25;47272:4;47277:1;47272:7;;;;;;;;;;;;;:35;-1:-1:-1;;;;;47272:35:0;;;-1:-1:-1;;;;;47272:35:0;;;;;-1:-1:-1;;;;;;;;;;;47322:4:0;47327:1;47322:7;;;;;;;;-1:-1:-1;;;;;47322:26:0;;;:7;;;;;;;;;;:26;47377:183;;-1:-1:-1;;;47377:183:0;;;;;;;;47462:1;47377:183;;;;;;47513:4;47377:183;;;;;;-1:-1:-1;;;47377:183:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35346:42:0;47377:35;;47431:12;;47482:4;;47513;35601:66;47377:183;;;;;;;;;;;;;;;;;-1:-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;47377:183:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47377:183:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47377:183:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;47377:183:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;46814:3947:0;47610:142;-1:-1:-1;;;;;47610:55:0;;-1:-1:-1;;;;;;;;;;;47725:12:0;47610:142;:55;:142;:::i;:::-;-1:-1:-1;;;;;47773:45:0;;-1:-1:-1;;;;;;;;;;;47773:45:0;47769:2981;;-1:-1:-1;;;;;47843:43:0;;-1:-1:-1;;;;;;;;;;;47843:43:0;47839:2458;;47985:156;;;-1:-1:-1;;;47985:156:0;;-1:-1:-1;;;;;47985:156:0;;;;;;;;;;;;;;;47969:13;;35500:42;;47985:31;;:156;;;;;;;;;;;;;;;35500:42;47985:156;;;5:2:-1;;;;30:1;27;20:12;5:2;47985:156:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47985:156:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47985:156:0;48189:16;;;48203:1;48189:16;;;48164:22;48189:16;;;;;47985:156;;-1:-1:-1;48189:16:0;;;;;;;105:10:-1;48189:16:0;88:34:-1;136:17;;-1:-1;48189:16:0;48164:41;;48239:25;48228:5;48234:1;48228:8;;;;;;;;;;;;;:36;-1:-1:-1;;;;;48228:36:0;;;-1:-1:-1;;;;;48228:36:0;;;;;48298:23;48287:5;48293:1;48287:8;;;;;;;;-1:-1:-1;;;;;48287:34:0;;;:8;;;;;;;;;:34;48344:12;;48383:19;;;48379:219;;48438:133;;;-1:-1:-1;;;48438:133:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35346:42:0;48438:27;;48496:12;;48539:5;;48438:133;;;;;;;;;;;;;;;-1:-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;48438:133:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48438:133:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48438:133:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;48438:133:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;48438:133:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;48438:133:0;;421:4:-1;412:14;;;;48438:133:0;;;;;412:14:-1;48438:133: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;48438:133:0;;;;;;;;;;;48572:1;48438:136;;;;;;;;;;;;;;48431:143;;48379:219;48713:16;;;48727:1;48713:16;;;;;;;;;48688:22;;48713:16;;;48688:22;;105:10:-1;48713:16:0;88:34:-1;136:17;;-1:-1;48713:16:0;48688:41;;48763:25;48752:5;48758:1;48752:8;;;;;;;;;;;;;:36;-1:-1:-1;;;;;48752:36:0;;;-1:-1:-1;;;;;48752:36:0;;;;;-1:-1:-1;;;;;;;;;;;48811:5:0;48817:1;48811:8;;;;;;;;;;;;;:27;-1:-1:-1;;;;;48811:27:0;;;-1:-1:-1;;;;;48811:27:0;;;;;48872:23;48861:5;48867:1;48861:8;;;;;;;;-1:-1:-1;;;;;48861:34:0;;;:8;;;;;;;;;;:34;48935:121;;;-1:-1:-1;;;48935:121:0;;;;;;;;;;;;;;;;;;;;;;48920:12;;-1:-1:-1;;;;;;;;;;;35346:42:0;48935:27;;48989:12;;49028:5;;48935:121;;;;;;;;;;;;;;;48920:12;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;48935:121:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48935:121:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48935:121:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;48935:121:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;48935:121:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;48935:121:0;;421:4:-1;412:14;;;;48935:121:0;;;;;412:14:-1;48935:121: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;48935:121:0;;;;;;;;;;;49057:1;48935:124;;;;;;;;;;;;;;48920:139;;49096:4;49088;:12;49084:708;;-1:-1:-1;;;;;;;;;;;;;;;;49143:38:0;;49212:12;49255:1;49287:5;49331:4;-1:-1:-1;;;49143:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49143:259:0;-1:-1:-1;;;;;49143:259: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;49143:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49143:259:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49143:259:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;49143:259:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;49143:259:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;49143:259:0;;421:4:-1;412:14;;;;49143:259:0;;;;;412:14:-1;49143:259: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;49143:259:0;;;;;;;;;;;49418:1;49403:5;:12;:16;49143:277;;;;;;;;;;;;;;49129:291;;49084:708;;;-1:-1:-1;;;;;;;;;;;;;;;;49491:38:0;;49560:12;49603:1;49635:5;49679:4;-1:-1:-1;;;49491:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49491:259:0;-1:-1:-1;;;;;49491:259: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;49491:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49491:259:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49491:259:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;49491:259:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;49491:259:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;49491:259:0;;421:4:-1;412:14;;;;49491:259:0;;;;;412:14:-1;49491:259: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;49491:259:0;;;;;;;;;;;49766:1;49751:5;:12;:16;49491:277;;;;;;;;;;;;;;49477:291;;49084:708;47839:2458;;;;;;;;49864:16;;;49878:1;49864:16;;;49840:21;49864:16;;;;;49840:21;49864:16;;;;;105:10:-1;49864:16:0;88:34:-1;136:17;;-1:-1;49864:16:0;49840:40;;49913:25;49903:4;49908:1;49903:7;;;;;;;;;;;;;:35;-1:-1:-1;;;;;49903:35:0;;;-1:-1:-1;;;;;49903:35:0;;;;;-1:-1:-1;;;;;;;;;;;49961:4:0;49966:1;49961:7;;;;;;;;-1:-1:-1;;;;;49961:26:0;;;;:7;;;;;;;;;;:26;50026:234;;-1:-1:-1;;;50026:234:0;;;;;;;;50130:1;50026:234;;;;;;50197:4;50026:234;;;;;;-1:-1:-1;;;50026:234:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35346:42:0;50026:38;;:234;;;;50197:4;35601:66;50026:234;;;;;;;;;;;;;;;;;-1:-1:-1;27:10;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;47839:2458:0;47769:2981;;;50361:16;;;50375:1;50361:16;;;50337:21;50361:16;;;;;50337:21;50361:16;;;;;105:10:-1;50361:16:0;88:34:-1;136:17;;-1:-1;50361:16:0;50337:40;;-1:-1:-1;;;;;;;;;;;50396:4:0;50401:1;50396:7;;;;;;;;;;;;;:26;-1:-1:-1;;;;;50396:26:0;;;-1:-1:-1;;;;;50396:26:0;;;;;50451:23;50441:4;50446:1;50441:7;;;;;;;;-1:-1:-1;;;;;50441:33:0;;;:7;;;;;;;;;;:33;50507:210;;-1:-1:-1;;;50507:210:0;;;;;;;;50603:1;50507:210;;;;;;50662:4;50507:210;;;;;;-1:-1:-1;;;50507:210:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35346:42:0;50507:38;;50568:12;;50627:4;;50662;35601:66;50507:210;;;;;;;;;;;;;;;;;-1:-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;50507:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50507:210:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;50507:210:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;50507:210:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;50507:210:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;50507:210:0;;421:4:-1;412:14;;;;50507:210:0;;;;;412:14:-1;50507:210: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;50507:210:0;;;;;;;;;;;50732:1;50718:4;:11;:15;50507:227;;;;;;;;;;;;;;50493:241;;47769:2981;;50793:1;50779:11;:15;50771:49;;;;;-1:-1:-1;;;50771:49:0;;;;;;;;;;;;-1:-1:-1;;;50771:49:0;;;;;;;;;;;;;;41004:1327;41215:7;41235:121;-1:-1:-1;;;;;41235:46:0;;-1:-1:-1;;;;;;;;;;;41333:12:0;41235:121;:46;:121;:::i;:::-;41367;-1:-1:-1;;;;;41367:46:0;;-1:-1:-1;;;;;;;;;;;41465:12:0;41367:121;:46;:121;:::i;:::-;41550:250;;;-1:-1:-1;;;41550:250:0;;-1:-1:-1;;;;;41550:250:0;;;;;;;;;;;;;;;;;;;;;;;;;41721:1;41550:250;;;;;;;;;;41761:4;41550:250;;;;-1:-1:-1;;;41550:250:0;;;;;;41502:15;;;;;;-1:-1:-1;;;;;;;;;;;35346:42:0;41550:40;;:250;;;;;;;;;;;;;;;41502:15;35346:42;41550:250;;;5:2:-1;;;;30:1;27;20:12;5:2;41550:250:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41550:250:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41550:250:0;;;;;;;;;;;;;-1:-1:-1;41550:250:0;;-1:-1:-1;41550:250:0;-1:-1:-1;41893:1:0;41865:25;:12;41550:250;41865:25;:16;:25;:::i;:::-;:29;41861:191;;;41911:129;41967:14;42000:25;:12;42017:7;42000:25;:16;:25;:::i;:::-;-1:-1:-1;;;;;41911:37:0;;;:129;;:37;:129;:::i;:::-;42143:1;42115:25;:12;42132:7;42115:25;:16;:25;:::i;:::-;:29;42111:191;;;42161:129;42217:14;42250:25;:12;42267:7;42250:25;:16;:25;:::i;:::-;-1:-1:-1;;;;;42161:37:0;;;:129;;:37;:129;:::i;:::-;42321:2;41004:1327;-1:-1:-1;;;;;;;;41004:1327:0:o;9153:619::-;9213:4;9681:20;;9524:66;9721:23;;;;;;:42;;-1:-1:-1;;9748:15:0;;;9713:51;-1:-1:-1;;9153:619:0:o;44205:1015::-;44416:43;;;-1:-1:-1;;;44416:43:0;;-1:-1:-1;;;;;44416:43:0;;;;;;;;;;;;;;;44334:7;;;;35500:42;;44416:31;;:43;;;;;;;;;;;;;;35500:42;44416:43;;;5:2:-1;;;;30:1;27;20:12;5:2;44416:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44416:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44416:43:0;;-1:-1:-1;44472:12:0;-1:-1:-1;;;;;44499:19:0;;;44495:220;;44560:16;;;44574:1;44560:16;;;44535:22;44560:16;;;;;44535:22;44560:16;;;;;105:10:-1;44560:16:0;88:34:-1;136:17;;-1:-1;44560:16:0;44535:41;;44602:5;44591;44597:1;44591:8;;;;;;;;;;;;;:16;-1:-1:-1;;;;;44591:16:0;;;-1:-1:-1;;;;;44591:16:0;;;;;44633:3;44622:5;44628:1;44622:8;;;;;;;;-1:-1:-1;;;;;44622:14:0;;;:8;;;;;;;;;;:14;44660:40;;;-1:-1:-1;;;44660:40:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35346:42:0;44660:27;;44688:4;;44694:5;;44660:40;;;;;;;;;;;;;;;;-1:-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;44660:40:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44660:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44660:40:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;44660:40:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;44660:40:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;44660:40:0;;421:4:-1;412:14;;;;44660:40:0;;;;;412:14:-1;44660:40: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;44660:40:0;;;;;;;;;;;44701:1;44660:43;;;;;;;;;;;;;;44653:50;;44495:220;;44727:12;-1:-1:-1;;;;;44809:25:0;;-1:-1:-1;;;;;;;;;;;44809:25:0;;;;44808:54;;-1:-1:-1;;;;;;44839:23:0;;-1:-1:-1;;;;;;;;;;;44839:23:0;;44808:54;44804:297;;;44904:16;;;44918:1;44904:16;;;;;;;;;44879:22;;44904:16;;;44879:22;;105:10:-1;44904:16:0;88:34:-1;136:17;;-1:-1;44904:16:0;44879:41;;44946:5;44935;44941:1;44935:8;;;;;;;;;;;;;:16;-1:-1:-1;;;;;44935:16:0;;;-1:-1:-1;;;;;44935:16:0;;;;;-1:-1:-1;;;;;;;;;;;44966:5:0;44972:1;44966:8;;;;;;;;;;;;;:27;-1:-1:-1;;;;;44966:27:0;;;-1:-1:-1;;;;;44966:27:0;;;;;45019:3;45008:5;45014:1;45008:8;;;;;;;;-1:-1:-1;;;;;45008:14:0;;;:8;;;;;;;;;;:14;45046:40;;;-1:-1:-1;;;45046:40:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35346:42:0;45046:27;;45074:4;;45080:5;;45046:40;;;;;;;;;;;;;;;;-1:-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;45046:40:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45046:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45046:40:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;45046:40:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;45046:40:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;45046:40:0;;421:4:-1;412:14;;;;45046:40:0;;;;;412:14:-1;45046:40: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;45046:40:0;;;;;;;;;;;45087:1;45046:43;;;;;;;;;;;;;;45039:50;;44804:297;;45125:4;45117;:12;45113:100;;-1:-1:-1;45153:4:0;-1:-1:-1;45146:11:0;;-1:-1:-1;45146:11:0;45113:100;45197:4;-1:-1:-1;45190:11:0;;-1:-1:-1;;45190:11:0;13149:285;13269:39;;;-1:-1:-1;;;13269:39:0;;13293:4;13269:39;;;;-1:-1:-1;;;;;13269:39:0;;;;;;;;;13246:20;;13269:50;;13313:5;;13269:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;13269:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13269:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13269:39:0;;:50;:43;:50;:::i;:::-;13356:69;;;-1:-1:-1;;;;;13356:69:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;13356:69:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;13246:73:0;;-1:-1:-1;13330:96:0;;13349:5;;13330:18;:96::i
Swarm Source
bzzr://e37591a1c764df9420b90657e9202d4e22cfb5e365950e3f243fa0e65cdbebbe
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.