ERC-20
Overview
Max Total Supply
1,000,000,000 Styrant
Holders
23
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
11,273,561.587012279517051894 StyrantValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Styrant
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-03 */ // SPDX-License-Identifier: MIT /** ░█▀▀░█▀█░█▀█░▀█▀░█▀█░░░▀█▀░█░█░█▀▄░█▀█░█▀█░▀█▀ ░▀▀█░█▀█░█░█░░█░░█▀█░░░░█░░░█░░█▀▄░█▀█░█░█░░█░ ░▀▀▀░▀░▀░▀░▀░░▀░░▀░▀░░░░▀░░░▀░░▀░▀░▀░▀░▀░▀░░▀░ **/ //---------------------------------------------// // Telegram : https://t.me/SantaTyrant // // Twitter : https://twitter.com/santatyrant // // Website : https://santatyrant.com/ // //------------------------------------------// // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.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 substraction 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.0 (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 v4.4.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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public 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 v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (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 v4.4.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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), 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}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - 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) { _approve(_msgSender(), spender, _allowances[_msgSender()][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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; if (amount > 0) { emit Transfer(sender, recipient, amount);} _afterTokenTransfer(sender, recipient, 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 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: contracts/Styrant.sol pragma solidity ^0.8.16; contract Styrant is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; struct BuyFee { uint16 marketingFee; uint16 buybackFee; } struct SellFee { uint16 marketingFee; uint16 buybackFee; } bool private swapping; BuyFee public buyFee; SellFee public sellFee; uint256 public swapTokensAtAmount = 2 * 10**4 * (10**18); uint256 public maxBuyAmount = 5 * 10**7 * 10**18; // 5% of the supply per buy uint256 public maxSellAmount = 5 * 10**7 * 10**18; //5% of the supply per sell uint256 public maxWalletAmount = 5 * 10**7 * 10**18; // 5% of the supply (antiwhale) uint16 private totalBuyFee; uint16 private totalSellFee; uint256 public launchTime; uint256 public buybackThreshold; bool public swapEnabled; bool private isTradingEnabled; address payable marketingWallet = payable(address(0x7100d00D5e2c8B3D9c5746662f2840dF618c39cC)); // devWalle (replace 0x183 with your wallet) mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedFromLimit; mapping(address => bool) public automatedMarketMakerPairs; mapping(address => bool) public isSniper; event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event BuybackAndBurn(uint256 indexed eth); modifier lockTheSwap() { swapping = true; _; swapping = false; } constructor() ERC20("Santa Tyrant", "Styrant") { // using 1000 as divisor for fee calculation // buyFee buyFee.marketingFee = 5; //0.5% dev fee buyFee.buybackFee = 5; // 0.5% buyback Fee totalBuyFee = 10; //1% total buy Fee //sellFee sellFee.marketingFee = 5; //0.5% dev fee sellFee.buybackFee = 5; // 0.5% buyback Fee totalSellFee = 10; // 1% total sell fee buybackThreshold = 0.1 ether; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D// Uniswap V2 Router ); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); swapEnabled = true; /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), 1 * 10**9 * (10**18)); // 1 Billion Tokens } receive() external payable {} function updateRouter(address newAddress) external onlyOwner { require(newAddress != address(uniswapV2Router), "ERC20: The router already has that address"); uniswapV2Router = IUniswapV2Router02(newAddress); address get_pair = IUniswapV2Factory(uniswapV2Router.factory()).getPair(address(this), uniswapV2Router.WETH()); if (get_pair == address(0)) { uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); } else { uniswapV2Pair = get_pair; } } function excludeFromFees(address account, bool excluded) public onlyOwner { require( _isExcludedFromFees[account] != excluded, "ERC20: Account is already the value of 'excluded'" ); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function excludefromLimit(address account, bool excluded) external onlyOwner { _isExcludedFromLimit[account] = excluded; } function enableTrading() external onlyOwner { isTradingEnabled = true; launchTime = block.timestamp; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "ERC20: The Uniswap pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "ERC20: Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } // function to set threshold for eth conversion function setSwapTokensAtAmount(uint256 amount) external onlyOwner { swapTokensAtAmount = amount * 10**18; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "Token: transfer from the zero address"); require(to != address(0), "Token: transfer to the zero address"); require(!isSniper[from], "Token: sniper can't trade"); require( isTradingEnabled || _isExcludedFromFees[from], "Trading not enabled yet" ); if (amount == 0) { super._transfer(from, to, 0); return; } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= swapTokensAtAmount; if (!swapping && from != uniswapV2Pair) { uint256 balance = address(this).balance; if (balance > buybackThreshold) { buybackAndBurnTokens(buybackThreshold, address(0xdead)); } } if ( swapEnabled && !swapping && from != uniswapV2Pair && overMinimumTokenBalance ) { uint256 swapTokens = contractTokenBalance; swapTokensForBuybackAndMarketing(swapTokens); } bool takeFee = true; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to] ) { takeFee = false; } if (takeFee) { uint256 fees; if (automatedMarketMakerPairs[to]) { fees = totalSellFee; } else if (automatedMarketMakerPairs[from]) { fees = totalBuyFee; } if (!_isExcludedFromLimit[from] && !_isExcludedFromLimit[to]) { if (automatedMarketMakerPairs[to]) { require(amount <= maxSellAmount, "Sell exceeds per transaction limit"); } else if (automatedMarketMakerPairs[from]) { require(amount <= maxBuyAmount, "Buy exceeds per transaction limit"); if (block.timestamp - launchTime < 120){ isSniper[to] = true; } } if (!automatedMarketMakerPairs[to]) { require( balanceOf(to) + amount <= maxWalletAmount, "Antiwhale: Balance exceeds limit" ); } } uint256 feeAmount = amount.mul(fees).div(1000); amount = amount.sub(feeAmount); super._transfer(from, address(this), feeAmount); } super._transfer(from, to, amount); } function swapTokensForBuybackAndMarketing (uint256 tokens) private lockTheSwap { uint256 initialBalance = address(this).balance; swapTokensForEth(tokens); uint256 newBalance = address(this).balance.sub(initialBalance); uint256 marketingShare = newBalance.mul(buyFee.marketingFee + sellFee.marketingFee) .div(totalBuyFee + totalSellFee); (bool os, ) = payable(marketingWallet).call{value: marketingShare}(""); require(os,"eth transfer to marketing wallet failed"); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function buybackAndBurnTokens(uint256 amount, address to) private lockTheSwap { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, path, to, block.timestamp ); emit BuybackAndBurn(amount); } }
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":"eth","type":"uint256"}],"name":"BuybackAndBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"buybackFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludefromLimit","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"buybackFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405269043c33c1937564800000600a556a295be96e64066972000000600b556a295be96e64066972000000600c556a295be96e64066972000000600d55737100d00d5e2c8b3d9c5746662f2840df618c39cc601160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000a157600080fd5b506040518060400160405280600c81526020017f53616e746120547972616e7400000000000000000000000000000000000000008152506040518060400160405280600781526020017f53747972616e740000000000000000000000000000000000000000000000000081525081600390816200011f919062000ccd565b50806004908162000131919062000ccd565b5050506200015462000148620004d460201b60201c565b620004dc60201b60201c565b6005600860000160006101000a81548161ffff021916908361ffff1602179055506005600860000160026101000a81548161ffff021916908361ffff160217905550600a600e60006101000a81548161ffff021916908361ffff1602179055506005600960000160006101000a81548161ffff021916908361ffff1602179055506005600960000160026101000a81548161ffff021916908361ffff160217905550600a600e60026101000a81548161ffff021916908361ffff16021790555067016345785d8a00006010819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b0919062000e1e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000e1e565b6040518363ffffffff1660e01b81526004016200035d92919062000e61565b6020604051808303816000875af11580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a3919062000e1e565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200043a816001620005a260201b60201c565b6200045c6200044e620006d860201b60201c565b60016200070260201b60201c565b6200046f3060016200070260201b60201c565b6200048461dead60016200070260201b60201c565b6001601160006101000a81548160ff021916908315150217905550620004cc620004b3620006d860201b60201c565b6b033b2e3c9fd0803ce8000000620008d160201b60201c565b505062001185565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000637576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062e9062000f15565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000712620004d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000738620006d860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000791576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007889062000f87565b60405180910390fd5b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000826576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200081d906200101f565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008c591906200105e565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000943576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093a90620010cb565b60405180910390fd5b620009576000838362000a4960201b60201c565b80600260008282546200096b91906200111c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009c291906200111c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a29919062001168565b60405180910390a362000a456000838362000a4e60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ad557607f821691505b60208210810362000aeb5762000aea62000a8d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b16565b62000b61868362000b16565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000bae62000ba862000ba28462000b79565b62000b83565b62000b79565b9050919050565b6000819050919050565b62000bca8362000b8d565b62000be262000bd98262000bb5565b84845462000b23565b825550505050565b600090565b62000bf962000bea565b62000c0681848462000bbf565b505050565b5b8181101562000c2e5762000c2260008262000bef565b60018101905062000c0c565b5050565b601f82111562000c7d5762000c478162000af1565b62000c528462000b06565b8101602085101562000c62578190505b62000c7a62000c718562000b06565b83018262000c0b565b50505b505050565b600082821c905092915050565b600062000ca26000198460080262000c82565b1980831691505092915050565b600062000cbd838362000c8f565b9150826002028217905092915050565b62000cd88262000a53565b67ffffffffffffffff81111562000cf45762000cf362000a5e565b5b62000d00825462000abc565b62000d0d82828562000c32565b600060209050601f83116001811462000d45576000841562000d30578287015190505b62000d3c858262000caf565b86555062000dac565b601f19841662000d558662000af1565b60005b8281101562000d7f5784890151825560018201915060208501945060208101905062000d58565b8683101562000d9f578489015162000d9b601f89168262000c8f565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000de68262000db9565b9050919050565b62000df88162000dd9565b811462000e0457600080fd5b50565b60008151905062000e188162000ded565b92915050565b60006020828403121562000e375762000e3662000db4565b5b600062000e478482850162000e07565b91505092915050565b62000e5b8162000dd9565b82525050565b600060408201905062000e78600083018562000e50565b62000e87602083018462000e50565b9392505050565b600082825260208201905092915050565b7f45524332303a204175746f6d61746564206d61726b6574206d616b657220706160008201527f697220697320616c72656164792073657420746f20746861742076616c756500602082015250565b600062000efd603f8362000e8e565b915062000f0a8262000e9f565b604082019050919050565b6000602082019050818103600083015262000f308162000eee565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f6f60208362000e8e565b915062000f7c8262000f37565b602082019050919050565b6000602082019050818103600083015262000fa28162000f60565b9050919050565b7f45524332303a204163636f756e7420697320616c72656164792074686520766160008201527f6c7565206f6620276578636c7564656427000000000000000000000000000000602082015250565b60006200100760318362000e8e565b9150620010148262000fa9565b604082019050919050565b600060208201905081810360008301526200103a8162000ff8565b9050919050565b60008115159050919050565b620010588162001041565b82525050565b60006020820190506200107560008301846200104d565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010b3601f8362000e8e565b9150620010c0826200107b565b602082019050919050565b60006020820190508181036000830152620010e681620010a4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011298262000b79565b9150620011368362000b79565b9250828201905080821115620011515762001150620010ed565b5b92915050565b620011628162000b79565b82525050565b60006020820190506200117f600083018462001157565b92915050565b61446e80620011956000396000f3fe6080604052600436106101fd5760003560e01c80637537a47f1161010d578063a9059cbb116100a0578063c02466681161006f578063c02466681461075e578063c851cc3214610787578063dd62ed3e146107b0578063e2f45605146107ed578063f2fde38b1461081857610204565b8063a9059cbb14610690578063aa4bde28146106cd578063afa4f3b2146106f8578063b62496f51461072157610204565b80638da5cb5b116100dc5780638da5cb5b146105d457806395d89b41146105ff5780639a7a23d61461062a578063a457c2d71461065357610204565b80637537a47f1461053e578063790ca4131461056757806388e765ff146105925780638a8c523c146105bd57610204565b8063313ce567116101905780634fbee1931161015f5780634fbee1931461045757806366d602ae146104945780636ddd1713146104bf57806370a08231146104ea578063715018a61461052757610204565b8063313ce5671461039857806339509351146103c3578063470624021461040057806349bd5a5e1461042c57610204565b806318160ddd116101cc57806318160ddd146102d9578063220923e31461030457806323b872dd1461032f5780632b14ca561461036c57610204565b806306fdde0314610209578063095ea7b3146102345780630f3a325f146102715780631694505e146102ae57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610841565b60405161022b919061305e565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190613119565b6108d3565b6040516102689190613174565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061318f565b6108f1565b6040516102a59190613174565b60405180910390f35b3480156102ba57600080fd5b506102c3610911565b6040516102d0919061321b565b60405180910390f35b3480156102e557600080fd5b506102ee610937565b6040516102fb9190613245565b60405180910390f35b34801561031057600080fd5b50610319610941565b6040516103269190613245565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613260565b610947565b6040516103639190613174565b60405180910390f35b34801561037857600080fd5b50610381610a3f565b60405161038f9291906132d0565b60405180910390f35b3480156103a457600080fd5b506103ad610a6d565b6040516103ba9190613315565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190613119565b610a76565b6040516103f79190613174565b60405180910390f35b34801561040c57600080fd5b50610415610b22565b6040516104239291906132d0565b60405180910390f35b34801561043857600080fd5b50610441610b50565b60405161044e919061333f565b60405180910390f35b34801561046357600080fd5b5061047e6004803603810190610479919061318f565b610b76565b60405161048b9190613174565b60405180910390f35b3480156104a057600080fd5b506104a9610bcc565b6040516104b69190613245565b60405180910390f35b3480156104cb57600080fd5b506104d4610bd2565b6040516104e19190613174565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c919061318f565b610be5565b60405161051e9190613245565b60405180910390f35b34801561053357600080fd5b5061053c610c2d565b005b34801561054a57600080fd5b5061056560048036038101906105609190613386565b610cb5565b005b34801561057357600080fd5b5061057c610d8c565b6040516105899190613245565b60405180910390f35b34801561059e57600080fd5b506105a7610d92565b6040516105b49190613245565b60405180910390f35b3480156105c957600080fd5b506105d2610d98565b005b3480156105e057600080fd5b506105e9610e38565b6040516105f6919061333f565b60405180910390f35b34801561060b57600080fd5b50610614610e62565b604051610621919061305e565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190613386565b610ef4565b005b34801561065f57600080fd5b5061067a60048036038101906106759190613119565b61100e565b6040516106879190613174565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b29190613119565b6110f9565b6040516106c49190613174565b60405180910390f35b3480156106d957600080fd5b506106e2611117565b6040516106ef9190613245565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906133c6565b61111d565b005b34801561072d57600080fd5b506107486004803603810190610743919061318f565b6111b6565b6040516107559190613174565b60405180910390f35b34801561076a57600080fd5b5061078560048036038101906107809190613386565b6111d6565b005b34801561079357600080fd5b506107ae60048036038101906107a9919061318f565b61138d565b005b3480156107bc57600080fd5b506107d760048036038101906107d291906133f3565b6118d7565b6040516107e49190613245565b60405180910390f35b3480156107f957600080fd5b5061080261195e565b60405161080f9190613245565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a919061318f565b611964565b005b60606003805461085090613462565b80601f016020809104026020016040519081016040528092919081815260200182805461087c90613462565b80156108c95780601f1061089e576101008083540402835291602001916108c9565b820191906000526020600020905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b60006108e76108e0611a5b565b8484611a63565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60105481565b6000610954848484611c2c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061099f611a5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1690613505565b60405180910390fd5b610a3385610a2b611a5b565b858403611a63565b60019150509392505050565b60098060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b60006012905090565b6000610b18610a83611a5b565b848460016000610a91611a5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b139190613554565b611a63565b6001905092915050565b60088060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c5481565b601160009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c35611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610c53610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca0906135d4565b60405180910390fd5b610cb36000612487565b565b610cbd611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610cdb610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d28906135d4565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600b5481565b610da0611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610dbe610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b906135d4565b60405180910390fd5b6001601160016101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e7190613462565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9d90613462565b8015610eea5780601f10610ebf57610100808354040283529160200191610eea565b820191906000526020600020905b815481529060010190602001808311610ecd57829003601f168201915b5050505050905090565b610efc611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610f1a610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f67906135d4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff79061368c565b60405180910390fd5b61100a828261254d565b5050565b6000806001600061101d611a5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d19061371e565b60405180910390fd5b6110ee6110e5611a5b565b85858403611a63565b600191505092915050565b600061110d611106611a5b565b8484611c2c565b6001905092915050565b600d5481565b611125611a5b565b73ffffffffffffffffffffffffffffffffffffffff16611143610e38565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611190906135d4565b60405180910390fd5b670de0b6b3a7640000816111ad919061373e565b600a8190555050565b60146020528060005260406000206000915054906101000a900460ff1681565b6111de611a5b565b73ffffffffffffffffffffffffffffffffffffffff166111fc610e38565b73ffffffffffffffffffffffffffffffffffffffff1614611252576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611249906135d4565b60405180910390fd5b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db906137f2565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113819190613174565b60405180910390a25050565b611395611a5b565b73ffffffffffffffffffffffffffffffffffffffff166113b3610e38565b73ffffffffffffffffffffffffffffffffffffffff1614611409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611400906135d4565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090613884565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156d91906138b9565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161a91906138b9565b6040518363ffffffff1660e01b81526004016116379291906138e6565b602060405180830381865afa158015611654573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167891906138b9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361189157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173f91906138b9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ec91906138b9565b6040518363ffffffff1660e01b81526004016118099291906138e6565b6020604051808303816000875af1158015611828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184c91906138b9565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118d3565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b61196c611a5b565b73ffffffffffffffffffffffffffffffffffffffff1661198a610e38565b73ffffffffffffffffffffffffffffffffffffffff16146119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d7906135d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613981565b60405180910390fd5b611a5881612487565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac990613a13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3890613aa5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c1f9190613245565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290613b37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190613bc9565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e90613c35565b60405180910390fd5b601160019054906101000a900460ff1680611dfb5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190613ca1565b60405180910390fd5b60008103611e5357611e4e83836000612680565b612482565b6000611e5e30610be5565b90506000600a548210159050600760149054906101000a900460ff16158015611ed55750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15611efa576000479050601054811115611ef857611ef760105461dead612909565b5b505b601160009054906101000a900460ff168015611f235750600760149054906101000a900460ff16155b8015611f7d5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611f865750805b15611f9b576000829050611f9981612b82565b505b600060019050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120425750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561204c57600090505b8015612473576000601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120c257600e60029054906101000a900461ffff1661ffff16905061212d565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561212c57600e60009054906101000a900461ffff1661ffff1690505b5b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121d15750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561242557601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561227257600c5485111561226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490613d33565b60405180910390fd5b61237a565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561237957600b54851115612309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230090613dc5565b60405180910390fd5b6078600f54426123199190613de5565b1015612378576001601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661242457600d54856123d888610be5565b6123e29190613554565b1115612423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241a90613e65565b60405180910390fd5b5b5b600061244e6103e86124408489612d3f90919063ffffffff16565b612d5590919063ffffffff16565b90506124638187612d6b90919063ffffffff16565b9550612470883083612680565b50505b61247e868686612680565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036125df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d690613ef7565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e690613f89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361275e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127559061401b565b60405180910390fd5b612769838383612d81565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156127ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e6906140ad565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128829190613554565b9250508190555060008211156128f8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128ef9190613245565b60405180910390a35b612903848484612d86565b50505050565b6001600760146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612941576129406140cd565b5b60405190808252806020026020018201604052801561296f5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0391906138b9565b81600081518110612a1757612a166140fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612a6657612a656140fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b8152600401612b039493929190614224565b6000604051808303818588803b158015612b1c57600080fd5b505af1158015612b30573d6000803e3d6000fd5b5050505050827ffcfa54313b92fceed71362d6bfec038726e592d2fa73d69c461986eeedf7440060405160405180910390a2506000600760146101000a81548160ff0219169083151502179055505050565b6001600760146101000a81548160ff0219169083151502179055506000479050612bab82612d8b565b6000612bc08247612d6b90919063ffffffff16565b90506000612c4d600e60029054906101000a900461ffff16600e60009054906101000a900461ffff16612bf39190614270565b61ffff16612c3f600960000160009054906101000a900461ffff16600860000160009054906101000a900461ffff16612c2c9190614270565b61ffff1685612d3f90919063ffffffff16565b612d5590919063ffffffff16565b90506000601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612c97906142d7565b60006040518083038185875af1925050503d8060008114612cd4576040519150601f19603f3d011682016040523d82523d6000602084013e612cd9565b606091505b5050905080612d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d149061435e565b60405180910390fd5b505050506000600760146101000a81548160ff02191690831515021790555050565b60008183612d4d919061373e565b905092915050565b60008183612d6391906143ad565b905092915050565b60008183612d799190613de5565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612da857612da76140cd565b5b604051908082528060200260200182016040528015612dd65781602001602082028036833780820191505090505b5090503081600081518110612dee57612ded6140fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb991906138b9565b81600181518110612ecd57612ecc6140fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f3430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a63565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f989594939291906143de565b600060405180830381600087803b158015612fb257600080fd5b505af1158015612fc6573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613008578082015181840152602081019050612fed565b60008484015250505050565b6000601f19601f8301169050919050565b600061303082612fce565b61303a8185612fd9565b935061304a818560208601612fea565b61305381613014565b840191505092915050565b600060208201905081810360008301526130788184613025565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130b082613085565b9050919050565b6130c0816130a5565b81146130cb57600080fd5b50565b6000813590506130dd816130b7565b92915050565b6000819050919050565b6130f6816130e3565b811461310157600080fd5b50565b600081359050613113816130ed565b92915050565b600080604083850312156131305761312f613080565b5b600061313e858286016130ce565b925050602061314f85828601613104565b9150509250929050565b60008115159050919050565b61316e81613159565b82525050565b60006020820190506131896000830184613165565b92915050565b6000602082840312156131a5576131a4613080565b5b60006131b3848285016130ce565b91505092915050565b6000819050919050565b60006131e16131dc6131d784613085565b6131bc565b613085565b9050919050565b60006131f3826131c6565b9050919050565b6000613205826131e8565b9050919050565b613215816131fa565b82525050565b6000602082019050613230600083018461320c565b92915050565b61323f816130e3565b82525050565b600060208201905061325a6000830184613236565b92915050565b60008060006060848603121561327957613278613080565b5b6000613287868287016130ce565b9350506020613298868287016130ce565b92505060406132a986828701613104565b9150509250925092565b600061ffff82169050919050565b6132ca816132b3565b82525050565b60006040820190506132e560008301856132c1565b6132f260208301846132c1565b9392505050565b600060ff82169050919050565b61330f816132f9565b82525050565b600060208201905061332a6000830184613306565b92915050565b613339816130a5565b82525050565b60006020820190506133546000830184613330565b92915050565b61336381613159565b811461336e57600080fd5b50565b6000813590506133808161335a565b92915050565b6000806040838503121561339d5761339c613080565b5b60006133ab858286016130ce565b92505060206133bc85828601613371565b9150509250929050565b6000602082840312156133dc576133db613080565b5b60006133ea84828501613104565b91505092915050565b6000806040838503121561340a57613409613080565b5b6000613418858286016130ce565b9250506020613429858286016130ce565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061347a57607f821691505b60208210810361348d5761348c613433565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006134ef602883612fd9565b91506134fa82613493565b604082019050919050565b6000602082019050818103600083015261351e816134e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061355f826130e3565b915061356a836130e3565b925082820190508082111561358257613581613525565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135be602083612fd9565b91506135c982613588565b602082019050919050565b600060208201905081810360008301526135ed816135b1565b9050919050565b7f45524332303a2054686520556e697377617020706169722063616e6e6f74206260008201527f652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d6160208201527f6b65725061697273000000000000000000000000000000000000000000000000604082015250565b6000613676604883612fd9565b9150613681826135f4565b606082019050919050565b600060208201905081810360008301526136a581613669565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613708602583612fd9565b9150613713826136ac565b604082019050919050565b60006020820190508181036000830152613737816136fb565b9050919050565b6000613749826130e3565b9150613754836130e3565b9250828202613762816130e3565b9150828204841483151761377957613778613525565b5b5092915050565b7f45524332303a204163636f756e7420697320616c72656164792074686520766160008201527f6c7565206f6620276578636c7564656427000000000000000000000000000000602082015250565b60006137dc603183612fd9565b91506137e782613780565b604082019050919050565b6000602082019050818103600083015261380b816137cf565b9050919050565b7f45524332303a2054686520726f7574657220616c72656164792068617320746860008201527f6174206164647265737300000000000000000000000000000000000000000000602082015250565b600061386e602a83612fd9565b915061387982613812565b604082019050919050565b6000602082019050818103600083015261389d81613861565b9050919050565b6000815190506138b3816130b7565b92915050565b6000602082840312156138cf576138ce613080565b5b60006138dd848285016138a4565b91505092915050565b60006040820190506138fb6000830185613330565b6139086020830184613330565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061396b602683612fd9565b91506139768261390f565b604082019050919050565b6000602082019050818103600083015261399a8161395e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139fd602483612fd9565b9150613a08826139a1565b604082019050919050565b60006020820190508181036000830152613a2c816139f0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a8f602283612fd9565b9150613a9a82613a33565b604082019050919050565b60006020820190508181036000830152613abe81613a82565b9050919050565b7f546f6b656e3a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613b21602583612fd9565b9150613b2c82613ac5565b604082019050919050565b60006020820190508181036000830152613b5081613b14565b9050919050565b7f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613bb3602383612fd9565b9150613bbe82613b57565b604082019050919050565b60006020820190508181036000830152613be281613ba6565b9050919050565b7f546f6b656e3a20736e697065722063616e277420747261646500000000000000600082015250565b6000613c1f601983612fd9565b9150613c2a82613be9565b602082019050919050565b60006020820190508181036000830152613c4e81613c12565b9050919050565b7f54726164696e67206e6f7420656e61626c656420796574000000000000000000600082015250565b6000613c8b601783612fd9565b9150613c9682613c55565b602082019050919050565b60006020820190508181036000830152613cba81613c7e565b9050919050565b7f53656c6c206578636565647320706572207472616e73616374696f6e206c696d60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d1d602283612fd9565b9150613d2882613cc1565b604082019050919050565b60006020820190508181036000830152613d4c81613d10565b9050919050565b7f427579206578636565647320706572207472616e73616374696f6e206c696d6960008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613daf602183612fd9565b9150613dba82613d53565b604082019050919050565b60006020820190508181036000830152613dde81613da2565b9050919050565b6000613df0826130e3565b9150613dfb836130e3565b9250828203905081811115613e1357613e12613525565b5b92915050565b7f416e74697768616c653a2042616c616e63652065786365656473206c696d6974600082015250565b6000613e4f602083612fd9565b9150613e5a82613e19565b602082019050919050565b60006020820190508181036000830152613e7e81613e42565b9050919050565b7f45524332303a204175746f6d61746564206d61726b6574206d616b657220706160008201527f697220697320616c72656164792073657420746f20746861742076616c756500602082015250565b6000613ee1603f83612fd9565b9150613eec82613e85565b604082019050919050565b60006020820190508181036000830152613f1081613ed4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f73602583612fd9565b9150613f7e82613f17565b604082019050919050565b60006020820190508181036000830152613fa281613f66565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614005602383612fd9565b915061401082613fa9565b604082019050919050565b6000602082019050818103600083015261403481613ff8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614097602683612fd9565b91506140a28261403b565b604082019050919050565b600060208201905081810360008301526140c68161408a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061415061414b6141468461412b565b6131bc565b6130e3565b9050919050565b61416081614135565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61419b816130a5565b82525050565b60006141ad8383614192565b60208301905092915050565b6000602082019050919050565b60006141d182614166565b6141db8185614171565b93506141e683614182565b8060005b838110156142175781516141fe88826141a1565b9750614209836141b9565b9250506001810190506141ea565b5085935050505092915050565b60006080820190506142396000830187614157565b818103602083015261424b81866141c6565b905061425a6040830185613330565b6142676060830184613236565b95945050505050565b600061427b826132b3565b9150614286836132b3565b9250828201905061ffff8111156142a05761429f613525565b5b92915050565b600081905092915050565b50565b60006142c16000836142a6565b91506142cc826142b1565b600082019050919050565b60006142e2826142b4565b9150819050919050565b7f657468207472616e7366657220746f206d61726b6574696e672077616c6c657460008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b6000614348602783612fd9565b9150614353826142ec565b604082019050919050565b600060208201905081810360008301526143778161433b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143b8826130e3565b91506143c3836130e3565b9250826143d3576143d261437e565b5b828204905092915050565b600060a0820190506143f36000830188613236565b6144006020830187614157565b818103604083015261441281866141c6565b90506144216060830185613330565b61442e6080830184613236565b969550505050505056fea2646970667358221220882b63470888dc2a986574578b80b9ef555f9bee1801ab9d7dd13c323f2eae8764736f6c63430008110033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c80637537a47f1161010d578063a9059cbb116100a0578063c02466681161006f578063c02466681461075e578063c851cc3214610787578063dd62ed3e146107b0578063e2f45605146107ed578063f2fde38b1461081857610204565b8063a9059cbb14610690578063aa4bde28146106cd578063afa4f3b2146106f8578063b62496f51461072157610204565b80638da5cb5b116100dc5780638da5cb5b146105d457806395d89b41146105ff5780639a7a23d61461062a578063a457c2d71461065357610204565b80637537a47f1461053e578063790ca4131461056757806388e765ff146105925780638a8c523c146105bd57610204565b8063313ce567116101905780634fbee1931161015f5780634fbee1931461045757806366d602ae146104945780636ddd1713146104bf57806370a08231146104ea578063715018a61461052757610204565b8063313ce5671461039857806339509351146103c3578063470624021461040057806349bd5a5e1461042c57610204565b806318160ddd116101cc57806318160ddd146102d9578063220923e31461030457806323b872dd1461032f5780632b14ca561461036c57610204565b806306fdde0314610209578063095ea7b3146102345780630f3a325f146102715780631694505e146102ae57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610841565b60405161022b919061305e565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190613119565b6108d3565b6040516102689190613174565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061318f565b6108f1565b6040516102a59190613174565b60405180910390f35b3480156102ba57600080fd5b506102c3610911565b6040516102d0919061321b565b60405180910390f35b3480156102e557600080fd5b506102ee610937565b6040516102fb9190613245565b60405180910390f35b34801561031057600080fd5b50610319610941565b6040516103269190613245565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613260565b610947565b6040516103639190613174565b60405180910390f35b34801561037857600080fd5b50610381610a3f565b60405161038f9291906132d0565b60405180910390f35b3480156103a457600080fd5b506103ad610a6d565b6040516103ba9190613315565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190613119565b610a76565b6040516103f79190613174565b60405180910390f35b34801561040c57600080fd5b50610415610b22565b6040516104239291906132d0565b60405180910390f35b34801561043857600080fd5b50610441610b50565b60405161044e919061333f565b60405180910390f35b34801561046357600080fd5b5061047e6004803603810190610479919061318f565b610b76565b60405161048b9190613174565b60405180910390f35b3480156104a057600080fd5b506104a9610bcc565b6040516104b69190613245565b60405180910390f35b3480156104cb57600080fd5b506104d4610bd2565b6040516104e19190613174565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c919061318f565b610be5565b60405161051e9190613245565b60405180910390f35b34801561053357600080fd5b5061053c610c2d565b005b34801561054a57600080fd5b5061056560048036038101906105609190613386565b610cb5565b005b34801561057357600080fd5b5061057c610d8c565b6040516105899190613245565b60405180910390f35b34801561059e57600080fd5b506105a7610d92565b6040516105b49190613245565b60405180910390f35b3480156105c957600080fd5b506105d2610d98565b005b3480156105e057600080fd5b506105e9610e38565b6040516105f6919061333f565b60405180910390f35b34801561060b57600080fd5b50610614610e62565b604051610621919061305e565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190613386565b610ef4565b005b34801561065f57600080fd5b5061067a60048036038101906106759190613119565b61100e565b6040516106879190613174565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b29190613119565b6110f9565b6040516106c49190613174565b60405180910390f35b3480156106d957600080fd5b506106e2611117565b6040516106ef9190613245565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906133c6565b61111d565b005b34801561072d57600080fd5b506107486004803603810190610743919061318f565b6111b6565b6040516107559190613174565b60405180910390f35b34801561076a57600080fd5b5061078560048036038101906107809190613386565b6111d6565b005b34801561079357600080fd5b506107ae60048036038101906107a9919061318f565b61138d565b005b3480156107bc57600080fd5b506107d760048036038101906107d291906133f3565b6118d7565b6040516107e49190613245565b60405180910390f35b3480156107f957600080fd5b5061080261195e565b60405161080f9190613245565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a919061318f565b611964565b005b60606003805461085090613462565b80601f016020809104026020016040519081016040528092919081815260200182805461087c90613462565b80156108c95780601f1061089e576101008083540402835291602001916108c9565b820191906000526020600020905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b60006108e76108e0611a5b565b8484611a63565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60105481565b6000610954848484611c2c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061099f611a5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1690613505565b60405180910390fd5b610a3385610a2b611a5b565b858403611a63565b60019150509392505050565b60098060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b60006012905090565b6000610b18610a83611a5b565b848460016000610a91611a5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b139190613554565b611a63565b6001905092915050565b60088060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c5481565b601160009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c35611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610c53610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca0906135d4565b60405180910390fd5b610cb36000612487565b565b610cbd611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610cdb610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d28906135d4565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600b5481565b610da0611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610dbe610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b906135d4565b60405180910390fd5b6001601160016101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e7190613462565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9d90613462565b8015610eea5780601f10610ebf57610100808354040283529160200191610eea565b820191906000526020600020905b815481529060010190602001808311610ecd57829003601f168201915b5050505050905090565b610efc611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610f1a610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f67906135d4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff79061368c565b60405180910390fd5b61100a828261254d565b5050565b6000806001600061101d611a5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d19061371e565b60405180910390fd5b6110ee6110e5611a5b565b85858403611a63565b600191505092915050565b600061110d611106611a5b565b8484611c2c565b6001905092915050565b600d5481565b611125611a5b565b73ffffffffffffffffffffffffffffffffffffffff16611143610e38565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611190906135d4565b60405180910390fd5b670de0b6b3a7640000816111ad919061373e565b600a8190555050565b60146020528060005260406000206000915054906101000a900460ff1681565b6111de611a5b565b73ffffffffffffffffffffffffffffffffffffffff166111fc610e38565b73ffffffffffffffffffffffffffffffffffffffff1614611252576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611249906135d4565b60405180910390fd5b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db906137f2565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113819190613174565b60405180910390a25050565b611395611a5b565b73ffffffffffffffffffffffffffffffffffffffff166113b3610e38565b73ffffffffffffffffffffffffffffffffffffffff1614611409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611400906135d4565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090613884565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156d91906138b9565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161a91906138b9565b6040518363ffffffff1660e01b81526004016116379291906138e6565b602060405180830381865afa158015611654573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167891906138b9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361189157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173f91906138b9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ec91906138b9565b6040518363ffffffff1660e01b81526004016118099291906138e6565b6020604051808303816000875af1158015611828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184c91906138b9565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118d3565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b61196c611a5b565b73ffffffffffffffffffffffffffffffffffffffff1661198a610e38565b73ffffffffffffffffffffffffffffffffffffffff16146119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d7906135d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613981565b60405180910390fd5b611a5881612487565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac990613a13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3890613aa5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c1f9190613245565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290613b37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190613bc9565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e90613c35565b60405180910390fd5b601160019054906101000a900460ff1680611dfb5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190613ca1565b60405180910390fd5b60008103611e5357611e4e83836000612680565b612482565b6000611e5e30610be5565b90506000600a548210159050600760149054906101000a900460ff16158015611ed55750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15611efa576000479050601054811115611ef857611ef760105461dead612909565b5b505b601160009054906101000a900460ff168015611f235750600760149054906101000a900460ff16155b8015611f7d5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611f865750805b15611f9b576000829050611f9981612b82565b505b600060019050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120425750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561204c57600090505b8015612473576000601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120c257600e60029054906101000a900461ffff1661ffff16905061212d565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561212c57600e60009054906101000a900461ffff1661ffff1690505b5b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121d15750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561242557601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561227257600c5485111561226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490613d33565b60405180910390fd5b61237a565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561237957600b54851115612309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230090613dc5565b60405180910390fd5b6078600f54426123199190613de5565b1015612378576001601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661242457600d54856123d888610be5565b6123e29190613554565b1115612423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241a90613e65565b60405180910390fd5b5b5b600061244e6103e86124408489612d3f90919063ffffffff16565b612d5590919063ffffffff16565b90506124638187612d6b90919063ffffffff16565b9550612470883083612680565b50505b61247e868686612680565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036125df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d690613ef7565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e690613f89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361275e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127559061401b565b60405180910390fd5b612769838383612d81565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156127ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e6906140ad565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128829190613554565b9250508190555060008211156128f8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128ef9190613245565b60405180910390a35b612903848484612d86565b50505050565b6001600760146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612941576129406140cd565b5b60405190808252806020026020018201604052801561296f5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0391906138b9565b81600081518110612a1757612a166140fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612a6657612a656140fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b8152600401612b039493929190614224565b6000604051808303818588803b158015612b1c57600080fd5b505af1158015612b30573d6000803e3d6000fd5b5050505050827ffcfa54313b92fceed71362d6bfec038726e592d2fa73d69c461986eeedf7440060405160405180910390a2506000600760146101000a81548160ff0219169083151502179055505050565b6001600760146101000a81548160ff0219169083151502179055506000479050612bab82612d8b565b6000612bc08247612d6b90919063ffffffff16565b90506000612c4d600e60029054906101000a900461ffff16600e60009054906101000a900461ffff16612bf39190614270565b61ffff16612c3f600960000160009054906101000a900461ffff16600860000160009054906101000a900461ffff16612c2c9190614270565b61ffff1685612d3f90919063ffffffff16565b612d5590919063ffffffff16565b90506000601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612c97906142d7565b60006040518083038185875af1925050503d8060008114612cd4576040519150601f19603f3d011682016040523d82523d6000602084013e612cd9565b606091505b5050905080612d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d149061435e565b60405180910390fd5b505050506000600760146101000a81548160ff02191690831515021790555050565b60008183612d4d919061373e565b905092915050565b60008183612d6391906143ad565b905092915050565b60008183612d799190613de5565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612da857612da76140cd565b5b604051908082528060200260200182016040528015612dd65781602001602082028036833780820191505090505b5090503081600081518110612dee57612ded6140fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb991906138b9565b81600181518110612ecd57612ecc6140fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f3430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a63565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f989594939291906143de565b600060405180830381600087803b158015612fb257600080fd5b505af1158015612fc6573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613008578082015181840152602081019050612fed565b60008484015250505050565b6000601f19601f8301169050919050565b600061303082612fce565b61303a8185612fd9565b935061304a818560208601612fea565b61305381613014565b840191505092915050565b600060208201905081810360008301526130788184613025565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130b082613085565b9050919050565b6130c0816130a5565b81146130cb57600080fd5b50565b6000813590506130dd816130b7565b92915050565b6000819050919050565b6130f6816130e3565b811461310157600080fd5b50565b600081359050613113816130ed565b92915050565b600080604083850312156131305761312f613080565b5b600061313e858286016130ce565b925050602061314f85828601613104565b9150509250929050565b60008115159050919050565b61316e81613159565b82525050565b60006020820190506131896000830184613165565b92915050565b6000602082840312156131a5576131a4613080565b5b60006131b3848285016130ce565b91505092915050565b6000819050919050565b60006131e16131dc6131d784613085565b6131bc565b613085565b9050919050565b60006131f3826131c6565b9050919050565b6000613205826131e8565b9050919050565b613215816131fa565b82525050565b6000602082019050613230600083018461320c565b92915050565b61323f816130e3565b82525050565b600060208201905061325a6000830184613236565b92915050565b60008060006060848603121561327957613278613080565b5b6000613287868287016130ce565b9350506020613298868287016130ce565b92505060406132a986828701613104565b9150509250925092565b600061ffff82169050919050565b6132ca816132b3565b82525050565b60006040820190506132e560008301856132c1565b6132f260208301846132c1565b9392505050565b600060ff82169050919050565b61330f816132f9565b82525050565b600060208201905061332a6000830184613306565b92915050565b613339816130a5565b82525050565b60006020820190506133546000830184613330565b92915050565b61336381613159565b811461336e57600080fd5b50565b6000813590506133808161335a565b92915050565b6000806040838503121561339d5761339c613080565b5b60006133ab858286016130ce565b92505060206133bc85828601613371565b9150509250929050565b6000602082840312156133dc576133db613080565b5b60006133ea84828501613104565b91505092915050565b6000806040838503121561340a57613409613080565b5b6000613418858286016130ce565b9250506020613429858286016130ce565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061347a57607f821691505b60208210810361348d5761348c613433565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006134ef602883612fd9565b91506134fa82613493565b604082019050919050565b6000602082019050818103600083015261351e816134e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061355f826130e3565b915061356a836130e3565b925082820190508082111561358257613581613525565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135be602083612fd9565b91506135c982613588565b602082019050919050565b600060208201905081810360008301526135ed816135b1565b9050919050565b7f45524332303a2054686520556e697377617020706169722063616e6e6f74206260008201527f652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d6160208201527f6b65725061697273000000000000000000000000000000000000000000000000604082015250565b6000613676604883612fd9565b9150613681826135f4565b606082019050919050565b600060208201905081810360008301526136a581613669565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613708602583612fd9565b9150613713826136ac565b604082019050919050565b60006020820190508181036000830152613737816136fb565b9050919050565b6000613749826130e3565b9150613754836130e3565b9250828202613762816130e3565b9150828204841483151761377957613778613525565b5b5092915050565b7f45524332303a204163636f756e7420697320616c72656164792074686520766160008201527f6c7565206f6620276578636c7564656427000000000000000000000000000000602082015250565b60006137dc603183612fd9565b91506137e782613780565b604082019050919050565b6000602082019050818103600083015261380b816137cf565b9050919050565b7f45524332303a2054686520726f7574657220616c72656164792068617320746860008201527f6174206164647265737300000000000000000000000000000000000000000000602082015250565b600061386e602a83612fd9565b915061387982613812565b604082019050919050565b6000602082019050818103600083015261389d81613861565b9050919050565b6000815190506138b3816130b7565b92915050565b6000602082840312156138cf576138ce613080565b5b60006138dd848285016138a4565b91505092915050565b60006040820190506138fb6000830185613330565b6139086020830184613330565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061396b602683612fd9565b91506139768261390f565b604082019050919050565b6000602082019050818103600083015261399a8161395e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139fd602483612fd9565b9150613a08826139a1565b604082019050919050565b60006020820190508181036000830152613a2c816139f0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a8f602283612fd9565b9150613a9a82613a33565b604082019050919050565b60006020820190508181036000830152613abe81613a82565b9050919050565b7f546f6b656e3a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613b21602583612fd9565b9150613b2c82613ac5565b604082019050919050565b60006020820190508181036000830152613b5081613b14565b9050919050565b7f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613bb3602383612fd9565b9150613bbe82613b57565b604082019050919050565b60006020820190508181036000830152613be281613ba6565b9050919050565b7f546f6b656e3a20736e697065722063616e277420747261646500000000000000600082015250565b6000613c1f601983612fd9565b9150613c2a82613be9565b602082019050919050565b60006020820190508181036000830152613c4e81613c12565b9050919050565b7f54726164696e67206e6f7420656e61626c656420796574000000000000000000600082015250565b6000613c8b601783612fd9565b9150613c9682613c55565b602082019050919050565b60006020820190508181036000830152613cba81613c7e565b9050919050565b7f53656c6c206578636565647320706572207472616e73616374696f6e206c696d60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d1d602283612fd9565b9150613d2882613cc1565b604082019050919050565b60006020820190508181036000830152613d4c81613d10565b9050919050565b7f427579206578636565647320706572207472616e73616374696f6e206c696d6960008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613daf602183612fd9565b9150613dba82613d53565b604082019050919050565b60006020820190508181036000830152613dde81613da2565b9050919050565b6000613df0826130e3565b9150613dfb836130e3565b9250828203905081811115613e1357613e12613525565b5b92915050565b7f416e74697768616c653a2042616c616e63652065786365656473206c696d6974600082015250565b6000613e4f602083612fd9565b9150613e5a82613e19565b602082019050919050565b60006020820190508181036000830152613e7e81613e42565b9050919050565b7f45524332303a204175746f6d61746564206d61726b6574206d616b657220706160008201527f697220697320616c72656164792073657420746f20746861742076616c756500602082015250565b6000613ee1603f83612fd9565b9150613eec82613e85565b604082019050919050565b60006020820190508181036000830152613f1081613ed4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f73602583612fd9565b9150613f7e82613f17565b604082019050919050565b60006020820190508181036000830152613fa281613f66565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614005602383612fd9565b915061401082613fa9565b604082019050919050565b6000602082019050818103600083015261403481613ff8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614097602683612fd9565b91506140a28261403b565b604082019050919050565b600060208201905081810360008301526140c68161408a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061415061414b6141468461412b565b6131bc565b6130e3565b9050919050565b61416081614135565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61419b816130a5565b82525050565b60006141ad8383614192565b60208301905092915050565b6000602082019050919050565b60006141d182614166565b6141db8185614171565b93506141e683614182565b8060005b838110156142175781516141fe88826141a1565b9750614209836141b9565b9250506001810190506141ea565b5085935050505092915050565b60006080820190506142396000830187614157565b818103602083015261424b81866141c6565b905061425a6040830185613330565b6142676060830184613236565b95945050505050565b600061427b826132b3565b9150614286836132b3565b9250828201905061ffff8111156142a05761429f613525565b5b92915050565b600081905092915050565b50565b60006142c16000836142a6565b91506142cc826142b1565b600082019050919050565b60006142e2826142b4565b9150819050919050565b7f657468207472616e7366657220746f206d61726b6574696e672077616c6c657460008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b6000614348602783612fd9565b9150614353826142ec565b604082019050919050565b600060208201905081810360008301526143778161433b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143b8826130e3565b91506143c3836130e3565b9250826143d3576143d261437e565b5b828204905092915050565b600060a0820190506143f36000830188613236565b6144006020830187614157565b818103604083015261441281866141c6565b90506144216060830185613330565b61442e6080830184613236565b969550505050505056fea2646970667358221220882b63470888dc2a986574578b80b9ef555f9bee1801ab9d7dd13c323f2eae8764736f6c63430008110033
Deployed Bytecode Sourcemap
35379:10074:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25320:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27487:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36729:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35456:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26440:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36263:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28138:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35799:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;26282:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29039:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35772:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;35504:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40668:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35988:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36309:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26611:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18730:103;;;;;;;;;;;;;:::i;:::-;;39642:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36231:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35904:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39810:134;;;;;;;;;;;;;:::i;:::-;;18079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25539:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39952:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29757:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26951:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36072:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40856:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36665:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39291:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38654:629;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27189:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35838:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25320:100;25374:13;25407:5;25400:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25320:100;:::o;27487:169::-;27570:4;27587:39;27596:12;:10;:12::i;:::-;27610:7;27619:6;27587:8;:39::i;:::-;27644:4;27637:11;;27487:169;;;;:::o;36729:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;35456:41::-;;;;;;;;;;;;;:::o;26440:108::-;26501:7;26528:12;;26521:19;;26440:108;:::o;36263:31::-;;;;:::o;28138:492::-;28278:4;28295:36;28305:6;28313:9;28324:6;28295:9;:36::i;:::-;28344:24;28371:11;:19;28383:6;28371:19;;;;;;;;;;;;;;;:33;28391:12;:10;:12::i;:::-;28371:33;;;;;;;;;;;;;;;;28344:60;;28443:6;28423:16;:26;;28415:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;28530:57;28539:6;28547:12;:10;:12::i;:::-;28580:6;28561:16;:25;28530:8;:57::i;:::-;28618:4;28611:11;;;28138:492;;;;;:::o;35799:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26282:93::-;26340:5;26365:2;26358:9;;26282:93;:::o;29039:215::-;29127:4;29144:80;29153:12;:10;:12::i;:::-;29167:7;29213:10;29176:11;:25;29188:12;:10;:12::i;:::-;29176:25;;;;;;;;;;;;;;;:34;29202:7;29176:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;29144:8;:80::i;:::-;29242:4;29235:11;;29039:215;;;;:::o;35772:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35504:29::-;;;;;;;;;;;;;:::o;40668:126::-;40734:4;40758:19;:28;40778:7;40758:28;;;;;;;;;;;;;;;;;;;;;;;;;40751:35;;40668:126;;;:::o;35988:49::-;;;;:::o;36309:23::-;;;;;;;;;;;;;:::o;26611:127::-;26685:7;26712:9;:18;26722:7;26712:18;;;;;;;;;;;;;;;;26705:25;;26611:127;;;:::o;18730:103::-;18310:12;:10;:12::i;:::-;18299:23;;:7;:5;:7::i;:::-;:23;;;18291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18795:30:::1;18822:1;18795:18;:30::i;:::-;18730:103::o:0;39642:159::-;18310:12;:10;:12::i;:::-;18299:23;;:7;:5;:7::i;:::-;:23;;;18291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39785:8:::1;39753:20;:29;39774:7;39753:29;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;39642:159:::0;;:::o;36231:25::-;;;;:::o;35904:48::-;;;;:::o;39810:134::-;18310:12;:10;:12::i;:::-;18299:23;;:7;:5;:7::i;:::-;:23;;;18291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39884:4:::1;39865:16;;:23;;;;;;;;;;;;;;;;;;39912:15;39899:10;:28;;;;39810:134::o:0;18079:87::-;18125:7;18152:6;;;;;;;;;;;18145:13;;18079:87;:::o;25539:104::-;25595:13;25628:7;25621:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25539:104;:::o;39952:319::-;18310:12;:10;:12::i;:::-;18299:23;;:7;:5;:7::i;:::-;:23;;;18291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40096:13:::1;;;;;;;;;;;40088:21;;:4;:21;;::::0;40066:143:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40222:41;40251:4;40257:5;40222:28;:41::i;:::-;39952:319:::0;;:::o;29757:413::-;29850:4;29867:24;29894:11;:25;29906:12;:10;:12::i;:::-;29894:25;;;;;;;;;;;;;;;:34;29920:7;29894:34;;;;;;;;;;;;;;;;29867:61;;29967:15;29947:16;:35;;29939:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30060:67;30069:12;:10;:12::i;:::-;30083:7;30111:15;30092:16;:34;30060:8;:67::i;:::-;30158:4;30151:11;;;29757:413;;;;:::o;26951:175::-;27037:4;27054:42;27064:12;:10;:12::i;:::-;27078:9;27089:6;27054:9;:42::i;:::-;27114:4;27107:11;;26951:175;;;;:::o;36072:51::-;;;;:::o;40856:121::-;18310:12;:10;:12::i;:::-;18299:23;;:7;:5;:7::i;:::-;:23;;;18291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40963:6:::1;40954;:15;;;;:::i;:::-;40932:18;:37;;;;40856:121:::0;:::o;36665:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;39291:334::-;18310:12;:10;:12::i;:::-;18299:23;;:7;:5;:7::i;:::-;:23;;;18291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39430:8:::1;39398:40;;:19;:28;39418:7;39398:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;39376:139:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39557:8;39526:19;:28;39546:7;39526:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39599:7;39583:34;;;39608:8;39583:34;;;;;;:::i;:::-;;;;;;;;39291:334:::0;;:::o;38654:629::-;18310:12;:10;:12::i;:::-;18299:23;;:7;:5;:7::i;:::-;:23;;;18291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38752:15:::1;;;;;;;;;;;38730:38;;:10;:38;;::::0;38722:93:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38867:10;38830:15;;:48;;;;;;;;;;;;;;;;;;38890:16;38940:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38922:52;;;38983:4;39003:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38922:104;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38890:136;;39061:1;39041:22;;:8;:22;;::::0;39037:239:::1;;39125:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39107:55;;;39171:4;39192:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39107:108;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39078:13;;:137;;;;;;;;;;;;;;;;;;39037:239;;;39256:8;39240:13;;:24;;;;;;;;;;;;;;;;;;39037:239;38715:568;38654:629:::0;:::o;27189:151::-;27278:7;27305:11;:18;27317:5;27305:18;;;;;;;;;;;;;;;:27;27324:7;27305:27;;;;;;;;;;;;;;;;27298:34;;27189:151;;;;:::o;35838:56::-;;;;:::o;18988:201::-;18310:12;:10;:12::i;:::-;18299:23;;:7;:5;:7::i;:::-;:23;;;18291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19097:1:::1;19077:22;;:8;:22;;::::0;19069:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19153:28;19172:8;19153:18;:28::i;:::-;18988:201:::0;:::o;16801:98::-;16854:7;16881:10;16874:17;;16801:98;:::o;33471:380::-;33624:1;33607:19;;:5;:19;;;33599:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33705:1;33686:21;;:7;:21;;;33678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33789:6;33759:11;:18;33771:5;33759:18;;;;;;;;;;;;;;;:27;33778:7;33759:27;;;;;;;;;;;;;;;:36;;;;33827:7;33811:32;;33820:5;33811:32;;;33836:6;33811:32;;;;;;:::i;:::-;;;;;;;;33471:380;;;:::o;40985:2850::-;41133:1;41117:18;;:4;:18;;;41109:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41210:1;41196:16;;:2;:16;;;41188:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41272:8;:14;41281:4;41272:14;;;;;;;;;;;;;;;;;;;;;;;;;41271:15;41263:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41345:16;;;;;;;;;;;:45;;;;41365:19;:25;41385:4;41365:25;;;;;;;;;;;;;;;;;;;;;;;;;41345:45;41336:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;41468:1;41458:6;:11;41454:93;;41486:28;41502:4;41508:2;41512:1;41486:15;:28::i;:::-;41529:7;;41454:93;41571:28;41602:24;41620:4;41602:9;:24::i;:::-;41571:55;;41637:28;41705:18;;41668:20;:55;;41637:86;;41741:8;;;;;;;;;;;41740:9;:35;;;;;41762:13;;;;;;;;;;;41754:21;;:4;:21;;;;41740:35;41736:243;;;41792:15;41810:21;41792:39;;41860:16;;41850:7;:26;41846:122;;;41897:55;41918:16;;41944:6;41897:20;:55::i;:::-;41846:122;41777:202;41736:243;42013:11;;;;;;;;;;;:37;;;;;42042:8;;;;;;;;;;;42041:9;42013:37;:75;;;;;42075:13;;;;;;;;;;;42067:21;;:4;:21;;;;42013:75;:115;;;;;42105:23;42013:115;41995:288;;;42169:18;42190:20;42169:41;;42225:44;42258:10;42225:32;:44::i;:::-;42140:143;41995:288;42295:12;42310:4;42295:19;;42416;:25;42436:4;42416:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42445:19;:23;42465:2;42445:23;;;;;;;;;;;;;;;;;;;;;;;;;42416:52;42412:101;;;42496:5;42486:15;;42412:101;42529:7;42525:1257;;;42553:12;42600:25;:29;42626:2;42600:29;;;;;;;;;;;;;;;;;;;;;;;;;42596:185;;;42657:12;;;;;;;;;;;42650:19;;;;42596:185;;;42695:25;:31;42721:4;42695:31;;;;;;;;;;;;;;;;;;;;;;;;;42691:90;;;42754:11;;;;;;;;;;;42747:18;;;;42691:90;42596:185;42802:20;:26;42823:4;42802:26;;;;;;;;;;;;;;;;;;;;;;;;;42801:27;:56;;;;;42833:20;:24;42854:2;42833:24;;;;;;;;;;;;;;;;;;;;;;;;;42832:25;42801:56;42797:802;;;42882:25;:29;42908:2;42882:29;;;;;;;;;;;;;;;;;;;;;;;;;42878:448;;;42954:13;;42944:6;:23;;42936:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42878:448;;;43036:25;:31;43062:4;43036:31;;;;;;;;;;;;;;;;;;;;;;;;;43032:294;;;43108:12;;43098:6;:22;;43090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43214:3;43201:10;;43183:15;:28;;;;:::i;:::-;:34;43179:107;;;43258:4;43243:8;:12;43252:2;43243:12;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;43179:107;43032:294;42878:448;43351:25;:29;43377:2;43351:29;;;;;;;;;;;;;;;;;;;;;;;;;43346:238;;43465:15;;43455:6;43439:13;43449:2;43439:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;43405:159;;;;;;;;;;;;:::i;:::-;;;;;;;;;43346:238;42797:802;43615:17;43635:26;43656:4;43635:16;43646:4;43635:6;:10;;:16;;;;:::i;:::-;:20;;:26;;;;:::i;:::-;43615:46;;43685:21;43696:9;43685:6;:10;;:21;;;;:::i;:::-;43676:30;;43723:47;43739:4;43753;43760:9;43723:15;:47::i;:::-;42538:1244;;42525:1257;43794:33;43810:4;43816:2;43820:6;43794:15;:33::i;:::-;41098:2737;;;40985:2850;;;;:::o;19349:191::-;19423:16;19442:6;;;;;;;;;;;19423:25;;19468:8;19459:6;;:17;;;;;;;;;;;;;;;;;;19523:8;19492:40;;19513:8;19492:40;;;;;;;;;;;;19412:128;19349:191;:::o;40279:352::-;40419:5;40384:40;;:25;:31;40410:4;40384:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;40362:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;40560:5;40526:25;:31;40552:4;40526:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40617:5;40583:40;;40611:4;40583:40;;;;;;;;;;;;40279:352;;:::o;30660:763::-;30818:1;30800:20;;:6;:20;;;30792:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;30902:1;30881:23;;:9;:23;;;30873:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30957:47;30978:6;30986:9;30997:6;30957:20;:47::i;:::-;31017:21;31041:9;:17;31051:6;31041:17;;;;;;;;;;;;;;;;31017:41;;31094:6;31077:13;:23;;31069:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31215:6;31199:13;:22;31179:9;:17;31189:6;31179:17;;;;;;;;;;;;;;;:42;;;;31267:6;31243:9;:20;31253:9;31243:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;31299:1;31290:6;:10;31286:71;;;31337:9;31320:35;;31329:6;31320:35;;;31348:6;31320:35;;;;;;:::i;:::-;;;;;;;;31286:71;31369:46;31389:6;31397:9;31408:6;31369:19;:46::i;:::-;30781:642;30660:763;;;:::o;45011:439::-;37037:4;37026:8;;:15;;;;;;;;;;;;;;;;;;45100:21:::1;45138:1;45124:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45100:40;;45161:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45151:4;45156:1;45151:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;45212:4;45194;45199:1;45194:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;45230:15;;;;;;;;;;;:66;;;45304:6;45326:1;45342:4;45361:2;45378:15;45230:174;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;45435:6;45420:22;;;;;;;;;;45089:361;37075:5:::0;37064:8;;:16;;;;;;;;;;;;;;;;;;45011:439;;:::o;43843:558::-;37037:4;37026:8;;:15;;;;;;;;;;;;;;;;;;43933:22:::1;43958:21;43933:46;;43990:24;44007:6;43990:16;:24::i;:::-;44025:18;44046:41;44072:14;44046:21;:25;;:41;;;;:::i;:::-;44025:62;;44098:22;44123:125;44235:12;;;;;;;;;;;44221:11;;;;;;;;;;;:26;;;;:::i;:::-;44123:125;;:58;44160:7;:20;;;;;;;;;;;;44138:6;:19;;;;;;;;;;;;:42;;;;:::i;:::-;44123:58;;:10;:14;;:58;;;;:::i;:::-;:97;;:125;;;;:::i;:::-;44098:150;;44259:7;44280:15;;;;;;;;;;;44272:29;;44309:14;44272:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44258:70;;;44346:2;44338:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43922:479;;;;37075:5:::0;37064:8;;:16;;;;;;;;;;;;;;;;;;43843:558;:::o;12695:98::-;12753:7;12784:1;12780;:5;;;;:::i;:::-;12773:12;;12695:98;;;;:::o;13094:::-;13152:7;13183:1;13179;:5;;;;:::i;:::-;13172:12;;13094:98;;;;:::o;12338:::-;12396:7;12427:1;12423;:5;;;;:::i;:::-;12416:12;;12338:98;;;;:::o;34451:125::-;;;;:::o;35180:124::-;;;;:::o;44414:589::-;44540:21;44578:1;44564:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44540:40;;44609:4;44591;44596:1;44591:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44635:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44625:4;44630:1;44625:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44670:62;44687:4;44702:15;;;;;;;;;;;44720:11;44670:8;:62::i;:::-;44771:15;;;;;;;;;;;:66;;;44852:11;44878:1;44922:4;44949;44969:15;44771:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44469:534;44414:589;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:152::-;4203:9;4236:37;4267:5;4236:37;:::i;:::-;4223:50;;4127:152;;;:::o;4285:183::-;4398:63;4455:5;4398:63;:::i;:::-;4393:3;4386:76;4285:183;;:::o;4474:274::-;4593:4;4631:2;4620:9;4616:18;4608:26;;4644:97;4738:1;4727:9;4723:17;4714:6;4644:97;:::i;:::-;4474:274;;;;:::o;4754:118::-;4841:24;4859:5;4841:24;:::i;:::-;4836:3;4829:37;4754:118;;:::o;4878:222::-;4971:4;5009:2;4998:9;4994:18;4986:26;;5022:71;5090:1;5079:9;5075:17;5066:6;5022:71;:::i;:::-;4878:222;;;;:::o;5106:619::-;5183:6;5191;5199;5248:2;5236:9;5227:7;5223:23;5219:32;5216:119;;;5254:79;;:::i;:::-;5216:119;5374:1;5399:53;5444:7;5435:6;5424:9;5420:22;5399:53;:::i;:::-;5389:63;;5345:117;5501:2;5527:53;5572:7;5563:6;5552:9;5548:22;5527:53;:::i;:::-;5517:63;;5472:118;5629:2;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5600:118;5106:619;;;;;:::o;5731:89::-;5767:7;5807:6;5800:5;5796:18;5785:29;;5731:89;;;:::o;5826:115::-;5911:23;5928:5;5911:23;:::i;:::-;5906:3;5899:36;5826:115;;:::o;5947:324::-;6064:4;6102:2;6091:9;6087:18;6079:26;;6115:69;6181:1;6170:9;6166:17;6157:6;6115:69;:::i;:::-;6194:70;6260:2;6249:9;6245:18;6236:6;6194:70;:::i;:::-;5947:324;;;;;:::o;6277:86::-;6312:7;6352:4;6345:5;6341:16;6330:27;;6277:86;;;:::o;6369:112::-;6452:22;6468:5;6452:22;:::i;:::-;6447:3;6440:35;6369:112;;:::o;6487:214::-;6576:4;6614:2;6603:9;6599:18;6591:26;;6627:67;6691:1;6680:9;6676:17;6667:6;6627:67;:::i;:::-;6487:214;;;;:::o;6707:118::-;6794:24;6812:5;6794:24;:::i;:::-;6789:3;6782:37;6707:118;;:::o;6831:222::-;6924:4;6962:2;6951:9;6947:18;6939:26;;6975:71;7043:1;7032:9;7028:17;7019:6;6975:71;:::i;:::-;6831:222;;;;:::o;7059:116::-;7129:21;7144:5;7129:21;:::i;:::-;7122:5;7119:32;7109:60;;7165:1;7162;7155:12;7109:60;7059:116;:::o;7181:133::-;7224:5;7262:6;7249:20;7240:29;;7278:30;7302:5;7278:30;:::i;:::-;7181:133;;;;:::o;7320:468::-;7385:6;7393;7442:2;7430:9;7421:7;7417:23;7413:32;7410:119;;;7448:79;;:::i;:::-;7410:119;7568:1;7593:53;7638:7;7629:6;7618:9;7614:22;7593:53;:::i;:::-;7583:63;;7539:117;7695:2;7721:50;7763:7;7754:6;7743:9;7739:22;7721:50;:::i;:::-;7711:60;;7666:115;7320:468;;;;;:::o;7794:329::-;7853:6;7902:2;7890:9;7881:7;7877:23;7873:32;7870:119;;;7908:79;;:::i;:::-;7870:119;8028:1;8053:53;8098:7;8089:6;8078:9;8074:22;8053:53;:::i;:::-;8043:63;;7999:117;7794:329;;;;:::o;8129:474::-;8197:6;8205;8254:2;8242:9;8233:7;8229:23;8225:32;8222:119;;;8260:79;;:::i;:::-;8222:119;8380:1;8405:53;8450:7;8441:6;8430:9;8426:22;8405:53;:::i;:::-;8395:63;;8351:117;8507:2;8533:53;8578:7;8569:6;8558:9;8554:22;8533:53;:::i;:::-;8523:63;;8478:118;8129:474;;;;;:::o;8609:180::-;8657:77;8654:1;8647:88;8754:4;8751:1;8744:15;8778:4;8775:1;8768:15;8795:320;8839:6;8876:1;8870:4;8866:12;8856:22;;8923:1;8917:4;8913:12;8944:18;8934:81;;9000:4;8992:6;8988:17;8978:27;;8934:81;9062:2;9054:6;9051:14;9031:18;9028:38;9025:84;;9081:18;;:::i;:::-;9025:84;8846:269;8795:320;;;:::o;9121:227::-;9261:34;9257:1;9249:6;9245:14;9238:58;9330:10;9325:2;9317:6;9313:15;9306:35;9121:227;:::o;9354:366::-;9496:3;9517:67;9581:2;9576:3;9517:67;:::i;:::-;9510:74;;9593:93;9682:3;9593:93;:::i;:::-;9711:2;9706:3;9702:12;9695:19;;9354:366;;;:::o;9726:419::-;9892:4;9930:2;9919:9;9915:18;9907:26;;9979:9;9973:4;9969:20;9965:1;9954:9;9950:17;9943:47;10007:131;10133:4;10007:131;:::i;:::-;9999:139;;9726:419;;;:::o;10151:180::-;10199:77;10196:1;10189:88;10296:4;10293:1;10286:15;10320:4;10317:1;10310:15;10337:191;10377:3;10396:20;10414:1;10396:20;:::i;:::-;10391:25;;10430:20;10448:1;10430:20;:::i;:::-;10425:25;;10473:1;10470;10466:9;10459:16;;10494:3;10491:1;10488:10;10485:36;;;10501:18;;:::i;:::-;10485:36;10337:191;;;;:::o;10534:182::-;10674:34;10670:1;10662:6;10658:14;10651:58;10534:182;:::o;10722:366::-;10864:3;10885:67;10949:2;10944:3;10885:67;:::i;:::-;10878:74;;10961:93;11050:3;10961:93;:::i;:::-;11079:2;11074:3;11070:12;11063:19;;10722:366;;;:::o;11094:419::-;11260:4;11298:2;11287:9;11283:18;11275:26;;11347:9;11341:4;11337:20;11333:1;11322:9;11318:17;11311:47;11375:131;11501:4;11375:131;:::i;:::-;11367:139;;11094:419;;;:::o;11519:296::-;11659:34;11655:1;11647:6;11643:14;11636:58;11728:34;11723:2;11715:6;11711:15;11704:59;11797:10;11792:2;11784:6;11780:15;11773:35;11519:296;:::o;11821:366::-;11963:3;11984:67;12048:2;12043:3;11984:67;:::i;:::-;11977:74;;12060:93;12149:3;12060:93;:::i;:::-;12178:2;12173:3;12169:12;12162:19;;11821:366;;;:::o;12193:419::-;12359:4;12397:2;12386:9;12382:18;12374:26;;12446:9;12440:4;12436:20;12432:1;12421:9;12417:17;12410:47;12474:131;12600:4;12474:131;:::i;:::-;12466:139;;12193:419;;;:::o;12618:224::-;12758:34;12754:1;12746:6;12742:14;12735:58;12827:7;12822:2;12814:6;12810:15;12803:32;12618:224;:::o;12848:366::-;12990:3;13011:67;13075:2;13070:3;13011:67;:::i;:::-;13004:74;;13087:93;13176:3;13087:93;:::i;:::-;13205:2;13200:3;13196:12;13189:19;;12848:366;;;:::o;13220:419::-;13386:4;13424:2;13413:9;13409:18;13401:26;;13473:9;13467:4;13463:20;13459:1;13448:9;13444:17;13437:47;13501:131;13627:4;13501:131;:::i;:::-;13493:139;;13220:419;;;:::o;13645:410::-;13685:7;13708:20;13726:1;13708:20;:::i;:::-;13703:25;;13742:20;13760:1;13742:20;:::i;:::-;13737:25;;13797:1;13794;13790:9;13819:30;13837:11;13819:30;:::i;:::-;13808:41;;13998:1;13989:7;13985:15;13982:1;13979:22;13959:1;13952:9;13932:83;13909:139;;14028:18;;:::i;:::-;13909:139;13693:362;13645:410;;;;:::o;14061:236::-;14201:34;14197:1;14189:6;14185:14;14178:58;14270:19;14265:2;14257:6;14253:15;14246:44;14061:236;:::o;14303:366::-;14445:3;14466:67;14530:2;14525:3;14466:67;:::i;:::-;14459:74;;14542:93;14631:3;14542:93;:::i;:::-;14660:2;14655:3;14651:12;14644:19;;14303:366;;;:::o;14675:419::-;14841:4;14879:2;14868:9;14864:18;14856:26;;14928:9;14922:4;14918:20;14914:1;14903:9;14899:17;14892:47;14956:131;15082:4;14956:131;:::i;:::-;14948:139;;14675:419;;;:::o;15100:229::-;15240:34;15236:1;15228:6;15224:14;15217:58;15309:12;15304:2;15296:6;15292:15;15285:37;15100:229;:::o;15335:366::-;15477:3;15498:67;15562:2;15557:3;15498:67;:::i;:::-;15491:74;;15574:93;15663:3;15574:93;:::i;:::-;15692:2;15687:3;15683:12;15676:19;;15335:366;;;:::o;15707:419::-;15873:4;15911:2;15900:9;15896:18;15888:26;;15960:9;15954:4;15950:20;15946:1;15935:9;15931:17;15924:47;15988:131;16114:4;15988:131;:::i;:::-;15980:139;;15707:419;;;:::o;16132:143::-;16189:5;16220:6;16214:13;16205:22;;16236:33;16263:5;16236:33;:::i;:::-;16132:143;;;;:::o;16281:351::-;16351:6;16400:2;16388:9;16379:7;16375:23;16371:32;16368:119;;;16406:79;;:::i;:::-;16368:119;16526:1;16551:64;16607:7;16598:6;16587:9;16583:22;16551:64;:::i;:::-;16541:74;;16497:128;16281:351;;;;:::o;16638:332::-;16759:4;16797:2;16786:9;16782:18;16774:26;;16810:71;16878:1;16867:9;16863:17;16854:6;16810:71;:::i;:::-;16891:72;16959:2;16948:9;16944:18;16935:6;16891:72;:::i;:::-;16638:332;;;;;:::o;16976:225::-;17116:34;17112:1;17104:6;17100:14;17093:58;17185:8;17180:2;17172:6;17168:15;17161:33;16976:225;:::o;17207:366::-;17349:3;17370:67;17434:2;17429:3;17370:67;:::i;:::-;17363:74;;17446:93;17535:3;17446:93;:::i;:::-;17564:2;17559:3;17555:12;17548:19;;17207:366;;;:::o;17579:419::-;17745:4;17783:2;17772:9;17768:18;17760:26;;17832:9;17826:4;17822:20;17818:1;17807:9;17803:17;17796:47;17860:131;17986:4;17860:131;:::i;:::-;17852:139;;17579:419;;;:::o;18004:223::-;18144:34;18140:1;18132:6;18128:14;18121:58;18213:6;18208:2;18200:6;18196:15;18189:31;18004:223;:::o;18233:366::-;18375:3;18396:67;18460:2;18455:3;18396:67;:::i;:::-;18389:74;;18472:93;18561:3;18472:93;:::i;:::-;18590:2;18585:3;18581:12;18574:19;;18233:366;;;:::o;18605:419::-;18771:4;18809:2;18798:9;18794:18;18786:26;;18858:9;18852:4;18848:20;18844:1;18833:9;18829:17;18822:47;18886:131;19012:4;18886:131;:::i;:::-;18878:139;;18605:419;;;:::o;19030:221::-;19170:34;19166:1;19158:6;19154:14;19147:58;19239:4;19234:2;19226:6;19222:15;19215:29;19030:221;:::o;19257:366::-;19399:3;19420:67;19484:2;19479:3;19420:67;:::i;:::-;19413:74;;19496:93;19585:3;19496:93;:::i;:::-;19614:2;19609:3;19605:12;19598:19;;19257:366;;;:::o;19629:419::-;19795:4;19833:2;19822:9;19818:18;19810:26;;19882:9;19876:4;19872:20;19868:1;19857:9;19853:17;19846:47;19910:131;20036:4;19910:131;:::i;:::-;19902:139;;19629:419;;;:::o;20054:224::-;20194:34;20190:1;20182:6;20178:14;20171:58;20263:7;20258:2;20250:6;20246:15;20239:32;20054:224;:::o;20284:366::-;20426:3;20447:67;20511:2;20506:3;20447:67;:::i;:::-;20440:74;;20523:93;20612:3;20523:93;:::i;:::-;20641:2;20636:3;20632:12;20625:19;;20284:366;;;:::o;20656:419::-;20822:4;20860:2;20849:9;20845:18;20837:26;;20909:9;20903:4;20899:20;20895:1;20884:9;20880:17;20873:47;20937:131;21063:4;20937:131;:::i;:::-;20929:139;;20656:419;;;:::o;21081:222::-;21221:34;21217:1;21209:6;21205:14;21198:58;21290:5;21285:2;21277:6;21273:15;21266:30;21081:222;:::o;21309:366::-;21451:3;21472:67;21536:2;21531:3;21472:67;:::i;:::-;21465:74;;21548:93;21637:3;21548:93;:::i;:::-;21666:2;21661:3;21657:12;21650:19;;21309:366;;;:::o;21681:419::-;21847:4;21885:2;21874:9;21870:18;21862:26;;21934:9;21928:4;21924:20;21920:1;21909:9;21905:17;21898:47;21962:131;22088:4;21962:131;:::i;:::-;21954:139;;21681:419;;;:::o;22106:175::-;22246:27;22242:1;22234:6;22230:14;22223:51;22106:175;:::o;22287:366::-;22429:3;22450:67;22514:2;22509:3;22450:67;:::i;:::-;22443:74;;22526:93;22615:3;22526:93;:::i;:::-;22644:2;22639:3;22635:12;22628:19;;22287:366;;;:::o;22659:419::-;22825:4;22863:2;22852:9;22848:18;22840:26;;22912:9;22906:4;22902:20;22898:1;22887:9;22883:17;22876:47;22940:131;23066:4;22940:131;:::i;:::-;22932:139;;22659:419;;;:::o;23084:173::-;23224:25;23220:1;23212:6;23208:14;23201:49;23084:173;:::o;23263:366::-;23405:3;23426:67;23490:2;23485:3;23426:67;:::i;:::-;23419:74;;23502:93;23591:3;23502:93;:::i;:::-;23620:2;23615:3;23611:12;23604:19;;23263:366;;;:::o;23635:419::-;23801:4;23839:2;23828:9;23824:18;23816:26;;23888:9;23882:4;23878:20;23874:1;23863:9;23859:17;23852:47;23916:131;24042:4;23916:131;:::i;:::-;23908:139;;23635:419;;;:::o;24060:221::-;24200:34;24196:1;24188:6;24184:14;24177:58;24269:4;24264:2;24256:6;24252:15;24245:29;24060:221;:::o;24287:366::-;24429:3;24450:67;24514:2;24509:3;24450:67;:::i;:::-;24443:74;;24526:93;24615:3;24526:93;:::i;:::-;24644:2;24639:3;24635:12;24628:19;;24287:366;;;:::o;24659:419::-;24825:4;24863:2;24852:9;24848:18;24840:26;;24912:9;24906:4;24902:20;24898:1;24887:9;24883:17;24876:47;24940:131;25066:4;24940:131;:::i;:::-;24932:139;;24659:419;;;:::o;25084:220::-;25224:34;25220:1;25212:6;25208:14;25201:58;25293:3;25288:2;25280:6;25276:15;25269:28;25084:220;:::o;25310:366::-;25452:3;25473:67;25537:2;25532:3;25473:67;:::i;:::-;25466:74;;25549:93;25638:3;25549:93;:::i;:::-;25667:2;25662:3;25658:12;25651:19;;25310:366;;;:::o;25682:419::-;25848:4;25886:2;25875:9;25871:18;25863:26;;25935:9;25929:4;25925:20;25921:1;25910:9;25906:17;25899:47;25963:131;26089:4;25963:131;:::i;:::-;25955:139;;25682:419;;;:::o;26107:194::-;26147:4;26167:20;26185:1;26167:20;:::i;:::-;26162:25;;26201:20;26219:1;26201:20;:::i;:::-;26196:25;;26245:1;26242;26238:9;26230:17;;26269:1;26263:4;26260:11;26257:37;;;26274:18;;:::i;:::-;26257:37;26107:194;;;;:::o;26307:182::-;26447:34;26443:1;26435:6;26431:14;26424:58;26307:182;:::o;26495:366::-;26637:3;26658:67;26722:2;26717:3;26658:67;:::i;:::-;26651:74;;26734:93;26823:3;26734:93;:::i;:::-;26852:2;26847:3;26843:12;26836:19;;26495:366;;;:::o;26867:419::-;27033:4;27071:2;27060:9;27056:18;27048:26;;27120:9;27114:4;27110:20;27106:1;27095:9;27091:17;27084:47;27148:131;27274:4;27148:131;:::i;:::-;27140:139;;26867:419;;;:::o;27292:250::-;27432:34;27428:1;27420:6;27416:14;27409:58;27501:33;27496:2;27488:6;27484:15;27477:58;27292:250;:::o;27548:366::-;27690:3;27711:67;27775:2;27770:3;27711:67;:::i;:::-;27704:74;;27787:93;27876:3;27787:93;:::i;:::-;27905:2;27900:3;27896:12;27889:19;;27548:366;;;:::o;27920:419::-;28086:4;28124:2;28113:9;28109:18;28101:26;;28173:9;28167:4;28163:20;28159:1;28148:9;28144:17;28137:47;28201:131;28327:4;28201:131;:::i;:::-;28193:139;;27920:419;;;:::o;28345:224::-;28485:34;28481:1;28473:6;28469:14;28462:58;28554:7;28549:2;28541:6;28537:15;28530:32;28345:224;:::o;28575:366::-;28717:3;28738:67;28802:2;28797:3;28738:67;:::i;:::-;28731:74;;28814:93;28903:3;28814:93;:::i;:::-;28932:2;28927:3;28923:12;28916:19;;28575:366;;;:::o;28947:419::-;29113:4;29151:2;29140:9;29136:18;29128:26;;29200:9;29194:4;29190:20;29186:1;29175:9;29171:17;29164:47;29228:131;29354:4;29228:131;:::i;:::-;29220:139;;28947:419;;;:::o;29372:222::-;29512:34;29508:1;29500:6;29496:14;29489:58;29581:5;29576:2;29568:6;29564:15;29557:30;29372:222;:::o;29600:366::-;29742:3;29763:67;29827:2;29822:3;29763:67;:::i;:::-;29756:74;;29839:93;29928:3;29839:93;:::i;:::-;29957:2;29952:3;29948:12;29941:19;;29600:366;;;:::o;29972:419::-;30138:4;30176:2;30165:9;30161:18;30153:26;;30225:9;30219:4;30215:20;30211:1;30200:9;30196:17;30189:47;30253:131;30379:4;30253:131;:::i;:::-;30245:139;;29972:419;;;:::o;30397:225::-;30537:34;30533:1;30525:6;30521:14;30514:58;30606:8;30601:2;30593:6;30589:15;30582:33;30397:225;:::o;30628:366::-;30770:3;30791:67;30855:2;30850:3;30791:67;:::i;:::-;30784:74;;30867:93;30956:3;30867:93;:::i;:::-;30985:2;30980:3;30976:12;30969:19;;30628:366;;;:::o;31000:419::-;31166:4;31204:2;31193:9;31189:18;31181:26;;31253:9;31247:4;31243:20;31239:1;31228:9;31224:17;31217:47;31281:131;31407:4;31281:131;:::i;:::-;31273:139;;31000:419;;;:::o;31425:180::-;31473:77;31470:1;31463:88;31570:4;31567:1;31560:15;31594:4;31591:1;31584:15;31611:180;31659:77;31656:1;31649:88;31756:4;31753:1;31746:15;31780:4;31777:1;31770:15;31797:85;31842:7;31871:5;31860:16;;31797:85;;;:::o;31888:158::-;31946:9;31979:61;31997:42;32006:32;32032:5;32006:32;:::i;:::-;31997:42;:::i;:::-;31979:61;:::i;:::-;31966:74;;31888:158;;;:::o;32052:147::-;32147:45;32186:5;32147:45;:::i;:::-;32142:3;32135:58;32052:147;;:::o;32205:114::-;32272:6;32306:5;32300:12;32290:22;;32205:114;;;:::o;32325:184::-;32424:11;32458:6;32453:3;32446:19;32498:4;32493:3;32489:14;32474:29;;32325:184;;;;:::o;32515:132::-;32582:4;32605:3;32597:11;;32635:4;32630:3;32626:14;32618:22;;32515:132;;;:::o;32653:108::-;32730:24;32748:5;32730:24;:::i;:::-;32725:3;32718:37;32653:108;;:::o;32767:179::-;32836:10;32857:46;32899:3;32891:6;32857:46;:::i;:::-;32935:4;32930:3;32926:14;32912:28;;32767:179;;;;:::o;32952:113::-;33022:4;33054;33049:3;33045:14;33037:22;;32952:113;;;:::o;33101:732::-;33220:3;33249:54;33297:5;33249:54;:::i;:::-;33319:86;33398:6;33393:3;33319:86;:::i;:::-;33312:93;;33429:56;33479:5;33429:56;:::i;:::-;33508:7;33539:1;33524:284;33549:6;33546:1;33543:13;33524:284;;;33625:6;33619:13;33652:63;33711:3;33696:13;33652:63;:::i;:::-;33645:70;;33738:60;33791:6;33738:60;:::i;:::-;33728:70;;33584:224;33571:1;33568;33564:9;33559:14;;33524:284;;;33528:14;33824:3;33817:10;;33225:608;;;33101:732;;;;:::o;33839:720::-;34074:4;34112:3;34101:9;34097:19;34089:27;;34126:79;34202:1;34191:9;34187:17;34178:6;34126:79;:::i;:::-;34252:9;34246:4;34242:20;34237:2;34226:9;34222:18;34215:48;34280:108;34383:4;34374:6;34280:108;:::i;:::-;34272:116;;34398:72;34466:2;34455:9;34451:18;34442:6;34398:72;:::i;:::-;34480;34548:2;34537:9;34533:18;34524:6;34480:72;:::i;:::-;33839:720;;;;;;;:::o;34565:193::-;34604:3;34623:19;34640:1;34623:19;:::i;:::-;34618:24;;34656:19;34673:1;34656:19;:::i;:::-;34651:24;;34698:1;34695;34691:9;34684:16;;34721:6;34716:3;34713:15;34710:41;;;34731:18;;:::i;:::-;34710:41;34565:193;;;;:::o;34764:147::-;34865:11;34902:3;34887:18;;34764:147;;;;:::o;34917:114::-;;:::o;35037:398::-;35196:3;35217:83;35298:1;35293:3;35217:83;:::i;:::-;35210:90;;35309:93;35398:3;35309:93;:::i;:::-;35427:1;35422:3;35418:11;35411:18;;35037:398;;;:::o;35441:379::-;35625:3;35647:147;35790:3;35647:147;:::i;:::-;35640:154;;35811:3;35804:10;;35441:379;;;:::o;35826:226::-;35966:34;35962:1;35954:6;35950:14;35943:58;36035:9;36030:2;36022:6;36018:15;36011:34;35826:226;:::o;36058:366::-;36200:3;36221:67;36285:2;36280:3;36221:67;:::i;:::-;36214:74;;36297:93;36386:3;36297:93;:::i;:::-;36415:2;36410:3;36406:12;36399:19;;36058:366;;;:::o;36430:419::-;36596:4;36634:2;36623:9;36619:18;36611:26;;36683:9;36677:4;36673:20;36669:1;36658:9;36654:17;36647:47;36711:131;36837:4;36711:131;:::i;:::-;36703:139;;36430:419;;;:::o;36855:180::-;36903:77;36900:1;36893:88;37000:4;36997:1;36990:15;37024:4;37021:1;37014:15;37041:185;37081:1;37098:20;37116:1;37098:20;:::i;:::-;37093:25;;37132:20;37150:1;37132:20;:::i;:::-;37127:25;;37171:1;37161:35;;37176:18;;:::i;:::-;37161:35;37218:1;37215;37211:9;37206:14;;37041:185;;;;:::o;37232:831::-;37495:4;37533:3;37522:9;37518:19;37510:27;;37547:71;37615:1;37604:9;37600:17;37591:6;37547:71;:::i;:::-;37628:80;37704:2;37693:9;37689:18;37680:6;37628:80;:::i;:::-;37755:9;37749:4;37745:20;37740:2;37729:9;37725:18;37718:48;37783:108;37886:4;37877:6;37783:108;:::i;:::-;37775:116;;37901:72;37969:2;37958:9;37954:18;37945:6;37901:72;:::i;:::-;37983:73;38051:3;38040:9;38036:19;38027:6;37983:73;:::i;:::-;37232:831;;;;;;;;:::o
Swarm Source
ipfs://882b63470888dc2a986574578b80b9ef555f9bee1801ab9d7dd13c323f2eae87
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.