Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 43 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Deposit | 22034309 | 363 days ago | IN | 0 ETH | 0.00018743 | ||||
| Deposit | 22034303 | 363 days ago | IN | 0 ETH | 0.00014225 | ||||
| Deposit | 21226913 | 476 days ago | IN | 0 ETH | 0.00106437 | ||||
| Deposit | 21226908 | 476 days ago | IN | 0 ETH | 0.00091866 | ||||
| Withdraw | 20047147 | 641 days ago | IN | 0 ETH | 0.00060761 | ||||
| Withdraw | 19764477 | 680 days ago | IN | 0 ETH | 0.00064528 | ||||
| Withdraw | 19762232 | 681 days ago | IN | 0 ETH | 0.00123391 | ||||
| Withdraw | 19685275 | 692 days ago | IN | 0 ETH | 0.00079317 | ||||
| Deposit | 19665805 | 694 days ago | IN | 0 ETH | 0.00092917 | ||||
| Withdraw | 19665777 | 694 days ago | IN | 0 ETH | 0.00128578 | ||||
| Deposit | 19654880 | 696 days ago | IN | 0 ETH | 0.00151194 | ||||
| Deposit | 19634262 | 699 days ago | IN | 0 ETH | 0.00217831 | ||||
| Emergency Withdr... | 19632632 | 699 days ago | IN | 0 ETH | 0.0019221 | ||||
| Emergency Withdr... | 19630620 | 699 days ago | IN | 0 ETH | 0.00106542 | ||||
| Deposit | 19630293 | 699 days ago | IN | 0 ETH | 0.00194891 | ||||
| Deposit | 19628692 | 699 days ago | IN | 0 ETH | 0.00229691 | ||||
| Deposit | 19627758 | 700 days ago | IN | 0 ETH | 0.00141887 | ||||
| Emergency Withdr... | 19627755 | 700 days ago | IN | 0 ETH | 0.0012754 | ||||
| Emergency Withdr... | 19627198 | 700 days ago | IN | 0 ETH | 0.00138599 | ||||
| Deposit | 19626761 | 700 days ago | IN | 0 ETH | 0.00446791 | ||||
| Deposit | 19624086 | 700 days ago | IN | 0 ETH | 0.00247209 | ||||
| Deposit | 19622328 | 700 days ago | IN | 0 ETH | 0.00284577 | ||||
| Deposit | 19619818 | 701 days ago | IN | 0 ETH | 0.00485723 | ||||
| Deposit | 19617763 | 701 days ago | IN | 0 ETH | 0.00294795 | ||||
| Deposit | 19616686 | 701 days ago | IN | 0 ETH | 0.00301911 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
RawBlockStake7
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-03-28
*/
//SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.11;
//import "@nomiclabs/buidler/console.sol";
/*
* @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() {}
function _msgSender() internal view returns (address payable) {
return payable(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;
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
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() {
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(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public 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;
}
}
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
z = x < y ? x : y;
}
// babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
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;
}
}
}
interface IBEP20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the token decimals.
*/
function decimals() external view returns (uint8);
/**
* @dev Returns the token symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the token name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the bep token owner.
*/
function getOwner() external view returns (address);
/**
* @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
);
}
/**
* @title SafeBEP20
* @dev Wrappers around BEP20 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 SafeBEP20 for IBEP20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeBEP20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IBEP20 token, address to, uint256 value) internal {
_callOptionalReturn(
token,
abi.encodeWithSelector(token.transfer.selector, to, value)
);
}
function safeTransferFrom(
IBEP20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(
token,
abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
);
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IBEP20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IBEP20 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),
"SafeBEP20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(
token,
abi.encodeWithSelector(token.approve.selector, spender, value)
);
}
function safeIncreaseAllowance(
IBEP20 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(
IBEP20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(
value,
"SafeBEP20: 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(IBEP20 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. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(
data,
"SafeBEP20: low-level call failed"
);
if (returndata.length > 0) {
// Return data is optional
// solhint-disable-next-line max-line-length
require(
abi.decode(returndata, (bool)),
"SafeBEP20: BEP20 operation did not succeed"
);
}
}
}
/**
* @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 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].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(
address(this).balance >= amount,
"Address: insufficient balance"
);
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{value: amount}("");
require(
success,
"Address: unable to send value, recipient may have reverted"
);
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
value,
"Address: low-level call with value failed"
);
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(
address(this).balance >= value,
"Address: insufficient balance for call"
);
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(
address target,
bytes memory data,
uint256 weiValue,
string memory errorMessage
) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{value: weiValue}(
data
);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being 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 percentage 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.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @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 making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
contract RawBlockStake7 is Ownable, ReentrancyGuard {
using SafeMath for uint256;
using SafeBEP20 for IBEP20;
// Info of each user.
struct UserInfo {
uint256 amount; // How many LP tokens the user has provided.
uint256 rewardDebt; // Reward debt. See explanation below.
}
// Info of each pool.
struct PoolInfo {
IBEP20 lpToken; // Address of LP token contract.
uint256 allocPoint; // How many allocation points assigned to this pool. Tokens to distribute per block.
uint256 lastRewardTimestamp; // Last block number that Tokens distribution occurs.
uint256 accTokensPerShare; // Accumulated Tokens per share, times 1e12. See below.
}
IBEP20 public immutable stakingToken;
IBEP20 public immutable rewardToken;
mapping(address => uint256) public holderUnlockTime;
uint256 public totalStaked;
uint256 public apy;
uint256 public lockDuration;
uint256 public exitPenaltyPerc;
// Info of each pool.
PoolInfo[] public poolInfo;
// Info of each user that stakes LP tokens.
mapping(address => UserInfo) public userInfo;
// Total allocation poitns. Must be the sum of all allocation points in all pools.
uint256 private totalAllocPoint = 0;
event Deposit(address indexed user, uint256 amount);
event Withdraw(address indexed user, uint256 amount);
event EmergencyWithdraw(address indexed user, uint256 amount);
constructor() {
stakingToken = IBEP20(0xF614E54D972bAb297172765Ca83683288f3eae36);
rewardToken = stakingToken;
apy = 150;
lockDuration = 7 days;
exitPenaltyPerc = 5;
// staking pool
poolInfo.push(
PoolInfo({
lpToken: stakingToken,
allocPoint: 1000,
lastRewardTimestamp: 2199615,
accTokensPerShare: 0
})
);
totalAllocPoint = 1000;
}
function stopReward() external onlyOwner {
updatePool(0);
apy = 0;
}
function startReward() external onlyOwner {
require(
poolInfo[0].lastRewardTimestamp == 21799615,
"Can only start rewards once"
);
poolInfo[0].lastRewardTimestamp = block.timestamp;
}
// View function to see pending Reward on frontend.
function pendingReward(address _user) external view returns (uint256) {
PoolInfo storage pool = poolInfo[0];
UserInfo storage user = userInfo[_user];
if (pool.lastRewardTimestamp == 21799615) {
return 0;
}
uint256 accTokensPerShare = pool.accTokensPerShare;
uint256 lpSupply = totalStaked;
if (block.timestamp > pool.lastRewardTimestamp && lpSupply != 0) {
uint256 tokenReward = calculateNewRewards()
.mul(pool.allocPoint)
.div(totalAllocPoint);
accTokensPerShare = accTokensPerShare.add(
tokenReward.mul(1e12).div(lpSupply)
);
}
return
user.amount.mul(accTokensPerShare).div(1e12).sub(user.rewardDebt);
}
// Update reward variables of the given pool to be up-to-date.
function updatePool(uint256 _pid) internal {
PoolInfo storage pool = poolInfo[_pid];
if (block.timestamp <= pool.lastRewardTimestamp) {
return;
}
uint256 lpSupply = totalStaked;
if (lpSupply == 0) {
pool.lastRewardTimestamp = block.timestamp;
return;
}
uint256 tokenReward = calculateNewRewards().mul(pool.allocPoint).div(
totalAllocPoint
);
pool.accTokensPerShare = pool.accTokensPerShare.add(
tokenReward.mul(1e12).div(lpSupply)
);
pool.lastRewardTimestamp = block.timestamp;
}
// Update reward variables for all pools. Be careful of gas spending!
function massUpdatePools() public onlyOwner {
uint256 length = poolInfo.length;
for (uint256 pid = 0; pid < length; ++pid) {
updatePool(pid);
}
}
// Stake primary tokens
function deposit(uint256 _amount) public nonReentrant {
if (holderUnlockTime[msg.sender] == 0) {
holderUnlockTime[msg.sender] = block.timestamp + lockDuration;
}
PoolInfo storage pool = poolInfo[0];
UserInfo storage user = userInfo[msg.sender];
updatePool(0);
if (user.amount > 0) {
uint256 pending = user
.amount
.mul(pool.accTokensPerShare)
.div(1e12)
.sub(user.rewardDebt);
if (pending > 0) {
require(
pending <= rewardsRemaining(),
"Cannot withdraw other people's staked tokens. Contact an admin A."
);
rewardToken.safeTransfer(address(msg.sender), pending);
}
}
uint256 amountTransferred = 0;
if (_amount > 0) {
uint256 initialBalance = pool.lpToken.balanceOf(address(this));
pool.lpToken.safeTransferFrom(
address(msg.sender),
address(this),
_amount
);
amountTransferred =
pool.lpToken.balanceOf(address(this)) -
initialBalance;
user.amount = user.amount.add(amountTransferred);
totalStaked += amountTransferred;
}
user.rewardDebt = user.amount.mul(pool.accTokensPerShare).div(1e12);
emit Deposit(msg.sender, _amount);
}
// Withdraw primary tokens from STAKING.
function withdraw() public nonReentrant {
require(
holderUnlockTime[msg.sender] <= block.timestamp,
"May not do normal withdraw early"
);
PoolInfo storage pool = poolInfo[0];
UserInfo storage user = userInfo[msg.sender];
uint256 _amount = user.amount;
updatePool(0);
uint256 pending = user.amount.mul(pool.accTokensPerShare).div(1e12).sub(
user.rewardDebt
);
if (pending > 0) {
require(
pending <= rewardsRemaining(),
"Cannot withdraw other people's staked tokens. Contact an admin B."
);
rewardToken.safeTransfer(address(msg.sender), pending);
}
if (_amount > 0) {
user.amount = 0;
totalStaked -= _amount;
pool.lpToken.safeTransfer(address(msg.sender), _amount);
}
user.rewardDebt = user.amount.mul(pool.accTokensPerShare).div(1e12);
if (user.amount > 0) {
holderUnlockTime[msg.sender] = block.timestamp + lockDuration;
} else {
holderUnlockTime[msg.sender] = 0;
}
emit Withdraw(msg.sender, _amount);
}
// Withdraw without caring about rewards. EMERGENCY ONLY.
function emergencyWithdraw() external nonReentrant {
PoolInfo storage pool = poolInfo[0];
UserInfo storage user = userInfo[msg.sender];
uint256 _amount = user.amount;
totalStaked -= _amount;
// exit penalty for early unstakers, penalty held on contract as rewards.
if (holderUnlockTime[msg.sender] >= block.timestamp) {
_amount -= (_amount * exitPenaltyPerc) / 100;
}
holderUnlockTime[msg.sender] = 0;
pool.lpToken.safeTransfer(address(msg.sender), _amount);
user.amount = 0;
user.rewardDebt = 0;
emit EmergencyWithdraw(msg.sender, _amount);
}
// Withdraw reward. EMERGENCY ONLY. This allows the owner to migrate rewards to a new staking pool since we are not minting new tokens.
function emergencyRewardWithdraw(uint256 _amount) external onlyOwner {
require(
_amount <= rewardToken.balanceOf(address(this)) - totalStaked,
"not enough tokens to take out"
);
rewardToken.safeTransfer(address(msg.sender), _amount);
}
function calculateNewRewards() public view returns (uint256) {
PoolInfo storage pool = poolInfo[0];
if (pool.lastRewardTimestamp > block.timestamp) {
return 0;
}
return ((((block.timestamp - pool.lastRewardTimestamp) * totalStaked) *
apy) /
100 /
365 days);
}
function rewardsRemaining() public view returns (uint256) {
return rewardToken.balanceOf(address(this)) - totalStaked;
}
function updateApy(uint256 newApy) external onlyOwner {
require(newApy <= 10000, "APY must be below 10000%");
updatePool(0);
apy = newApy;
}
function updatelockduration(uint256 newlockDuration) external onlyOwner {
require(newlockDuration <= 2419200, "Duration must be below 2 weeks");
lockDuration = newlockDuration;
}
function updateExitPenalty(uint256 newPenaltyPerc) external onlyOwner {
require(newPenaltyPerc <= 20, "May not set higher than 20%");
exitPenaltyPerc = newPenaltyPerc;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"apy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateNewRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyRewardWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exitPenaltyPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IBEP20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"internalType":"uint256","name":"accTokensPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newApy","type":"uint256"}],"name":"updateApy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPenaltyPerc","type":"uint256"}],"name":"updateExitPenalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newlockDuration","type":"uint256"}],"name":"updatelockduration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c0604052600060095534801561001557600080fd5b50600061002661024260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555073f614e54d972bab297172765ca83683288f3eae3673ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050609660048190555062093a8060058190555060056006819055506007604051806080016040528060805173ffffffffffffffffffffffffffffffffffffffff1681526020016103e881526020016221903f81526020016000815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015550506103e860098190555061024a565b600033905090565b60805160a05161319562000293600039600081816105520152818161063d0152818161087d01528181610df0015281816113ee0152611b0e01526000610c9901526131956000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806380dc0672116100de578063a913a5f711610097578063f2fde38b11610071578063f2fde38b146103a8578063f40f0f52146103c4578063f7c618c1146103f4578063ff16ef391461041257610173565b8063a913a5f714610352578063b6b55f2514610382578063db2e21bc1461039e57610173565b806380dc0672146102b6578063817b1cd2146102c05780638c09c135146102de5780638da5cb5b146102fa5780638e0b019814610318578063999e2f751461033457610173565b8063630b5ba111610130578063630b5ba11461023e578063715018a61461024857806372f702f314610252578063746c8ae11461027057806378c196f31461027a5780637b280def1461029857610173565b806304554443146101785780631526fe27146101965780631959a002146101c95780633279beab146101fa5780633bcfc4b8146102165780633ccfd60b14610234575b600080fd5b61018061042e565b60405161018d91906123e0565b60405180910390f35b6101b060048036038101906101ab919061242c565b610434565b6040516101c094939291906124d8565b60405180910390f35b6101e360048036038101906101de919061255b565b610494565b6040516101f1929190612588565b60405180910390f35b610214600480360381019061020f919061242c565b6104b8565b005b61021e610684565b60405161022b91906123e0565b60405180910390f35b61023c61068a565b005b610246610a7c565b005b610250610b44565b005b61025a610c97565b60405161026791906125b1565b60405180910390f35b610278610cbb565b005b610282610de9565b60405161028f91906123e0565b60405180910390f35b6102a0610e97565b6040516102ad91906123e0565b60405180910390f35b6102be610e9d565b005b6102c8610f46565b6040516102d591906123e0565b60405180910390f35b6102f860048036038101906102f3919061242c565b610f4c565b005b610302611031565b60405161030f91906125db565b60405180910390f35b610332600480360381019061032d919061242c565b61105a565b005b61033c61113d565b60405161034991906123e0565b60405180910390f35b61036c6004803603810190610367919061255b565b6111c7565b60405161037991906123e0565b60405180910390f35b61039c6004803603810190610397919061242c565b6111df565b005b6103a66116ac565b005b6103c260048036038101906103bd919061255b565b6118f6565b005b6103de60048036038101906103d9919061255b565b611997565b6040516103eb91906123e0565b60405180910390f35b6103fc611b0c565b60405161040991906125b1565b60405180910390f35b61042c6004803603810190610427919061242c565b611b30565b005b60055481565b6007818154811061044457600080fd5b90600052602060002090600402016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154905084565b60086020528060005260406000206000915090508060000154908060010154905082565b6104c0611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461054d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054490612653565b60405180910390fd5b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105a991906125db565b602060405180830381865afa1580156105c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ea9190612688565b6105f491906126e4565b811115610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062d90612764565b60405180910390fd5b61068133827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b50565b60045481565b600260015414156106d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c7906127d0565b60405180910390fd5b600260018190555042600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561075a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107519061283c565b60405180910390fd5b600060076000815481106107715761077061285c565b5b906000526020600020906004020190506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015490506107d76000611cac565b6000610821836001015461081364e8d4a5100061080588600301548860000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b611e5690919063ffffffff16565b905060008111156108c257610834610de9565b811115610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086d90612923565b60405180910390fd5b6108c133827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b5b600082111561093e576000836000018190555081600360008282546108e791906126e4565b9250508190555061093d33838660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b5b61097064e8d4a5100061096286600301548660000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b83600101819055506000836000015411156109db57600554426109939190612943565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a21565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436483604051610a6791906123e0565b60405180910390a25050505060018081905550565b610a84611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890612653565b60405180910390fd5b6000600780549050905060005b81811015610b4057610b2f81611cac565b80610b3990612999565b9050610b1e565b5050565b610b4c611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd090612653565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b610cc3611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790612653565b60405180910390fd5b63014ca2bf6007600081548110610d6a57610d6961285c565b5b90600052602060002090600402016002015414610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390612a2e565b60405180910390fd5b426007600081548110610dd257610dd161285c565b5b906000526020600020906004020160020181905550565b60006003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e4791906125db565b602060405180830381865afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e889190612688565b610e9291906126e4565b905090565b60065481565b610ea5611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2990612653565b60405180910390fd5b610f3c6000611cac565b6000600481905550565b60035481565b610f54611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890612653565b60405180910390fd5b6224ea00811115611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90612a9a565b60405180910390fd5b8060058190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611062611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690612653565b60405180910390fd5b6014811115611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90612b06565b60405180910390fd5b8060068190555050565b60008060076000815481106111555761115461285c565b5b90600052602060002090600402019050428160020154111561117b5760009150506111c4565b6301e13380606460045460035484600201544261119891906126e4565b6111a29190612b26565b6111ac9190612b26565b6111b69190612baf565b6111c09190612baf565b9150505b90565b60026020528060005260406000206000915090505481565b60026001541415611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c906127d0565b60405180910390fd5b60026001819055506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156112c757600554426112839190612943565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600060076000815481106112de576112dd61285c565b5b906000526020600020906004020190506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061133b6000611cac565b600081600001541115611435576000611392826001015461138464e8d4a5100061137687600301548760000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b611e5690919063ffffffff16565b90506000811115611433576113a5610de9565b8111156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90612c78565b60405180910390fd5b61143233827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b5b505b6000808411156116175760008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161149e91906125db565b602060405180830381865afa1580156114bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114df9190612688565b90506115323330878760000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611ea0909392919063ffffffff16565b808460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161159091906125db565b602060405180830381865afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190612688565b6115db91906126e4565b91506115f4828460000154611f2990919063ffffffff16565b8360000181905550816003600082825461160e9190612943565b92505081905550505b61164964e8d4a5100061163b85600301548560000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b82600101819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8560405161169791906123e0565b60405180910390a25050506001808190555050565b600260015414156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e9906127d0565b60405180910390fd5b6002600181905550600060076000815481106117115761171061285c565b5b906000526020600020906004020190506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001549050806003600082825461177f91906126e4565b9250508190555042600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106117f4576064600654826117dc9190612b26565b6117e69190612baf565b816117f191906126e4565b90505b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061188833828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b60008260000181905550600082600101819055503373ffffffffffffffffffffffffffffffffffffffff167f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695826040516118e291906123e0565b60405180910390a250505060018081905550565b6118fe611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290612653565b60405180910390fd5b61199481611f87565b50565b60008060076000815481106119af576119ae61285c565b5b906000526020600020906004020190506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905063014ca2bf82600201541415611a1d57600092505050611b07565b60008260030154905060006003549050836002015442118015611a41575060008114155b15611abc576000611a7a600954611a6c8760010154611a5e61113d565b611d9190919063ffffffff16565b611e0c90919063ffffffff16565b9050611ab8611aa983611a9b64e8d4a5100085611d9190919063ffffffff16565b611e0c90919063ffffffff16565b84611f2990919063ffffffff16565b9250505b611b008360010154611af264e8d4a51000611ae4868860000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b611e5690919063ffffffff16565b9450505050505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611b38611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90612653565b60405180910390fd5b612710811115611c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0190612ce4565b60405180910390fd5b611c146000611cac565b8060048190555050565b600033905090565b611ca78363a9059cbb60e01b8484604051602401611c45929190612d04565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120b4565b505050565b600060078281548110611cc257611cc161285c565b5b9060005260206000209060040201905080600201544211611ce35750611d8e565b600060035490506000811415611d03574282600201819055505050611d8e565b6000611d37600954611d298560010154611d1b61113d565b611d9190919063ffffffff16565b611e0c90919063ffffffff16565b9050611d79611d6683611d5864e8d4a5100085611d9190919063ffffffff16565b611e0c90919063ffffffff16565b8460030154611f2990919063ffffffff16565b83600301819055504283600201819055505050505b50565b600080831415611da45760009050611e06565b60008284611db29190612b26565b9050828482611dc19190612baf565b14611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df890612d9f565b60405180910390fd5b809150505b92915050565b6000611e4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061217b565b905092915050565b6000611e9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121de565b905092915050565b611f23846323b872dd60e01b858585604051602401611ec193929190612dbf565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120b4565b50505050565b6000808284611f389190612943565b905083811015611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490612e42565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee90612ed4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612116826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122429092919063ffffffff16565b905060008151111561217657808060200190518101906121369190612f2c565b612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90612fcb565b60405180910390fd5b5b505050565b600080831182906121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b99190613073565b60405180910390fd5b50600083856121d19190612baf565b9050809150509392505050565b6000838311158290612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d9190613073565b60405180910390fd5b506000838561223591906126e4565b9050809150509392505050565b6060612251848460008561225a565b90509392505050565b60606122658561237c565b6122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229b906130e1565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516122cd9190613148565b60006040518083038185875af1925050503d806000811461230a576040519150601f19603f3d011682016040523d82523d6000602084013e61230f565b606091505b50915091508115612324578092505050612374565b6000815111156123375780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b9190613073565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156123be57506000801b8214155b92505050919050565b6000819050919050565b6123da816123c7565b82525050565b60006020820190506123f560008301846123d1565b92915050565b600080fd5b612409816123c7565b811461241457600080fd5b50565b60008135905061242681612400565b92915050565b600060208284031215612442576124416123fb565b5b600061245084828501612417565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061249e61249961249484612459565b612479565b612459565b9050919050565b60006124b082612483565b9050919050565b60006124c2826124a5565b9050919050565b6124d2816124b7565b82525050565b60006080820190506124ed60008301876124c9565b6124fa60208301866123d1565b61250760408301856123d1565b61251460608301846123d1565b95945050505050565b600061252882612459565b9050919050565b6125388161251d565b811461254357600080fd5b50565b6000813590506125558161252f565b92915050565b600060208284031215612571576125706123fb565b5b600061257f84828501612546565b91505092915050565b600060408201905061259d60008301856123d1565b6125aa60208301846123d1565b9392505050565b60006020820190506125c660008301846124c9565b92915050565b6125d58161251d565b82525050565b60006020820190506125f060008301846125cc565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061263d6020836125f6565b915061264882612607565b602082019050919050565b6000602082019050818103600083015261266c81612630565b9050919050565b60008151905061268281612400565b92915050565b60006020828403121561269e5761269d6123fb565b5b60006126ac84828501612673565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126ef826123c7565b91506126fa836123c7565b92508282101561270d5761270c6126b5565b5b828203905092915050565b7f6e6f7420656e6f75676820746f6b656e7320746f2074616b65206f7574000000600082015250565b600061274e601d836125f6565b915061275982612718565b602082019050919050565b6000602082019050818103600083015261277d81612741565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006127ba601f836125f6565b91506127c582612784565b602082019050919050565b600060208201905081810360008301526127e9816127ad565b9050919050565b7f4d6179206e6f7420646f206e6f726d616c207769746864726177206561726c79600082015250565b60006128266020836125f6565b9150612831826127f0565b602082019050919050565b6000602082019050818103600083015261285581612819565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e6e6f74207769746864726177206f746865722070656f706c652773207360008201527f74616b656420746f6b656e732e2020436f6e7461637420616e2061646d696e2060208201527f422e000000000000000000000000000000000000000000000000000000000000604082015250565b600061290d6042836125f6565b91506129188261288b565b606082019050919050565b6000602082019050818103600083015261293c81612900565b9050919050565b600061294e826123c7565b9150612959836123c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561298e5761298d6126b5565b5b828201905092915050565b60006129a4826123c7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129d7576129d66126b5565b5b600182019050919050565b7f43616e206f6e6c792073746172742072657761726473206f6e63650000000000600082015250565b6000612a18601b836125f6565b9150612a23826129e2565b602082019050919050565b60006020820190508181036000830152612a4781612a0b565b9050919050565b7f4475726174696f6e206d7573742062652062656c6f772032207765656b730000600082015250565b6000612a84601e836125f6565b9150612a8f82612a4e565b602082019050919050565b60006020820190508181036000830152612ab381612a77565b9050919050565b7f4d6179206e6f742073657420686967686572207468616e203230250000000000600082015250565b6000612af0601b836125f6565b9150612afb82612aba565b602082019050919050565b60006020820190508181036000830152612b1f81612ae3565b9050919050565b6000612b31826123c7565b9150612b3c836123c7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b7557612b746126b5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612bba826123c7565b9150612bc5836123c7565b925082612bd557612bd4612b80565b5b828204905092915050565b7f43616e6e6f74207769746864726177206f746865722070656f706c652773207360008201527f74616b656420746f6b656e732e2020436f6e7461637420616e2061646d696e2060208201527f412e000000000000000000000000000000000000000000000000000000000000604082015250565b6000612c626042836125f6565b9150612c6d82612be0565b606082019050919050565b60006020820190508181036000830152612c9181612c55565b9050919050565b7f415059206d7573742062652062656c6f77203130303030250000000000000000600082015250565b6000612cce6018836125f6565b9150612cd982612c98565b602082019050919050565b60006020820190508181036000830152612cfd81612cc1565b9050919050565b6000604082019050612d1960008301856125cc565b612d2660208301846123d1565b9392505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d896021836125f6565b9150612d9482612d2d565b604082019050919050565b60006020820190508181036000830152612db881612d7c565b9050919050565b6000606082019050612dd460008301866125cc565b612de160208301856125cc565b612dee60408301846123d1565b949350505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612e2c601b836125f6565b9150612e3782612df6565b602082019050919050565b60006020820190508181036000830152612e5b81612e1f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ebe6026836125f6565b9150612ec982612e62565b604082019050919050565b60006020820190508181036000830152612eed81612eb1565b9050919050565b60008115159050919050565b612f0981612ef4565b8114612f1457600080fd5b50565b600081519050612f2681612f00565b92915050565b600060208284031215612f4257612f416123fb565b5b6000612f5084828501612f17565b91505092915050565b7f5361666542455032303a204245503230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612fb5602a836125f6565b9150612fc082612f59565b604082019050919050565b60006020820190508181036000830152612fe481612fa8565b9050919050565b600081519050919050565b60005b83811015613014578082015181840152602081019050612ff9565b83811115613023576000848401525b50505050565b6000601f19601f8301169050919050565b600061304582612feb565b61304f81856125f6565b935061305f818560208601612ff6565b61306881613029565b840191505092915050565b6000602082019050818103600083015261308d818461303a565b905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006130cb601d836125f6565b91506130d682613095565b602082019050919050565b600060208201905081810360008301526130fa816130be565b9050919050565b600081519050919050565b600081905092915050565b600061312282613101565b61312c818561310c565b935061313c818560208601612ff6565b80840191505092915050565b60006131548284613117565b91508190509291505056fea2646970667358221220de74a75cd981296fe6faa9d00aac5bd26d908c2b83c22aefd27158ee191149a664736f6c634300080b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806380dc0672116100de578063a913a5f711610097578063f2fde38b11610071578063f2fde38b146103a8578063f40f0f52146103c4578063f7c618c1146103f4578063ff16ef391461041257610173565b8063a913a5f714610352578063b6b55f2514610382578063db2e21bc1461039e57610173565b806380dc0672146102b6578063817b1cd2146102c05780638c09c135146102de5780638da5cb5b146102fa5780638e0b019814610318578063999e2f751461033457610173565b8063630b5ba111610130578063630b5ba11461023e578063715018a61461024857806372f702f314610252578063746c8ae11461027057806378c196f31461027a5780637b280def1461029857610173565b806304554443146101785780631526fe27146101965780631959a002146101c95780633279beab146101fa5780633bcfc4b8146102165780633ccfd60b14610234575b600080fd5b61018061042e565b60405161018d91906123e0565b60405180910390f35b6101b060048036038101906101ab919061242c565b610434565b6040516101c094939291906124d8565b60405180910390f35b6101e360048036038101906101de919061255b565b610494565b6040516101f1929190612588565b60405180910390f35b610214600480360381019061020f919061242c565b6104b8565b005b61021e610684565b60405161022b91906123e0565b60405180910390f35b61023c61068a565b005b610246610a7c565b005b610250610b44565b005b61025a610c97565b60405161026791906125b1565b60405180910390f35b610278610cbb565b005b610282610de9565b60405161028f91906123e0565b60405180910390f35b6102a0610e97565b6040516102ad91906123e0565b60405180910390f35b6102be610e9d565b005b6102c8610f46565b6040516102d591906123e0565b60405180910390f35b6102f860048036038101906102f3919061242c565b610f4c565b005b610302611031565b60405161030f91906125db565b60405180910390f35b610332600480360381019061032d919061242c565b61105a565b005b61033c61113d565b60405161034991906123e0565b60405180910390f35b61036c6004803603810190610367919061255b565b6111c7565b60405161037991906123e0565b60405180910390f35b61039c6004803603810190610397919061242c565b6111df565b005b6103a66116ac565b005b6103c260048036038101906103bd919061255b565b6118f6565b005b6103de60048036038101906103d9919061255b565b611997565b6040516103eb91906123e0565b60405180910390f35b6103fc611b0c565b60405161040991906125b1565b60405180910390f35b61042c6004803603810190610427919061242c565b611b30565b005b60055481565b6007818154811061044457600080fd5b90600052602060002090600402016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154905084565b60086020528060005260406000206000915090508060000154908060010154905082565b6104c0611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461054d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054490612653565b60405180910390fd5b6003547f000000000000000000000000f614e54d972bab297172765ca83683288f3eae3673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105a991906125db565b602060405180830381865afa1580156105c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ea9190612688565b6105f491906126e4565b811115610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062d90612764565b60405180910390fd5b61068133827f000000000000000000000000f614e54d972bab297172765ca83683288f3eae3673ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b50565b60045481565b600260015414156106d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c7906127d0565b60405180910390fd5b600260018190555042600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561075a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107519061283c565b60405180910390fd5b600060076000815481106107715761077061285c565b5b906000526020600020906004020190506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015490506107d76000611cac565b6000610821836001015461081364e8d4a5100061080588600301548860000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b611e5690919063ffffffff16565b905060008111156108c257610834610de9565b811115610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086d90612923565b60405180910390fd5b6108c133827f000000000000000000000000f614e54d972bab297172765ca83683288f3eae3673ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b5b600082111561093e576000836000018190555081600360008282546108e791906126e4565b9250508190555061093d33838660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b5b61097064e8d4a5100061096286600301548660000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b83600101819055506000836000015411156109db57600554426109939190612943565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a21565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436483604051610a6791906123e0565b60405180910390a25050505060018081905550565b610a84611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890612653565b60405180910390fd5b6000600780549050905060005b81811015610b4057610b2f81611cac565b80610b3990612999565b9050610b1e565b5050565b610b4c611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd090612653565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b7f000000000000000000000000f614e54d972bab297172765ca83683288f3eae3681565b610cc3611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790612653565b60405180910390fd5b63014ca2bf6007600081548110610d6a57610d6961285c565b5b90600052602060002090600402016002015414610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390612a2e565b60405180910390fd5b426007600081548110610dd257610dd161285c565b5b906000526020600020906004020160020181905550565b60006003547f000000000000000000000000f614e54d972bab297172765ca83683288f3eae3673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e4791906125db565b602060405180830381865afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e889190612688565b610e9291906126e4565b905090565b60065481565b610ea5611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2990612653565b60405180910390fd5b610f3c6000611cac565b6000600481905550565b60035481565b610f54611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890612653565b60405180910390fd5b6224ea00811115611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90612a9a565b60405180910390fd5b8060058190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611062611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690612653565b60405180910390fd5b6014811115611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90612b06565b60405180910390fd5b8060068190555050565b60008060076000815481106111555761115461285c565b5b90600052602060002090600402019050428160020154111561117b5760009150506111c4565b6301e13380606460045460035484600201544261119891906126e4565b6111a29190612b26565b6111ac9190612b26565b6111b69190612baf565b6111c09190612baf565b9150505b90565b60026020528060005260406000206000915090505481565b60026001541415611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c906127d0565b60405180910390fd5b60026001819055506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156112c757600554426112839190612943565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600060076000815481106112de576112dd61285c565b5b906000526020600020906004020190506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061133b6000611cac565b600081600001541115611435576000611392826001015461138464e8d4a5100061137687600301548760000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b611e5690919063ffffffff16565b90506000811115611433576113a5610de9565b8111156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90612c78565b60405180910390fd5b61143233827f000000000000000000000000f614e54d972bab297172765ca83683288f3eae3673ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b5b505b6000808411156116175760008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161149e91906125db565b602060405180830381865afa1580156114bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114df9190612688565b90506115323330878760000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611ea0909392919063ffffffff16565b808460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161159091906125db565b602060405180830381865afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190612688565b6115db91906126e4565b91506115f4828460000154611f2990919063ffffffff16565b8360000181905550816003600082825461160e9190612943565b92505081905550505b61164964e8d4a5100061163b85600301548560000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b82600101819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8560405161169791906123e0565b60405180910390a25050506001808190555050565b600260015414156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e9906127d0565b60405180910390fd5b6002600181905550600060076000815481106117115761171061285c565b5b906000526020600020906004020190506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001549050806003600082825461177f91906126e4565b9250508190555042600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106117f4576064600654826117dc9190612b26565b6117e69190612baf565b816117f191906126e4565b90505b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061188833828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b60008260000181905550600082600101819055503373ffffffffffffffffffffffffffffffffffffffff167f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695826040516118e291906123e0565b60405180910390a250505060018081905550565b6118fe611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290612653565b60405180910390fd5b61199481611f87565b50565b60008060076000815481106119af576119ae61285c565b5b906000526020600020906004020190506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905063014ca2bf82600201541415611a1d57600092505050611b07565b60008260030154905060006003549050836002015442118015611a41575060008114155b15611abc576000611a7a600954611a6c8760010154611a5e61113d565b611d9190919063ffffffff16565b611e0c90919063ffffffff16565b9050611ab8611aa983611a9b64e8d4a5100085611d9190919063ffffffff16565b611e0c90919063ffffffff16565b84611f2990919063ffffffff16565b9250505b611b008360010154611af264e8d4a51000611ae4868860000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b611e5690919063ffffffff16565b9450505050505b919050565b7f000000000000000000000000f614e54d972bab297172765ca83683288f3eae3681565b611b38611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90612653565b60405180910390fd5b612710811115611c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0190612ce4565b60405180910390fd5b611c146000611cac565b8060048190555050565b600033905090565b611ca78363a9059cbb60e01b8484604051602401611c45929190612d04565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120b4565b505050565b600060078281548110611cc257611cc161285c565b5b9060005260206000209060040201905080600201544211611ce35750611d8e565b600060035490506000811415611d03574282600201819055505050611d8e565b6000611d37600954611d298560010154611d1b61113d565b611d9190919063ffffffff16565b611e0c90919063ffffffff16565b9050611d79611d6683611d5864e8d4a5100085611d9190919063ffffffff16565b611e0c90919063ffffffff16565b8460030154611f2990919063ffffffff16565b83600301819055504283600201819055505050505b50565b600080831415611da45760009050611e06565b60008284611db29190612b26565b9050828482611dc19190612baf565b14611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df890612d9f565b60405180910390fd5b809150505b92915050565b6000611e4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061217b565b905092915050565b6000611e9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121de565b905092915050565b611f23846323b872dd60e01b858585604051602401611ec193929190612dbf565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120b4565b50505050565b6000808284611f389190612943565b905083811015611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490612e42565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee90612ed4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612116826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122429092919063ffffffff16565b905060008151111561217657808060200190518101906121369190612f2c565b612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90612fcb565b60405180910390fd5b5b505050565b600080831182906121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b99190613073565b60405180910390fd5b50600083856121d19190612baf565b9050809150509392505050565b6000838311158290612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d9190613073565b60405180910390fd5b506000838561223591906126e4565b9050809150509392505050565b6060612251848460008561225a565b90509392505050565b60606122658561237c565b6122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229b906130e1565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516122cd9190613148565b60006040518083038185875af1925050503d806000811461230a576040519150601f19603f3d011682016040523d82523d6000602084013e61230f565b606091505b50915091508115612324578092505050612374565b6000815111156123375780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b9190613073565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156123be57506000801b8214155b92505050919050565b6000819050919050565b6123da816123c7565b82525050565b60006020820190506123f560008301846123d1565b92915050565b600080fd5b612409816123c7565b811461241457600080fd5b50565b60008135905061242681612400565b92915050565b600060208284031215612442576124416123fb565b5b600061245084828501612417565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061249e61249961249484612459565b612479565b612459565b9050919050565b60006124b082612483565b9050919050565b60006124c2826124a5565b9050919050565b6124d2816124b7565b82525050565b60006080820190506124ed60008301876124c9565b6124fa60208301866123d1565b61250760408301856123d1565b61251460608301846123d1565b95945050505050565b600061252882612459565b9050919050565b6125388161251d565b811461254357600080fd5b50565b6000813590506125558161252f565b92915050565b600060208284031215612571576125706123fb565b5b600061257f84828501612546565b91505092915050565b600060408201905061259d60008301856123d1565b6125aa60208301846123d1565b9392505050565b60006020820190506125c660008301846124c9565b92915050565b6125d58161251d565b82525050565b60006020820190506125f060008301846125cc565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061263d6020836125f6565b915061264882612607565b602082019050919050565b6000602082019050818103600083015261266c81612630565b9050919050565b60008151905061268281612400565b92915050565b60006020828403121561269e5761269d6123fb565b5b60006126ac84828501612673565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126ef826123c7565b91506126fa836123c7565b92508282101561270d5761270c6126b5565b5b828203905092915050565b7f6e6f7420656e6f75676820746f6b656e7320746f2074616b65206f7574000000600082015250565b600061274e601d836125f6565b915061275982612718565b602082019050919050565b6000602082019050818103600083015261277d81612741565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006127ba601f836125f6565b91506127c582612784565b602082019050919050565b600060208201905081810360008301526127e9816127ad565b9050919050565b7f4d6179206e6f7420646f206e6f726d616c207769746864726177206561726c79600082015250565b60006128266020836125f6565b9150612831826127f0565b602082019050919050565b6000602082019050818103600083015261285581612819565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e6e6f74207769746864726177206f746865722070656f706c652773207360008201527f74616b656420746f6b656e732e2020436f6e7461637420616e2061646d696e2060208201527f422e000000000000000000000000000000000000000000000000000000000000604082015250565b600061290d6042836125f6565b91506129188261288b565b606082019050919050565b6000602082019050818103600083015261293c81612900565b9050919050565b600061294e826123c7565b9150612959836123c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561298e5761298d6126b5565b5b828201905092915050565b60006129a4826123c7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129d7576129d66126b5565b5b600182019050919050565b7f43616e206f6e6c792073746172742072657761726473206f6e63650000000000600082015250565b6000612a18601b836125f6565b9150612a23826129e2565b602082019050919050565b60006020820190508181036000830152612a4781612a0b565b9050919050565b7f4475726174696f6e206d7573742062652062656c6f772032207765656b730000600082015250565b6000612a84601e836125f6565b9150612a8f82612a4e565b602082019050919050565b60006020820190508181036000830152612ab381612a77565b9050919050565b7f4d6179206e6f742073657420686967686572207468616e203230250000000000600082015250565b6000612af0601b836125f6565b9150612afb82612aba565b602082019050919050565b60006020820190508181036000830152612b1f81612ae3565b9050919050565b6000612b31826123c7565b9150612b3c836123c7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b7557612b746126b5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612bba826123c7565b9150612bc5836123c7565b925082612bd557612bd4612b80565b5b828204905092915050565b7f43616e6e6f74207769746864726177206f746865722070656f706c652773207360008201527f74616b656420746f6b656e732e2020436f6e7461637420616e2061646d696e2060208201527f412e000000000000000000000000000000000000000000000000000000000000604082015250565b6000612c626042836125f6565b9150612c6d82612be0565b606082019050919050565b60006020820190508181036000830152612c9181612c55565b9050919050565b7f415059206d7573742062652062656c6f77203130303030250000000000000000600082015250565b6000612cce6018836125f6565b9150612cd982612c98565b602082019050919050565b60006020820190508181036000830152612cfd81612cc1565b9050919050565b6000604082019050612d1960008301856125cc565b612d2660208301846123d1565b9392505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d896021836125f6565b9150612d9482612d2d565b604082019050919050565b60006020820190508181036000830152612db881612d7c565b9050919050565b6000606082019050612dd460008301866125cc565b612de160208301856125cc565b612dee60408301846123d1565b949350505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612e2c601b836125f6565b9150612e3782612df6565b602082019050919050565b60006020820190508181036000830152612e5b81612e1f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ebe6026836125f6565b9150612ec982612e62565b604082019050919050565b60006020820190508181036000830152612eed81612eb1565b9050919050565b60008115159050919050565b612f0981612ef4565b8114612f1457600080fd5b50565b600081519050612f2681612f00565b92915050565b600060208284031215612f4257612f416123fb565b5b6000612f5084828501612f17565b91505092915050565b7f5361666542455032303a204245503230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612fb5602a836125f6565b9150612fc082612f59565b604082019050919050565b60006020820190508181036000830152612fe481612fa8565b9050919050565b600081519050919050565b60005b83811015613014578082015181840152602081019050612ff9565b83811115613023576000848401525b50505050565b6000601f19601f8301169050919050565b600061304582612feb565b61304f81856125f6565b935061305f818560208601612ff6565b61306881613029565b840191505092915050565b6000602082019050818103600083015261308d818461303a565b905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006130cb601d836125f6565b91506130d682613095565b602082019050919050565b600060208201905081810360008301526130fa816130be565b9050919050565b600081519050919050565b600081905092915050565b600061312282613101565b61312c818561310c565b935061313c818560208601612ff6565b80840191505092915050565b60006131548284613117565b91508190509291505056fea2646970667358221220de74a75cd981296fe6faa9d00aac5bd26d908c2b83c22aefd27158ee191149a664736f6c634300080b0033
Deployed Bytecode Sourcemap
25489:9368:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26431:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26531:26;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;26613:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;33470:293;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26406:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31330:1251;;;:::i;:::-;;29527:190;;;:::i;:::-;;2840:140;;;:::i;:::-;;26228:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27607:241;;;:::i;:::-;;34131:134;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26465:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27508:91;;;:::i;:::-;;26373:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34453:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2198:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34662:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33771:352;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26313:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29754:1520;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32652:669;;;:::i;:::-;;3135:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27913:807;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26271:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34273:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26431:27;;;;:::o;26531:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26613:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33470:293::-;2420:12;:10;:12::i;:::-;2410:22;;:6;;;;;;;;;;:22;;;2402:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33622:11:::1;;33583;:21;;;33613:4;33583:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;33572:7;:61;;33550:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33701:54;33734:10;33747:7;33701:11;:24;;;;:54;;;;;:::i;:::-;33470:293:::0;:::o;26406:18::-;;;;:::o;31330:1251::-;24542:1;25140:7;;:19;;25132:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24542:1;25273:7;:18;;;;31435:15:::1;31403:16;:28;31420:10;31403:28;;;;;;;;;;;;;;;;:47;;31381:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;31523:21;31547:8;31556:1;31547:11;;;;;;;;:::i;:::-;;;;;;;;;;;;31523:35;;31569:21;31593:8;:20;31602:10;31593:20;;;;;;;;;;;;;;;31569:44;;31626:15;31644:4;:11;;;31626:29;;31666:13;31677:1;31666:10;:13::i;:::-;31690:15;31708:94;31776:4;:15;;;31708:49;31752:4;31708:39;31724:4;:22;;;31708:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49;;;;:::i;:::-;:53;;:94;;;;:::i;:::-;31690:112;;31827:1;31817:7;:11;31813:270;;;31882:18;:16;:18::i;:::-;31871:7;:29;;31845:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;32017:54;32050:10;32063:7;32017:11;:24;;;;:54;;;;;:::i;:::-;31813:270;32109:1;32099:7;:11;32095:166;;;32141:1;32127:4;:11;;:15;;;;32172:7;32157:11;;:22;;;;;;;:::i;:::-;;;;;;;;32194:55;32228:10;32241:7;32194:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;32095:166;32291:49;32335:4;32291:39;32307:4;:22;;;32291:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49;;;;:::i;:::-;32273:4;:15;;:67;;;;32371:1;32357:4;:11;;;:15;32353:174;;;32438:12;;32420:15;:30;;;;:::i;:::-;32389:16;:28;32406:10;32389:28;;;;;;;;;;;;;;;:61;;;;32353:174;;;32514:1;32483:16;:28;32500:10;32483:28;;;;;;;;;;;;;;;:32;;;;32353:174;32553:10;32544:29;;;32565:7;32544:29;;;;;;:::i;:::-;;;;;;;;31370:1211;;;;24498:1:::0;25452:7;:22;;;;31330:1251::o;29527:190::-;2420:12;:10;:12::i;:::-;2410:22;;:6;;;;;;;;;;:22;;;2402:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29582:14:::1;29599:8;:15;;;;29582:32;;29630:11;29625:85;29653:6;29647:3;:12;29625:85;;;29683:15;29694:3;29683:10;:15::i;:::-;29661:5;;;;:::i;:::-;;;29625:85;;;;29571:146;29527:190::o:0;2840:140::-;2420:12;:10;:12::i;:::-;2410:22;;:6;;;;;;;;;;:22;;;2402:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2939:1:::1;2902:40;;2923:6;::::0;::::1;;;;;;;;2902:40;;;;;;;;;;;;2970:1;2953:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2840:140::o:0;26228:36::-;;;:::o;27607:241::-;2420:12;:10;:12::i;:::-;2410:22;;:6;;;;;;;;;;:22;;;2402:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27717:8:::1;27682;27691:1;27682:11;;;;;;;;:::i;:::-;;;;;;;;;;;;:31;;;:43;27660:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;27825:15;27791:8;27800:1;27791:11;;;;;;;;:::i;:::-;;;;;;;;;;;;:31;;:49;;;;27607:241::o:0;34131:134::-;34180:7;34246:11;;34207;:21;;;34237:4;34207:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;34200:57;;34131:134;:::o;26465:30::-;;;;:::o;27508:91::-;2420:12;:10;:12::i;:::-;2410:22;;:6;;;;;;;;;;:22;;;2402:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27560:13:::1;27571:1;27560:10;:13::i;:::-;27590:1;27584:3;:7;;;;27508:91::o:0;26373:26::-;;;;:::o;34453:201::-;2420:12;:10;:12::i;:::-;2410:22;;:6;;;;;;;;;;:22;;;2402:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34563:7:::1;34544:15;:26;;34536:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;34631:15;34616:12;:30;;;;34453:201:::0;:::o;2198:79::-;2236:7;2263:6;;;;;;;;;;;2256:13;;2198:79;:::o;34662:192::-;2420:12;:10;:12::i;:::-;2410:22;;:6;;;;;;;;;;:22;;;2402:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34769:2:::1;34751:14;:20;;34743:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34832:14;34814:15;:32;;;;34662:192:::0;:::o;33771:352::-;33823:7;33843:21;33867:8;33876:1;33867:11;;;;;;;;:::i;:::-;;;;;;;;;;;;33843:35;;33920:15;33893:4;:24;;;:42;33889:83;;;33959:1;33952:8;;;;;33889:83;34106:8;34087:3;34067;;34039:11;;34011:4;:24;;;33993:15;:42;;;;:::i;:::-;33992:58;;;;:::i;:::-;33991:79;;;;:::i;:::-;33990:100;;;;:::i;:::-;:124;;;;:::i;:::-;33982:133;;;33771:352;;:::o;26313:51::-;;;;;;;;;;;;;;;;;:::o;29754:1520::-;24542:1;25140:7;;:19;;25132:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24542:1;25273:7;:18;;;;29855:1:::1;29823:16;:28;29840:10;29823:28;;;;;;;;;;;;;;;;:33;29819:127;;;29922:12;;29904:15;:30;;;;:::i;:::-;29873:16;:28;29890:10;29873:28;;;;;;;;;;;;;;;:61;;;;29819:127;29956:21;29980:8;29989:1;29980:11;;;;;;;;:::i;:::-;;;;;;;;;;;;29956:35;;30002:21;30026:8;:20;30035:10;30026:20;;;;;;;;;;;;;;;30002:44;;30059:13;30070:1;30059:10;:13::i;:::-;30101:1;30087:4;:11;;;:15;30083:516;;;30119:15;30137:142;30263:4;:15;;;30137:103;30235:4;30137:75;30189:4;:22;;;30137:4;:29;;;:51;;:75;;;;:::i;:::-;:97;;:103;;;;:::i;:::-;:125;;:142;;;;:::i;:::-;30119:160;;30308:1;30298:7;:11;30294:294;;;30371:18;:16;:18::i;:::-;30360:7;:29;;30330:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;30518:54;30551:10;30564:7;30518:11;:24;;;;:54;;;;;:::i;:::-;30294:294;30104:495;30083:516;30609:25;30663:1:::0;30653:7:::1;:11;30649:494;;;30681:22;30706:4;:12;;;;;;;;;;;;:22;;;30737:4;30706:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30681:62;;30758:140;30814:10;30852:4;30876:7;30758:4;:12;;;;;;;;;;;;:29;;;;:140;;;;;;:::i;:::-;31007:14;30950:4;:12;;;;;;;;;;;;:22;;;30981:4;30950:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:71;;;;:::i;:::-;30913:108;;31050:34;31066:17;31050:4;:11;;;:15;;:34;;;;:::i;:::-;31036:4;:11;;:48;;;;31114:17;31099:11;;:32;;;;;;;:::i;:::-;;;;;;;;30666:477;30649:494;31171:49;31215:4;31171:39;31187:4;:22;;;31171:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49;;;;:::i;:::-;31153:4;:15;;:67;;;;31246:10;31238:28;;;31258:7;31238:28;;;;;;:::i;:::-;;;;;;;;29808:1466;;;24498:1:::0;25452:7;:22;;;;29754:1520;:::o;32652:669::-;24542:1;25140:7;;:19;;25132:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24542:1;25273:7;:18;;;;32714:21:::1;32738:8;32747:1;32738:11;;;;;;;;:::i;:::-;;;;;;;;;;;;32714:35;;32760:21;32784:8;:20;32793:10;32784:20;;;;;;;;;;;;;;;32760:44;;32815:15;32833:4;:11;;;32815:29;;32870:7;32855:11;;:22;;;;;;;:::i;:::-;;;;;;;;33007:15;32975:16;:28;32992:10;32975:28;;;;;;;;;;;;;;;;:47;32971:124;;33080:3;33061:15;;33051:7;:25;;;;:::i;:::-;33050:33;;;;:::i;:::-;33039:44;;;;;:::i;:::-;;;32971:124;33136:1;33105:16;:28;33122:10;33105:28;;;;;;;;;;;;;;;:32;;;;33148:55;33182:10;33195:7;33148:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;33228:1;33214:4;:11;;:15;;;;33258:1;33240:4;:15;;:19;;;;33293:10;33275:38;;;33305:7;33275:38;;;;;;:::i;:::-;;;;;;;;32703:618;;;24498:1:::0;25452:7;:22;;;;32652:669::o;3135:109::-;2420:12;:10;:12::i;:::-;2410:22;;:6;;;;;;;;;;:22;;;2402:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3208:28:::1;3227:8;3208:18;:28::i;:::-;3135:109:::0;:::o;27913:807::-;27974:7;27994:21;28018:8;28027:1;28018:11;;;;;;;;:::i;:::-;;;;;;;;;;;;27994:35;;28040:21;28064:8;:15;28073:5;28064:15;;;;;;;;;;;;;;;28040:39;;28122:8;28094:4;:24;;;:36;28090:77;;;28154:1;28147:8;;;;;;28090:77;28177:25;28205:4;:22;;;28177:50;;28238:16;28257:11;;28238:30;;28301:4;:24;;;28283:15;:42;:59;;;;;28341:1;28329:8;:13;;28283:59;28279:338;;;28359:19;28381:99;28464:15;;28381:60;28425:4;:15;;;28381:21;:19;:21::i;:::-;:43;;:60;;;;:::i;:::-;:82;;:99;;;;:::i;:::-;28359:121;;28515:90;28555:35;28581:8;28555:21;28571:4;28555:11;:15;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;28515:17;:21;;:90;;;;:::i;:::-;28495:110;;28344:273;28279:338;28647:65;28696:4;:15;;;28647:44;28686:4;28647:34;28663:17;28647:4;:11;;;:15;;:34;;;;:::i;:::-;:38;;:44;;;;:::i;:::-;:48;;:65;;;;:::i;:::-;28627:85;;;;;;27913:807;;;;:::o;26271:35::-;;;:::o;34273:172::-;2420:12;:10;:12::i;:::-;2410:22;;:6;;;;;;;;;;:22;;;2402:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34356:5:::1;34346:6;:15;;34338:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;34401:13;34412:1;34401:10;:13::i;:::-;34431:6;34425:3;:12;;;;34273:172:::0;:::o;828:107::-;873:15;916:10;901:26;;828:107;:::o;13360:214::-;13443:123;13477:5;13520:23;;;13545:2;13549:5;13497:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13443:19;:123::i;:::-;13360:214;;;:::o;28796:648::-;28850:21;28874:8;28883:4;28874:14;;;;;;;;:::i;:::-;;;;;;;;;;;;28850:38;;28922:4;:24;;;28903:15;:43;28899:82;;28963:7;;;28899:82;28991:16;29010:11;;28991:30;;29048:1;29036:8;:13;29032:109;;;29093:15;29066:4;:24;;:42;;;;29123:7;;;;29032:109;29151:19;29173:87;29234:15;;29173:42;29199:4;:15;;;29173:21;:19;:21::i;:::-;:25;;:42;;;;:::i;:::-;:46;;:87;;;;:::i;:::-;29151:109;;29296:87;29337:35;29363:8;29337:21;29353:4;29337:11;:15;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;29296:4;:22;;;:26;;:87;;;;:::i;:::-;29271:4;:22;;:112;;;;29421:15;29394:4;:24;;:42;;;;28839:605;;;28796:648;;:::o;5851:471::-;5909:7;6159:1;6154;:6;6150:47;;;6184:1;6177:8;;;;6150:47;6209:9;6225:1;6221;:5;;;;:::i;:::-;6209:17;;6254:1;6249;6245;:5;;;;:::i;:::-;:10;6237:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6313:1;6306:8;;;5851:471;;;;;:::o;6798:132::-;6856:7;6883:39;6887:1;6890;6883:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6876:46;;6798:132;;;;:::o;4927:136::-;4985:7;5012:43;5016:1;5019;5012:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5005:50;;4927:136;;;;:::o;13582:285::-;13726:133;13760:5;13803:27;;;13832:4;13838:2;13842:5;13780:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13726:19;:133::i;:::-;13582:285;;;;:::o;4463:181::-;4521:7;4541:9;4557:1;4553;:5;;;;:::i;:::-;4541:17;;4582:1;4577;:6;;4569:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4635:1;4628:8;;;4463:181;;;;:::o;3350:266::-;3458:1;3438:22;;:8;:22;;;;3416:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3571:8;3542:38;;3563:6;;;;;;;;;;3542:38;;;;;;;;;;;;3600:8;3591:6;;:17;;;;;;;;;;;;;;;;;;3350:266;:::o;16202:860::-;16626:23;16652:106;16694:4;16652:106;;;;;;;;;;;;;;;;;16660:5;16652:27;;;;:106;;;;;:::i;:::-;16626:132;;16793:1;16773:10;:17;:21;16769:286;;;16946:10;16935:30;;;;;;;;;;;;:::i;:::-;16909:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;16769:286;16272:790;16202:860;;:::o;7426:312::-;7546:7;7578:1;7574;:5;7581:12;7566:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7605:9;7621:1;7617;:5;;;;:::i;:::-;7605:17;;7729:1;7722:8;;;7426:312;;;;;:::o;5366:226::-;5486:7;5519:1;5514;:6;;5522:12;5506:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5546:9;5562:1;5558;:5;;;;:::i;:::-;5546:17;;5583:1;5576:8;;;5366:226;;;;;:::o;20986:230::-;21123:12;21155:53;21178:6;21186:4;21192:1;21195:12;21155:22;:53::i;:::-;21148:60;;20986:230;;;;;:::o;22607:1044::-;22780:12;22813:18;22824:6;22813:10;:18::i;:::-;22805:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22939:12;22953:23;22980:6;:11;;22999:8;23023:4;22980:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22938:100;;;;23053:7;23049:595;;;23084:10;23077:17;;;;;;23049:595;23218:1;23198:10;:17;:21;23194:439;;;23461:10;23455:17;23522:15;23509:10;23505:2;23501:19;23494:44;23194:439;23604:12;23597:20;;;;;;;;;;;:::i;:::-;;;;;;;;22607:1044;;;;;;;:::o;17750:641::-;17810:4;18072:16;18099:19;18121:66;18099:88;;;;18303:7;18291:20;18279:32;;18352:11;18340:8;:23;;:42;;;;;18379:3;18367:15;;:8;:15;;18340:42;18332:51;;;;17750:641;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:126::-;1414:7;1454:42;1447:5;1443:54;1432:65;;1377:126;;;:::o;1509:60::-;1537:3;1558:5;1551:12;;1509:60;;;:::o;1575:142::-;1625:9;1658:53;1676:34;1685:24;1703:5;1685:24;:::i;:::-;1676:34;:::i;:::-;1658:53;:::i;:::-;1645:66;;1575:142;;;:::o;1723:126::-;1773:9;1806:37;1837:5;1806:37;:::i;:::-;1793:50;;1723:126;;;:::o;1855:140::-;1919:9;1952:37;1983:5;1952:37;:::i;:::-;1939:50;;1855:140;;;:::o;2001:159::-;2102:51;2147:5;2102:51;:::i;:::-;2097:3;2090:64;2001:159;;:::o;2166:581::-;2357:4;2395:3;2384:9;2380:19;2372:27;;2409:85;2491:1;2480:9;2476:17;2467:6;2409:85;:::i;:::-;2504:72;2572:2;2561:9;2557:18;2548:6;2504:72;:::i;:::-;2586;2654:2;2643:9;2639:18;2630:6;2586:72;:::i;:::-;2668;2736:2;2725:9;2721:18;2712:6;2668:72;:::i;:::-;2166:581;;;;;;;:::o;2753:96::-;2790:7;2819:24;2837:5;2819:24;:::i;:::-;2808:35;;2753:96;;;:::o;2855:122::-;2928:24;2946:5;2928:24;:::i;:::-;2921:5;2918:35;2908:63;;2967:1;2964;2957:12;2908:63;2855:122;:::o;2983:139::-;3029:5;3067:6;3054:20;3045:29;;3083:33;3110:5;3083:33;:::i;:::-;2983:139;;;;:::o;3128:329::-;3187:6;3236:2;3224:9;3215:7;3211:23;3207:32;3204:119;;;3242:79;;:::i;:::-;3204:119;3362:1;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3333:117;3128:329;;;;:::o;3463:332::-;3584:4;3622:2;3611:9;3607:18;3599:26;;3635:71;3703:1;3692:9;3688:17;3679:6;3635:71;:::i;:::-;3716:72;3784:2;3773:9;3769:18;3760:6;3716:72;:::i;:::-;3463:332;;;;;:::o;3801:250::-;3908:4;3946:2;3935:9;3931:18;3923:26;;3959:85;4041:1;4030:9;4026:17;4017:6;3959:85;:::i;:::-;3801:250;;;;:::o;4057:118::-;4144:24;4162:5;4144:24;:::i;:::-;4139:3;4132:37;4057:118;;:::o;4181:222::-;4274:4;4312:2;4301:9;4297:18;4289:26;;4325:71;4393:1;4382:9;4378:17;4369:6;4325:71;:::i;:::-;4181:222;;;;:::o;4409:169::-;4493:11;4527:6;4522:3;4515:19;4567:4;4562:3;4558:14;4543:29;;4409:169;;;;:::o;4584:182::-;4724:34;4720:1;4712:6;4708:14;4701:58;4584:182;:::o;4772:366::-;4914:3;4935:67;4999:2;4994:3;4935:67;:::i;:::-;4928:74;;5011:93;5100:3;5011:93;:::i;:::-;5129:2;5124:3;5120:12;5113:19;;4772:366;;;:::o;5144:419::-;5310:4;5348:2;5337:9;5333:18;5325:26;;5397:9;5391:4;5387:20;5383:1;5372:9;5368:17;5361:47;5425:131;5551:4;5425:131;:::i;:::-;5417:139;;5144:419;;;:::o;5569:143::-;5626:5;5657:6;5651:13;5642:22;;5673:33;5700:5;5673:33;:::i;:::-;5569:143;;;;:::o;5718:351::-;5788:6;5837:2;5825:9;5816:7;5812:23;5808:32;5805:119;;;5843:79;;:::i;:::-;5805:119;5963:1;5988:64;6044:7;6035:6;6024:9;6020:22;5988:64;:::i;:::-;5978:74;;5934:128;5718:351;;;;:::o;6075:180::-;6123:77;6120:1;6113:88;6220:4;6217:1;6210:15;6244:4;6241:1;6234:15;6261:191;6301:4;6321:20;6339:1;6321:20;:::i;:::-;6316:25;;6355:20;6373:1;6355:20;:::i;:::-;6350:25;;6394:1;6391;6388:8;6385:34;;;6399:18;;:::i;:::-;6385:34;6444:1;6441;6437:9;6429:17;;6261:191;;;;:::o;6458:179::-;6598:31;6594:1;6586:6;6582:14;6575:55;6458:179;:::o;6643:366::-;6785:3;6806:67;6870:2;6865:3;6806:67;:::i;:::-;6799:74;;6882:93;6971:3;6882:93;:::i;:::-;7000:2;6995:3;6991:12;6984:19;;6643:366;;;:::o;7015:419::-;7181:4;7219:2;7208:9;7204:18;7196:26;;7268:9;7262:4;7258:20;7254:1;7243:9;7239:17;7232:47;7296:131;7422:4;7296:131;:::i;:::-;7288:139;;7015:419;;;:::o;7440:181::-;7580:33;7576:1;7568:6;7564:14;7557:57;7440:181;:::o;7627:366::-;7769:3;7790:67;7854:2;7849:3;7790:67;:::i;:::-;7783:74;;7866:93;7955:3;7866:93;:::i;:::-;7984:2;7979:3;7975:12;7968:19;;7627:366;;;:::o;7999:419::-;8165:4;8203:2;8192:9;8188:18;8180:26;;8252:9;8246:4;8242:20;8238:1;8227:9;8223:17;8216:47;8280:131;8406:4;8280:131;:::i;:::-;8272:139;;7999:419;;;:::o;8424:182::-;8564:34;8560:1;8552:6;8548:14;8541:58;8424:182;:::o;8612:366::-;8754:3;8775:67;8839:2;8834:3;8775:67;:::i;:::-;8768:74;;8851:93;8940:3;8851:93;:::i;:::-;8969:2;8964:3;8960:12;8953:19;;8612:366;;;:::o;8984:419::-;9150:4;9188:2;9177:9;9173:18;9165:26;;9237:9;9231:4;9227:20;9223:1;9212:9;9208:17;9201:47;9265:131;9391:4;9265:131;:::i;:::-;9257:139;;8984:419;;;:::o;9409:180::-;9457:77;9454:1;9447:88;9554:4;9551:1;9544:15;9578:4;9575:1;9568:15;9595:290;9735:34;9731:1;9723:6;9719:14;9712:58;9804:34;9799:2;9791:6;9787:15;9780:59;9873:4;9868:2;9860:6;9856:15;9849:29;9595:290;:::o;9891:366::-;10033:3;10054:67;10118:2;10113:3;10054:67;:::i;:::-;10047:74;;10130:93;10219:3;10130:93;:::i;:::-;10248:2;10243:3;10239:12;10232:19;;9891:366;;;:::o;10263:419::-;10429:4;10467:2;10456:9;10452:18;10444:26;;10516:9;10510:4;10506:20;10502:1;10491:9;10487:17;10480:47;10544:131;10670:4;10544:131;:::i;:::-;10536:139;;10263:419;;;:::o;10688:305::-;10728:3;10747:20;10765:1;10747:20;:::i;:::-;10742:25;;10781:20;10799:1;10781:20;:::i;:::-;10776:25;;10935:1;10867:66;10863:74;10860:1;10857:81;10854:107;;;10941:18;;:::i;:::-;10854:107;10985:1;10982;10978:9;10971:16;;10688:305;;;;:::o;10999:233::-;11038:3;11061:24;11079:5;11061:24;:::i;:::-;11052:33;;11107:66;11100:5;11097:77;11094:103;;;11177:18;;:::i;:::-;11094:103;11224:1;11217:5;11213:13;11206:20;;10999:233;;;:::o;11238:177::-;11378:29;11374:1;11366:6;11362:14;11355:53;11238:177;:::o;11421:366::-;11563:3;11584:67;11648:2;11643:3;11584:67;:::i;:::-;11577:74;;11660:93;11749:3;11660:93;:::i;:::-;11778:2;11773:3;11769:12;11762:19;;11421:366;;;:::o;11793:419::-;11959:4;11997:2;11986:9;11982:18;11974:26;;12046:9;12040:4;12036:20;12032:1;12021:9;12017:17;12010:47;12074:131;12200:4;12074:131;:::i;:::-;12066:139;;11793:419;;;:::o;12218:180::-;12358:32;12354:1;12346:6;12342:14;12335:56;12218:180;:::o;12404:366::-;12546:3;12567:67;12631:2;12626:3;12567:67;:::i;:::-;12560:74;;12643:93;12732:3;12643:93;:::i;:::-;12761:2;12756:3;12752:12;12745:19;;12404:366;;;:::o;12776:419::-;12942:4;12980:2;12969:9;12965:18;12957:26;;13029:9;13023:4;13019:20;13015:1;13004:9;13000:17;12993:47;13057:131;13183:4;13057:131;:::i;:::-;13049:139;;12776:419;;;:::o;13201:177::-;13341:29;13337:1;13329:6;13325:14;13318:53;13201:177;:::o;13384:366::-;13526:3;13547:67;13611:2;13606:3;13547:67;:::i;:::-;13540:74;;13623:93;13712:3;13623:93;:::i;:::-;13741:2;13736:3;13732:12;13725:19;;13384:366;;;:::o;13756:419::-;13922:4;13960:2;13949:9;13945:18;13937:26;;14009:9;14003:4;13999:20;13995:1;13984:9;13980:17;13973:47;14037:131;14163:4;14037:131;:::i;:::-;14029:139;;13756:419;;;:::o;14181:348::-;14221:7;14244:20;14262:1;14244:20;:::i;:::-;14239:25;;14278:20;14296:1;14278:20;:::i;:::-;14273:25;;14466:1;14398:66;14394:74;14391:1;14388:81;14383:1;14376:9;14369:17;14365:105;14362:131;;;14473:18;;:::i;:::-;14362:131;14521:1;14518;14514:9;14503:20;;14181:348;;;;:::o;14535:180::-;14583:77;14580:1;14573:88;14680:4;14677:1;14670:15;14704:4;14701:1;14694:15;14721:185;14761:1;14778:20;14796:1;14778:20;:::i;:::-;14773:25;;14812:20;14830:1;14812:20;:::i;:::-;14807:25;;14851:1;14841:35;;14856:18;;:::i;:::-;14841:35;14898:1;14895;14891:9;14886:14;;14721:185;;;;:::o;14912:290::-;15052:34;15048:1;15040:6;15036:14;15029:58;15121:34;15116:2;15108:6;15104:15;15097:59;15190:4;15185:2;15177:6;15173:15;15166:29;14912:290;:::o;15208:366::-;15350:3;15371:67;15435:2;15430:3;15371:67;:::i;:::-;15364:74;;15447:93;15536:3;15447:93;:::i;:::-;15565:2;15560:3;15556:12;15549:19;;15208:366;;;:::o;15580:419::-;15746:4;15784:2;15773:9;15769:18;15761:26;;15833:9;15827:4;15823:20;15819:1;15808:9;15804:17;15797:47;15861:131;15987:4;15861:131;:::i;:::-;15853:139;;15580:419;;;:::o;16005:174::-;16145:26;16141:1;16133:6;16129:14;16122:50;16005:174;:::o;16185:366::-;16327:3;16348:67;16412:2;16407:3;16348:67;:::i;:::-;16341:74;;16424:93;16513:3;16424:93;:::i;:::-;16542:2;16537:3;16533:12;16526:19;;16185:366;;;:::o;16557:419::-;16723:4;16761:2;16750:9;16746:18;16738:26;;16810:9;16804:4;16800:20;16796:1;16785:9;16781:17;16774:47;16838:131;16964:4;16838:131;:::i;:::-;16830:139;;16557:419;;;:::o;16982:332::-;17103:4;17141:2;17130:9;17126:18;17118:26;;17154:71;17222:1;17211:9;17207:17;17198:6;17154:71;:::i;:::-;17235:72;17303:2;17292:9;17288:18;17279:6;17235:72;:::i;:::-;16982:332;;;;;:::o;17320:220::-;17460:34;17456:1;17448:6;17444:14;17437:58;17529:3;17524:2;17516:6;17512:15;17505:28;17320:220;:::o;17546:366::-;17688:3;17709:67;17773:2;17768:3;17709:67;:::i;:::-;17702:74;;17785:93;17874:3;17785:93;:::i;:::-;17903:2;17898:3;17894:12;17887:19;;17546:366;;;:::o;17918:419::-;18084:4;18122:2;18111:9;18107:18;18099:26;;18171:9;18165:4;18161:20;18157:1;18146:9;18142:17;18135:47;18199:131;18325:4;18199:131;:::i;:::-;18191:139;;17918:419;;;:::o;18343:442::-;18492:4;18530:2;18519:9;18515:18;18507:26;;18543:71;18611:1;18600:9;18596:17;18587:6;18543:71;:::i;:::-;18624:72;18692:2;18681:9;18677:18;18668:6;18624:72;:::i;:::-;18706;18774:2;18763:9;18759:18;18750:6;18706:72;:::i;:::-;18343:442;;;;;;:::o;18791:177::-;18931:29;18927:1;18919:6;18915:14;18908:53;18791:177;:::o;18974:366::-;19116:3;19137:67;19201:2;19196:3;19137:67;:::i;:::-;19130:74;;19213:93;19302:3;19213:93;:::i;:::-;19331:2;19326:3;19322:12;19315:19;;18974:366;;;:::o;19346:419::-;19512:4;19550:2;19539:9;19535:18;19527:26;;19599:9;19593:4;19589:20;19585:1;19574:9;19570:17;19563:47;19627:131;19753:4;19627:131;:::i;:::-;19619:139;;19346:419;;;:::o;19771:225::-;19911:34;19907:1;19899:6;19895:14;19888:58;19980:8;19975:2;19967:6;19963:15;19956:33;19771:225;:::o;20002:366::-;20144:3;20165:67;20229:2;20224:3;20165:67;:::i;:::-;20158:74;;20241:93;20330:3;20241:93;:::i;:::-;20359:2;20354:3;20350:12;20343:19;;20002:366;;;:::o;20374:419::-;20540:4;20578:2;20567:9;20563:18;20555:26;;20627:9;20621:4;20617:20;20613:1;20602:9;20598:17;20591:47;20655:131;20781:4;20655:131;:::i;:::-;20647:139;;20374:419;;;:::o;20799:90::-;20833:7;20876:5;20869:13;20862:21;20851:32;;20799:90;;;:::o;20895:116::-;20965:21;20980:5;20965:21;:::i;:::-;20958:5;20955:32;20945:60;;21001:1;20998;20991:12;20945:60;20895:116;:::o;21017:137::-;21071:5;21102:6;21096:13;21087:22;;21118:30;21142:5;21118:30;:::i;:::-;21017:137;;;;:::o;21160:345::-;21227:6;21276:2;21264:9;21255:7;21251:23;21247:32;21244:119;;;21282:79;;:::i;:::-;21244:119;21402:1;21427:61;21480:7;21471:6;21460:9;21456:22;21427:61;:::i;:::-;21417:71;;21373:125;21160:345;;;;:::o;21511:229::-;21651:34;21647:1;21639:6;21635:14;21628:58;21720:12;21715:2;21707:6;21703:15;21696:37;21511:229;:::o;21746:366::-;21888:3;21909:67;21973:2;21968:3;21909:67;:::i;:::-;21902:74;;21985:93;22074:3;21985:93;:::i;:::-;22103:2;22098:3;22094:12;22087:19;;21746:366;;;:::o;22118:419::-;22284:4;22322:2;22311:9;22307:18;22299:26;;22371:9;22365:4;22361:20;22357:1;22346:9;22342:17;22335:47;22399:131;22525:4;22399:131;:::i;:::-;22391:139;;22118:419;;;:::o;22543:99::-;22595:6;22629:5;22623:12;22613:22;;22543:99;;;:::o;22648:307::-;22716:1;22726:113;22740:6;22737:1;22734:13;22726:113;;;22825:1;22820:3;22816:11;22810:18;22806:1;22801:3;22797:11;22790:39;22762:2;22759:1;22755:10;22750:15;;22726:113;;;22857:6;22854:1;22851:13;22848:101;;;22937:1;22928:6;22923:3;22919:16;22912:27;22848:101;22697:258;22648:307;;;:::o;22961:102::-;23002:6;23053:2;23049:7;23044:2;23037:5;23033:14;23029:28;23019:38;;22961:102;;;:::o;23069:364::-;23157:3;23185:39;23218:5;23185:39;:::i;:::-;23240:71;23304:6;23299:3;23240:71;:::i;:::-;23233:78;;23320:52;23365:6;23360:3;23353:4;23346:5;23342:16;23320:52;:::i;:::-;23397:29;23419:6;23397:29;:::i;:::-;23392:3;23388:39;23381:46;;23161:272;23069:364;;;;:::o;23439:313::-;23552:4;23590:2;23579:9;23575:18;23567:26;;23639:9;23633:4;23629:20;23625:1;23614:9;23610:17;23603:47;23667:78;23740:4;23731:6;23667:78;:::i;:::-;23659:86;;23439:313;;;;:::o;23758:179::-;23898:31;23894:1;23886:6;23882:14;23875:55;23758:179;:::o;23943:366::-;24085:3;24106:67;24170:2;24165:3;24106:67;:::i;:::-;24099:74;;24182:93;24271:3;24182:93;:::i;:::-;24300:2;24295:3;24291:12;24284:19;;23943:366;;;:::o;24315:419::-;24481:4;24519:2;24508:9;24504:18;24496:26;;24568:9;24562:4;24558:20;24554:1;24543:9;24539:17;24532:47;24596:131;24722:4;24596:131;:::i;:::-;24588:139;;24315:419;;;:::o;24740:98::-;24791:6;24825:5;24819:12;24809:22;;24740:98;;;:::o;24844:147::-;24945:11;24982:3;24967:18;;24844:147;;;;:::o;24997:373::-;25101:3;25129:38;25161:5;25129:38;:::i;:::-;25183:88;25264:6;25259:3;25183:88;:::i;:::-;25176:95;;25280:52;25325:6;25320:3;25313:4;25306:5;25302:16;25280:52;:::i;:::-;25357:6;25352:3;25348:16;25341:23;;25105:265;24997:373;;;;:::o;25376:271::-;25506:3;25528:93;25617:3;25608:6;25528:93;:::i;:::-;25521:100;;25638:3;25631:10;;25376:271;;;;:::o
Swarm Source
ipfs://de74a75cd981296fe6faa9d00aac5bd26d908c2b83c22aefd27158ee191149a6
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.