Overview ERC20
Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
1,165,072,898.744279 PGS
Holders:
323 addresses
Transfers:
-
Contract:
Decimals:
18
Official Site:
[ Download CSV Export ]
[ Download CSV Export ]
OVERVIEW
Pegasus is a NFT Collection.Market
Volume (24H) | : | $3.41 |
Market Capitalization | : | $0.00 |
Circulating Supply | : | 0.00 PGS |
Market Data Source: Coinmarketcap |
Update? Click here to update the token ICO / general information
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Pegasus
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-06 */ // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with 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; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * 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); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @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.zeppelin.solutions/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; } _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; _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; } _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 {} } // File: Pegasus.sol //SPDX-License-Identifier: MIT pragma solidity >=0.8.9 <0.9.0; library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { require(b != -1 || a != MIN_INT256); return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } } interface IDEXFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IPair { function sync() external; } interface IDEXRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } abstract contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor( string memory _tokenName, string memory _tokenSymbol, uint8 _tokenDecimals ) { _name = _tokenName; _symbol = _tokenSymbol; _decimals = _tokenDecimals; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } } contract Pegasus is ERC20Detailed, Ownable { using SafeMath for uint256; using SafeMathInt for int256; uint256 private constant DECIMALS = 18; uint256 private constant MAX_SUPPLY = type(uint128).max; uint256 private constant MAX_UINT256 = type(uint256).max; uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 1 * 10**9 * 10**DECIMALS; uint256 private constant TOTAL_GONS = MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY); uint256 private totalTokenSupply; function totalSupply() external view override returns (uint256) { return totalTokenSupply; } uint256 private gonsPerFragment; mapping(address => uint256) private gonBalance; mapping(address => mapping(address => uint256)) private allowedFragments; address private constant DEAD = 0x000000000000000000000000000000000000dEaD; address private constant ZERO = 0x0000000000000000000000000000000000000000; IDEXRouter public defaultRouter; address public defaultPair; mapping(address => bool) allowedTransferList; mapping(address => bool) feeExemptList; mapping(address => bool) blacklist; mapping(address => bool) swapPairList; function setAllowTransfer(address _addr, bool _value) external onlyOwner { allowedTransferList[_addr] = _value; } function isAllowTransfer(address _addr) public view returns (bool) { return allowedTransferList[_addr]; } function setFeeExempt(address _addr, bool _value) public onlyOwner { feeExemptList[_addr] = _value; } function isFeeExempt(address _addr) public view returns (bool) { return feeExemptList[_addr]; } function setBlacklist(address _addr, bool _value) external onlyOwner { blacklist[_addr] = _value; } function isBlacklist(address _addr) public view returns (bool) { return blacklist[_addr]; } function setSwapPair(address _addr, bool _value) public onlyOwner { swapPairList[_addr] = _value; } function isSwapPair(address _addr) public view returns (bool) { return swapPairList[_addr]; } constructor() ERC20Detailed("Pegasus", "PGS", uint8(DECIMALS)) { defaultRouter = IDEXRouter(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); defaultPair = IDEXFactory(defaultRouter.factory()).createPair( defaultRouter.WETH(), address(this) ); allowedFragments[address(this)][address(defaultRouter)] = MAX_UINT256; totalTokenSupply = INITIAL_FRAGMENTS_SUPPLY; gonsPerFragment = TOTAL_GONS.div(INITIAL_FRAGMENTS_SUPPLY); gonBalance[msg.sender] = TOTAL_GONS; setFeeExempt(msg.sender, true); setFeeExempt(address(this), true); setSwapPair(defaultPair, true); emit Transfer(address(0x0), msg.sender, totalTokenSupply); } // Fee actors address public buybackReceiver = 0xb6B733c7B1aD837983fcA1A2169f7a157927f4b6; address public gamificationReceiver = 0x3492632D53db73919Fdd2F2ba47e20fB99f331D8; address public liquidityReceiver = 0x9c3AA103472956EbCcA1F155F18C4420b3164942; address public treasuryReceiver = 0x3Bd85A236FD9636dC1dF1248513567Ec301D01e3; function setFeeReceivers( address _buybackReceiver, address _gamificationReceiver, address _liquidityReceiver, address _treasuryReceiver ) external onlyOwner { buybackReceiver = _buybackReceiver; gamificationReceiver = _gamificationReceiver; liquidityReceiver = _liquidityReceiver; treasuryReceiver = _treasuryReceiver; } //Fee parameters uint256 private constant FEE_DENOMINATOR = 100; uint256 private constant MAX_TOTAL_BUY_FEE = 20; uint256 public buyBackBuyFee = 1; uint256 public liquidityBuyFee = 1; uint256 public treasuryBuyFee = 1; uint256 public gamificationBuyFee = 0; uint256 public totalBuyFee = 3; uint256 private constant MAX_TOTAL_SELL_FEE = 30; uint256 public buyBackSellFee = 2; uint256 public liquiditySellFee = 2; uint256 public treasurySellFee = 2; uint256 public gamificationSellFee = 0; uint256 public totalSellFee = 6; function setBuyFees( uint256 _buybackFee, uint256 _gamificationFee, uint256 _liquidityFee, uint256 _treasuryFee ) external onlyOwner { uint256 _totalFee = _buybackFee .add(_gamificationFee) .add(_liquidityFee) .add(_treasuryFee); require( _totalFee <= MAX_TOTAL_BUY_FEE, "Sum of buy fees exceeds max value" ); buyBackBuyFee = _buybackFee; gamificationBuyFee = _gamificationFee; liquidityBuyFee = _liquidityFee; treasuryBuyFee = _treasuryFee; totalBuyFee = _totalFee; } function setSellFees( uint256 _buybackFee, uint256 _gamificationFee, uint256 _liquidityFee, uint256 _treasuryFee ) external onlyOwner { uint256 _totalFee = _buybackFee .add(_gamificationFee) .add(_liquidityFee) .add(_treasuryFee); require( _totalFee <= MAX_TOTAL_SELL_FEE, "Sum of sell fees exceeds max value" ); buyBackSellFee = _buybackFee; gamificationSellFee = _gamificationFee; liquiditySellFee = _liquidityFee; treasurySellFee = _treasuryFee; totalSellFee = _totalFee; } // Fee collection logic function takeFee( address sender, address recipient, uint256 gonAmount ) internal returns (uint256) { uint256 fee = totalBuyFee; if (isSwapPair(recipient)) { fee = totalSellFee; } uint256 feeAmount = gonAmount.mul(fee).div(FEE_DENOMINATOR); gonBalance[address(this)] = gonBalance[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount.div(gonsPerFragment)); return gonAmount.sub(feeAmount); } // Fee collection parameters bool swapBackEnabled = true; bool liquidityEnabled = true; uint256 gonSwapThreshold = TOTAL_GONS.div(1000).mul(10); function setSwapBackSettings( bool _swapBackEnabled, bool _liquidityEnabled, uint256 _num, uint256 _denom ) external onlyOwner { swapBackEnabled = _swapBackEnabled; liquidityEnabled = _liquidityEnabled; gonSwapThreshold = TOTAL_GONS.div(_denom).mul(_num); } bool inSwap = false; modifier swapping() { inSwap = true; _; inSwap = false; } // Fee distribution logic function shouldSwapBack() internal view returns (bool) { return !isSwapPair(msg.sender) && swapBackEnabled && !inSwap && gonBalance[address(this)] >= gonSwapThreshold; } function swapBack() internal swapping { uint256 contractTokenBalance = gonBalance[address(this)].div( gonsPerFragment ); uint256 totalFee = totalBuyFee.add(totalSellFee); uint256 treasuryTransferAmount = contractTokenBalance .mul((treasuryBuyFee.add(treasurySellFee))) .div(totalFee); if (treasuryTransferAmount > 0) { _swapAndSend(treasuryTransferAmount, treasuryReceiver); } uint256 buybackTransferAmount = contractTokenBalance .mul((buyBackBuyFee.add(buyBackSellFee))) .div(totalFee); if (buybackTransferAmount > 0) { _swapAndSend(buybackTransferAmount, buybackReceiver); } uint256 gamificationTransferAmount = contractTokenBalance .mul((gamificationBuyFee.add(gamificationSellFee))) .div(totalFee); if (gamificationTransferAmount > 0) { _swapAndSend(gamificationTransferAmount, gamificationReceiver); } uint256 dynamicLiquidityFee = liquidityEnabled ? liquidityBuyFee.add(liquiditySellFee) : 0; uint256 liquidityTransferAmount = contractTokenBalance .mul(dynamicLiquidityFee) .div(totalFee); if (liquidityTransferAmount > 0) { _addLiquidity(liquidityTransferAmount, liquidityReceiver); } emit SwapBack( contractTokenBalance, buybackTransferAmount, gamificationTransferAmount, liquidityTransferAmount, treasuryTransferAmount ); } function _swapAndSend(uint256 _tokenAmount, address _receiver) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = defaultRouter.WETH(); defaultRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( _tokenAmount, 0, path, _receiver, block.timestamp ); } function _addLiquidity(uint256 _tokenAmount, address _receiver) private { uint256 coinBalance = address(this).balance; _swapAndSend(_tokenAmount.div(2), address(this)); uint256 coinBalanceDifference = address(this).balance.sub(coinBalance); defaultRouter.addLiquidityETH{value: coinBalanceDifference}( address(this), _tokenAmount.div(2), 0, 0, _receiver, block.timestamp ); } // Rebase parameters and actors uint256 private constant REWARD_YIELD_DENOMINATOR = 10000000000; uint256 public rewardYield = 2634548; uint256 public rebaseFrequency = 1800; uint256 public nextRebase = block.timestamp + rebaseFrequency; function setRebaseParameters( uint256 _rewardYield, uint256 _rebaseFrequency, uint256 _nextRebase ) external onlyOwner { rewardYield = _rewardYield; rebaseFrequency = _rebaseFrequency; nextRebase = _nextRebase; } address public rebaseExecutor = 0x5E8d7Cee43a4Dd8CC741d7d131F87a62eEdb9F42; function setRebaseExecutor(address _rebaseExecutor) external onlyOwner { rebaseExecutor = _rebaseExecutor; } modifier isExecutor() { require(msg.sender == rebaseExecutor); _; } function rebase(uint256 epoch, int256 supplyDelta) external onlyOwner { require(!inSwap, "Currently in swap, try again later."); _rebase(epoch, supplyDelta); } function executorRebase() external isExecutor { require(!inSwap, "Currently in swap, try again later."); uint256 epoch = block.timestamp; require( nextRebase <= block.timestamp, "Too soon since last automatic rebase." ); int256 supplyDelta = int256( totalTokenSupply.mul(rewardYield).div(REWARD_YIELD_DENOMINATOR) ); _rebase(epoch, supplyDelta); } function _rebase(uint256 epoch, int256 supplyDelta) private { if (supplyDelta < 0) { totalTokenSupply = totalTokenSupply.sub(uint256(-supplyDelta)); } else { totalTokenSupply = totalTokenSupply.add(uint256(supplyDelta)); } if (totalTokenSupply > MAX_SUPPLY) { totalTokenSupply = MAX_SUPPLY; } gonsPerFragment = TOTAL_GONS.div(totalTokenSupply); IPair(defaultPair).sync(); nextRebase = epoch + rebaseFrequency; emit LogRebase(epoch, totalTokenSupply); } // Approval and transfer logic function allowance(address owner, address spender) external view override returns (uint256) { return allowedFragments[owner][spender]; } function balanceOf(address who) external view override returns (uint256) { return gonBalance[who].div(gonsPerFragment); } function approve(address spender, uint256 value) external override returns (bool) { allowedFragments[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { allowedFragments[msg.sender][spender] = allowedFragments[msg.sender][ spender ].add(addedValue); emit Approval( msg.sender, spender, allowedFragments[msg.sender][spender] ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 oldValue = allowedFragments[msg.sender][spender]; if (subtractedValue >= oldValue) { allowedFragments[msg.sender][spender] = 0; } else { allowedFragments[msg.sender][spender] = oldValue.sub( subtractedValue ); } emit Approval( msg.sender, spender, allowedFragments[msg.sender][spender] ); return true; } modifier validRecipient(address to) { require(to != address(0x0)); _; } function transfer(address to, uint256 amount) external override validRecipient(to) initialDistributionLock returns (bool) { return _transferFrom(msg.sender, to, amount); } function transferFrom( address from, address to, uint256 value ) external override validRecipient(to) initialDistributionLock returns (bool) { if (allowedFragments[from][msg.sender] != MAX_UINT256) { allowedFragments[from][msg.sender] = allowedFragments[from][ msg.sender ].sub(value, "Insufficient Allowance"); } return _transferFrom(from, to, value); } function _transferFrom( address _sender, address _recipient, uint256 _amount ) internal returns (bool) { require(!isBlacklist(_sender), "Sender is blacklisted"); require(!isBlacklist(_recipient), "Recipient is blacklisted"); if (inSwap) { return _basicTransfer(_sender, _recipient, _amount); } if (shouldSwapBack()) { swapBack(); } uint256 _gonAmount = _amount.mul(gonsPerFragment); gonBalance[_sender] = gonBalance[_sender].sub(_gonAmount); uint256 _gonAmountReceived = ( ((isSwapPair(_sender) || isSwapPair(_recipient)) && (!isFeeExempt(_sender))) ? takeFee(_sender, _recipient, _gonAmount) : _gonAmount ); gonBalance[_recipient] = gonBalance[_recipient].add(_gonAmountReceived); emit Transfer( _sender, _recipient, _gonAmountReceived.div(gonsPerFragment) ); return true; } function _basicTransfer( address from, address to, uint256 amount ) internal returns (bool) { uint256 gonAmount = amount.mul(gonsPerFragment); gonBalance[from] = gonBalance[from].sub(gonAmount); gonBalance[to] = gonBalance[to].add(gonAmount); return true; } // Utilities function sendPresale( address[] calldata recipients, uint256[] calldata values ) external onlyOwner { for (uint256 i = 0; i < recipients.length; i++) { _transferFrom(msg.sender, recipients[i], values[i]); } } bool initialDistributionFinished = false; modifier initialDistributionLock() { require( initialDistributionFinished || msg.sender == owner() || isAllowTransfer(msg.sender) ); _; } function setInitialDistributionFinished() external onlyOwner { initialDistributionFinished = true; } function getCirculatingSupply() external view returns (uint256) { return (TOTAL_GONS.sub(gonBalance[DEAD]).sub(gonBalance[ZERO])).div( gonsPerFragment ); } function manualSync() external { IPair(defaultPair).sync(); } function isInSwap() external view returns (bool) { return inSwap; } function swapPendingAmount() external view returns (uint256) { return gonBalance[address(this)].div(gonsPerFragment); } function swapThreshold() external view returns (uint256) { return gonSwapThreshold.div(gonsPerFragment); } function withdraw(address _receiver, uint256 _amount) external onlyOwner { payable(_receiver).transfer(_amount); } function rescueToken(address _tokenAddress, uint256 _amount) external onlyOwner { ERC20Detailed(_tokenAddress).transfer(msg.sender, _amount); } receive() external payable {} event SwapBack( uint256 contractTokenBalance, uint256 buybackTransferAmount, uint256 gamificationTransferAmount, uint256 liquidityTransferAmount, uint256 treasuryTransferAmount ); event LogRebase(uint256 indexed epoch, uint256 totalSupply); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","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":false,"internalType":"uint256","name":"contractTokenBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackTransferAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gamificationTransferAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityTransferAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryTransferAmount","type":"uint256"}],"name":"SwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultRouter","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executorRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gamificationBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gamificationReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gamificationSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isAllowTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isInSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isSwapPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"int256","name":"supplyDelta","type":"int256"}],"name":"rebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebaseExecutor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"sendPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAllowTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_gamificationFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_buybackReceiver","type":"address"},{"internalType":"address","name":"_gamificationReceiver","type":"address"},{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_treasuryReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rebaseExecutor","type":"address"}],"name":"setRebaseExecutor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardYield","type":"uint256"},{"internalType":"uint256","name":"_rebaseFrequency","type":"uint256"},{"internalType":"uint256","name":"_nextRebase","type":"uint256"}],"name":"setRebaseParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_gamificationFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapBackEnabled","type":"bool"},{"internalType":"bool","name":"_liquidityEnabled","type":"bool"},{"internalType":"uint256","name":"_num","type":"uint256"},{"internalType":"uint256","name":"_denom","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setSwapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapPendingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasurySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405273b6b733c7b1ad837983fca1a2169f7a157927f4b6600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733492632d53db73919fdd2f2ba47e20fb99f331d8600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739c3aa103472956ebcca1f155f18c4420b3164942600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733bd85a236fd9636dc1df1248513567ec301d01e3601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601155600160125560016013556000601455600360155560026016556002601755600260185560006019556006601a556001601b60006101000a81548160ff0219169083151502179055506001601b60016101000a81548160ff02191690831515021790555062000270600a6200025c6103e86012600a620001dd919062000d83565b633b9aca00620001ee919062000dd4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200021b919062000e4e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000248919062000e86565b6200096760201b620026f81790919060201c565b6200097f60201b6200270e1790919060201c565b601c556000601d60006101000a81548160ff02191690831515021790555062283334601e55610708601f55601f5442620002ab919062000ec1565b602055735e8d7cee43a4dd8cc741d7d131f87a62eedb9f42602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000602160146101000a81548160ff0219169083151502179055503480156200032b57600080fd5b506040518060400160405280600781526020017f50656761737573000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f504753000000000000000000000000000000000000000000000000000000000081525060128260009081620003ab91906200116c565b508160019081620003bd91906200116c565b5080600260006101000a81548160ff021916908360ff160217905550505050620003fc620003f06200099760201b60201c565b6200099f60201b60201c565b731b02da8cb0d097eb8d57a175b88c7d8b47997506600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e59190620012bd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200056e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005949190620012bd565b306040518363ffffffff1660e01b8152600401620005b492919062001300565b6020604051808303816000875af1158015620005d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005fa9190620012bd565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506012600a6200070d919062000d83565b633b9aca006200071e919062000dd4565b600381905550620007d86012600a62000738919062000d83565b633b9aca0062000749919062000dd4565b6012600a62000759919062000d83565b633b9aca006200076a919062000dd4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000797919062000e4e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620007c4919062000e86565b6200096760201b620026f81790919060201c565b6004819055506012600a620007ee919062000d83565b633b9aca00620007ff919062000dd4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200082c919062000e4e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000859919062000e86565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620008af33600162000a6560201b60201c565b620008c230600162000a6560201b60201c565b620008f7600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000ad060201b60201c565b3373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6003546040516200095991906200133e565b60405180910390a362001416565b600081836200097791906200135b565b905092915050565b600081836200098f919062000dd4565b905092915050565b600033905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000a7562000b3b60201b60201c565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b62000ae062000b3b60201b60201c565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b62000b4b6200099760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000b7162000bcc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bc190620013f4565b60405180910390fd5b565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c845780860481111562000c5c5762000c5b62000bf6565b5b600185161562000c6c5780820291505b808102905062000c7c8562000c25565b945062000c3c565b94509492505050565b60008262000c9f576001905062000d72565b8162000caf576000905062000d72565b816001811462000cc8576002811462000cd35762000d09565b600191505062000d72565b60ff84111562000ce85762000ce762000bf6565b5b8360020a91508482111562000d025762000d0162000bf6565b5b5062000d72565b5060208310610133831016604e8410600b841016171562000d435782820a90508381111562000d3d5762000d3c62000bf6565b5b62000d72565b62000d52848484600162000c32565b9250905081840481111562000d6c5762000d6b62000bf6565b5b81810290505b9392505050565b6000819050919050565b600062000d908262000d79565b915062000d9d8362000d79565b925062000dcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c8d565b905092915050565b600062000de18262000d79565b915062000dee8362000d79565b925082820262000dfe8162000d79565b9150828204841483151762000e185762000e1762000bf6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e5b8262000d79565b915062000e688362000d79565b92508262000e7b5762000e7a62000e1f565b5b828206905092915050565b600062000e938262000d79565b915062000ea08362000d79565b925082820390508181111562000ebb5762000eba62000bf6565b5b92915050565b600062000ece8262000d79565b915062000edb8362000d79565b925082820190508082111562000ef65762000ef562000bf6565b5b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f7e57607f821691505b60208210810362000f945762000f9362000f36565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000fbf565b6200100a868362000fbf565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200104d62001047620010418462000d79565b62001022565b62000d79565b9050919050565b6000819050919050565b62001069836200102c565b62001081620010788262001054565b84845462000fcc565b825550505050565b600090565b6200109862001089565b620010a58184846200105e565b505050565b5b81811015620010cd57620010c16000826200108e565b600181019050620010ab565b5050565b601f8211156200111c57620010e68162000f9a565b620010f18462000faf565b8101602085101562001101578190505b62001119620011108562000faf565b830182620010aa565b50505b505050565b600082821c905092915050565b6000620011416000198460080262001121565b1980831691505092915050565b60006200115c83836200112e565b9150826002028217905092915050565b620011778262000efc565b67ffffffffffffffff81111562001193576200119262000f07565b5b6200119f825462000f65565b620011ac828285620010d1565b600060209050601f831160018114620011e45760008415620011cf578287015190505b620011db85826200114e565b8655506200124b565b601f198416620011f48662000f9a565b60005b828110156200121e57848901518255600182019150602085019450602081019050620011f7565b868310156200123e57848901516200123a601f8916826200112e565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012858262001258565b9050919050565b620012978162001278565b8114620012a357600080fd5b50565b600081519050620012b7816200128c565b92915050565b600060208284031215620012d657620012d562001253565b5b6000620012e684828501620012a6565b91505092915050565b620012fa8162001278565b82525050565b6000604082019050620013176000830185620012ef565b620013266020830184620012ef565b9392505050565b620013388162000d79565b82525050565b60006020820190506200135560008301846200132d565b92915050565b6000620013688262000d79565b9150620013758362000d79565b92508262001388576200138762000e1f565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620013dc60208362001393565b9150620013e982620013a4565b602082019050919050565b600060208201905081810360008301526200140f81620013cd565b9050919050565b6149da80620014266000396000f3fe6080604052600436106103905760003560e01c80636be63855116101dc578063a9059cbb11610102578063d32a8f67116100a0578063ed0d21371161006f578063ed0d213714610d35578063f2fb570814610d60578063f2fde38b14610d8b578063f3fef3a314610db457610397565b8063d32a8f6714610c67578063d37e219d14610c92578063dd62ed3e14610cbb578063e796cebe14610cf857610397565b8063c05e8fa1116100dc578063c05e8fa114610bbb578063cc4a478414610be6578063cc99689914610c11578063ccb6135814610c3c57610397565b8063a9059cbb14610b16578063b31e822b14610b53578063bc7e68a314610b9057610397565b8063855b159b1161017a57806395d89b411161014957806395d89b4114610a5a5780639c0c48b114610a855780639d9241ec14610aae578063a457c2d714610ad957610397565b8063855b159b146109c457806389375abf146109db5780638da5cb5b14610a065780638ebfc79614610a3157610397565b8063715018a6116101b6578063715018a614610944578063753d02a11461095b5780637a43e23f146109725780638348a2881461099b57610397565b80636be63855146108b35780636c5b2855146108de57806370a082311461090757610397565b8063264d26dd116102c1578063395093511161025f57806354a1dfc91161022e57806354a1dfc91461080b57806359b107b9146108345780635c3697141461085f5780635de8dcdd1461088857610397565b8063395093511461073d5780633c8e556d1461077a5780633f4218e0146107a357806352df107f146107e057610397565b80632c10508c1161029b5780632c10508c14610681578063313ce567146106ac578063333e99db146106d757806333f3d6281461071457610397565b8063264d26dd146106145780632b112e491461063f5780632be6937d1461066a57610397565b80630bec05ce1161032e578063178d9b8e11610308578063178d9b8e1461055857806318160ddd146105815780631df59e2f146105ac57806323b872dd146105d757610397565b80630bec05ce146104db57806314cce6df14610506578063153b0d1e1461052f57610397565b806308b1fd8f1161036a57806308b1fd8f1461041d578063095ea7b314610448578063099d0d30146104855780630af08314146104b057610397565b80630445b6671461039c5780630531fb91146103c757806306fdde03146103f257610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610ddd565b6040516103be919061371c565b60405180910390f35b3480156103d357600080fd5b506103dc610dfb565b6040516103e99190613778565b60405180910390f35b3480156103fe57600080fd5b50610407610e21565b6040516104149190613823565b60405180910390f35b34801561042957600080fd5b50610432610eb3565b60405161043f9190613778565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a91906138a7565b610ed9565b60405161047c9190613902565b60405180910390f35b34801561049157600080fd5b5061049a610fcb565b6040516104a7919061371c565b60405180910390f35b3480156104bc57600080fd5b506104c5610fd1565b6040516104d2919061371c565b60405180910390f35b3480156104e757600080fd5b506104f0610fd7565b6040516104fd919061371c565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613949565b610fdd565b005b34801561053b57600080fd5b5061055660048036038101906105519190613949565b611040565b005b34801561056457600080fd5b5061057f600480360381019061057a9190613989565b6110a3565b005b34801561058d57600080fd5b50610596611154565b6040516105a3919061371c565b60405180910390f35b3480156105b857600080fd5b506105c161115e565b6040516105ce9190613778565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f991906139f0565b611184565b60405161060b9190613902565b60405180910390f35b34801561062057600080fd5b50610629611425565b6040516106369190613778565b60405180910390f35b34801561064b57600080fd5b5061065461144b565b604051610661919061371c565b60405180910390f35b34801561067657600080fd5b5061067f61157d565b005b34801561068d57600080fd5b506106966115a2565b6040516106a3919061371c565b60405180910390f35b3480156106b857600080fd5b506106c16115a8565b6040516106ce9190613a5f565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190613a7a565b6115bf565b60405161070b9190613902565b60405180910390f35b34801561072057600080fd5b5061073b600480360381019061073691906138a7565b611615565b005b34801561074957600080fd5b50610764600480360381019061075f91906138a7565b6116a0565b6040516107719190613902565b60405180910390f35b34801561078657600080fd5b506107a1600480360381019061079c9190613aa7565b61189c565b005b3480156107af57600080fd5b506107ca60048036038101906107c59190613a7a565b6119ae565b6040516107d79190613902565b60405180910390f35b3480156107ec57600080fd5b506107f5611a04565b6040516108029190613b6d565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d9190613b88565b611a2a565b005b34801561084057600080fd5b50610849611b09565b604051610856919061371c565b60405180910390f35b34801561086b57600080fd5b5061088660048036038101906108819190613a7a565b611b0f565b005b34801561089457600080fd5b5061089d611b5b565b6040516108aa919061371c565b60405180910390f35b3480156108bf57600080fd5b506108c8611bb6565b6040516108d5919061371c565b60405180910390f35b3480156108ea57600080fd5b5061090560048036038101906109009190613989565b611bbc565b005b34801561091357600080fd5b5061092e60048036038101906109299190613a7a565b611c6d565b60405161093b919061371c565b60405180910390f35b34801561095057600080fd5b50610959611cca565b005b34801561096757600080fd5b50610970611cde565b005b34801561097e57600080fd5b5061099960048036038101906109949190613c25565b611d62565b005b3480156109a757600080fd5b506109c260048036038101906109bd9190613949565b611dc8565b005b3480156109d057600080fd5b506109d9611e2b565b005b3480156109e757600080fd5b506109f0611f5f565b6040516109fd919061371c565b60405180910390f35b348015610a1257600080fd5b50610a1b611f65565b604051610a289190613778565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a539190613949565b611f8f565b005b348015610a6657600080fd5b50610a6f611ff2565b604051610a7c9190613823565b60405180910390f35b348015610a9157600080fd5b50610aac6004803603810190610aa79190613c65565b612084565b005b348015610aba57600080fd5b50610ac36120a6565b604051610ad0919061371c565b60405180910390f35b348015610ae557600080fd5b50610b006004803603810190610afb91906138a7565b6120ac565b604051610b0d9190613902565b60405180910390f35b348015610b2257600080fd5b50610b3d6004803603810190610b3891906138a7565b61233c565b604051610b4a9190613902565b60405180910390f35b348015610b5f57600080fd5b50610b7a6004803603810190610b759190613a7a565b6123f2565b604051610b879190613902565b60405180910390f35b348015610b9c57600080fd5b50610ba5612448565b604051610bb2919061371c565b60405180910390f35b348015610bc757600080fd5b50610bd061244e565b604051610bdd919061371c565b60405180910390f35b348015610bf257600080fd5b50610bfb612454565b604051610c08919061371c565b60405180910390f35b348015610c1d57600080fd5b50610c2661245a565b604051610c339190613902565b60405180910390f35b348015610c4857600080fd5b50610c51612471565b604051610c5e919061371c565b60405180910390f35b348015610c7357600080fd5b50610c7c612477565b604051610c899190613778565b60405180910390f35b348015610c9e57600080fd5b50610cb96004803603810190610cb49190613d73565b61249d565b005b348015610cc757600080fd5b50610ce26004803603810190610cdd9190613df4565b612519565b604051610cef919061371c565b60405180910390f35b348015610d0457600080fd5b50610d1f6004803603810190610d1a9190613a7a565b6125a0565b604051610d2c9190613902565b60405180910390f35b348015610d4157600080fd5b50610d4a6125f6565b604051610d57919061371c565b60405180910390f35b348015610d6c57600080fd5b50610d756125fc565b604051610d829190613778565b60405180910390f35b348015610d9757600080fd5b50610db26004803603810190610dad9190613a7a565b612622565b005b348015610dc057600080fd5b50610ddb6004803603810190610dd691906138a7565b6126a5565b005b6000610df6600454601c546126f890919063ffffffff16565b905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060008054610e3090613e63565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5c90613e63565b8015610ea95780601f10610e7e57610100808354040283529160200191610ea9565b820191906000526020600020905b815481529060010190602001808311610e8c57829003601f168201915b5050505050905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fb9919061371c565b60405180910390a36001905092915050565b60175481565b601e5481565b60145481565b610fe5612724565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611048612724565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6110ab612724565b60006110e4826110d6856110c8888a6127a290919063ffffffff16565b6127a290919063ffffffff16565b6127a290919063ffffffff16565b9050601481111561112a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112190613f06565b60405180910390fd5b84601181905550836014819055508260128190555081601381905550806015819055505050505050565b6000600354905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111c057600080fd5b602160149054906101000a900460ff168061120d57506111de611f65565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061121d575061121c336123f2565b5b61122657600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114105761138f836040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b89092919063ffffffff16565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61141b85858561280d565b9150509392505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061157860045461156a600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155c6005600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546012600a6114e99190614088565b633b9aca006114f891906140d3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6115239190614144565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61154e9190614175565b612aed90919063ffffffff16565b612aed90919063ffffffff16565b6126f890919063ffffffff16565b905090565b611585612724565b6001602160146101000a81548160ff021916908315150217905550565b60135481565b6000600260009054906101000a900460ff16905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61161d612724565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016116589291906141a9565b6020604051808303816000875af1158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b91906141e7565b505050565b600061173182600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127a290919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405161188a919061371c565b60405180910390a36001905092915050565b6118a4612724565b83600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a32612724565b83601b60006101000a81548160ff02191690831515021790555082601b60016101000a81548160ff021916908315150217905550611afd82611aef836012600a611a7c9190614088565b633b9aca00611a8b91906140d3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611ab69190614144565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611ae19190614175565b6126f890919063ffffffff16565b61270e90919063ffffffff16565b601c8190555050505050565b60155481565b611b17612724565b80602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611bb1600454600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f890919063ffffffff16565b905090565b60165481565b611bc4612724565b6000611bfd82611bef85611be1888a6127a290919063ffffffff16565b6127a290919063ffffffff16565b6127a290919063ffffffff16565b9050601e811115611c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3a90614286565b60405180910390fd5b8460168190555083601981905550826017819055508160188190555080601a819055505050505050565b6000611cc3600454600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f890919063ffffffff16565b9050919050565b611cd2612724565b611cdc6000612b03565b565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d4857600080fd5b505af1158015611d5c573d6000803e3d6000fd5b50505050565b611d6a612724565b601d60009054906101000a900460ff1615611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190614318565b60405180910390fd5b611dc48282612bc9565b5050565b611dd0612724565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e8557600080fd5b601d60009054906101000a900460ff1615611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90614318565b60405180910390fd5b6000429050426020541115611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f16906143aa565b60405180910390fd5b6000611f4f6402540be400611f41601e5460035461270e90919063ffffffff16565b6126f890919063ffffffff16565b9050611f5b8282612bc9565b5050565b601f5481565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f97612724565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60606001805461200190613e63565b80601f016020809104026020016040519081016040528092919081815260200182805461202d90613e63565b801561207a5780601f1061204f5761010080835404028352916020019161207a565b820191906000526020600020905b81548152906001019060200180831161205d57829003601f168201915b5050505050905090565b61208c612724565b82601e8190555081601f8190555080602081905550505050565b601a5481565b600080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083106121bc576000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612250565b6121cf8382612aed90919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051612329919061371c565b60405180910390a3600191505092915050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361237857600080fd5b602160149054906101000a900460ff16806123c55750612396611f65565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806123d557506123d4336123f2565b5b6123de57600080fd5b6123e933858561280d565b91505092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60205481565b60115481565b60195481565b6000601d60009054906101000a900460ff16905090565b60125481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124a5612724565b60005b84849050811015612512576124fe338686848181106124ca576124c96143ca565b5b90506020020160208101906124df9190613a7a565b8585858181106124f2576124f16143ca565b5b9050602002013561280d565b50808061250a906143f9565b9150506124a8565b5050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61262a612724565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612690906144b3565b60405180910390fd5b6126a281612b03565b50565b6126ad612724565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156126f3573d6000803e3d6000fd5b505050565b6000818361270691906144d3565b905092915050565b6000818361271c91906140d3565b905092915050565b61272c612dae565b73ffffffffffffffffffffffffffffffffffffffff1661274a611f65565b73ffffffffffffffffffffffffffffffffffffffff16146127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614550565b60405180910390fd5b565b600081836127b09190614570565b905092915050565b6000838311158290612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f79190613823565b60405180910390fd5b5082840390509392505050565b6000612818846115bf565b15612858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284f906145f0565b60405180910390fd5b612861836115bf565b156128a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128989061465c565b60405180910390fd5b601d60009054906101000a900460ff16156128c8576128c1848484612db6565b9050612ae6565b6128d0612f06565b156128de576128dd612f95565b5b60006128f56004548461270e90919063ffffffff16565b905061294981600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aed90919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612997866125a0565b806129a757506129a6856125a0565b5b80156129b957506129b7866119ae565b155b6129c357816129cf565b6129ce86868461327b565b5b9050612a2381600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127a290919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612aca600454856126f890919063ffffffff16565b604051612ad7919061371c565b60405180910390a36001925050505b9392505050565b60008183612afb9190614175565b905092915050565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000811215612bfb57612bf081612bdf9061467c565b600354612aed90919063ffffffff16565b600381905550612c17565b612c10816003546127a290919063ffffffff16565b6003819055505b6fffffffffffffffffffffffffffffffff80166003541115612c4d576fffffffffffffffffffffffffffffffff80166003819055505b612cd46003546012600a612c619190614088565b633b9aca00612c7091906140d3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612c9b9190614144565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612cc69190614175565b6126f890919063ffffffff16565b600481905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d4457600080fd5b505af1158015612d58573d6000803e3d6000fd5b50505050601f5482612d6a9190614570565b602081905550817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2600354604051612da2919061371c565b60405180910390a25050565b600033905090565b600080612dce6004548461270e90919063ffffffff16565b9050612e2281600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aed90919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eb781600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127a290919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019150509392505050565b6000612f11336125a0565b158015612f2a5750601b60009054906101000a900460ff165b8015612f435750601d60009054906101000a900460ff16155b8015612f905750601c54600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601d60006101000a81548160ff0219169083151502179055506000613006600454600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f890919063ffffffff16565b90506000613021601a546015546127a290919063ffffffff16565b90506000613060826130526130436018546013546127a290919063ffffffff16565b8661270e90919063ffffffff16565b6126f890919063ffffffff16565b905060008111156130985761309781601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133ed565b5b60006130d5836130c76130b86016546011546127a290919063ffffffff16565b8761270e90919063ffffffff16565b6126f890919063ffffffff16565b9050600081111561310d5761310c81600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133ed565b5b600061314a8461313c61312d6019546014546127a290919063ffffffff16565b8861270e90919063ffffffff16565b6126f890919063ffffffff16565b905060008111156131825761318181600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133ed565b5b6000601b60019054906101000a900460ff1661319f5760006131b7565b6131b66017546012546127a290919063ffffffff16565b5b905060006131e0866131d2848a61270e90919063ffffffff16565b6126f890919063ffffffff16565b905060008111156132185761321781600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613604565b5b7fc20fef046873ad0c4038f9a82bc41b1ae19370c40e6a6c9584298f0aeca30438878585848960405161324f9594939291906146c4565b60405180910390a1505050505050506000601d60006101000a81548160ff021916908315150217905550565b600080601554905061328c846125a0565b1561329757601a5490505b60006132bf60646132b1848761270e90919063ffffffff16565b6126f890919063ffffffff16565b905061331381600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127a290919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6133ba600454856126f890919063ffffffff16565b6040516133c7919061371c565b60405180910390a36133e28185612aed90919063ffffffff16565b925050509392505050565b6000600267ffffffffffffffff81111561340a57613409614717565b5b6040519080825280602002602001820160405280156134385781602001602082028036833780820191505090505b50905030816000815181106134505761344f6143ca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351b919061475b565b8160018151811061352f5761352e6143ca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b81526004016135cd959493929190614881565b600060405180830381600087803b1580156135e757600080fd5b505af11580156135fb573d6000803e3d6000fd5b50505050505050565b60004790506136266136206002856126f890919063ffffffff16565b306133ed565b600061363b8247612aed90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982306136916002896126f890919063ffffffff16565b60008089426040518863ffffffff1660e01b81526004016136b7969594939291906148db565b60606040518083038185885af11580156136d5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136fa9190614951565b50505050505050565b6000819050919050565b61371681613703565b82525050565b6000602082019050613731600083018461370d565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061376282613737565b9050919050565b61377281613757565b82525050565b600060208201905061378d6000830184613769565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137cd5780820151818401526020810190506137b2565b60008484015250505050565b6000601f19601f8301169050919050565b60006137f582613793565b6137ff818561379e565b935061380f8185602086016137af565b613818816137d9565b840191505092915050565b6000602082019050818103600083015261383d81846137ea565b905092915050565b600080fd5b600080fd5b61385881613757565b811461386357600080fd5b50565b6000813590506138758161384f565b92915050565b61388481613703565b811461388f57600080fd5b50565b6000813590506138a18161387b565b92915050565b600080604083850312156138be576138bd613845565b5b60006138cc85828601613866565b92505060206138dd85828601613892565b9150509250929050565b60008115159050919050565b6138fc816138e7565b82525050565b600060208201905061391760008301846138f3565b92915050565b613926816138e7565b811461393157600080fd5b50565b6000813590506139438161391d565b92915050565b600080604083850312156139605761395f613845565b5b600061396e85828601613866565b925050602061397f85828601613934565b9150509250929050565b600080600080608085870312156139a3576139a2613845565b5b60006139b187828801613892565b94505060206139c287828801613892565b93505060406139d387828801613892565b92505060606139e487828801613892565b91505092959194509250565b600080600060608486031215613a0957613a08613845565b5b6000613a1786828701613866565b9350506020613a2886828701613866565b9250506040613a3986828701613892565b9150509250925092565b600060ff82169050919050565b613a5981613a43565b82525050565b6000602082019050613a746000830184613a50565b92915050565b600060208284031215613a9057613a8f613845565b5b6000613a9e84828501613866565b91505092915050565b60008060008060808587031215613ac157613ac0613845565b5b6000613acf87828801613866565b9450506020613ae087828801613866565b9350506040613af187828801613866565b9250506060613b0287828801613866565b91505092959194509250565b6000819050919050565b6000613b33613b2e613b2984613737565b613b0e565b613737565b9050919050565b6000613b4582613b18565b9050919050565b6000613b5782613b3a565b9050919050565b613b6781613b4c565b82525050565b6000602082019050613b826000830184613b5e565b92915050565b60008060008060808587031215613ba257613ba1613845565b5b6000613bb087828801613934565b9450506020613bc187828801613934565b9350506040613bd287828801613892565b9250506060613be387828801613892565b91505092959194509250565b6000819050919050565b613c0281613bef565b8114613c0d57600080fd5b50565b600081359050613c1f81613bf9565b92915050565b60008060408385031215613c3c57613c3b613845565b5b6000613c4a85828601613892565b9250506020613c5b85828601613c10565b9150509250929050565b600080600060608486031215613c7e57613c7d613845565b5b6000613c8c86828701613892565b9350506020613c9d86828701613892565b9250506040613cae86828701613892565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112613cdd57613cdc613cb8565b5b8235905067ffffffffffffffff811115613cfa57613cf9613cbd565b5b602083019150836020820283011115613d1657613d15613cc2565b5b9250929050565b60008083601f840112613d3357613d32613cb8565b5b8235905067ffffffffffffffff811115613d5057613d4f613cbd565b5b602083019150836020820283011115613d6c57613d6b613cc2565b5b9250929050565b60008060008060408587031215613d8d57613d8c613845565b5b600085013567ffffffffffffffff811115613dab57613daa61384a565b5b613db787828801613cc7565b9450945050602085013567ffffffffffffffff811115613dda57613dd961384a565b5b613de687828801613d1d565b925092505092959194509250565b60008060408385031215613e0b57613e0a613845565b5b6000613e1985828601613866565b9250506020613e2a85828601613866565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e7b57607f821691505b602082108103613e8e57613e8d613e34565b5b50919050565b7f53756d206f662062757920666565732065786365656473206d61782076616c7560008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ef060218361379e565b9150613efb82613e94565b604082019050919050565b60006020820190508181036000830152613f1f81613ee3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613fac57808604811115613f8857613f87613f26565b5b6001851615613f975780820291505b8081029050613fa585613f55565b9450613f6c565b94509492505050565b600082613fc55760019050614081565b81613fd35760009050614081565b8160018114613fe95760028114613ff357614022565b6001915050614081565b60ff84111561400557614004613f26565b5b8360020a91508482111561401c5761401b613f26565b5b50614081565b5060208310610133831016604e8410600b84101617156140575782820a90508381111561405257614051613f26565b5b614081565b6140648484846001613f62565b9250905081840481111561407b5761407a613f26565b5b81810290505b9392505050565b600061409382613703565b915061409e83613703565b92506140cb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613fb5565b905092915050565b60006140de82613703565b91506140e983613703565b92508282026140f781613703565b9150828204841483151761410e5761410d613f26565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061414f82613703565b915061415a83613703565b92508261416a57614169614115565b5b828206905092915050565b600061418082613703565b915061418b83613703565b92508282039050818111156141a3576141a2613f26565b5b92915050565b60006040820190506141be6000830185613769565b6141cb602083018461370d565b9392505050565b6000815190506141e18161391d565b92915050565b6000602082840312156141fd576141fc613845565b5b600061420b848285016141d2565b91505092915050565b7f53756d206f662073656c6c20666565732065786365656473206d61782076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b600061427060228361379e565b915061427b82614214565b604082019050919050565b6000602082019050818103600083015261429f81614263565b9050919050565b7f43757272656e746c7920696e20737761702c2074727920616761696e206c617460008201527f65722e0000000000000000000000000000000000000000000000000000000000602082015250565b600061430260238361379e565b915061430d826142a6565b604082019050919050565b60006020820190508181036000830152614331816142f5565b9050919050565b7f546f6f20736f6f6e2073696e6365206c617374206175746f6d6174696320726560008201527f626173652e000000000000000000000000000000000000000000000000000000602082015250565b600061439460258361379e565b915061439f82614338565b604082019050919050565b600060208201905081810360008301526143c381614387565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061440482613703565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361443657614435613f26565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061449d60268361379e565b91506144a882614441565b604082019050919050565b600060208201905081810360008301526144cc81614490565b9050919050565b60006144de82613703565b91506144e983613703565b9250826144f9576144f8614115565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061453a60208361379e565b915061454582614504565b602082019050919050565b600060208201905081810360008301526145698161452d565b9050919050565b600061457b82613703565b915061458683613703565b925082820190508082111561459e5761459d613f26565b5b92915050565b7f53656e64657220697320626c61636b6c69737465640000000000000000000000600082015250565b60006145da60158361379e565b91506145e5826145a4565b602082019050919050565b60006020820190508181036000830152614609816145cd565b9050919050565b7f526563697069656e7420697320626c61636b6c69737465640000000000000000600082015250565b600061464660188361379e565b915061465182614610565b602082019050919050565b6000602082019050818103600083015261467581614639565b9050919050565b600061468782613bef565b91507f800000000000000000000000000000000000000000000000000000000000000082036146b9576146b8613f26565b5b816000039050919050565b600060a0820190506146d9600083018861370d565b6146e6602083018761370d565b6146f3604083018661370d565b614700606083018561370d565b61470d608083018461370d565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506147558161384f565b92915050565b60006020828403121561477157614770613845565b5b600061477f84828501614746565b91505092915050565b6000819050919050565b60006147ad6147a86147a384614788565b613b0e565b613703565b9050919050565b6147bd81614792565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147f881613757565b82525050565b600061480a83836147ef565b60208301905092915050565b6000602082019050919050565b600061482e826147c3565b61483881856147ce565b9350614843836147df565b8060005b8381101561487457815161485b88826147fe565b975061486683614816565b925050600181019050614847565b5085935050505092915050565b600060a082019050614896600083018861370d565b6148a360208301876147b4565b81810360408301526148b58186614823565b90506148c46060830185613769565b6148d1608083018461370d565b9695505050505050565b600060c0820190506148f06000830189613769565b6148fd602083018861370d565b61490a60408301876147b4565b61491760608301866147b4565b6149246080830185613769565b61493160a083018461370d565b979650505050505050565b60008151905061494b8161387b565b92915050565b60008060006060848603121561496a57614969613845565b5b60006149788682870161493c565b93505060206149898682870161493c565b925050604061499a8682870161493c565b915050925092509256fea2646970667358221220d3e8b40e9ad5753592eaa803912e15d755deef302d7dd29b1d121df41026791b64736f6c63430008110033
Deployed ByteCode Sourcemap
31029:18968:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49160:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34280:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30727:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34477;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44043:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35465:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41504:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35277:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32338:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32872:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35643:689;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31590:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34196:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45779:545;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34380:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48589:222;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48459:118;;;;;;;;;;;;;:::i;:::-;;35235:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30929:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33001:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49440:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44323:429;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34577:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32747:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32066:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37839:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35323:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42060:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49011:137;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35423:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36344:697;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43892:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9817:103;;;;;;;;;;;;;:::i;:::-;;48823:79;;;;;;;;;;;;;:::i;:::-;;42306:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33122:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42506:488;;;;;;;;;;;;;:::i;:::-;;41549:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9169:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32616:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30826:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41669:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35599:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44764:628;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45516:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32481:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41595:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35151:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35552:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48914:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35192:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32106:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47871:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43675:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33251:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35509:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41973:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10075:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49296:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49160:124;49208:7;49237:37;49258:15;;49237:16;;:20;;:37;;;;:::i;:::-;49230:44;;49160:124;:::o;34280:91::-;;;;;;;;;;;;;:::o;30727:87::-;30764:13;30799:5;30792:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30727:87;:::o;34477:::-;;;;;;;;;;;;;:::o;44043:268::-;44152:4;44218:5;44178:16;:28;44195:10;44178:28;;;;;;;;;;;;;;;:37;44207:7;44178:37;;;;;;;;;;;;;;;:45;;;;44262:7;44241:36;;44250:10;44241:36;;;44271:5;44241:36;;;;;;:::i;:::-;;;;;;;;44297:4;44290:11;;44043:268;;;;:::o;35465:35::-;;;;:::o;41504:36::-;;;;:::o;35277:37::-;;;;:::o;32338:131::-;9055:13;:11;:13::i;:::-;32453:6:::1;32424:19;:26;32444:5;32424:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32338:131:::0;;:::o;32872:117::-;9055:13;:11;:13::i;:::-;32973:6:::1;32954:9;:16;32964:5;32954:16;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;32872:117:::0;;:::o;35643:689::-;9055:13;:11;:13::i;:::-;35840:17:::1;35860:118;35965:12;35860:84;35930:13;35860:49;35892:16;35860:11;:31;;:49;;;;:::i;:::-;:69;;:84;;;;:::i;:::-;:104;;:118;;;;:::i;:::-;35840:138;;35140:2;36015:9;:30;;35991:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;36139:11;36123:13;:27;;;;36184:16;36163:18;:37;;;;36231:13;36213:15;:31;;;;36274:12;36257:14;:29;;;;36313:9;36299:11;:23;;;;35827:505;35643:689:::0;;;;:::o;31590:110::-;31645:7;31674:16;;31667:23;;31590:110;:::o;34196:75::-;;;;;;;;;;;;;:::o;45779:545::-;46009:4;45950:2;45475:3;45461:18;;:2;:18;;;45453:27;;;;;;48289::::1;;;;;;;;;;;:71;;;;48353:7;:5;:7::i;:::-;48339:21;;:10;:21;;;48289:71;:121;;;;48383:27;48399:10;48383:15;:27::i;:::-;48289:121;48265:158;;;::::0;::::1;;31307:17:::2;46039:16;:22;46056:4;46039:22;;;;;;;;;;;;;;;:34;46062:10;46039:34;;;;;;;;;;;;;;;;:49;46035:230;;46144:107;46219:5;46144:107;;;;;;;;;;;;;;;;::::0;:16:::2;:22;46161:4;46144:22;;;;;;;;;;;;;;;:70;46187:10;46144:70;;;;;;;;;;;;;;;;:74;;:107;;;;;:::i;:::-;46107:16;:22;46124:4;46107:22;;;;;;;;;;;;;;;:34;46130:10;46107:34;;;;;;;;;;;;;;;:144;;;;46035:230;46284:30;46298:4;46304:2;46308:5;46284:13;:30::i;:::-;46277:37;;45779:545:::0;;;;;;:::o;34380:88::-;;;;;;;;;;;;;:::o;48589:222::-;48644:7;48688:113;48769:15;;48689:54;48726:10;:16;32011:42;48726:16;;;;;;;;;;;;;;;;48689:32;48704:10;:16;31928:42;48704:16;;;;;;;;;;;;;;;;31193:2;31408;:12;;;;:::i;:::-;31396:9;:24;;;;:::i;:::-;31307:17;31493:38;;;;:::i;:::-;31307:17;31478:54;;;;:::i;:::-;48689:14;;:32;;;;:::i;:::-;:36;;:54;;;;:::i;:::-;48688:60;;:113;;;;:::i;:::-;48666:135;;48589:222;:::o;48459:118::-;9055:13;:11;:13::i;:::-;48563:4:::1;48533:27;;:34;;;;;;;;;;;;;;;;;;48459:118::o:0;35235:33::-;;;;:::o;30929:87::-;30970:5;30997:9;;;;;;;;;;;30990:16;;30929:87;:::o;33001:109::-;33058:4;33084:9;:16;33094:5;33084:16;;;;;;;;;;;;;;;;;;;;;;;;;33077:23;;33001:109;;;:::o;49440:190::-;9055:13;:11;:13::i;:::-;49576::::1;49562:37;;;49600:10;49612:7;49562:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49440:190:::0;;:::o;44323:429::-;44427:4;44493:81;44563:10;44493:16;:28;44510:10;44493:28;;;;;;;;;;;;;;;:65;44538:7;44493:65;;;;;;;;;;;;;;;;:69;;:81;;;;:::i;:::-;44453:16;:28;44470:10;44453:28;;;;;;;;;;;;;;;:37;44482:7;44453:37;;;;;;;;;;;;;;;:121;;;;44644:7;44592:126;;44617:10;44592:126;;;44668:16;:28;44685:10;44668:28;;;;;;;;;;;;;;;:37;44697:7;44668:37;;;;;;;;;;;;;;;;44592:126;;;;;;:::i;:::-;;;;;;;;44738:4;44731:11;;44323:429;;;;:::o;34577:423::-;9055:13;:11;:13::i;:::-;34817:16:::1;34799:15;;:34;;;;;;;;;;;;;;;;;;34869:21;34846:20;;:44;;;;;;;;;;;;;;;;;;34923:18;34903:17;;:38;;;;;;;;;;;;;;;;;;34973:17;34954:16;;:36;;;;;;;;;;;;;;;;;;34577:423:::0;;;;:::o;32747:113::-;32804:4;32830:13;:20;32844:5;32830:20;;;;;;;;;;;;;;;;;;;;;;;;;32823:27;;32747:113;;;:::o;32066:31::-;;;;;;;;;;;;;:::o;37839:348::-;9055:13;:11;:13::i;:::-;38048:16:::1;38030:15;;:34;;;;;;;;;;;;;;;;;;38096:17;38077:16;;:36;;;;;;;;;;;;;;;;;;38145:32;38172:4;38145:22;38160:6;31193:2;31408;:12;;;;:::i;:::-;31396:9;:24;;;;:::i;:::-;31307:17;31493:38;;;;:::i;:::-;31307:17;31478:54;;;;:::i;:::-;38145:14;;:22;;;;:::i;:::-;:26;;:32;;;;:::i;:::-;38126:16;:51;;;;37839:348:::0;;;;:::o;35323:30::-;;;;:::o;42060:126::-;9055:13;:11;:13::i;:::-;42161:15:::1;42144:14;;:32;;;;;;;;;;;;;;;;;;42060:126:::0;:::o;49011:137::-;49063:7;49092:46;49122:15;;49092:10;:25;49111:4;49092:25;;;;;;;;;;;;;;;;:29;;:46;;;;:::i;:::-;49085:53;;49011:137;:::o;35423:33::-;;;;:::o;36344:697::-;9055:13;:11;:13::i;:::-;36542:17:::1;36562:118;36667:12;36562:84;36632:13;36562:49;36594:16;36562:11;:31;;:49;;;;:::i;:::-;:69;;:84;;;;:::i;:::-;:104;;:118;;;;:::i;:::-;36542:138;;35412:2;36717:9;:31;;36693:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;36844:11;36827:14;:28;;;;36890:16;36868:19;:38;;;;36938:13;36919:16;:32;;;;36982:12;36964:15;:30;;;;37022:9;37007:12;:24;;;;36529:512;36344:697:::0;;;;:::o;43892:139::-;43956:7;43985:36;44005:15;;43985:10;:15;43996:3;43985:15;;;;;;;;;;;;;;;;:19;;:36;;;;:::i;:::-;43978:43;;43892:139;;;:::o;9817:103::-;9055:13;:11;:13::i;:::-;9882:30:::1;9909:1;9882:18;:30::i;:::-;9817:103::o:0;48823:79::-;48873:11;;;;;;;;;;;48867:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48823:79::o;42306:188::-;9055:13;:11;:13::i;:::-;42398:6:::1;;;;;;;;;;;42397:7;42389:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42457:27;42465:5;42472:11;42457:7;:27::i;:::-;42306:188:::0;;:::o;33122:117::-;9055:13;:11;:13::i;:::-;33223:6:::1;33201:12;:19;33214:5;33201:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;33122:117:::0;;:::o;42506:488::-;42255:14;;;;;;;;;;;42241:28;;:10;:28;;;42233:37;;;;;;42574:6:::1;;;;;;;;;;;42573:7;42565:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42637:13;42653:15;42637:31;;42719:15;42705:10;;:29;;42681:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;42820:18;42864:63;41484:11;42864:33;42885:11;;42864:16;;:20;;:33;;;;:::i;:::-;:37;;:63;;;;:::i;:::-;42820:120;;42957:27;42965:5;42972:11;42957:7;:27::i;:::-;42552:442;;42506:488::o:0;41549:37::-;;;;:::o;9169:87::-;9215:7;9242:6;;;;;;;;;;;9235:13;;9169:87;:::o;32616:119::-;9055:13;:11;:13::i;:::-;32719:6:::1;32696:13;:20;32710:5;32696:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32616:119:::0;;:::o;30826:91::-;30865:13;30900:7;30893:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30826:91;:::o;41669:292::-;9055:13;:11;:13::i;:::-;41855:12:::1;41841:11;:26;;;;41898:16;41880:15;:34;;;;41940:11;41927:10;:24;;;;41669:292:::0;;;:::o;35599:31::-;;;;:::o;44764:628::-;44873:4;44899:16;44918;:28;44935:10;44918:28;;;;;;;;;;;;;;;:37;44947:7;44918:37;;;;;;;;;;;;;;;;44899:56;;44991:8;44972:15;:27;44968:247;;45058:1;45018:16;:28;45035:10;45018:28;;;;;;;;;;;;;;;:37;45047:7;45018:37;;;;;;;;;;;;;;;:41;;;;44968:247;;;45136:65;45169:15;45136:8;:12;;:65;;;;:::i;:::-;45096:16;:28;45113:10;45096:28;;;;;;;;;;;;;;;:37;45125:7;45096:37;;;;;;;;;;;;;;;:105;;;;44968:247;45284:7;45232:126;;45257:10;45232:126;;;45308:16;:28;45325:10;45308:28;;;;;;;;;;;;;;;:37;45337:7;45308:37;;;;;;;;;;;;;;;;45232:126;;;;;;:::i;:::-;;;;;;;;45378:4;45371:11;;;44764:628;;;;:::o;45516:251::-;45687:4;45628:2;45475:3;45461:18;;:2;:18;;;45453:27;;;;;;48289::::1;;;;;;;;;;;:71;;;;48353:7;:5;:7::i;:::-;48339:21;;:10;:21;;;48289:71;:121;;;;48383:27;48399:10;48383:15;:27::i;:::-;48289:121;48265:158;;;::::0;::::1;;45720:37:::2;45734:10;45746:2;45750:6;45720:13;:37::i;:::-;45713:44;;45516:251:::0;;;;;:::o;32481:123::-;32542:4;32568:19;:26;32588:5;32568:26;;;;;;;;;;;;;;;;;;;;;;;;;32561:33;;32481:123;;;:::o;41595:61::-;;;;:::o;35151:32::-;;;;:::o;35552:38::-;;;;:::o;48914:85::-;48957:4;48983:6;;;;;;;;;;;48976:13;;48914:85;:::o;35192:34::-;;;;:::o;32106:26::-;;;;;;;;;;;;;:::o;47871:281::-;9055:13;:11;:13::i;:::-;48018:9:::1;48013:130;48037:10;;:17;;48033:1;:21;48013:130;;;48078:51;48092:10;48104;;48115:1;48104:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;48119:6;;48126:1;48119:9;;;;;;;:::i;:::-;;;;;;;;48078:13;:51::i;:::-;;48056:3;;;;;:::i;:::-;;;;48013:130;;;;47871:281:::0;;;;:::o;43675:205::-;43802:7;43838:16;:23;43855:5;43838:23;;;;;;;;;;;;;;;:32;43862:7;43838:32;;;;;;;;;;;;;;;;43831:39;;43675:205;;;;:::o;33251:111::-;33307:4;33333:12;:19;33346:5;33333:19;;;;;;;;;;;;;;;;;;;;;;;;;33326:26;;33251:111;;;:::o;35509:34::-;;;;:::o;41973:74::-;;;;;;;;;;;;;:::o;10075:201::-;9055:13;:11;:13::i;:::-;10184:1:::1;10164:22;;:8;:22;;::::0;10156:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10240:28;10259:8;10240:18;:28::i;:::-;10075:201:::0;:::o;49296:132::-;9055:13;:11;:13::i;:::-;49390:9:::1;49382:27;;:36;49410:7;49382:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49296:132:::0;;:::o;4013:98::-;4071:7;4102:1;4098;:5;;;;:::i;:::-;4091:12;;4013:98;;;;:::o;3614:::-;3672:7;3703:1;3699;:5;;;;:::i;:::-;3692:12;;3614:98;;;;:::o;9334:132::-;9409:12;:10;:12::i;:::-;9398:23;;:7;:5;:7::i;:::-;:23;;;9390:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9334:132::o;2876:98::-;2934:7;2965:1;2961;:5;;;;:::i;:::-;2954:12;;2876:98;;;;:::o;5155:240::-;5275:7;5333:1;5328;:6;;5336:12;5320:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5375:1;5371;:5;5364:12;;5155:240;;;;;:::o;46336:1143::-;46473:4;46501:20;46513:7;46501:11;:20::i;:::-;46500:21;46492:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46569:23;46581:10;46569:11;:23::i;:::-;46568:24;46560:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;46642:6;;;;;;;;;;;46638:94;;;46674:44;46689:7;46698:10;46710:7;46674:14;:44::i;:::-;46667:51;;;;46638:94;46752:16;:14;:16::i;:::-;46748:63;;;46787:10;:8;:10::i;:::-;46748:63;46827:18;46848:28;46860:15;;46848:7;:11;;:28;;;;:::i;:::-;46827:49;;46911:35;46935:10;46911;:19;46922:7;46911:19;;;;;;;;;;;;;;;;:23;;:35;;;;:::i;:::-;46889:10;:19;46900:7;46889:19;;;;;;;;;;;;;;;:57;;;;46963:26;47011:19;47022:7;47011:10;:19::i;:::-;:45;;;;47034:22;47045:10;47034;:22::i;:::-;47011:45;47010:93;;;;;47082:20;47094:7;47082:11;:20::i;:::-;47081:21;47010:93;47009:189;;47188:10;47009:189;;;47126:40;47134:7;47143:10;47155;47126:7;:40::i;:::-;47009:189;46963:248;;47253:46;47280:18;47253:10;:22;47264:10;47253:22;;;;;;;;;;;;;;;;:26;;:46;;;;:::i;:::-;47228:10;:22;47239:10;47228:22;;;;;;;;;;;;;;;:71;;;;47366:10;47317:128;;47342:7;47317:128;;;47393:39;47416:15;;47393:18;:22;;:39;;;;:::i;:::-;47317:128;;;;;;:::i;:::-;;;;;;;;47465:4;47458:11;;;;46336:1143;;;;;;:::o;3257:98::-;3315:7;3346:1;3342;:5;;;;:::i;:::-;3335:12;;3257:98;;;;:::o;10436:191::-;10510:16;10529:6;;;;;;;;;;;10510:25;;10555:8;10546:6;;:17;;;;;;;;;;;;;;;;;;10610:8;10579:40;;10600:8;10579:40;;;;;;;;;;;;10499:128;10436:191;:::o;43006:619::-;43097:1;43083:11;:15;43079:212;;;43136:43;43166:11;43165:12;;;:::i;:::-;43136:16;;:20;;:43;;;;:::i;:::-;43117:16;:62;;;;43079:212;;;43235:42;43264:11;43235:16;;:20;;:42;;;;:::i;:::-;43216:16;:61;;;;43079:212;31242:17;43330:10;;43311:16;;:29;43307:95;;;31242:17;43378:10;;43359:16;:29;;;;43307:95;43436:32;43451:16;;31193:2;31408;:12;;;;:::i;:::-;31396:9;:24;;;;:::i;:::-;31307:17;31493:38;;;;:::i;:::-;31307:17;31478:54;;;;:::i;:::-;43436:14;;:32;;;;:::i;:::-;43418:15;:50;;;;43487:11;;;;;;;;;;;43481:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43544:15;;43536:5;:23;;;;:::i;:::-;43523:10;:36;;;;43591:5;43581:34;43598:16;;43581:34;;;;;;:::i;:::-;;;;;;;;43006:619;;:::o;7720:98::-;7773:7;7800:10;7793:17;;7720:98;:::o;47491:348::-;47617:4;47636:17;47656:27;47667:15;;47656:6;:10;;:27;;;;:::i;:::-;47636:47;;47715:31;47736:9;47715:10;:16;47726:4;47715:16;;;;;;;;;;;;;;;;:20;;:31;;;;:::i;:::-;47696:10;:16;47707:4;47696:16;;;;;;;;;;;;;;;:50;;;;47776:29;47795:9;47776:10;:14;47787:2;47776:14;;;;;;;;;;;;;;;;:18;;:29;;;;:::i;:::-;47759:10;:14;47770:2;47759:14;;;;;;;;;;;;;;;:46;;;;47825:4;47818:11;;;47491:348;;;;;:::o;38373:247::-;38422:4;38464:22;38475:10;38464;:22::i;:::-;38463:23;:57;;;;;38505:15;;;;;;;;;;;38463:57;:83;;;;;38540:6;;;;;;;;;;;38539:7;38463:83;:147;;;;;38594:16;;38565:10;:25;38584:4;38565:25;;;;;;;;;;;;;;;;:45;;38463:147;38441:169;;38373:247;:::o;38632:1761::-;38273:4;38264:6;;:13;;;;;;;;;;;;;;;;;;38683:28:::1;38714:74;38760:15;;38714:10;:25;38733:4;38714:25;;;;;;;;;;;;;;;;:29;;:74;;;;:::i;:::-;38683:105;;38805:16;38824:29;38840:12;;38824:11;;:15;;:29;;;;:::i;:::-;38805:48;;38870:30;38903:109;39003:8;38903:79;38945:35;38964:15;;38945:14;;:18;;:35;;;;:::i;:::-;38903:20;:40;;:79;;;;:::i;:::-;:99;;:109;;;;:::i;:::-;38870:142;;39054:1;39029:22;:26;39025:117;;;39074:54;39087:22;39111:16;;;;;;;;;;;39074:12;:54::i;:::-;39025:117;39158:29;39190:107;39288:8;39190:77;39232:33;39250:14;;39232:13;;:17;;:33;;;;:::i;:::-;39190:20;:40;;:77;;;;:::i;:::-;:97;;:107;;;;:::i;:::-;39158:139;;39338:1;39314:21;:25;39310:114;;;39358:52;39371:21;39394:15;;;;;;;;;;;39358:12;:52::i;:::-;39310:114;39440:34;39477:117;39585:8;39477:87;39519:43;39542:19;;39519:18;;:22;;:43;;;;:::i;:::-;39477:20;:40;;:87;;;;:::i;:::-;:107;;:117;;;;:::i;:::-;39440:154;;39640:1;39611:26;:30;39607:129;;;39660:62;39673:26;39701:20;;;;;;;;;;;39660:12;:62::i;:::-;39607:129;39752:27;39782:16;;;;;;;;;;;:90;;39871:1;39782:90;;;39816:37;39836:16;;39816:15;;:19;;:37;;;;:::i;:::-;39782:90;39752:120;;39885:31;39919:91;40001:8;39919:61;39960:19;39919:20;:40;;:61;;;;:::i;:::-;:81;;:91;;;;:::i;:::-;39885:125;;40053:1;40027:23;:27;40023:121;;;40073:57;40087:23;40112:17;;;;;;;;;;;40073:13;:57::i;:::-;40023:121;40165:218;40190:20;40227:21;40265:26;40308:23;40348:22;40165:218;;;;;;;;;;:::i;:::-;;;;;;;;38670:1723;;;;;;;38313:5:::0;38304:6;;:14;;;;;;;;;;;;;;;;;;38632:1761::o;37084:566::-;37215:7;37237:11;37251;;37237:25;;37279:21;37290:9;37279:10;:21::i;:::-;37275:76;;;37325:12;;37319:18;;37275:76;37367:17;37387:39;35079:3;37387:18;37401:3;37387:9;:13;;:18;;;;:::i;:::-;:22;;:39;;;;:::i;:::-;37367:59;;37471:40;37501:9;37471:10;:25;37490:4;37471:25;;;;;;;;;;;;;;;;:29;;:40;;;;:::i;:::-;37443:10;:25;37462:4;37443:25;;;;;;;;;;;;;;;:68;;;;37554:4;37529:63;;37538:6;37529:63;;;37561:30;37575:15;;37561:9;:13;;:30;;;;:::i;:::-;37529:63;;;;;;:::i;:::-;;;;;;;;37616:24;37630:9;37616;:13;;:24;;;;:::i;:::-;37609:31;;;;37084:566;;;;;:::o;40405:433::-;40489:21;40527:1;40513:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40489:40;;40560:4;40542;40547:1;40542:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40588:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40578:4;40583:1;40578:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;40625:13;;;;;;;;;;;:64;;;40706:12;40735:1;40753:4;40774:9;40800:15;40625:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40476:362;40405:433;;:::o;40850:531::-;40935:19;40957:21;40935:43;;40991:48;41004:19;41021:1;41004:12;:16;;:19;;;;:::i;:::-;41033:4;40991:12;:48::i;:::-;41052:29;41084:38;41110:11;41084:21;:25;;:38;;;;:::i;:::-;41052:70;;41139:13;;;;;;;;;;;:29;;;41176:21;41223:4;41245:19;41262:1;41245:12;:16;;:19;;;;:::i;:::-;41281:1;41299;41317:9;41343:15;41139:232;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40922:459;;40850:531;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:126::-;479:7;519:42;512:5;508:54;497:65;;442:126;;;:::o;574:96::-;611:7;640:24;658:5;640:24;:::i;:::-;629:35;;574:96;;;:::o;676:118::-;763:24;781:5;763:24;:::i;:::-;758:3;751:37;676:118;;:::o;800:222::-;893:4;931:2;920:9;916:18;908:26;;944:71;1012:1;1001:9;997:17;988:6;944:71;:::i;:::-;800:222;;;;:::o;1028:99::-;1080:6;1114:5;1108:12;1098:22;;1028:99;;;:::o;1133:169::-;1217:11;1251:6;1246:3;1239:19;1291:4;1286:3;1282:14;1267:29;;1133:169;;;;:::o;1308:246::-;1389:1;1399:113;1413:6;1410:1;1407:13;1399:113;;;1498:1;1493:3;1489:11;1483:18;1479:1;1474:3;1470:11;1463:39;1435:2;1432:1;1428:10;1423:15;;1399:113;;;1546:1;1537:6;1532:3;1528:16;1521:27;1370:184;1308:246;;;:::o;1560:102::-;1601:6;1652:2;1648:7;1643:2;1636:5;1632:14;1628:28;1618:38;;1560:102;;;:::o;1668:377::-;1756:3;1784:39;1817:5;1784:39;:::i;:::-;1839:71;1903:6;1898:3;1839:71;:::i;:::-;1832:78;;1919:65;1977:6;1972:3;1965:4;1958:5;1954:16;1919:65;:::i;:::-;2009:29;2031:6;2009:29;:::i;:::-;2004:3;2000:39;1993:46;;1760:285;1668:377;;;;:::o;2051:313::-;2164:4;2202:2;2191:9;2187:18;2179:26;;2251:9;2245:4;2241:20;2237:1;2226:9;2222:17;2215:47;2279:78;2352:4;2343:6;2279:78;:::i;:::-;2271:86;;2051:313;;;;:::o;2451:117::-;2560:1;2557;2550:12;2574:117;2683:1;2680;2673:12;2697:122;2770:24;2788:5;2770:24;:::i;:::-;2763:5;2760:35;2750:63;;2809:1;2806;2799:12;2750:63;2697:122;:::o;2825:139::-;2871:5;2909:6;2896:20;2887:29;;2925:33;2952:5;2925:33;:::i;:::-;2825:139;;;;:::o;2970:122::-;3043:24;3061:5;3043:24;:::i;:::-;3036:5;3033:35;3023:63;;3082:1;3079;3072:12;3023:63;2970:122;:::o;3098:139::-;3144:5;3182:6;3169:20;3160:29;;3198:33;3225:5;3198:33;:::i;:::-;3098:139;;;;:::o;3243:474::-;3311:6;3319;3368:2;3356:9;3347:7;3343:23;3339:32;3336:119;;;3374:79;;:::i;:::-;3336:119;3494:1;3519:53;3564:7;3555:6;3544:9;3540:22;3519:53;:::i;:::-;3509:63;;3465:117;3621:2;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3592:118;3243:474;;;;;:::o;3723:90::-;3757:7;3800:5;3793:13;3786:21;3775:32;;3723:90;;;:::o;3819:109::-;3900:21;3915:5;3900:21;:::i;:::-;3895:3;3888:34;3819:109;;:::o;3934:210::-;4021:4;4059:2;4048:9;4044:18;4036:26;;4072:65;4134:1;4123:9;4119:17;4110:6;4072:65;:::i;:::-;3934:210;;;;:::o;4150:116::-;4220:21;4235:5;4220:21;:::i;:::-;4213:5;4210:32;4200:60;;4256:1;4253;4246:12;4200:60;4150:116;:::o;4272:133::-;4315:5;4353:6;4340:20;4331:29;;4369:30;4393:5;4369:30;:::i;:::-;4272:133;;;;:::o;4411:468::-;4476:6;4484;4533:2;4521:9;4512:7;4508:23;4504:32;4501:119;;;4539:79;;:::i;:::-;4501:119;4659:1;4684:53;4729:7;4720:6;4709:9;4705:22;4684:53;:::i;:::-;4674:63;;4630:117;4786:2;4812:50;4854:7;4845:6;4834:9;4830:22;4812:50;:::i;:::-;4802:60;;4757:115;4411:468;;;;;:::o;4885:765::-;4971:6;4979;4987;4995;5044:3;5032:9;5023:7;5019:23;5015:33;5012:120;;;5051:79;;:::i;:::-;5012:120;5171:1;5196:53;5241:7;5232:6;5221:9;5217:22;5196:53;:::i;:::-;5186:63;;5142:117;5298:2;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5269:118;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;4885:765;;;;;;;:::o;5656:619::-;5733:6;5741;5749;5798:2;5786:9;5777:7;5773:23;5769:32;5766:119;;;5804:79;;:::i;:::-;5766:119;5924:1;5949:53;5994:7;5985:6;5974:9;5970:22;5949:53;:::i;:::-;5939:63;;5895:117;6051:2;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6022:118;6179:2;6205:53;6250:7;6241:6;6230:9;6226:22;6205:53;:::i;:::-;6195:63;;6150:118;5656:619;;;;;:::o;6281:86::-;6316:7;6356:4;6349:5;6345:16;6334:27;;6281:86;;;:::o;6373:112::-;6456:22;6472:5;6456:22;:::i;:::-;6451:3;6444:35;6373:112;;:::o;6491:214::-;6580:4;6618:2;6607:9;6603:18;6595:26;;6631:67;6695:1;6684:9;6680:17;6671:6;6631:67;:::i;:::-;6491:214;;;;:::o;6711:329::-;6770:6;6819:2;6807:9;6798:7;6794:23;6790:32;6787:119;;;6825:79;;:::i;:::-;6787:119;6945:1;6970:53;7015:7;7006:6;6995:9;6991:22;6970:53;:::i;:::-;6960:63;;6916:117;6711:329;;;;:::o;7046:765::-;7132:6;7140;7148;7156;7205:3;7193:9;7184:7;7180:23;7176:33;7173:120;;;7212:79;;:::i;:::-;7173:120;7332:1;7357:53;7402:7;7393:6;7382:9;7378:22;7357:53;:::i;:::-;7347:63;;7303:117;7459:2;7485:53;7530:7;7521:6;7510:9;7506:22;7485:53;:::i;:::-;7475:63;;7430:118;7587:2;7613:53;7658:7;7649:6;7638:9;7634:22;7613:53;:::i;:::-;7603:63;;7558:118;7715:2;7741:53;7786:7;7777:6;7766:9;7762:22;7741:53;:::i;:::-;7731:63;;7686:118;7046:765;;;;;;;:::o;7817:60::-;7845:3;7866:5;7859:12;;7817:60;;;:::o;7883:142::-;7933:9;7966:53;7984:34;7993:24;8011:5;7993:24;:::i;:::-;7984:34;:::i;:::-;7966:53;:::i;:::-;7953:66;;7883:142;;;:::o;8031:126::-;8081:9;8114:37;8145:5;8114:37;:::i;:::-;8101:50;;8031:126;;;:::o;8163:145::-;8232:9;8265:37;8296:5;8265:37;:::i;:::-;8252:50;;8163:145;;;:::o;8314:169::-;8420:56;8470:5;8420:56;:::i;:::-;8415:3;8408:69;8314:169;;:::o;8489:260::-;8601:4;8639:2;8628:9;8624:18;8616:26;;8652:90;8739:1;8728:9;8724:17;8715:6;8652:90;:::i;:::-;8489:260;;;;:::o;8755:753::-;8835:6;8843;8851;8859;8908:3;8896:9;8887:7;8883:23;8879:33;8876:120;;;8915:79;;:::i;:::-;8876:120;9035:1;9060:50;9102:7;9093:6;9082:9;9078:22;9060:50;:::i;:::-;9050:60;;9006:114;9159:2;9185:50;9227:7;9218:6;9207:9;9203:22;9185:50;:::i;:::-;9175:60;;9130:115;9284:2;9310:53;9355:7;9346:6;9335:9;9331:22;9310:53;:::i;:::-;9300:63;;9255:118;9412:2;9438:53;9483:7;9474:6;9463:9;9459:22;9438:53;:::i;:::-;9428:63;;9383:118;8755:753;;;;;;;:::o;9514:76::-;9550:7;9579:5;9568:16;;9514:76;;;:::o;9596:120::-;9668:23;9685:5;9668:23;:::i;:::-;9661:5;9658:34;9648:62;;9706:1;9703;9696:12;9648:62;9596:120;:::o;9722:137::-;9767:5;9805:6;9792:20;9783:29;;9821:32;9847:5;9821:32;:::i;:::-;9722:137;;;;:::o;9865:472::-;9932:6;9940;9989:2;9977:9;9968:7;9964:23;9960:32;9957:119;;;9995:79;;:::i;:::-;9957:119;10115:1;10140:53;10185:7;10176:6;10165:9;10161:22;10140:53;:::i;:::-;10130:63;;10086:117;10242:2;10268:52;10312:7;10303:6;10292:9;10288:22;10268:52;:::i;:::-;10258:62;;10213:117;9865:472;;;;;:::o;10343:619::-;10420:6;10428;10436;10485:2;10473:9;10464:7;10460:23;10456:32;10453:119;;;10491:79;;:::i;:::-;10453:119;10611:1;10636:53;10681:7;10672:6;10661:9;10657:22;10636:53;:::i;:::-;10626:63;;10582:117;10738:2;10764:53;10809:7;10800:6;10789:9;10785:22;10764:53;:::i;:::-;10754:63;;10709:118;10866:2;10892:53;10937:7;10928:6;10917:9;10913:22;10892:53;:::i;:::-;10882:63;;10837:118;10343:619;;;;;:::o;10968:117::-;11077:1;11074;11067:12;11091:117;11200:1;11197;11190:12;11214:117;11323:1;11320;11313:12;11354:568;11427:8;11437:6;11487:3;11480:4;11472:6;11468:17;11464:27;11454:122;;11495:79;;:::i;:::-;11454:122;11608:6;11595:20;11585:30;;11638:18;11630:6;11627:30;11624:117;;;11660:79;;:::i;:::-;11624:117;11774:4;11766:6;11762:17;11750:29;;11828:3;11820:4;11812:6;11808:17;11798:8;11794:32;11791:41;11788:128;;;11835:79;;:::i;:::-;11788:128;11354:568;;;;;:::o;11945:::-;12018:8;12028:6;12078:3;12071:4;12063:6;12059:17;12055:27;12045:122;;12086:79;;:::i;:::-;12045:122;12199:6;12186:20;12176:30;;12229:18;12221:6;12218:30;12215:117;;;12251:79;;:::i;:::-;12215:117;12365:4;12357:6;12353:17;12341:29;;12419:3;12411:4;12403:6;12399:17;12389:8;12385:32;12382:41;12379:128;;;12426:79;;:::i;:::-;12379:128;11945:568;;;;;:::o;12519:934::-;12641:6;12649;12657;12665;12714:2;12702:9;12693:7;12689:23;12685:32;12682:119;;;12720:79;;:::i;:::-;12682:119;12868:1;12857:9;12853:17;12840:31;12898:18;12890:6;12887:30;12884:117;;;12920:79;;:::i;:::-;12884:117;13033:80;13105:7;13096:6;13085:9;13081:22;13033:80;:::i;:::-;13015:98;;;;12811:312;13190:2;13179:9;13175:18;13162:32;13221:18;13213:6;13210:30;13207:117;;;13243:79;;:::i;:::-;13207:117;13356:80;13428:7;13419:6;13408:9;13404:22;13356:80;:::i;:::-;13338:98;;;;13133:313;12519:934;;;;;;;:::o;13459:474::-;13527:6;13535;13584:2;13572:9;13563:7;13559:23;13555:32;13552:119;;;13590:79;;:::i;:::-;13552:119;13710:1;13735:53;13780:7;13771:6;13760:9;13756:22;13735:53;:::i;:::-;13725:63;;13681:117;13837:2;13863:53;13908:7;13899:6;13888:9;13884:22;13863:53;:::i;:::-;13853:63;;13808:118;13459:474;;;;;:::o;13939:180::-;13987:77;13984:1;13977:88;14084:4;14081:1;14074:15;14108:4;14105:1;14098:15;14125:320;14169:6;14206:1;14200:4;14196:12;14186:22;;14253:1;14247:4;14243:12;14274:18;14264:81;;14330:4;14322:6;14318:17;14308:27;;14264:81;14392:2;14384:6;14381:14;14361:18;14358:38;14355:84;;14411:18;;:::i;:::-;14355:84;14176:269;14125:320;;;:::o;14451:220::-;14591:34;14587:1;14579:6;14575:14;14568:58;14660:3;14655:2;14647:6;14643:15;14636:28;14451:220;:::o;14677:366::-;14819:3;14840:67;14904:2;14899:3;14840:67;:::i;:::-;14833:74;;14916:93;15005:3;14916:93;:::i;:::-;15034:2;15029:3;15025:12;15018:19;;14677:366;;;:::o;15049:419::-;15215:4;15253:2;15242:9;15238:18;15230:26;;15302:9;15296:4;15292:20;15288:1;15277:9;15273:17;15266:47;15330:131;15456:4;15330:131;:::i;:::-;15322:139;;15049:419;;;:::o;15474:180::-;15522:77;15519:1;15512:88;15619:4;15616:1;15609:15;15643:4;15640:1;15633:15;15660:102;15702:8;15749:5;15746:1;15742:13;15721:34;;15660:102;;;:::o;15768:848::-;15829:5;15836:4;15860:6;15851:15;;15884:5;15875:14;;15898:712;15919:1;15909:8;15906:15;15898:712;;;16014:4;16009:3;16005:14;15999:4;15996:24;15993:50;;;16023:18;;:::i;:::-;15993:50;16073:1;16063:8;16059:16;16056:451;;;16488:4;16481:5;16477:16;16468:25;;16056:451;16538:4;16532;16528:15;16520:23;;16568:32;16591:8;16568:32;:::i;:::-;16556:44;;15898:712;;;15768:848;;;;;;;:::o;16622:1073::-;16676:5;16867:8;16857:40;;16888:1;16879:10;;16890:5;;16857:40;16916:4;16906:36;;16933:1;16924:10;;16935:5;;16906:36;17002:4;17050:1;17045:27;;;;17086:1;17081:191;;;;16995:277;;17045:27;17063:1;17054:10;;17065:5;;;17081:191;17126:3;17116:8;17113:17;17110:43;;;17133:18;;:::i;:::-;17110:43;17182:8;17179:1;17175:16;17166:25;;17217:3;17210:5;17207:14;17204:40;;;17224:18;;:::i;:::-;17204:40;17257:5;;;16995:277;;17381:2;17371:8;17368:16;17362:3;17356:4;17353:13;17349:36;17331:2;17321:8;17318:16;17313:2;17307:4;17304:12;17300:35;17284:111;17281:246;;;17437:8;17431:4;17427:19;17418:28;;17472:3;17465:5;17462:14;17459:40;;;17479:18;;:::i;:::-;17459:40;17512:5;;17281:246;17552:42;17590:3;17580:8;17574:4;17571:1;17552:42;:::i;:::-;17537:57;;;;17626:4;17621:3;17617:14;17610:5;17607:25;17604:51;;;17635:18;;:::i;:::-;17604:51;17684:4;17677:5;17673:16;17664:25;;16622:1073;;;;;;:::o;17701:285::-;17761:5;17785:23;17803:4;17785:23;:::i;:::-;17777:31;;17829:27;17847:8;17829:27;:::i;:::-;17817:39;;17875:104;17912:66;17902:8;17896:4;17875:104;:::i;:::-;17866:113;;17701:285;;;;:::o;17992:410::-;18032:7;18055:20;18073:1;18055:20;:::i;:::-;18050:25;;18089:20;18107:1;18089:20;:::i;:::-;18084:25;;18144:1;18141;18137:9;18166:30;18184:11;18166:30;:::i;:::-;18155:41;;18345:1;18336:7;18332:15;18329:1;18326:22;18306:1;18299:9;18279:83;18256:139;;18375:18;;:::i;:::-;18256:139;18040:362;17992:410;;;;:::o;18408:180::-;18456:77;18453:1;18446:88;18553:4;18550:1;18543:15;18577:4;18574:1;18567:15;18594:176;18626:1;18643:20;18661:1;18643:20;:::i;:::-;18638:25;;18677:20;18695:1;18677:20;:::i;:::-;18672:25;;18716:1;18706:35;;18721:18;;:::i;:::-;18706:35;18762:1;18759;18755:9;18750:14;;18594:176;;;;:::o;18776:194::-;18816:4;18836:20;18854:1;18836:20;:::i;:::-;18831:25;;18870:20;18888:1;18870:20;:::i;:::-;18865:25;;18914:1;18911;18907:9;18899:17;;18938:1;18932:4;18929:11;18926:37;;;18943:18;;:::i;:::-;18926:37;18776:194;;;;:::o;18976:332::-;19097:4;19135:2;19124:9;19120:18;19112:26;;19148:71;19216:1;19205:9;19201:17;19192:6;19148:71;:::i;:::-;19229:72;19297:2;19286:9;19282:18;19273:6;19229:72;:::i;:::-;18976:332;;;;;:::o;19314:137::-;19368:5;19399:6;19393:13;19384:22;;19415:30;19439:5;19415:30;:::i;:::-;19314:137;;;;:::o;19457:345::-;19524:6;19573:2;19561:9;19552:7;19548:23;19544:32;19541:119;;;19579:79;;:::i;:::-;19541:119;19699:1;19724:61;19777:7;19768:6;19757:9;19753:22;19724:61;:::i;:::-;19714:71;;19670:125;19457:345;;;;:::o;19808:221::-;19948:34;19944:1;19936:6;19932:14;19925:58;20017:4;20012:2;20004:6;20000:15;19993:29;19808:221;:::o;20035:366::-;20177:3;20198:67;20262:2;20257:3;20198:67;:::i;:::-;20191:74;;20274:93;20363:3;20274:93;:::i;:::-;20392:2;20387:3;20383:12;20376:19;;20035:366;;;:::o;20407:419::-;20573:4;20611:2;20600:9;20596:18;20588:26;;20660:9;20654:4;20650:20;20646:1;20635:9;20631:17;20624:47;20688:131;20814:4;20688:131;:::i;:::-;20680:139;;20407:419;;;:::o;20832:222::-;20972:34;20968:1;20960:6;20956:14;20949:58;21041:5;21036:2;21028:6;21024:15;21017:30;20832:222;:::o;21060:366::-;21202:3;21223:67;21287:2;21282:3;21223:67;:::i;:::-;21216:74;;21299:93;21388:3;21299:93;:::i;:::-;21417:2;21412:3;21408:12;21401:19;;21060:366;;;:::o;21432:419::-;21598:4;21636:2;21625:9;21621:18;21613:26;;21685:9;21679:4;21675:20;21671:1;21660:9;21656:17;21649:47;21713:131;21839:4;21713:131;:::i;:::-;21705:139;;21432:419;;;:::o;21857:224::-;21997:34;21993:1;21985:6;21981:14;21974:58;22066:7;22061:2;22053:6;22049:15;22042:32;21857:224;:::o;22087:366::-;22229:3;22250:67;22314:2;22309:3;22250:67;:::i;:::-;22243:74;;22326:93;22415:3;22326:93;:::i;:::-;22444:2;22439:3;22435:12;22428:19;;22087:366;;;:::o;22459:419::-;22625:4;22663:2;22652:9;22648:18;22640:26;;22712:9;22706:4;22702:20;22698:1;22687:9;22683:17;22676:47;22740:131;22866:4;22740:131;:::i;:::-;22732:139;;22459:419;;;:::o;22884:180::-;22932:77;22929:1;22922:88;23029:4;23026:1;23019:15;23053:4;23050:1;23043:15;23070:233;23109:3;23132:24;23150:5;23132:24;:::i;:::-;23123:33;;23178:66;23171:5;23168:77;23165:103;;23248:18;;:::i;:::-;23165:103;23295:1;23288:5;23284:13;23277:20;;23070:233;;;:::o;23309:225::-;23449:34;23445:1;23437:6;23433:14;23426:58;23518:8;23513:2;23505:6;23501:15;23494:33;23309:225;:::o;23540:366::-;23682:3;23703:67;23767:2;23762:3;23703:67;:::i;:::-;23696:74;;23779:93;23868:3;23779:93;:::i;:::-;23897:2;23892:3;23888:12;23881:19;;23540:366;;;:::o;23912:419::-;24078:4;24116:2;24105:9;24101:18;24093:26;;24165:9;24159:4;24155:20;24151:1;24140:9;24136:17;24129:47;24193:131;24319:4;24193:131;:::i;:::-;24185:139;;23912:419;;;:::o;24337:185::-;24377:1;24394:20;24412:1;24394:20;:::i;:::-;24389:25;;24428:20;24446:1;24428:20;:::i;:::-;24423:25;;24467:1;24457:35;;24472:18;;:::i;:::-;24457:35;24514:1;24511;24507:9;24502:14;;24337:185;;;;:::o;24528:182::-;24668:34;24664:1;24656:6;24652:14;24645:58;24528:182;:::o;24716:366::-;24858:3;24879:67;24943:2;24938:3;24879:67;:::i;:::-;24872:74;;24955:93;25044:3;24955:93;:::i;:::-;25073:2;25068:3;25064:12;25057:19;;24716:366;;;:::o;25088:419::-;25254:4;25292:2;25281:9;25277:18;25269:26;;25341:9;25335:4;25331:20;25327:1;25316:9;25312:17;25305:47;25369:131;25495:4;25369:131;:::i;:::-;25361:139;;25088:419;;;:::o;25513:191::-;25553:3;25572:20;25590:1;25572:20;:::i;:::-;25567:25;;25606:20;25624:1;25606:20;:::i;:::-;25601:25;;25649:1;25646;25642:9;25635:16;;25670:3;25667:1;25664:10;25661:36;;;25677:18;;:::i;:::-;25661:36;25513:191;;;;:::o;25710:171::-;25850:23;25846:1;25838:6;25834:14;25827:47;25710:171;:::o;25887:366::-;26029:3;26050:67;26114:2;26109:3;26050:67;:::i;:::-;26043:74;;26126:93;26215:3;26126:93;:::i;:::-;26244:2;26239:3;26235:12;26228:19;;25887:366;;;:::o;26259:419::-;26425:4;26463:2;26452:9;26448:18;26440:26;;26512:9;26506:4;26502:20;26498:1;26487:9;26483:17;26476:47;26540:131;26666:4;26540:131;:::i;:::-;26532:139;;26259:419;;;:::o;26684:174::-;26824:26;26820:1;26812:6;26808:14;26801:50;26684:174;:::o;26864:366::-;27006:3;27027:67;27091:2;27086:3;27027:67;:::i;:::-;27020:74;;27103:93;27192:3;27103:93;:::i;:::-;27221:2;27216:3;27212:12;27205:19;;26864:366;;;:::o;27236:419::-;27402:4;27440:2;27429:9;27425:18;27417:26;;27489:9;27483:4;27479:20;27475:1;27464:9;27460:17;27453:47;27517:131;27643:4;27517:131;:::i;:::-;27509:139;;27236:419;;;:::o;27661:228::-;27696:3;27719:23;27736:5;27719:23;:::i;:::-;27710:32;;27764:66;27757:5;27754:77;27751:103;;27834:18;;:::i;:::-;27751:103;27877:5;27874:1;27870:13;27863:20;;27661:228;;;:::o;27895:664::-;28100:4;28138:3;28127:9;28123:19;28115:27;;28152:71;28220:1;28209:9;28205:17;28196:6;28152:71;:::i;:::-;28233:72;28301:2;28290:9;28286:18;28277:6;28233:72;:::i;:::-;28315;28383:2;28372:9;28368:18;28359:6;28315:72;:::i;:::-;28397;28465:2;28454:9;28450:18;28441:6;28397:72;:::i;:::-;28479:73;28547:3;28536:9;28532:19;28523:6;28479:73;:::i;:::-;27895:664;;;;;;;;:::o;28565:180::-;28613:77;28610:1;28603:88;28710:4;28707:1;28700:15;28734:4;28731:1;28724:15;28751:143;28808:5;28839:6;28833:13;28824:22;;28855:33;28882:5;28855:33;:::i;:::-;28751:143;;;;:::o;28900:351::-;28970:6;29019:2;29007:9;28998:7;28994:23;28990:32;28987:119;;;29025:79;;:::i;:::-;28987:119;29145:1;29170:64;29226:7;29217:6;29206:9;29202:22;29170:64;:::i;:::-;29160:74;;29116:128;28900:351;;;;:::o;29257:85::-;29302:7;29331:5;29320:16;;29257:85;;;:::o;29348:158::-;29406:9;29439:61;29457:42;29466:32;29492:5;29466:32;:::i;:::-;29457:42;:::i;:::-;29439:61;:::i;:::-;29426:74;;29348:158;;;:::o;29512:147::-;29607:45;29646:5;29607:45;:::i;:::-;29602:3;29595:58;29512:147;;:::o;29665:114::-;29732:6;29766:5;29760:12;29750:22;;29665:114;;;:::o;29785:184::-;29884:11;29918:6;29913:3;29906:19;29958:4;29953:3;29949:14;29934:29;;29785:184;;;;:::o;29975:132::-;30042:4;30065:3;30057:11;;30095:4;30090:3;30086:14;30078:22;;29975:132;;;:::o;30113:108::-;30190:24;30208:5;30190:24;:::i;:::-;30185:3;30178:37;30113:108;;:::o;30227:179::-;30296:10;30317:46;30359:3;30351:6;30317:46;:::i;:::-;30395:4;30390:3;30386:14;30372:28;;30227:179;;;;:::o;30412:113::-;30482:4;30514;30509:3;30505:14;30497:22;;30412:113;;;:::o;30561:732::-;30680:3;30709:54;30757:5;30709:54;:::i;:::-;30779:86;30858:6;30853:3;30779:86;:::i;:::-;30772:93;;30889:56;30939:5;30889:56;:::i;:::-;30968:7;30999:1;30984:284;31009:6;31006:1;31003:13;30984:284;;;31085:6;31079:13;31112:63;31171:3;31156:13;31112:63;:::i;:::-;31105:70;;31198:60;31251:6;31198:60;:::i;:::-;31188:70;;31044:224;31031:1;31028;31024:9;31019:14;;30984:284;;;30988:14;31284:3;31277:10;;30685:608;;;30561:732;;;;:::o;31299:831::-;31562:4;31600:3;31589:9;31585:19;31577:27;;31614:71;31682:1;31671:9;31667:17;31658:6;31614:71;:::i;:::-;31695:80;31771:2;31760:9;31756:18;31747:6;31695:80;:::i;:::-;31822:9;31816:4;31812:20;31807:2;31796:9;31792:18;31785:48;31850:108;31953:4;31944:6;31850:108;:::i;:::-;31842:116;;31968:72;32036:2;32025:9;32021:18;32012:6;31968:72;:::i;:::-;32050:73;32118:3;32107:9;32103:19;32094:6;32050:73;:::i;:::-;31299:831;;;;;;;;:::o;32136:807::-;32385:4;32423:3;32412:9;32408:19;32400:27;;32437:71;32505:1;32494:9;32490:17;32481:6;32437:71;:::i;:::-;32518:72;32586:2;32575:9;32571:18;32562:6;32518:72;:::i;:::-;32600:80;32676:2;32665:9;32661:18;32652:6;32600:80;:::i;:::-;32690;32766:2;32755:9;32751:18;32742:6;32690:80;:::i;:::-;32780:73;32848:3;32837:9;32833:19;32824:6;32780:73;:::i;:::-;32863;32931:3;32920:9;32916:19;32907:6;32863:73;:::i;:::-;32136:807;;;;;;;;;:::o;32949:143::-;33006:5;33037:6;33031:13;33022:22;;33053:33;33080:5;33053:33;:::i;:::-;32949:143;;;;:::o;33098:663::-;33186:6;33194;33202;33251:2;33239:9;33230:7;33226:23;33222:32;33219:119;;;33257:79;;:::i;:::-;33219:119;33377:1;33402:64;33458:7;33449:6;33438:9;33434:22;33402:64;:::i;:::-;33392:74;;33348:128;33515:2;33541:64;33597:7;33588:6;33577:9;33573:22;33541:64;:::i;:::-;33531:74;;33486:129;33654:2;33680:64;33736:7;33727:6;33716:9;33712:22;33680:64;:::i;:::-;33670:74;;33625:129;33098:663;;;;;:::o
Metadata Hash
ipfs://d3e8b40e9ad5753592eaa803912e15d755deef302d7dd29b1d121df41026791b