Source Code
Overview
S Balance
S Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SHEEPDOG
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/**
*Submitted for verification at SonicScan.org on 2025-10-29
*/
// SPDX-License-Identifier: MIT
pragma solidity =0.8.13 ^0.8.0 ^0.8.13;
// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.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 meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// src/FeeM.sol
abstract contract FeeM {
/// @dev Register my contract on Sonic FeeM
function registerMe() external {
(bool _success,) = address(0xDC2B0D2Dd2b7759D97D50db4eabDC36973110830).call(
abi.encodeWithSignature("selfRegister(uint256)", 76)
);
require(_success, "FeeM registration failed");
}
}
// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, 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 `from` to `to` 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 from,
address to,
uint256 amount
) external returns (bool);
}
// src/interfaces/IRouter.sol
interface IRouter {
function swapExactTokensForTokensSimple(uint amountIn, uint amountOutMin, address tokenFrom, address tokenTo, bool stable, address to, uint deadline) external returns (uint[] memory amounts);
}
// src/interfaces/ISheep.sol
interface ISheep {
function transferOwnership(address newOwner) external;
function eatSheep(address _victim, uint256 _amount, address _owner, uint256 _mintPercent) external;
function transferFrom(address from, address to, uint256 amount) external;
function transfer(address to, uint256 amount) external returns (bool);
function burnSheep(uint256 balSheepHere) external;
function owner() external view returns (address);
function wGasToken() external view returns (address);
function wolf() external view returns (address);
function balanceOf(address account) external view returns (uint256);
function pastured() external view returns (bool);
function saleStarted() external view returns (bool);
}
// lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
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() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol
// OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol)
/**
* @dev Contract module which provides 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} and {acceptOwnership}.
*
* This module is used through inheritance. It will make available all functions
* from parent (Ownable).
*/
abstract contract Ownable2Step is Ownable {
address private _pendingOwner;
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);
/**
* @dev Returns the address of the pending owner.
*/
function pendingOwner() public view virtual returns (address) {
return _pendingOwner;
}
/**
* @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual override onlyOwner {
_pendingOwner = newOwner;
emit OwnershipTransferStarted(owner(), newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual override {
delete _pendingOwner;
super._transferOwnership(newOwner);
}
/**
* @dev The new owner accepts the ownership transfer.
*/
function acceptOwnership() external {
address sender = _msgSender();
require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner");
_transferOwnership(sender);
}
}
// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
// src/sheepDog.sol
//Sheepdog is an APR vault for SHEEP that is safe from the wolf
contract SHEEPDOG is Ownable2Step, ReentrancyGuard,FeeM{
address public sheep;
uint256 public constant ONE = 1 * 1e18;
uint256 public constant TEN = 10 * 1e18;
uint256 public constant HUNDRED = 100 * 1e18;
uint256 public constant WEEK = 604800;
uint public totalShares;
uint public totalSheep;
mapping(address => uint256) public sheepDogShares;
mapping(address => uint256) public wenToClaim;
mapping(address => uint256) public rentStart;
mapping(address => uint256) public defaultTime;
mapping(address => uint256) public paidRent;
mapping(address => uint256) public rentTier;
struct RentTierSettings {
uint256 rentTierMaxCap;
uint256 rentTierRent;
}
RentTierSettings[] public rentTierSettings;
address public wGasToken;
address public router;
event addSheep(address indexed user, uint256 amount);
event removeSheep(address indexed user,address to, uint256 amount);
event rentPaid(address indexed user, uint256 amount,address byWho);
event sentDogToSleep(address indexed user);
constructor(address _sheep) {
sheep = _sheep;
wGasToken = ISheep(sheep).wGasToken();
rentTierSettings.push(RentTierSettings(10000 * ONE, 6 * ONE));
rentTierSettings.push(RentTierSettings(30000 * ONE, TEN));
}
//Buy SHEEP with Gas Token to compound the sheepDog
function buySheep() public {
uint256 balGasToken = IERC20(wGasToken).balanceOf(address(this));
uint teamFee = balGasToken * 5 / 100;
uint buyAmount = balGasToken - teamFee;
IERC20(wGasToken).transfer(ISheep(sheep).owner(), teamFee);
IERC20(wGasToken).approve(router,buyAmount);
uint256 sheepBefore = totalSheepBalance();
IRouter(router).swapExactTokensForTokensSimple(buyAmount, 1e18, wGasToken, sheep, false, address(this), block.timestamp + 10);
uint256 sheepAfter = totalSheepBalance();
uint256 sheepBuyBack = sheepAfter - sheepBefore;
uint256 callerFee = sheepBuyBack / 100;
totalSheep += sheepBuyBack - callerFee;
IERC20(sheep).transfer(msg.sender, callerFee);
}
function protect(uint256 _amount) public nonReentrant{
_protect(_amount,rentTier[msg.sender]);
}
function protect(uint256 _amount,uint256 _tier) public nonReentrant{
_protect(_amount,_tier);
}
// Deposit function for sheep with the SheepDog. You will pay x wGasTokens / day
function _protect(uint256 _amount,uint256 _tier) private {
require(wenToClaim[msg.sender] == 0,"Dog is going to sleep");
require(block.timestamp < defaultTime[msg.sender] || rentStart[msg.sender] == 0,"You can't add SHEEP to an evicted position");
require(_amount !=0, "you ca not deposit 0 SHEEP");
require(_tier < rentTierSettings.length, "This tier level does not exist");
require(rentTier[msg.sender] == _tier || rentStart[msg.sender] == 0,"You can not change tier on active deposit");
uint256 sheepDogAmount = 0;
if(totalShares > 0) {
sheepDogAmount = sheepDogShares[msg.sender] * (totalSheep) / (totalShares);
}
require(sheepDogAmount + _amount <= rentTierSettings[rentTier[msg.sender]].rentTierMaxCap,"You have reached the Maximum for your tier");
if (totalShares == 0 || totalSheep == 0) {
require(_amount == 100e18,"To small first deposit");
sheepDogShares[msg.sender] += _amount;
totalShares += _amount;
} else {
uint256 what = _amount * (totalShares) / (totalSheep);
require(what != 0, "Deposit too small");
sheepDogShares[msg.sender] += what;
totalShares += what;
}
ISheep(sheep).transferFrom(msg.sender, address(this), _amount);
totalSheep += _amount;
if (rentStart[msg.sender] == 0){
rentStart[msg.sender] = block.timestamp;
defaultTime[msg.sender] = block.timestamp + WEEK;
rentTier[msg.sender] = _tier;
}
emit addSheep(msg.sender,_amount);
}
// user pay the rent to avoid the default
function payRent() public {
payRentFor(msg.sender);
}
function payRentFor(address forAddress) public {
require(block.timestamp < defaultTime[forAddress] ,"You cant pay rent on an evicted position");
require(sheepDogShares[forAddress] != 0,"You do not have any sheep in the sheepdog");
uint256 payRent = getCurrentRent(forAddress);
require(payRent != 0,"Your rent is all paid up to date");
IERC20(wGasToken).transferFrom(msg.sender, address(this), payRent);
paidRent[forAddress] += payRent;
defaultTime[forAddress] = block.timestamp + WEEK;
emit rentPaid(forAddress,payRent,msg.sender);
}
function evictPosition(address depositor) public {
require(defaultTime[depositor] !=0, "This address does not have a deposit");
require(block.timestamp >= defaultTime[depositor],"This position's rent is not overdue");
_removeSheep(depositor,ISheep(sheep).wolf());
}
// Put your sheepDog to sleep so you can withdraw the sheep.
function dogSleep() public {
require(wenToClaim[msg.sender] == 0 || wenToClaim[msg.sender] + 172800 < block.timestamp,"SheepDog is going to sleep");
require(sheepDogShares[msg.sender] != 0,"You do not have any sheep in the sheepdog");
wenToClaim[msg.sender] = block.timestamp + 172800; // 2 days
emit sentDogToSleep(msg.sender);
}
// Get your sheep back. User will need to pay 10 wGasTokens / day since when they deposited.
// 5% ove these are sent to team, and 95% accumulate here for buySheep()
function getSheep() public {
require(wenToClaim[msg.sender] != 0, "Put dog to sleep first");
require(block.timestamp < defaultTime[msg.sender] ,"Your position has defaulted");
require(block.timestamp >= wenToClaim[msg.sender], "Your sheepDog is not asleep yet");
require(wenToClaim[msg.sender] + 172800 > block.timestamp, "sheepDog woke up again, put it back to sleep to withdraw");
uint256 payRent = getCurrentRent(msg.sender);
IERC20(wGasToken).transferFrom(msg.sender, address(this), payRent);
_removeSheep(msg.sender, msg.sender);
}
function _removeSheep(address depositor,address to) internal {
uint256 what = sheepDogShares[depositor] * (totalSheep) / (totalShares);
totalSheep -= what;
rentStart[depositor] = 0;
wenToClaim[depositor] = 0;
paidRent[depositor] = 0;
defaultTime[depositor] = 0;
totalShares -= sheepDogShares[depositor];
sheepDogShares[depositor] = 0;
ISheep(sheep).transfer(to, what);
emit removeSheep(depositor,to,what);
}
///////////////////////////////////////////////
/////////READ FUNCTIONS////////////////////////
///////////////////////////////////////////////
function getCurrentRent(address _user) public view returns (uint256 _currentRent) {
uint256 _calcRent = getTotalRent(_user) - paidRent[_user];
return _calcRent;
}
function getTotalRent(address _user) public view returns (uint256 _currentRent) {
uint256 _calcRent = (block.timestamp - rentStart[_user]) / 86400 * rentTierSettings[rentTier[_user]].rentTierRent;
return _calcRent;
}
function totalSheepBalance() public view returns (uint256) {
return IERC20(sheep).balanceOf(address(this));
}
function setRouter(address _router) public onlyOwner {
router = _router;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_sheep","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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":"addSheep","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeSheep","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"byWho","type":"address"}],"name":"rentPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"sentDogToSleep","type":"event"},{"inputs":[],"name":"HUNDRED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ONE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WEEK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buySheep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"defaultTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dogSleep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"depositor","type":"address"}],"name":"evictPosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getCurrentRent","outputs":[{"internalType":"uint256","name":"_currentRent","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSheep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getTotalRent","outputs":[{"internalType":"uint256","name":"_currentRent","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"paidRent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payRent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"forAddress","type":"address"}],"name":"payRentFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_tier","type":"uint256"}],"name":"protect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"protect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"registerMe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rentStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rentTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rentTierSettings","outputs":[{"internalType":"uint256","name":"rentTierMaxCap","type":"uint256"},{"internalType":"uint256","name":"rentTierRent","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sheep","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sheepDogShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSheep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSheepBalance","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":[],"name":"wGasToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wenToClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162003f8f38038062003f8f8339818101604052810190620000379190620003e7565b620000576200004b6200027360201b60201c565b6200027b60201b60201c565b600160028190555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e46ba78b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200010e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001349190620003e7565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c6040518060400160405280670de0b6b3a764000061271062000199919062000452565b8152602001670de0b6b3a76400006006620001b5919062000452565b815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000155602082015181600101555050600c6040518060400160405280670de0b6b3a76400006175306200021c919062000452565b8152602001678ac7230489e8000081525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010155505050620004b3565b600033905090565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055620002b681620002b960201b62001b451760201c565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003af8262000382565b9050919050565b620003c181620003a2565b8114620003cd57600080fd5b50565b600081519050620003e181620003b6565b92915050565b6000602082840312156200040057620003ff6200037d565b5b60006200041084828501620003d0565b91505092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200045f8262000419565b91506200046c8362000419565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620004a857620004a762000423565b5b828202905092915050565b613acc80620004c36000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063a709c4fe1161011a578063e46ba78b116100ad578063f2fde38b1161007c578063f2fde38b14610580578063f4359ce51461059c578063f85fc0ab146105ba578063f8617c05146105d8578063f887ea40146105f457610206565b8063e46ba78b146104f5578063e5eea2d014610513578063ecd172b814610531578063ee2f3a051461056257610206565b8063d5c5b869116100e9578063d5c5b86914610481578063dc199de51461048b578063e09b8487146104a7578063e30c3978146104d757610206565b8063a709c4fe14610421578063c0d786551461042b578063c2ee3a0814610447578063cf120b6a1461046557610206565b8063432da0191161019d57806379ba50971161016c57806379ba5097146103a157806387ca1371146103ab57806389f10d90146103db5780638da5cb5b146103f95780639a198d611461041757610206565b8063432da0191461033f57806348876051146103495780634d59e9db14610379578063715018a61461039757610206565b80631bb980bb116101d95780631bb980bb146102cb57806321c3866f146102e757806331b7f0da146102f15780633a98ef391461032157610206565b8063031f6ffb1461020b57806304b296c91461023b5780630f520e4d1461026b578063109cb4df1461029b575b600080fd5b6102256004803603810190610220919061282d565b610612565b6040516102329190612873565b60405180910390f35b6102556004803603810190610250919061282d565b610673565b6040516102629190612873565b60405180910390f35b6102856004803603810190610280919061282d565b61068b565b6040516102929190612873565b60405180910390f35b6102b560048036038101906102b0919061282d565b6106a3565b6040516102c29190612873565b60405180910390f35b6102e560048036038101906102e091906128ba565b6106bb565b005b6102ef6106d9565b005b61030b6004803603810190610306919061282d565b6109aa565b6040516103189190612873565b60405180910390f35b6103296109c2565b6040516103369190612873565b60405180910390f35b6103476109c8565b005b610363600480360381019061035e919061282d565b610e99565b6040516103709190612873565b60405180910390f35b610381610f6f565b60405161038e9190612873565b60405180910390f35b61039f611012565b005b6103a9611026565b005b6103c560048036038101906103c0919061282d565b6110b3565b6040516103d29190612873565b60405180910390f35b6103e36110cb565b6040516103f09190612909565b60405180910390f35b6104016110f1565b60405161040e9190612909565b60405180910390f35b61041f61111a565b005b61042961126c565b005b6104456004803603810190610440919061282d565b611277565b005b61044f6112c3565b60405161045c9190612873565b60405180910390f35b61047f600480360381019061047a9190612924565b6112cf565b005b61048961132b565b005b6104a560048036038101906104a0919061282d565b61151d565b005b6104c160048036038101906104bc919061282d565b6116be565b6040516104ce9190612873565b60405180910390f35b6104df6116d6565b6040516104ec9190612909565b60405180910390f35b6104fd611700565b60405161050a9190612909565b60405180910390f35b61051b611726565b6040516105289190612873565b60405180910390f35b61054b60048036038101906105469190612924565b61172c565b604051610559929190612951565b60405180910390f35b61056a611760565b6040516105779190612873565b60405180910390f35b61059a6004803603810190610595919061282d565b61176c565b005b6105a4611819565b6040516105b19190612873565b60405180910390f35b6105c2611820565b6040516105cf9190612873565b60405180910390f35b6105f260048036038101906105ed919061282d565b61182d565b005b6105fc611b1f565b6040516106099190612909565b60405180910390f35b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461065e84610e99565b61066891906129a9565b905080915050919050565b60086020528060005260406000206000915090505481565b60096020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b6106c3611c09565b6106cd8282611c56565b6106d56123dc565b5050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290612a3a565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442106107dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d390612aa6565b60405180910390fd5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442101561085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085590612b12565b60405180910390fd5b426202a300600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108ad9190612b32565b116108ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e490612bfa565b60405180910390fd5b60006108f833610612565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161095993929190612c1a565b6020604051808303816000875af1158015610978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099c9190612c89565b506109a733336123e6565b50565b60076020528060005260406000206000915090505481565b60045481565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a259190612909565b602060405180830381865afa158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a669190612ccb565b905060006064600583610a799190612cf8565b610a839190612d81565b905060008183610a9391906129a9565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b649190612dc7565b846040518363ffffffff1660e01b8152600401610b82929190612df4565b6020604051808303816000875af1158015610ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc59190612c89565b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610c45929190612df4565b6020604051808303816000875af1158015610c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c889190612c89565b506000610c93610f6f565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166313dcfc5983670de0b6b3a7640000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600030600a42610d339190612b32565b6040518863ffffffff1660e01b8152600401610d559796959493929190612e71565b6000604051808303816000875af1158015610d74573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610d9d9190613039565b506000610da8610f6f565b905060008282610db891906129a9565b90506000606482610dc99190612d81565b90508082610dd791906129a9565b60056000828254610de89190612b32565b92505081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610e4c929190612df4565b6020604051808303816000875af1158015610e6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8f9190612c89565b5050505050505050565b600080600c600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110610eef57610eee613082565b5b90600052602060002090600202016001015462015180600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442610f5091906129a9565b610f5a9190612d81565b610f649190612cf8565b905080915050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fcc9190612909565b602060405180830381865afa158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d9190612ccb565b905090565b61101a612704565b6110246000612782565b565b60006110306127b3565b90508073ffffffffffffffffffffffffffffffffffffffff166110516116d6565b73ffffffffffffffffffffffffffffffffffffffff16146110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90613123565b60405180910390fd5b6110b081612782565b50565b600b6020528060005260406000206000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073dc2b0d2dd2b7759d97d50db4eabdc3697311083073ffffffffffffffffffffffffffffffffffffffff16604c604051602401611159919061318b565b6040516020818303038152906040527f1e60fd14000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516111e39190613220565b6000604051808303816000865af19150503d8060008114611220576040519150601f19603f3d011682016040523d82523d6000602084013e611225565b606091505b5050905080611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126090613283565b60405180910390fd5b50565b6112753361182d565b565b61127f612704565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b670de0b6b3a764000081565b6112d7611c09565b61132081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c56565b6113286123dc565b50565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414806113c55750426202a300600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113c39190612b32565b105b611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb906132ef565b60405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90613381565b60405180910390fd5b6202a300426114959190612b32565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f17b6e77cab95997c7236f30ea468584179e4d9f914a188be3ab5583a75ccdf0160405160405180910390a2565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690613413565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054421015611621576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611618906134a5565b60405180910390fd5b6116bb81600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166367cfca5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b69190612dc7565b6123e6565b50565b60066020528060005260406000206000915090505481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600c818154811061173c57600080fd5b90600052602060002090600202016000915090508060000154908060010154905082565b678ac7230489e8000081565b611774612704565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166117d46110f1565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b62093a8081565b68056bc75e2d6310000081565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442106118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590613537565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790613381565b60405180910390fd5b600061193b82610612565b905060008103611980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611977906135a3565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016119df93929190612c1a565b6020604051808303816000875af11580156119fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a229190612c89565b5080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a729190612b32565b9250508190555062093a8042611a889190612b32565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f257a6cf85373055c2892fcdd33de07d4fbff97ebf81dabe15155ae74350922528233604051611b139291906135c3565b60405180910390a25050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6002805403611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490613638565b60405180910390fd5b60028081905550565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccf906136a4565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054421080611d6457506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90613736565b60405180910390fd5b60008203611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd906137a2565b60405180910390fd5b600c805490508110611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e249061380e565b60405180910390fd5b80600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541480611eb957506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef906138a0565b60405180910390fd5b6000806004541115611f6157600454600554600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f549190612cf8565b611f5e9190612d81565b90505b600c600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611fb457611fb3613082565b5b9060005260206000209060020201600001548382611fd29190612b32565b1115612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90613932565b60405180910390fd5b6000600454148061202657506000600554145b156120ea5768056bc75e2d631000008314612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d9061399e565b60405180910390fd5b82600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120c59190612b32565b9250508190555082600460008282546120de9190612b32565b925050819055506121bd565b6000600554600454856120fd9190612cf8565b6121079190612d81565b90506000810361214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390613a0a565b60405180910390fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219b9190612b32565b9250508190555080600460008282546121b49190612b32565b92505081905550505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b815260040161221c93929190612c1a565b600060405180830381600087803b15801561223657600080fd5b505af115801561224a573d6000803e3d6000fd5b5050505082600560008282546122609190612b32565b925050819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036123895742600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062093a80426123019190612b32565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3373ffffffffffffffffffffffffffffffffffffffff167f0ca273b07835d6c8c87a67edc92b386f8bd7f2e35079d28f073f065a8e5e480e846040516123cf9190612873565b60405180910390a2505050565b6001600281905550565b6000600454600554600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124389190612cf8565b6124429190612d81565b9050806005600082825461245691906129a9565b925050819055506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600460008282546125c291906129a9565b925050819055506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161266b929190612df4565b6020604051808303816000875af115801561268a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ae9190612c89565b508273ffffffffffffffffffffffffffffffffffffffff167f07cd2d807fc17547c86d769e7a91906d502492eef1ee42060f41fb06996f7fb083836040516126f7929190612df4565b60405180910390a2505050565b61270c6127b3565b73ffffffffffffffffffffffffffffffffffffffff1661272a6110f1565b73ffffffffffffffffffffffffffffffffffffffff1614612780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277790613a76565b60405180910390fd5b565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556127b081611b45565b50565b600033905090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127fa826127cf565b9050919050565b61280a816127ef565b811461281557600080fd5b50565b60008135905061282781612801565b92915050565b600060208284031215612843576128426127c5565b5b600061285184828501612818565b91505092915050565b6000819050919050565b61286d8161285a565b82525050565b60006020820190506128886000830184612864565b92915050565b6128978161285a565b81146128a257600080fd5b50565b6000813590506128b48161288e565b92915050565b600080604083850312156128d1576128d06127c5565b5b60006128df858286016128a5565b92505060206128f0858286016128a5565b9150509250929050565b612903816127ef565b82525050565b600060208201905061291e60008301846128fa565b92915050565b60006020828403121561293a576129396127c5565b5b6000612948848285016128a5565b91505092915050565b60006040820190506129666000830185612864565b6129736020830184612864565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129b48261285a565b91506129bf8361285a565b9250828210156129d2576129d161297a565b5b828203905092915050565b600082825260208201905092915050565b7f50757420646f6720746f20736c65657020666972737400000000000000000000600082015250565b6000612a246016836129dd565b9150612a2f826129ee565b602082019050919050565b60006020820190508181036000830152612a5381612a17565b9050919050565b7f596f757220706f736974696f6e206861732064656661756c7465640000000000600082015250565b6000612a90601b836129dd565b9150612a9b82612a5a565b602082019050919050565b60006020820190508181036000830152612abf81612a83565b9050919050565b7f596f7572207368656570446f67206973206e6f742061736c6565702079657400600082015250565b6000612afc601f836129dd565b9150612b0782612ac6565b602082019050919050565b60006020820190508181036000830152612b2b81612aef565b9050919050565b6000612b3d8261285a565b9150612b488361285a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b7d57612b7c61297a565b5b828201905092915050565b7f7368656570446f6720776f6b6520757020616761696e2c20707574206974206260008201527f61636b20746f20736c65657020746f2077697468647261770000000000000000602082015250565b6000612be46038836129dd565b9150612bef82612b88565b604082019050919050565b60006020820190508181036000830152612c1381612bd7565b9050919050565b6000606082019050612c2f60008301866128fa565b612c3c60208301856128fa565b612c496040830184612864565b949350505050565b60008115159050919050565b612c6681612c51565b8114612c7157600080fd5b50565b600081519050612c8381612c5d565b92915050565b600060208284031215612c9f57612c9e6127c5565b5b6000612cad84828501612c74565b91505092915050565b600081519050612cc58161288e565b92915050565b600060208284031215612ce157612ce06127c5565b5b6000612cef84828501612cb6565b91505092915050565b6000612d038261285a565b9150612d0e8361285a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612d4757612d4661297a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d8c8261285a565b9150612d978361285a565b925082612da757612da6612d52565b5b828204905092915050565b600081519050612dc181612801565b92915050565b600060208284031215612ddd57612ddc6127c5565b5b6000612deb84828501612db2565b91505092915050565b6000604082019050612e0960008301856128fa565b612e166020830184612864565b9392505050565b6000819050919050565b6000819050919050565b6000612e4c612e47612e4284612e1d565b612e27565b61285a565b9050919050565b612e5c81612e31565b82525050565b612e6b81612c51565b82525050565b600060e082019050612e86600083018a612864565b612e936020830189612e53565b612ea060408301886128fa565b612ead60608301876128fa565b612eba6080830186612e62565b612ec760a08301856128fa565b612ed460c0830184612864565b98975050505050505050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f2e82612ee5565b810181811067ffffffffffffffff82111715612f4d57612f4c612ef6565b5b80604052505050565b6000612f606127bb565b9050612f6c8282612f25565b919050565b600067ffffffffffffffff821115612f8c57612f8b612ef6565b5b602082029050602081019050919050565b600080fd5b6000612fb5612fb084612f71565b612f56565b90508083825260208201905060208402830185811115612fd857612fd7612f9d565b5b835b818110156130015780612fed8882612cb6565b845260208401935050602081019050612fda565b5050509392505050565b600082601f8301126130205761301f612ee0565b5b8151613030848260208601612fa2565b91505092915050565b60006020828403121561304f5761304e6127c5565b5b600082015167ffffffffffffffff81111561306d5761306c6127ca565b5b6130798482850161300b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060008201527f6e6577206f776e65720000000000000000000000000000000000000000000000602082015250565b600061310d6029836129dd565b9150613118826130b1565b604082019050919050565b6000602082019050818103600083015261313c81613100565b9050919050565b6000819050919050565b600060ff82169050919050565b600061317561317061316b84613143565b612e27565b61314d565b9050919050565b6131858161315a565b82525050565b60006020820190506131a0600083018461317c565b92915050565b600081519050919050565b600081905092915050565b60005b838110156131da5780820151818401526020810190506131bf565b838111156131e9576000848401525b50505050565b60006131fa826131a6565b61320481856131b1565b93506132148185602086016131bc565b80840191505092915050565b600061322c82846131ef565b915081905092915050565b7f4665654d20726567697374726174696f6e206661696c65640000000000000000600082015250565b600061326d6018836129dd565b915061327882613237565b602082019050919050565b6000602082019050818103600083015261329c81613260565b9050919050565b7f5368656570446f6720697320676f696e6720746f20736c656570000000000000600082015250565b60006132d9601a836129dd565b91506132e4826132a3565b602082019050919050565b60006020820190508181036000830152613308816132cc565b9050919050565b7f596f7520646f206e6f74206861766520616e7920736865657020696e2074686560008201527f207368656570646f670000000000000000000000000000000000000000000000602082015250565b600061336b6029836129dd565b91506133768261330f565b604082019050919050565b6000602082019050818103600083015261339a8161335e565b9050919050565b7f54686973206164647265737320646f6573206e6f74206861766520612064657060008201527f6f73697400000000000000000000000000000000000000000000000000000000602082015250565b60006133fd6024836129dd565b9150613408826133a1565b604082019050919050565b6000602082019050818103600083015261342c816133f0565b9050919050565b7f5468697320706f736974696f6e27732072656e74206973206e6f74206f76657260008201527f6475650000000000000000000000000000000000000000000000000000000000602082015250565b600061348f6023836129dd565b915061349a82613433565b604082019050919050565b600060208201905081810360008301526134be81613482565b9050919050565b7f596f752063616e74207061792072656e74206f6e20616e20657669637465642060008201527f706f736974696f6e000000000000000000000000000000000000000000000000602082015250565b60006135216028836129dd565b915061352c826134c5565b604082019050919050565b6000602082019050818103600083015261355081613514565b9050919050565b7f596f75722072656e7420697320616c6c207061696420757020746f2064617465600082015250565b600061358d6020836129dd565b915061359882613557565b602082019050919050565b600060208201905081810360008301526135bc81613580565b9050919050565b60006040820190506135d86000830185612864565b6135e560208301846128fa565b9392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613622601f836129dd565b915061362d826135ec565b602082019050919050565b6000602082019050818103600083015261365181613615565b9050919050565b7f446f6720697320676f696e6720746f20736c6565700000000000000000000000600082015250565b600061368e6015836129dd565b915061369982613658565b602082019050919050565b600060208201905081810360008301526136bd81613681565b9050919050565b7f596f752063616e27742061646420534845455020746f20616e2065766963746560008201527f6420706f736974696f6e00000000000000000000000000000000000000000000602082015250565b6000613720602a836129dd565b915061372b826136c4565b604082019050919050565b6000602082019050818103600083015261374f81613713565b9050919050565b7f796f75206361206e6f74206465706f7369742030205348454550000000000000600082015250565b600061378c601a836129dd565b915061379782613756565b602082019050919050565b600060208201905081810360008301526137bb8161377f565b9050919050565b7f546869732074696572206c6576656c20646f6573206e6f742065786973740000600082015250565b60006137f8601e836129dd565b9150613803826137c2565b602082019050919050565b60006020820190508181036000830152613827816137eb565b9050919050565b7f596f752063616e206e6f74206368616e67652074696572206f6e20616374697660008201527f65206465706f7369740000000000000000000000000000000000000000000000602082015250565b600061388a6029836129dd565b91506138958261382e565b604082019050919050565b600060208201905081810360008301526138b98161387d565b9050919050565b7f596f752068617665207265616368656420746865204d6178696d756d20666f7260008201527f20796f7572207469657200000000000000000000000000000000000000000000602082015250565b600061391c602a836129dd565b9150613927826138c0565b604082019050919050565b6000602082019050818103600083015261394b8161390f565b9050919050565b7f546f20736d616c6c206669727374206465706f73697400000000000000000000600082015250565b60006139886016836129dd565b915061399382613952565b602082019050919050565b600060208201905081810360008301526139b78161397b565b9050919050565b7f4465706f73697420746f6f20736d616c6c000000000000000000000000000000600082015250565b60006139f46011836129dd565b91506139ff826139be565b602082019050919050565b60006020820190508181036000830152613a23816139e7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a606020836129dd565b9150613a6b82613a2a565b602082019050919050565b60006020820190508181036000830152613a8f81613a53565b905091905056fea2646970667358221220169409934d185d33ac51f878c14da59f09455d80d0d1add708f0c82d63b99d7964736f6c634300080d003300000000000000000000000019330aa2832394e6d525e297f2eace513a63b711
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c8063a709c4fe1161011a578063e46ba78b116100ad578063f2fde38b1161007c578063f2fde38b14610580578063f4359ce51461059c578063f85fc0ab146105ba578063f8617c05146105d8578063f887ea40146105f457610206565b8063e46ba78b146104f5578063e5eea2d014610513578063ecd172b814610531578063ee2f3a051461056257610206565b8063d5c5b869116100e9578063d5c5b86914610481578063dc199de51461048b578063e09b8487146104a7578063e30c3978146104d757610206565b8063a709c4fe14610421578063c0d786551461042b578063c2ee3a0814610447578063cf120b6a1461046557610206565b8063432da0191161019d57806379ba50971161016c57806379ba5097146103a157806387ca1371146103ab57806389f10d90146103db5780638da5cb5b146103f95780639a198d611461041757610206565b8063432da0191461033f57806348876051146103495780634d59e9db14610379578063715018a61461039757610206565b80631bb980bb116101d95780631bb980bb146102cb57806321c3866f146102e757806331b7f0da146102f15780633a98ef391461032157610206565b8063031f6ffb1461020b57806304b296c91461023b5780630f520e4d1461026b578063109cb4df1461029b575b600080fd5b6102256004803603810190610220919061282d565b610612565b6040516102329190612873565b60405180910390f35b6102556004803603810190610250919061282d565b610673565b6040516102629190612873565b60405180910390f35b6102856004803603810190610280919061282d565b61068b565b6040516102929190612873565b60405180910390f35b6102b560048036038101906102b0919061282d565b6106a3565b6040516102c29190612873565b60405180910390f35b6102e560048036038101906102e091906128ba565b6106bb565b005b6102ef6106d9565b005b61030b6004803603810190610306919061282d565b6109aa565b6040516103189190612873565b60405180910390f35b6103296109c2565b6040516103369190612873565b60405180910390f35b6103476109c8565b005b610363600480360381019061035e919061282d565b610e99565b6040516103709190612873565b60405180910390f35b610381610f6f565b60405161038e9190612873565b60405180910390f35b61039f611012565b005b6103a9611026565b005b6103c560048036038101906103c0919061282d565b6110b3565b6040516103d29190612873565b60405180910390f35b6103e36110cb565b6040516103f09190612909565b60405180910390f35b6104016110f1565b60405161040e9190612909565b60405180910390f35b61041f61111a565b005b61042961126c565b005b6104456004803603810190610440919061282d565b611277565b005b61044f6112c3565b60405161045c9190612873565b60405180910390f35b61047f600480360381019061047a9190612924565b6112cf565b005b61048961132b565b005b6104a560048036038101906104a0919061282d565b61151d565b005b6104c160048036038101906104bc919061282d565b6116be565b6040516104ce9190612873565b60405180910390f35b6104df6116d6565b6040516104ec9190612909565b60405180910390f35b6104fd611700565b60405161050a9190612909565b60405180910390f35b61051b611726565b6040516105289190612873565b60405180910390f35b61054b60048036038101906105469190612924565b61172c565b604051610559929190612951565b60405180910390f35b61056a611760565b6040516105779190612873565b60405180910390f35b61059a6004803603810190610595919061282d565b61176c565b005b6105a4611819565b6040516105b19190612873565b60405180910390f35b6105c2611820565b6040516105cf9190612873565b60405180910390f35b6105f260048036038101906105ed919061282d565b61182d565b005b6105fc611b1f565b6040516106099190612909565b60405180910390f35b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461065e84610e99565b61066891906129a9565b905080915050919050565b60086020528060005260406000206000915090505481565b60096020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b6106c3611c09565b6106cd8282611c56565b6106d56123dc565b5050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290612a3a565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442106107dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d390612aa6565b60405180910390fd5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442101561085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085590612b12565b60405180910390fd5b426202a300600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108ad9190612b32565b116108ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e490612bfa565b60405180910390fd5b60006108f833610612565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161095993929190612c1a565b6020604051808303816000875af1158015610978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099c9190612c89565b506109a733336123e6565b50565b60076020528060005260406000206000915090505481565b60045481565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a259190612909565b602060405180830381865afa158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a669190612ccb565b905060006064600583610a799190612cf8565b610a839190612d81565b905060008183610a9391906129a9565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b649190612dc7565b846040518363ffffffff1660e01b8152600401610b82929190612df4565b6020604051808303816000875af1158015610ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc59190612c89565b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610c45929190612df4565b6020604051808303816000875af1158015610c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c889190612c89565b506000610c93610f6f565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166313dcfc5983670de0b6b3a7640000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600030600a42610d339190612b32565b6040518863ffffffff1660e01b8152600401610d559796959493929190612e71565b6000604051808303816000875af1158015610d74573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610d9d9190613039565b506000610da8610f6f565b905060008282610db891906129a9565b90506000606482610dc99190612d81565b90508082610dd791906129a9565b60056000828254610de89190612b32565b92505081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610e4c929190612df4565b6020604051808303816000875af1158015610e6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8f9190612c89565b5050505050505050565b600080600c600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110610eef57610eee613082565b5b90600052602060002090600202016001015462015180600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442610f5091906129a9565b610f5a9190612d81565b610f649190612cf8565b905080915050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fcc9190612909565b602060405180830381865afa158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d9190612ccb565b905090565b61101a612704565b6110246000612782565b565b60006110306127b3565b90508073ffffffffffffffffffffffffffffffffffffffff166110516116d6565b73ffffffffffffffffffffffffffffffffffffffff16146110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90613123565b60405180910390fd5b6110b081612782565b50565b600b6020528060005260406000206000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073dc2b0d2dd2b7759d97d50db4eabdc3697311083073ffffffffffffffffffffffffffffffffffffffff16604c604051602401611159919061318b565b6040516020818303038152906040527f1e60fd14000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516111e39190613220565b6000604051808303816000865af19150503d8060008114611220576040519150601f19603f3d011682016040523d82523d6000602084013e611225565b606091505b5050905080611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126090613283565b60405180910390fd5b50565b6112753361182d565b565b61127f612704565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b670de0b6b3a764000081565b6112d7611c09565b61132081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c56565b6113286123dc565b50565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414806113c55750426202a300600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113c39190612b32565b105b611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb906132ef565b60405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90613381565b60405180910390fd5b6202a300426114959190612b32565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f17b6e77cab95997c7236f30ea468584179e4d9f914a188be3ab5583a75ccdf0160405160405180910390a2565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690613413565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054421015611621576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611618906134a5565b60405180910390fd5b6116bb81600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166367cfca5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b69190612dc7565b6123e6565b50565b60066020528060005260406000206000915090505481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600c818154811061173c57600080fd5b90600052602060002090600202016000915090508060000154908060010154905082565b678ac7230489e8000081565b611774612704565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166117d46110f1565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b62093a8081565b68056bc75e2d6310000081565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442106118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590613537565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790613381565b60405180910390fd5b600061193b82610612565b905060008103611980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611977906135a3565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016119df93929190612c1a565b6020604051808303816000875af11580156119fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a229190612c89565b5080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a729190612b32565b9250508190555062093a8042611a889190612b32565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f257a6cf85373055c2892fcdd33de07d4fbff97ebf81dabe15155ae74350922528233604051611b139291906135c3565b60405180910390a25050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6002805403611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490613638565b60405180910390fd5b60028081905550565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccf906136a4565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054421080611d6457506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90613736565b60405180910390fd5b60008203611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd906137a2565b60405180910390fd5b600c805490508110611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e249061380e565b60405180910390fd5b80600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541480611eb957506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef906138a0565b60405180910390fd5b6000806004541115611f6157600454600554600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f549190612cf8565b611f5e9190612d81565b90505b600c600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611fb457611fb3613082565b5b9060005260206000209060020201600001548382611fd29190612b32565b1115612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90613932565b60405180910390fd5b6000600454148061202657506000600554145b156120ea5768056bc75e2d631000008314612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d9061399e565b60405180910390fd5b82600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120c59190612b32565b9250508190555082600460008282546120de9190612b32565b925050819055506121bd565b6000600554600454856120fd9190612cf8565b6121079190612d81565b90506000810361214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390613a0a565b60405180910390fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219b9190612b32565b9250508190555080600460008282546121b49190612b32565b92505081905550505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b815260040161221c93929190612c1a565b600060405180830381600087803b15801561223657600080fd5b505af115801561224a573d6000803e3d6000fd5b5050505082600560008282546122609190612b32565b925050819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036123895742600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062093a80426123019190612b32565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3373ffffffffffffffffffffffffffffffffffffffff167f0ca273b07835d6c8c87a67edc92b386f8bd7f2e35079d28f073f065a8e5e480e846040516123cf9190612873565b60405180910390a2505050565b6001600281905550565b6000600454600554600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124389190612cf8565b6124429190612d81565b9050806005600082825461245691906129a9565b925050819055506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600460008282546125c291906129a9565b925050819055506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161266b929190612df4565b6020604051808303816000875af115801561268a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ae9190612c89565b508273ffffffffffffffffffffffffffffffffffffffff167f07cd2d807fc17547c86d769e7a91906d502492eef1ee42060f41fb06996f7fb083836040516126f7929190612df4565b60405180910390a2505050565b61270c6127b3565b73ffffffffffffffffffffffffffffffffffffffff1661272a6110f1565b73ffffffffffffffffffffffffffffffffffffffff1614612780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277790613a76565b60405180910390fd5b565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556127b081611b45565b50565b600033905090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127fa826127cf565b9050919050565b61280a816127ef565b811461281557600080fd5b50565b60008135905061282781612801565b92915050565b600060208284031215612843576128426127c5565b5b600061285184828501612818565b91505092915050565b6000819050919050565b61286d8161285a565b82525050565b60006020820190506128886000830184612864565b92915050565b6128978161285a565b81146128a257600080fd5b50565b6000813590506128b48161288e565b92915050565b600080604083850312156128d1576128d06127c5565b5b60006128df858286016128a5565b92505060206128f0858286016128a5565b9150509250929050565b612903816127ef565b82525050565b600060208201905061291e60008301846128fa565b92915050565b60006020828403121561293a576129396127c5565b5b6000612948848285016128a5565b91505092915050565b60006040820190506129666000830185612864565b6129736020830184612864565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129b48261285a565b91506129bf8361285a565b9250828210156129d2576129d161297a565b5b828203905092915050565b600082825260208201905092915050565b7f50757420646f6720746f20736c65657020666972737400000000000000000000600082015250565b6000612a246016836129dd565b9150612a2f826129ee565b602082019050919050565b60006020820190508181036000830152612a5381612a17565b9050919050565b7f596f757220706f736974696f6e206861732064656661756c7465640000000000600082015250565b6000612a90601b836129dd565b9150612a9b82612a5a565b602082019050919050565b60006020820190508181036000830152612abf81612a83565b9050919050565b7f596f7572207368656570446f67206973206e6f742061736c6565702079657400600082015250565b6000612afc601f836129dd565b9150612b0782612ac6565b602082019050919050565b60006020820190508181036000830152612b2b81612aef565b9050919050565b6000612b3d8261285a565b9150612b488361285a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b7d57612b7c61297a565b5b828201905092915050565b7f7368656570446f6720776f6b6520757020616761696e2c20707574206974206260008201527f61636b20746f20736c65657020746f2077697468647261770000000000000000602082015250565b6000612be46038836129dd565b9150612bef82612b88565b604082019050919050565b60006020820190508181036000830152612c1381612bd7565b9050919050565b6000606082019050612c2f60008301866128fa565b612c3c60208301856128fa565b612c496040830184612864565b949350505050565b60008115159050919050565b612c6681612c51565b8114612c7157600080fd5b50565b600081519050612c8381612c5d565b92915050565b600060208284031215612c9f57612c9e6127c5565b5b6000612cad84828501612c74565b91505092915050565b600081519050612cc58161288e565b92915050565b600060208284031215612ce157612ce06127c5565b5b6000612cef84828501612cb6565b91505092915050565b6000612d038261285a565b9150612d0e8361285a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612d4757612d4661297a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d8c8261285a565b9150612d978361285a565b925082612da757612da6612d52565b5b828204905092915050565b600081519050612dc181612801565b92915050565b600060208284031215612ddd57612ddc6127c5565b5b6000612deb84828501612db2565b91505092915050565b6000604082019050612e0960008301856128fa565b612e166020830184612864565b9392505050565b6000819050919050565b6000819050919050565b6000612e4c612e47612e4284612e1d565b612e27565b61285a565b9050919050565b612e5c81612e31565b82525050565b612e6b81612c51565b82525050565b600060e082019050612e86600083018a612864565b612e936020830189612e53565b612ea060408301886128fa565b612ead60608301876128fa565b612eba6080830186612e62565b612ec760a08301856128fa565b612ed460c0830184612864565b98975050505050505050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f2e82612ee5565b810181811067ffffffffffffffff82111715612f4d57612f4c612ef6565b5b80604052505050565b6000612f606127bb565b9050612f6c8282612f25565b919050565b600067ffffffffffffffff821115612f8c57612f8b612ef6565b5b602082029050602081019050919050565b600080fd5b6000612fb5612fb084612f71565b612f56565b90508083825260208201905060208402830185811115612fd857612fd7612f9d565b5b835b818110156130015780612fed8882612cb6565b845260208401935050602081019050612fda565b5050509392505050565b600082601f8301126130205761301f612ee0565b5b8151613030848260208601612fa2565b91505092915050565b60006020828403121561304f5761304e6127c5565b5b600082015167ffffffffffffffff81111561306d5761306c6127ca565b5b6130798482850161300b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060008201527f6e6577206f776e65720000000000000000000000000000000000000000000000602082015250565b600061310d6029836129dd565b9150613118826130b1565b604082019050919050565b6000602082019050818103600083015261313c81613100565b9050919050565b6000819050919050565b600060ff82169050919050565b600061317561317061316b84613143565b612e27565b61314d565b9050919050565b6131858161315a565b82525050565b60006020820190506131a0600083018461317c565b92915050565b600081519050919050565b600081905092915050565b60005b838110156131da5780820151818401526020810190506131bf565b838111156131e9576000848401525b50505050565b60006131fa826131a6565b61320481856131b1565b93506132148185602086016131bc565b80840191505092915050565b600061322c82846131ef565b915081905092915050565b7f4665654d20726567697374726174696f6e206661696c65640000000000000000600082015250565b600061326d6018836129dd565b915061327882613237565b602082019050919050565b6000602082019050818103600083015261329c81613260565b9050919050565b7f5368656570446f6720697320676f696e6720746f20736c656570000000000000600082015250565b60006132d9601a836129dd565b91506132e4826132a3565b602082019050919050565b60006020820190508181036000830152613308816132cc565b9050919050565b7f596f7520646f206e6f74206861766520616e7920736865657020696e2074686560008201527f207368656570646f670000000000000000000000000000000000000000000000602082015250565b600061336b6029836129dd565b91506133768261330f565b604082019050919050565b6000602082019050818103600083015261339a8161335e565b9050919050565b7f54686973206164647265737320646f6573206e6f74206861766520612064657060008201527f6f73697400000000000000000000000000000000000000000000000000000000602082015250565b60006133fd6024836129dd565b9150613408826133a1565b604082019050919050565b6000602082019050818103600083015261342c816133f0565b9050919050565b7f5468697320706f736974696f6e27732072656e74206973206e6f74206f76657260008201527f6475650000000000000000000000000000000000000000000000000000000000602082015250565b600061348f6023836129dd565b915061349a82613433565b604082019050919050565b600060208201905081810360008301526134be81613482565b9050919050565b7f596f752063616e74207061792072656e74206f6e20616e20657669637465642060008201527f706f736974696f6e000000000000000000000000000000000000000000000000602082015250565b60006135216028836129dd565b915061352c826134c5565b604082019050919050565b6000602082019050818103600083015261355081613514565b9050919050565b7f596f75722072656e7420697320616c6c207061696420757020746f2064617465600082015250565b600061358d6020836129dd565b915061359882613557565b602082019050919050565b600060208201905081810360008301526135bc81613580565b9050919050565b60006040820190506135d86000830185612864565b6135e560208301846128fa565b9392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613622601f836129dd565b915061362d826135ec565b602082019050919050565b6000602082019050818103600083015261365181613615565b9050919050565b7f446f6720697320676f696e6720746f20736c6565700000000000000000000000600082015250565b600061368e6015836129dd565b915061369982613658565b602082019050919050565b600060208201905081810360008301526136bd81613681565b9050919050565b7f596f752063616e27742061646420534845455020746f20616e2065766963746560008201527f6420706f736974696f6e00000000000000000000000000000000000000000000602082015250565b6000613720602a836129dd565b915061372b826136c4565b604082019050919050565b6000602082019050818103600083015261374f81613713565b9050919050565b7f796f75206361206e6f74206465706f7369742030205348454550000000000000600082015250565b600061378c601a836129dd565b915061379782613756565b602082019050919050565b600060208201905081810360008301526137bb8161377f565b9050919050565b7f546869732074696572206c6576656c20646f6573206e6f742065786973740000600082015250565b60006137f8601e836129dd565b9150613803826137c2565b602082019050919050565b60006020820190508181036000830152613827816137eb565b9050919050565b7f596f752063616e206e6f74206368616e67652074696572206f6e20616374697660008201527f65206465706f7369740000000000000000000000000000000000000000000000602082015250565b600061388a6029836129dd565b91506138958261382e565b604082019050919050565b600060208201905081810360008301526138b98161387d565b9050919050565b7f596f752068617665207265616368656420746865204d6178696d756d20666f7260008201527f20796f7572207469657200000000000000000000000000000000000000000000602082015250565b600061391c602a836129dd565b9150613927826138c0565b604082019050919050565b6000602082019050818103600083015261394b8161390f565b9050919050565b7f546f20736d616c6c206669727374206465706f73697400000000000000000000600082015250565b60006139886016836129dd565b915061399382613952565b602082019050919050565b600060208201905081810360008301526139b78161397b565b9050919050565b7f4465706f73697420746f6f20736d616c6c000000000000000000000000000000600082015250565b60006139f46011836129dd565b91506139ff826139be565b602082019050919050565b60006020820190508181036000830152613a23816139e7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a606020836129dd565b9150613a6b82613a2a565b602082019050919050565b60006020820190508181036000830152613a8f81613a53565b905091905056fea2646970667358221220169409934d185d33ac51f878c14da59f09455d80d0d1add708f0c82d63b99d7964736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000019330aa2832394e6d525e297f2eace513a63b711
-----Decoded View---------------
Arg [0] : _sheep (address): 0x19330Aa2832394E6d525E297f2Eace513A63B711
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000019330aa2832394e6d525e297f2eace513a63b711
Deployed Bytecode Sourcemap
26903:7912:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34153:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27357:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27408:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27461:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29283:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32858:608;;;:::i;:::-;;27305:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27188:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28352:805;;;:::i;:::-;;34346:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34593:123;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10710:103;;;:::i;:::-;;13292:210;;;:::i;:::-;;27511:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26965:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10062:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1045:259;;;:::i;:::-;;31219:67;;;:::i;:::-;;34724:88;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26998:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29165:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32300:375;;;:::i;:::-;;31927:299;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27249:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12380:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27718:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27218:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27667:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;27043:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12680:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27142:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27089:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31294:625;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27749:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34153:185;34213:20;34246:17;34288:8;:15;34297:5;34288:15;;;;;;;;;;;;;;;;34266:19;34279:5;34266:12;:19::i;:::-;:37;;;;:::i;:::-;34246:57;;34321:9;34314:16;;;34153:185;;;:::o;27357:44::-;;;;;;;;;;;;;;;;;:::o;27408:46::-;;;;;;;;;;;;;;;;;:::o;27461:43::-;;;;;;;;;;;;;;;;;:::o;29283:109::-;7539:21;:19;:21::i;:::-;29361:23:::1;29370:7;29378:5;29361:8;:23::i;:::-;7583:20:::0;:18;:20::i;:::-;29283:109;;:::o;32858:608::-;32930:1;32904:10;:22;32915:10;32904:22;;;;;;;;;;;;;;;;:27;32896:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32995:11;:23;33007:10;32995:23;;;;;;;;;;;;;;;;32977:15;:41;32969:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33088:10;:22;33099:10;33088:22;;;;;;;;;;;;;;;;33069:15;:41;;33061:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33199:15;33190:6;33165:10;:22;33176:10;33165:22;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;:49;33157:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;33288:15;33306:26;33321:10;33306:14;:26::i;:::-;33288:44;;33350:9;;;;;;;;;;;33343:30;;;33374:10;33394:4;33401:7;33343:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33422:36;33435:10;33447;33422:12;:36::i;:::-;32885:581;32858:608::o;27305:45::-;;;;;;;;;;;;;;;;;:::o;27188:23::-;;;;:::o;28352:805::-;28392:19;28421:9;;;;;;;;;;;28414:27;;;28450:4;28414:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28392:64;;28467:12;28500:3;28496:1;28482:11;:15;;;;:::i;:::-;:21;;;;:::i;:::-;28467:36;;28514:14;28545:7;28531:11;:21;;;;:::i;:::-;28514:38;;28572:9;;;;;;;;;;;28565:26;;;28599:5;;;;;;;;;;;28592:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28615:7;28565:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28651:9;;;;;;;;;;;28644:25;;;28670:6;;;;;;;;;;;28677:9;28644:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28700:19;28722;:17;:19::i;:::-;28700:41;;28760:6;;;;;;;;;;;28752:46;;;28799:9;28810:4;28816:9;;;;;;;;;;;28827:5;;;;;;;;;;;28834;28849:4;28874:2;28856:15;:20;;;;:::i;:::-;28752:125;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28888:18;28909:19;:17;:19::i;:::-;28888:40;;28941:20;28977:11;28964:10;:24;;;;:::i;:::-;28941:47;;29001:17;29037:3;29022:12;:18;;;;:::i;:::-;29001:39;;29082:9;29067:12;:24;;;;:::i;:::-;29053:10;;:38;;;;;;;:::i;:::-;;;;;;;;29111:5;;;;;;;;;;;29104:22;;;29127:10;29139:9;29104:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28379:778;;;;;;;28352:805::o;34346:239::-;34404:20;34437:17;34504:16;34521:8;:15;34530:5;34521:15;;;;;;;;;;;;;;;;34504:33;;;;;;;;:::i;:::-;;;;;;;;;;;;:46;;;34496:5;34476:9;:16;34486:5;34476:16;;;;;;;;;;;;;;;;34458:15;:34;;;;:::i;:::-;34457:44;;;;:::i;:::-;:93;;;;:::i;:::-;34437:113;;34568:9;34561:16;;;34346:239;;;:::o;34593:123::-;34643:7;34677:5;;;;;;;;;;;34670:23;;;34702:4;34670:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34663:45;;34593:123;:::o;10710:103::-;9948:13;:11;:13::i;:::-;10775:30:::1;10802:1;10775:18;:30::i;:::-;10710:103::o:0;13292:210::-;13339:14;13356:12;:10;:12::i;:::-;13339:29;;13405:6;13387:24;;:14;:12;:14::i;:::-;:24;;;13379:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;13468:26;13487:6;13468:18;:26::i;:::-;13328:174;13292:210::o;27511:43::-;;;;;;;;;;;;;;;;;:::o;26965:20::-;;;;;;;;;;;;;:::o;10062:87::-;10108:7;10135:6;;;;;;;;;;;10128:13;;10062:87;:::o;1045:259::-;1088:13;1114:42;1106:56;;1226:2;1177:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1106:134;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1087:153;;;1259:8;1251:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;1076:228;1045:259::o;31219:67::-;31256:22;31267:10;31256;:22::i;:::-;31219:67::o;34724:88::-;9948:13;:11;:13::i;:::-;34797:7:::1;34788:6;;:16;;;;;;;;;;;;;;;;;;34724:88:::0;:::o;26998:38::-;27028:8;26998:38;:::o;29165:110::-;7539:21;:19;:21::i;:::-;29229:38:::1;29238:7;29246:8;:20;29255:10;29246:20;;;;;;;;;;;;;;;;29229:8;:38::i;:::-;7583:20:::0;:18;:20::i;:::-;29165:110;:::o;32300:375::-;32372:1;32346:10;:22;32357:10;32346:22;;;;;;;;;;;;;;;;:27;:80;;;;32411:15;32402:6;32377:10;:22;32388:10;32377:22;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;:49;32346:80;32338:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;32505:1;32475:14;:26;32490:10;32475:26;;;;;;;;;;;;;;;;:31;32467:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;32607:6;32589:15;:24;;;;:::i;:::-;32564:10;:22;32575:10;32564:22;;;;;;;;;;;;;;;:49;;;;32656:10;32641:26;;;;;;;;;;;;32300:375::o;31927:299::-;32020:1;31995:11;:22;32007:9;31995:22;;;;;;;;;;;;;;;;:26;31987:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;32100:11;:22;32112:9;32100:22;;;;;;;;;;;;;;;;32081:15;:41;;32073:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;32174:44;32187:9;32204:5;;;;;;;;;;;32197:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32174:12;:44::i;:::-;31927:299;:::o;27249:49::-;;;;;;;;;;;;;;;;;:::o;12380:101::-;12433:7;12460:13;;;;;;;;;;;12453:20;;12380:101;:::o;27718:24::-;;;;;;;;;;;;;:::o;27218:22::-;;;;:::o;27667:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27043:39::-;27073:9;27043:39;:::o;12680:181::-;9948:13;:11;:13::i;:::-;12786:8:::1;12770:13;;:24;;;;;;;;;;;;;;;;;;12844:8;12810:43;;12835:7;:5;:7::i;:::-;12810:43;;;;;;;;;;;;12680:181:::0;:::o;27142:37::-;27173:6;27142:37;:::o;27089:44::-;27123:10;27089:44;:::o;31294:625::-;31378:11;:23;31390:10;31378:23;;;;;;;;;;;;;;;;31360:15;:41;31352:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;31497:1;31467:14;:26;31482:10;31467:26;;;;;;;;;;;;;;;;:31;31459:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;31556:15;31574:26;31589:10;31574:14;:26::i;:::-;31556:44;;31632:1;31621:7;:12;31613:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;31689:9;;;;;;;;;;;31682:30;;;31713:10;31733:4;31740:7;31682:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31785:7;31761:8;:20;31770:10;31761:20;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;27173:6;31832:15;:22;;;;:::i;:::-;31806:11;:23;31818:10;31806:23;;;;;;;;;;;;;;;:48;;;;31881:10;31872:39;;;31892:7;31900:10;31872:39;;;;;;;:::i;:::-;;;;;;;;31341:578;31294:625;:::o;27749:21::-;;;;;;;;;;;;;:::o;11329:191::-;11403:16;11422:6;;;;;;;;;;;11403:25;;11448:8;11439:6;;:17;;;;;;;;;;;;;;;;;;11503:8;11472:40;;11493:8;11472:40;;;;;;;;;;;;11392:128;11329:191;:::o;7619:293::-;7021:1;7753:7;;:19;7745:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7021:1;7886:7;:18;;;;7619:293::o;29486:1677::-;29588:1;29562:10;:22;29573:10;29562:22;;;;;;;;;;;;;;;;:27;29554:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29651:11;:23;29663:10;29651:23;;;;;;;;;;;;;;;;29633:15;:41;:72;;;;29704:1;29679:9;:21;29689:10;29679:21;;;;;;;;;;;;;;;;:26;29633:72;29625:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;29780:1;29770:7;:11;29762:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;29841:16;:23;;;;29833:5;:31;29825:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29942:5;29918:8;:20;29927:10;29918:20;;;;;;;;;;;;;;;;:29;:59;;;;29976:1;29951:9;:21;29961:10;29951:21;;;;;;;;;;;;;;;;:26;29918:59;29910:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;30043:22;30097:1;30083:11;;:15;30080:121;;;30177:11;;30162:10;;30132:14;:26;30147:10;30132:26;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:57;;;;:::i;:::-;30115:74;;30080:121;30249:16;30266:8;:20;30275:10;30266:20;;;;;;;;;;;;;;;;30249:38;;;;;;;;:::i;:::-;;;;;;;;;;;;:53;;;30238:7;30221:14;:24;;;;:::i;:::-;:81;;30213:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;30380:1;30365:11;;:16;:35;;;;30399:1;30385:10;;:15;30365:35;30361:431;;;30436:6;30425:7;:17;30417:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;30513:7;30483:14;:26;30498:10;30483:26;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;30550:7;30535:11;;:22;;;;;;;:::i;:::-;;;;;;;;30361:431;;;30590:12;30632:10;;30616:11;;30605:7;:23;;;;:::i;:::-;:38;;;;:::i;:::-;30590:53;;30674:1;30666:4;:9;30658:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;30742:4;30712:14;:26;30727:10;30712:26;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;30776:4;30761:11;;:19;;;;;;;:::i;:::-;;;;;;;;30575:217;30361:431;30809:5;;;;;;;;;;;30802:26;;;30829:10;30849:4;30856:7;30802:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30889:7;30875:10;;:21;;;;;;;:::i;:::-;;;;;;;;30936:1;30911:9;:21;30921:10;30911:21;;;;;;;;;;;;;;;;:26;30907:203;;30977:15;30953:9;:21;30963:10;30953:21;;;;;;;;;;;;;;;:39;;;;27173:6;31033:15;:22;;;;:::i;:::-;31007:11;:23;31019:10;31007:23;;;;;;;;;;;;;;;:48;;;;31093:5;31070:8;:20;31079:10;31070:20;;;;;;;;;;;;;;;:28;;;;30907:203;31136:10;31127:28;;;31147:7;31127:28;;;;;;:::i;:::-;;;;;;;;29543:1620;29486:1677;;:::o;7920:213::-;6977:1;8103:7;:22;;;;7920:213::o;33474:512::-;33546:12;33605:11;;33590:10;;33561:14;:25;33576:9;33561:25;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;:56;;;;:::i;:::-;33546:71;;33644:4;33630:10;;:18;;;;;;;:::i;:::-;;;;;;;;33684:1;33661:9;:20;33671:9;33661:20;;;;;;;;;;;;;;;:24;;;;33720:1;33696:10;:21;33707:9;33696:21;;;;;;;;;;;;;;;:25;;;;33754:1;33732:8;:19;33741:9;33732:19;;;;;;;;;;;;;;;:23;;;;33791:1;33766:11;:22;33778:9;33766:22;;;;;;;;;;;;;;;:26;;;;33820:14;:25;33835:9;33820:25;;;;;;;;;;;;;;;;33805:11;;:40;;;;;;;:::i;:::-;;;;;;;;33884:1;33856:14;:25;33871:9;33856:25;;;;;;;;;;;;;;;:29;;;;33905:5;;;;;;;;;;;33898:22;;;33921:2;33925:4;33898:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33960:9;33948:30;;;33970:2;33973:4;33948:30;;;;;;;:::i;:::-;;;;;;;;33535:451;33474:512;;:::o;10227:132::-;10302:12;:10;:12::i;:::-;10291:23;;:7;:5;:7::i;:::-;:23;;;10283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10227:132::o;13051:156::-;13141:13;;13134:20;;;;;;;;;;;13165:34;13190:8;13165:24;:34::i;:::-;13051:156;:::o;733:98::-;786:7;813:10;806:17;;733:98;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:474::-;1952:6;1960;2009:2;1997:9;1988:7;1984:23;1980:32;1977:119;;;2015:79;;:::i;:::-;1977:119;2135:1;2160:53;2205:7;2196:6;2185:9;2181:22;2160:53;:::i;:::-;2150:63;;2106:117;2262:2;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2233:118;1884:474;;;;;:::o;2364:118::-;2451:24;2469:5;2451:24;:::i;:::-;2446:3;2439:37;2364:118;;:::o;2488:222::-;2581:4;2619:2;2608:9;2604:18;2596:26;;2632:71;2700:1;2689:9;2685:17;2676:6;2632:71;:::i;:::-;2488:222;;;;:::o;2716:329::-;2775:6;2824:2;2812:9;2803:7;2799:23;2795:32;2792:119;;;2830:79;;:::i;:::-;2792:119;2950:1;2975:53;3020:7;3011:6;3000:9;2996:22;2975:53;:::i;:::-;2965:63;;2921:117;2716:329;;;;:::o;3051:332::-;3172:4;3210:2;3199:9;3195:18;3187:26;;3223:71;3291:1;3280:9;3276:17;3267:6;3223:71;:::i;:::-;3304:72;3372:2;3361:9;3357:18;3348:6;3304:72;:::i;:::-;3051:332;;;;;:::o;3389:180::-;3437:77;3434:1;3427:88;3534:4;3531:1;3524:15;3558:4;3555:1;3548:15;3575:191;3615:4;3635:20;3653:1;3635:20;:::i;:::-;3630:25;;3669:20;3687:1;3669:20;:::i;:::-;3664:25;;3708:1;3705;3702:8;3699:34;;;3713:18;;:::i;:::-;3699:34;3758:1;3755;3751:9;3743:17;;3575:191;;;;:::o;3772:169::-;3856:11;3890:6;3885:3;3878:19;3930:4;3925:3;3921:14;3906:29;;3772:169;;;;:::o;3947:172::-;4087:24;4083:1;4075:6;4071:14;4064:48;3947:172;:::o;4125:366::-;4267:3;4288:67;4352:2;4347:3;4288:67;:::i;:::-;4281:74;;4364:93;4453:3;4364:93;:::i;:::-;4482:2;4477:3;4473:12;4466:19;;4125:366;;;:::o;4497:419::-;4663:4;4701:2;4690:9;4686:18;4678:26;;4750:9;4744:4;4740:20;4736:1;4725:9;4721:17;4714:47;4778:131;4904:4;4778:131;:::i;:::-;4770:139;;4497:419;;;:::o;4922:177::-;5062:29;5058:1;5050:6;5046:14;5039:53;4922:177;:::o;5105:366::-;5247:3;5268:67;5332:2;5327:3;5268:67;:::i;:::-;5261:74;;5344:93;5433:3;5344:93;:::i;:::-;5462:2;5457:3;5453:12;5446:19;;5105:366;;;:::o;5477:419::-;5643:4;5681:2;5670:9;5666:18;5658:26;;5730:9;5724:4;5720:20;5716:1;5705:9;5701:17;5694:47;5758:131;5884:4;5758:131;:::i;:::-;5750:139;;5477:419;;;:::o;5902:181::-;6042:33;6038:1;6030:6;6026:14;6019:57;5902:181;:::o;6089:366::-;6231:3;6252:67;6316:2;6311:3;6252:67;:::i;:::-;6245:74;;6328:93;6417:3;6328:93;:::i;:::-;6446:2;6441:3;6437:12;6430:19;;6089:366;;;:::o;6461:419::-;6627:4;6665:2;6654:9;6650:18;6642:26;;6714:9;6708:4;6704:20;6700:1;6689:9;6685:17;6678:47;6742:131;6868:4;6742:131;:::i;:::-;6734:139;;6461:419;;;:::o;6886:305::-;6926:3;6945:20;6963:1;6945:20;:::i;:::-;6940:25;;6979:20;6997:1;6979:20;:::i;:::-;6974:25;;7133:1;7065:66;7061:74;7058:1;7055:81;7052:107;;;7139:18;;:::i;:::-;7052:107;7183:1;7180;7176:9;7169:16;;6886:305;;;;:::o;7197:243::-;7337:34;7333:1;7325:6;7321:14;7314:58;7406:26;7401:2;7393:6;7389:15;7382:51;7197:243;:::o;7446:366::-;7588:3;7609:67;7673:2;7668:3;7609:67;:::i;:::-;7602:74;;7685:93;7774:3;7685:93;:::i;:::-;7803:2;7798:3;7794:12;7787:19;;7446:366;;;:::o;7818:419::-;7984:4;8022:2;8011:9;8007:18;7999:26;;8071:9;8065:4;8061:20;8057:1;8046:9;8042:17;8035:47;8099:131;8225:4;8099:131;:::i;:::-;8091:139;;7818:419;;;:::o;8243:442::-;8392:4;8430:2;8419:9;8415:18;8407:26;;8443:71;8511:1;8500:9;8496:17;8487:6;8443:71;:::i;:::-;8524:72;8592:2;8581:9;8577:18;8568:6;8524:72;:::i;:::-;8606;8674:2;8663:9;8659:18;8650:6;8606:72;:::i;:::-;8243:442;;;;;;:::o;8691:90::-;8725:7;8768:5;8761:13;8754:21;8743:32;;8691:90;;;:::o;8787:116::-;8857:21;8872:5;8857:21;:::i;:::-;8850:5;8847:32;8837:60;;8893:1;8890;8883:12;8837:60;8787:116;:::o;8909:137::-;8963:5;8994:6;8988:13;8979:22;;9010:30;9034:5;9010:30;:::i;:::-;8909:137;;;;:::o;9052:345::-;9119:6;9168:2;9156:9;9147:7;9143:23;9139:32;9136:119;;;9174:79;;:::i;:::-;9136:119;9294:1;9319:61;9372:7;9363:6;9352:9;9348:22;9319:61;:::i;:::-;9309:71;;9265:125;9052:345;;;;:::o;9403:143::-;9460:5;9491:6;9485:13;9476:22;;9507:33;9534:5;9507:33;:::i;:::-;9403:143;;;;:::o;9552:351::-;9622:6;9671:2;9659:9;9650:7;9646:23;9642:32;9639:119;;;9677:79;;:::i;:::-;9639:119;9797:1;9822:64;9878:7;9869:6;9858:9;9854:22;9822:64;:::i;:::-;9812:74;;9768:128;9552:351;;;;:::o;9909:348::-;9949:7;9972:20;9990:1;9972:20;:::i;:::-;9967:25;;10006:20;10024:1;10006:20;:::i;:::-;10001:25;;10194:1;10126:66;10122:74;10119:1;10116:81;10111:1;10104:9;10097:17;10093:105;10090:131;;;10201:18;;:::i;:::-;10090:131;10249:1;10246;10242:9;10231:20;;9909:348;;;;:::o;10263:180::-;10311:77;10308:1;10301:88;10408:4;10405:1;10398:15;10432:4;10429:1;10422:15;10449:185;10489:1;10506:20;10524:1;10506:20;:::i;:::-;10501:25;;10540:20;10558:1;10540:20;:::i;:::-;10535:25;;10579:1;10569:35;;10584:18;;:::i;:::-;10569:35;10626:1;10623;10619:9;10614:14;;10449:185;;;;:::o;10640:143::-;10697:5;10728:6;10722:13;10713:22;;10744:33;10771:5;10744:33;:::i;:::-;10640:143;;;;:::o;10789:351::-;10859:6;10908:2;10896:9;10887:7;10883:23;10879:32;10876:119;;;10914:79;;:::i;:::-;10876:119;11034:1;11059:64;11115:7;11106:6;11095:9;11091:22;11059:64;:::i;:::-;11049:74;;11005:128;10789:351;;;;:::o;11146:332::-;11267:4;11305:2;11294:9;11290:18;11282:26;;11318:71;11386:1;11375:9;11371:17;11362:6;11318:71;:::i;:::-;11399:72;11467:2;11456:9;11452:18;11443:6;11399:72;:::i;:::-;11146:332;;;;;:::o;11484:103::-;11547:7;11576:5;11565:16;;11484:103;;;:::o;11593:60::-;11621:3;11642:5;11635:12;;11593:60;;;:::o;11659:194::-;11735:9;11768:79;11786:60;11795:50;11839:5;11795:50;:::i;:::-;11786:60;:::i;:::-;11768:79;:::i;:::-;11755:92;;11659:194;;;:::o;11859:183::-;11972:63;12029:5;11972:63;:::i;:::-;11967:3;11960:76;11859:183;;:::o;12048:109::-;12129:21;12144:5;12129:21;:::i;:::-;12124:3;12117:34;12048:109;;:::o;12163:926::-;12444:4;12482:3;12471:9;12467:19;12459:27;;12496:71;12564:1;12553:9;12549:17;12540:6;12496:71;:::i;:::-;12577:98;12671:2;12660:9;12656:18;12647:6;12577:98;:::i;:::-;12685:72;12753:2;12742:9;12738:18;12729:6;12685:72;:::i;:::-;12767;12835:2;12824:9;12820:18;12811:6;12767:72;:::i;:::-;12849:67;12911:3;12900:9;12896:19;12887:6;12849:67;:::i;:::-;12926:73;12994:3;12983:9;12979:19;12970:6;12926:73;:::i;:::-;13009;13077:3;13066:9;13062:19;13053:6;13009:73;:::i;:::-;12163:926;;;;;;;;;;:::o;13095:117::-;13204:1;13201;13194:12;13218:102;13259:6;13310:2;13306:7;13301:2;13294:5;13290:14;13286:28;13276:38;;13218:102;;;:::o;13326:180::-;13374:77;13371:1;13364:88;13471:4;13468:1;13461:15;13495:4;13492:1;13485:15;13512:281;13595:27;13617:4;13595:27;:::i;:::-;13587:6;13583:40;13725:6;13713:10;13710:22;13689:18;13677:10;13674:34;13671:62;13668:88;;;13736:18;;:::i;:::-;13668:88;13776:10;13772:2;13765:22;13555:238;13512:281;;:::o;13799:129::-;13833:6;13860:20;;:::i;:::-;13850:30;;13889:33;13917:4;13909:6;13889:33;:::i;:::-;13799:129;;;:::o;13934:311::-;14011:4;14101:18;14093:6;14090:30;14087:56;;;14123:18;;:::i;:::-;14087:56;14173:4;14165:6;14161:17;14153:25;;14233:4;14227;14223:15;14215:23;;13934:311;;;:::o;14251:117::-;14360:1;14357;14350:12;14391:732;14498:5;14523:81;14539:64;14596:6;14539:64;:::i;:::-;14523:81;:::i;:::-;14514:90;;14624:5;14653:6;14646:5;14639:21;14687:4;14680:5;14676:16;14669:23;;14740:4;14732:6;14728:17;14720:6;14716:30;14769:3;14761:6;14758:15;14755:122;;;14788:79;;:::i;:::-;14755:122;14903:6;14886:231;14920:6;14915:3;14912:15;14886:231;;;14995:3;15024:48;15068:3;15056:10;15024:48;:::i;:::-;15019:3;15012:61;15102:4;15097:3;15093:14;15086:21;;14962:155;14946:4;14941:3;14937:14;14930:21;;14886:231;;;14890:21;14504:619;;14391:732;;;;;:::o;15146:385::-;15228:5;15277:3;15270:4;15262:6;15258:17;15254:27;15244:122;;15285:79;;:::i;:::-;15244:122;15395:6;15389:13;15420:105;15521:3;15513:6;15506:4;15498:6;15494:17;15420:105;:::i;:::-;15411:114;;15234:297;15146:385;;;;:::o;15537:554::-;15632:6;15681:2;15669:9;15660:7;15656:23;15652:32;15649:119;;;15687:79;;:::i;:::-;15649:119;15828:1;15817:9;15813:17;15807:24;15858:18;15850:6;15847:30;15844:117;;;15880:79;;:::i;:::-;15844:117;15985:89;16066:7;16057:6;16046:9;16042:22;15985:89;:::i;:::-;15975:99;;15778:306;15537:554;;;;:::o;16097:180::-;16145:77;16142:1;16135:88;16242:4;16239:1;16232:15;16266:4;16263:1;16256:15;16283:228;16423:34;16419:1;16411:6;16407:14;16400:58;16492:11;16487:2;16479:6;16475:15;16468:36;16283:228;:::o;16517:366::-;16659:3;16680:67;16744:2;16739:3;16680:67;:::i;:::-;16673:74;;16756:93;16845:3;16756:93;:::i;:::-;16874:2;16869:3;16865:12;16858:19;;16517:366;;;:::o;16889:419::-;17055:4;17093:2;17082:9;17078:18;17070:26;;17142:9;17136:4;17132:20;17128:1;17117:9;17113:17;17106:47;17170:131;17296:4;17170:131;:::i;:::-;17162:139;;16889:419;;;:::o;17314:86::-;17360:7;17389:5;17378:16;;17314:86;;;:::o;17406:::-;17441:7;17481:4;17474:5;17470:16;17459:27;;17406:86;;;:::o;17498:156::-;17555:9;17588:60;17604:43;17613:33;17640:5;17613:33;:::i;:::-;17604:43;:::i;:::-;17588:60;:::i;:::-;17575:73;;17498:156;;;:::o;17660:145::-;17754:44;17792:5;17754:44;:::i;:::-;17749:3;17742:57;17660:145;;:::o;17811:236::-;17911:4;17949:2;17938:9;17934:18;17926:26;;17962:78;18037:1;18026:9;18022:17;18013:6;17962:78;:::i;:::-;17811:236;;;;:::o;18053:98::-;18104:6;18138:5;18132:12;18122:22;;18053:98;;;:::o;18157:147::-;18258:11;18295:3;18280:18;;18157:147;;;;:::o;18310:307::-;18378:1;18388:113;18402:6;18399:1;18396:13;18388:113;;;18487:1;18482:3;18478:11;18472:18;18468:1;18463:3;18459:11;18452:39;18424:2;18421:1;18417:10;18412:15;;18388:113;;;18519:6;18516:1;18513:13;18510:101;;;18599:1;18590:6;18585:3;18581:16;18574:27;18510:101;18359:258;18310:307;;;:::o;18623:373::-;18727:3;18755:38;18787:5;18755:38;:::i;:::-;18809:88;18890:6;18885:3;18809:88;:::i;:::-;18802:95;;18906:52;18951:6;18946:3;18939:4;18932:5;18928:16;18906:52;:::i;:::-;18983:6;18978:3;18974:16;18967:23;;18731:265;18623:373;;;;:::o;19002:271::-;19132:3;19154:93;19243:3;19234:6;19154:93;:::i;:::-;19147:100;;19264:3;19257:10;;19002:271;;;;:::o;19279:174::-;19419:26;19415:1;19407:6;19403:14;19396:50;19279:174;:::o;19459:366::-;19601:3;19622:67;19686:2;19681:3;19622:67;:::i;:::-;19615:74;;19698:93;19787:3;19698:93;:::i;:::-;19816:2;19811:3;19807:12;19800:19;;19459:366;;;:::o;19831:419::-;19997:4;20035:2;20024:9;20020:18;20012:26;;20084:9;20078:4;20074:20;20070:1;20059:9;20055:17;20048:47;20112:131;20238:4;20112:131;:::i;:::-;20104:139;;19831:419;;;:::o;20256:176::-;20396:28;20392:1;20384:6;20380:14;20373:52;20256:176;:::o;20438:366::-;20580:3;20601:67;20665:2;20660:3;20601:67;:::i;:::-;20594:74;;20677:93;20766:3;20677:93;:::i;:::-;20795:2;20790:3;20786:12;20779:19;;20438:366;;;:::o;20810:419::-;20976:4;21014:2;21003:9;20999:18;20991:26;;21063:9;21057:4;21053:20;21049:1;21038:9;21034:17;21027:47;21091:131;21217:4;21091:131;:::i;:::-;21083:139;;20810:419;;;:::o;21235:228::-;21375:34;21371:1;21363:6;21359:14;21352:58;21444:11;21439:2;21431:6;21427:15;21420:36;21235:228;:::o;21469:366::-;21611:3;21632:67;21696:2;21691:3;21632:67;:::i;:::-;21625:74;;21708:93;21797:3;21708:93;:::i;:::-;21826:2;21821:3;21817:12;21810:19;;21469:366;;;:::o;21841:419::-;22007:4;22045:2;22034:9;22030:18;22022:26;;22094:9;22088:4;22084:20;22080:1;22069:9;22065:17;22058:47;22122:131;22248:4;22122:131;:::i;:::-;22114:139;;21841:419;;;:::o;22266:223::-;22406:34;22402:1;22394:6;22390:14;22383:58;22475:6;22470:2;22462:6;22458:15;22451:31;22266:223;:::o;22495:366::-;22637:3;22658:67;22722:2;22717:3;22658:67;:::i;:::-;22651:74;;22734:93;22823:3;22734:93;:::i;:::-;22852:2;22847:3;22843:12;22836:19;;22495:366;;;:::o;22867:419::-;23033:4;23071:2;23060:9;23056:18;23048:26;;23120:9;23114:4;23110:20;23106:1;23095:9;23091:17;23084:47;23148:131;23274:4;23148:131;:::i;:::-;23140:139;;22867:419;;;:::o;23292:222::-;23432:34;23428:1;23420:6;23416:14;23409:58;23501:5;23496:2;23488:6;23484:15;23477:30;23292:222;:::o;23520:366::-;23662:3;23683:67;23747:2;23742:3;23683:67;:::i;:::-;23676:74;;23759:93;23848:3;23759:93;:::i;:::-;23877:2;23872:3;23868:12;23861:19;;23520:366;;;:::o;23892:419::-;24058:4;24096:2;24085:9;24081:18;24073:26;;24145:9;24139:4;24135:20;24131:1;24120:9;24116:17;24109:47;24173:131;24299:4;24173:131;:::i;:::-;24165:139;;23892:419;;;:::o;24317:227::-;24457:34;24453:1;24445:6;24441:14;24434:58;24526:10;24521:2;24513:6;24509:15;24502:35;24317:227;:::o;24550:366::-;24692:3;24713:67;24777:2;24772:3;24713:67;:::i;:::-;24706:74;;24789:93;24878:3;24789:93;:::i;:::-;24907:2;24902:3;24898:12;24891:19;;24550:366;;;:::o;24922:419::-;25088:4;25126:2;25115:9;25111:18;25103:26;;25175:9;25169:4;25165:20;25161:1;25150:9;25146:17;25139:47;25203:131;25329:4;25203:131;:::i;:::-;25195:139;;24922:419;;;:::o;25347:182::-;25487:34;25483:1;25475:6;25471:14;25464:58;25347:182;:::o;25535:366::-;25677:3;25698:67;25762:2;25757:3;25698:67;:::i;:::-;25691:74;;25774:93;25863:3;25774:93;:::i;:::-;25892:2;25887:3;25883:12;25876:19;;25535:366;;;:::o;25907:419::-;26073:4;26111:2;26100:9;26096:18;26088:26;;26160:9;26154:4;26150:20;26146:1;26135:9;26131:17;26124:47;26188:131;26314:4;26188:131;:::i;:::-;26180:139;;25907:419;;;:::o;26332:332::-;26453:4;26491:2;26480:9;26476:18;26468:26;;26504:71;26572:1;26561:9;26557:17;26548:6;26504:71;:::i;:::-;26585:72;26653:2;26642:9;26638:18;26629:6;26585:72;:::i;:::-;26332:332;;;;;:::o;26670:181::-;26810:33;26806:1;26798:6;26794:14;26787:57;26670:181;:::o;26857:366::-;26999:3;27020:67;27084:2;27079:3;27020:67;:::i;:::-;27013:74;;27096:93;27185:3;27096:93;:::i;:::-;27214:2;27209:3;27205:12;27198:19;;26857:366;;;:::o;27229:419::-;27395:4;27433:2;27422:9;27418:18;27410:26;;27482:9;27476:4;27472:20;27468:1;27457:9;27453:17;27446:47;27510:131;27636:4;27510:131;:::i;:::-;27502:139;;27229:419;;;:::o;27654:171::-;27794:23;27790:1;27782:6;27778:14;27771:47;27654:171;:::o;27831:366::-;27973:3;27994:67;28058:2;28053:3;27994:67;:::i;:::-;27987:74;;28070:93;28159:3;28070:93;:::i;:::-;28188:2;28183:3;28179:12;28172:19;;27831:366;;;:::o;28203:419::-;28369:4;28407:2;28396:9;28392:18;28384:26;;28456:9;28450:4;28446:20;28442:1;28431:9;28427:17;28420:47;28484:131;28610:4;28484:131;:::i;:::-;28476:139;;28203:419;;;:::o;28628:229::-;28768:34;28764:1;28756:6;28752:14;28745:58;28837:12;28832:2;28824:6;28820:15;28813:37;28628:229;:::o;28863:366::-;29005:3;29026:67;29090:2;29085:3;29026:67;:::i;:::-;29019:74;;29102:93;29191:3;29102:93;:::i;:::-;29220:2;29215:3;29211:12;29204:19;;28863:366;;;:::o;29235:419::-;29401:4;29439:2;29428:9;29424:18;29416:26;;29488:9;29482:4;29478:20;29474:1;29463:9;29459:17;29452:47;29516:131;29642:4;29516:131;:::i;:::-;29508:139;;29235:419;;;:::o;29660:176::-;29800:28;29796:1;29788:6;29784:14;29777:52;29660:176;:::o;29842:366::-;29984:3;30005:67;30069:2;30064:3;30005:67;:::i;:::-;29998:74;;30081:93;30170:3;30081:93;:::i;:::-;30199:2;30194:3;30190:12;30183:19;;29842:366;;;:::o;30214:419::-;30380:4;30418:2;30407:9;30403:18;30395:26;;30467:9;30461:4;30457:20;30453:1;30442:9;30438:17;30431:47;30495:131;30621:4;30495:131;:::i;:::-;30487:139;;30214:419;;;:::o;30639:180::-;30779:32;30775:1;30767:6;30763:14;30756:56;30639:180;:::o;30825:366::-;30967:3;30988:67;31052:2;31047:3;30988:67;:::i;:::-;30981:74;;31064:93;31153:3;31064:93;:::i;:::-;31182:2;31177:3;31173:12;31166:19;;30825:366;;;:::o;31197:419::-;31363:4;31401:2;31390:9;31386:18;31378:26;;31450:9;31444:4;31440:20;31436:1;31425:9;31421:17;31414:47;31478:131;31604:4;31478:131;:::i;:::-;31470:139;;31197:419;;;:::o;31622:228::-;31762:34;31758:1;31750:6;31746:14;31739:58;31831:11;31826:2;31818:6;31814:15;31807:36;31622:228;:::o;31856:366::-;31998:3;32019:67;32083:2;32078:3;32019:67;:::i;:::-;32012:74;;32095:93;32184:3;32095:93;:::i;:::-;32213:2;32208:3;32204:12;32197:19;;31856:366;;;:::o;32228:419::-;32394:4;32432:2;32421:9;32417:18;32409:26;;32481:9;32475:4;32471:20;32467:1;32456:9;32452:17;32445:47;32509:131;32635:4;32509:131;:::i;:::-;32501:139;;32228:419;;;:::o;32653:229::-;32793:34;32789:1;32781:6;32777:14;32770:58;32862:12;32857:2;32849:6;32845:15;32838:37;32653:229;:::o;32888:366::-;33030:3;33051:67;33115:2;33110:3;33051:67;:::i;:::-;33044:74;;33127:93;33216:3;33127:93;:::i;:::-;33245:2;33240:3;33236:12;33229:19;;32888:366;;;:::o;33260:419::-;33426:4;33464:2;33453:9;33449:18;33441:26;;33513:9;33507:4;33503:20;33499:1;33488:9;33484:17;33477:47;33541:131;33667:4;33541:131;:::i;:::-;33533:139;;33260:419;;;:::o;33685:172::-;33825:24;33821:1;33813:6;33809:14;33802:48;33685:172;:::o;33863:366::-;34005:3;34026:67;34090:2;34085:3;34026:67;:::i;:::-;34019:74;;34102:93;34191:3;34102:93;:::i;:::-;34220:2;34215:3;34211:12;34204:19;;33863:366;;;:::o;34235:419::-;34401:4;34439:2;34428:9;34424:18;34416:26;;34488:9;34482:4;34478:20;34474:1;34463:9;34459:17;34452:47;34516:131;34642:4;34516:131;:::i;:::-;34508:139;;34235:419;;;:::o;34660:167::-;34800:19;34796:1;34788:6;34784:14;34777:43;34660:167;:::o;34833:366::-;34975:3;34996:67;35060:2;35055:3;34996:67;:::i;:::-;34989:74;;35072:93;35161:3;35072:93;:::i;:::-;35190:2;35185:3;35181:12;35174:19;;34833:366;;;:::o;35205:419::-;35371:4;35409:2;35398:9;35394:18;35386:26;;35458:9;35452:4;35448:20;35444:1;35433:9;35429:17;35422:47;35486:131;35612:4;35486:131;:::i;:::-;35478:139;;35205:419;;;:::o;35630:182::-;35770:34;35766:1;35758:6;35754:14;35747:58;35630:182;:::o;35818:366::-;35960:3;35981:67;36045:2;36040:3;35981:67;:::i;:::-;35974:74;;36057:93;36146:3;36057:93;:::i;:::-;36175:2;36170:3;36166:12;36159:19;;35818:366;;;:::o;36190:419::-;36356:4;36394:2;36383:9;36379:18;36371:26;;36443:9;36437:4;36433:20;36429:1;36418:9;36414:17;36407:47;36471:131;36597:4;36471:131;:::i;:::-;36463:139;;36190:419;;;:::o
Swarm Source
ipfs://169409934d185d33ac51f878c14da59f09455d80d0d1add708f0c82d63b99d79
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in S
Multichain Portfolio | 35 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.