ERC-20
Overview
Max Total Supply
100,000,000 BAKI
Holders
48
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
363,391.508734495938614581 BAKIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
baki
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-24 */ /** https://t.me/bakierc https://bakierc.com/ 0/0 tax */ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; pragma experimental ABIEncoderV2; // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) // pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) // pragma solidity ^0.8.0; // import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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); } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) // pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) // pragma solidity ^0.8.0; // import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) // pragma solidity ^0.8.0; // import "./IERC20.sol"; // import "./extensions/IERC20Metadata.sol"; // import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * 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}. * * 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 default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) // pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // 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, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // pragma solidity >=0.6.2; // import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract baki is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public tradingActive = false; bool public swapEnabled = false; uint256 public buyTotalFees; uint256 private buyMarketingFee; uint256 private buyLiquidityFee; uint256 public sellTotalFees; uint256 private sellMarketingFee; uint256 private sellLiquidityFee; uint256 private tokensForMarketing; uint256 private tokensForLiquidity; uint256 private previousFee; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedMaxTransactionAmount; mapping(address => bool) private automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("Baki", "BAKI") { uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); uint256 totalSupply = 100_000_000 ether; maxTransactionAmount = (totalSupply * 1) / 100; maxWallet = (totalSupply * 2) / 100; swapTokensAtAmount = (totalSupply * 1) / 1000; buyMarketingFee = 10; buyLiquidityFee = 0; buyTotalFees = buyMarketingFee + buyLiquidityFee; sellMarketingFee = 35; sellLiquidityFee = 0; sellTotalFees = sellMarketingFee + sellLiquidityFee; previousFee = sellTotalFees; marketingWallet = 0x1eb7108B56F4bb08970154Ff5bd554dEA763D4A2; excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(deadAddress, true); excludeFromFees(marketingWallet, true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(deadAddress, true); excludeFromMaxTransaction(marketingWallet, true); excludeFromMaxTransaction(address(uniswapV2Router), true); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); _mint(msg.sender, totalSupply); } receive() external payable {} function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxWalletAndTxnAmount( uint256 newTxnNum, uint256 newMaxWalletNum ) external onlyOwner { require( newTxnNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxTxn lower than 0.5%" ); require( newMaxWalletNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newMaxWalletNum * (10**18); maxTransactionAmount = newTxnNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyMarketingFee + buyLiquidityFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellTotalFees = sellMarketingFee + sellLiquidityFee; previousFee = sellTotalFees; require(sellTotalFees <= 20, "Must keep fees at 20% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && to != address(0) && to != deadAddress && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); sellTotalFees = previousFee; } function swapTokensForEth(uint256 tokenAmount) private { 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, path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, marketingWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div( totalTokensToSwap ); uint256 ethForLiquidity = ethBalance - ethForMarketing; tokensForLiquidity = 0; tokensForMarketing = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); } (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } }
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":"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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"updateMaxWalletAndTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600481526020017f42616b69000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42414b49000000000000000000000000000000000000000000000000000000008152508160039081620000c5919062000c9d565b508060049081620000d7919062000c9d565b505050620000fa620000ee6200055c60201b60201c565b6200056460201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b6919062000dee565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000220573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000246919062000dee565b6040518363ffffffff1660e01b81526004016200026592919062000e31565b6020604051808303816000875af115801562000285573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ab919062000dee565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060006a52b7d2dcc80cd2e400000090506064600182620002ff919062000e8d565b6200030b919062000f07565b600781905550606460028262000322919062000e8d565b6200032e919062000f07565b6009819055506103e860018262000346919062000e8d565b62000352919062000f07565b600881905550600a600c819055506000600d81905550600d54600c546200037a919062000f3f565b600b819055506023600f819055506000601081905550601054600f54620003a2919062000f3f565b600e81905550600e54601381905550731eb7108b56f4bb08970154ff5bd554dea763d4a2600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004286200041a6200062a60201b60201c565b60016200065460201b60201c565b6200043b3060016200065460201b60201c565b6200045061dead60016200065460201b60201c565b62000485600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200065460201b60201c565b620004a7620004996200062a60201b60201c565b60016200070f60201b60201c565b620004ba3060016200070f60201b60201c565b620004cf61dead60016200070f60201b60201c565b62000504600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200070f60201b60201c565b6200051960805160016200070f60201b60201c565b6200052e60a05160016200070f60201b60201c565b6200054360a05160016200077a60201b60201c565b6200055533826200081b60201b60201c565b50620010d7565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006646200098860201b60201c565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000703919062000f97565b60405180910390a25050565b6200071f6200098860201b60201c565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200088d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008849062001015565b60405180910390fd5b620008a16000838362000a1960201b60201c565b8060026000828254620008b5919062000f3f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000968919062001048565b60405180910390a3620009846000838362000a1e60201b60201c565b5050565b620009986200055c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009be6200062a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a0e90620010b5565b60405180910390fd5b565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000aa557607f821691505b60208210810362000abb5762000aba62000a5d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ae6565b62000b31868362000ae6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b7e62000b7862000b728462000b49565b62000b53565b62000b49565b9050919050565b6000819050919050565b62000b9a8362000b5d565b62000bb262000ba98262000b85565b84845462000af3565b825550505050565b600090565b62000bc962000bba565b62000bd681848462000b8f565b505050565b5b8181101562000bfe5762000bf260008262000bbf565b60018101905062000bdc565b5050565b601f82111562000c4d5762000c178162000ac1565b62000c228462000ad6565b8101602085101562000c32578190505b62000c4a62000c418562000ad6565b83018262000bdb565b50505b505050565b600082821c905092915050565b600062000c726000198460080262000c52565b1980831691505092915050565b600062000c8d838362000c5f565b9150826002028217905092915050565b62000ca88262000a23565b67ffffffffffffffff81111562000cc45762000cc362000a2e565b5b62000cd0825462000a8c565b62000cdd82828562000c02565b600060209050601f83116001811462000d15576000841562000d00578287015190505b62000d0c858262000c7f565b86555062000d7c565b601f19841662000d258662000ac1565b60005b8281101562000d4f5784890151825560018201915060208501945060208101905062000d28565b8683101562000d6f578489015162000d6b601f89168262000c5f565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000db68262000d89565b9050919050565b62000dc88162000da9565b811462000dd457600080fd5b50565b60008151905062000de88162000dbd565b92915050565b60006020828403121562000e075762000e0662000d84565b5b600062000e178482850162000dd7565b91505092915050565b62000e2b8162000da9565b82525050565b600060408201905062000e48600083018562000e20565b62000e57602083018462000e20565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e9a8262000b49565b915062000ea78362000b49565b925082820262000eb78162000b49565b9150828204841483151762000ed15762000ed062000e5e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f148262000b49565b915062000f218362000b49565b92508262000f345762000f3362000ed8565b5b828204905092915050565b600062000f4c8262000b49565b915062000f598362000b49565b925082820190508082111562000f745762000f7362000e5e565b5b92915050565b60008115159050919050565b62000f918162000f7a565b82525050565b600060208201905062000fae600083018462000f86565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ffd601f8362000fb4565b91506200100a8262000fc5565b602082019050919050565b60006020820190508181036000830152620010308162000fee565b9050919050565b620010428162000b49565b82525050565b60006020820190506200105f600083018462001037565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200109d60208362000fb4565b9150620010aa8262001065565b602082019050919050565b60006020820190508181036000830152620010d0816200108e565b9050919050565b60805160a051613c426200112760003960008181610a040152610e22015260008181610961015281816126290152818161270a01528181612731015281816127cd01526127f40152613c426000f3fe6080604052600436106101fd5760003560e01c806375f0a8741161010d578063bbc0c742116100a0578063d85ba0631161006f578063d85ba06314610744578063dd62ed3e1461076f578063e2f45605146107ac578063f2fde38b146107d7578063f8b45b051461080057610204565b8063bbc0c74214610688578063c0246668146106b3578063c8c8ebe4146106dc578063d257b34f1461070757610204565b806396188399116100dc57806396188399146105bc5780639a7a23d6146105e5578063a457c2d71461060e578063a9059cbb1461064b57610204565b806375f0a874146105245780638a8c523c1461054f5780638da5cb5b1461056657806395d89b411461059157610204565b806339509351116101905780636a486a8e1161015f5780636a486a8e146104515780636ddd17131461047c57806370a08231146104a7578063715018a6146104e45780637571336a146104fb57610204565b8063395093511461038357806349bd5a5e146103c05780634fbee193146103eb57806366ca9b831461042857610204565b806318160ddd116101cc57806318160ddd146102c557806323b872dd146102f057806327c8f8351461032d578063313ce5671461035857610204565b806302dbd8f81461020957806306fdde0314610232578063095ea7b31461025d5780631694505e1461029a57610204565b3661020457005b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906128fe565b61082b565b005b34801561023e57600080fd5b506102476108aa565b60405161025491906129ce565b60405180910390f35b34801561026957600080fd5b50610284600480360381019061027f9190612a4e565b61093c565b6040516102919190612aa9565b60405180910390f35b3480156102a657600080fd5b506102af61095f565b6040516102bc9190612b23565b60405180910390f35b3480156102d157600080fd5b506102da610983565b6040516102e79190612b4d565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190612b68565b61098d565b6040516103249190612aa9565b60405180910390f35b34801561033957600080fd5b506103426109bc565b60405161034f9190612bca565b60405180910390f35b34801561036457600080fd5b5061036d6109c2565b60405161037a9190612c01565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190612a4e565b6109cb565b6040516103b79190612aa9565b60405180910390f35b3480156103cc57600080fd5b506103d5610a02565b6040516103e29190612bca565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190612c1c565b610a26565b60405161041f9190612aa9565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a91906128fe565b610a7c565b005b34801561045d57600080fd5b50610466610af2565b6040516104739190612b4d565b60405180910390f35b34801561048857600080fd5b50610491610af8565b60405161049e9190612aa9565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190612c1c565b610b0b565b6040516104db9190612b4d565b60405180910390f35b3480156104f057600080fd5b506104f9610b53565b005b34801561050757600080fd5b50610522600480360381019061051d9190612c75565b610b67565b005b34801561053057600080fd5b50610539610bca565b6040516105469190612bca565b60405180910390f35b34801561055b57600080fd5b50610564610bf0565b005b34801561057257600080fd5b5061057b610c30565b6040516105889190612bca565b60405180910390f35b34801561059d57600080fd5b506105a6610c5a565b6040516105b391906129ce565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de91906128fe565b610cec565b005b3480156105f157600080fd5b5061060c60048036038101906106079190612c75565b610e18565b005b34801561061a57600080fd5b5061063560048036038101906106309190612a4e565b610ebc565b6040516106429190612aa9565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190612a4e565b610f33565b60405161067f9190612aa9565b60405180910390f35b34801561069457600080fd5b5061069d610f56565b6040516106aa9190612aa9565b60405180910390f35b3480156106bf57600080fd5b506106da60048036038101906106d59190612c75565b610f69565b005b3480156106e857600080fd5b506106f161101a565b6040516106fe9190612b4d565b60405180910390f35b34801561071357600080fd5b5061072e60048036038101906107299190612cb5565b611020565b60405161073b9190612aa9565b60405180910390f35b34801561075057600080fd5b50610759611101565b6040516107669190612b4d565b60405180910390f35b34801561077b57600080fd5b5061079660048036038101906107919190612ce2565b611107565b6040516107a39190612b4d565b60405180910390f35b3480156107b857600080fd5b506107c161118e565b6040516107ce9190612b4d565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190612c1c565b611194565b005b34801561080c57600080fd5b50610815611217565b6040516108229190612b4d565b60405180910390f35b61083361121d565b81600f8190555080601081905550601054600f546108519190612d51565b600e81905550600e546013819055506014600e5411156108a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089d90612dd1565b60405180910390fd5b5050565b6060600380546108b990612e20565b80601f01602080910402602001604051908101604052809291908181526020018280546108e590612e20565b80156109325780601f1061090757610100808354040283529160200191610932565b820191906000526020600020905b81548152906001019060200180831161091557829003601f168201915b5050505050905090565b60008061094761129b565b90506109548185856112a3565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60008061099861129b565b90506109a585828561146c565b6109b08585856114f8565b60019150509392505050565b61dead81565b60006012905090565b6000806109d661129b565b90506109f78185856109e88589611107565b6109f29190612d51565b6112a3565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610a8461121d565b81600c8190555080600d81905550600d54600c54610aa29190612d51565b600b819055506014600b541115610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590612dd1565b60405180910390fd5b5050565b600e5481565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b5b61121d565b610b656000611f54565b565b610b6f61121d565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bf861121d565b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c6990612e20565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9590612e20565b8015610ce25780601f10610cb757610100808354040283529160200191610ce2565b820191906000526020600020905b815481529060010190602001808311610cc557829003601f168201915b5050505050905090565b610cf461121d565b670de0b6b3a76400006103e86005610d0a610983565b610d149190612e51565b610d1e9190612ec2565b610d289190612ec2565b821015610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190612f65565b60405180910390fd5b670de0b6b3a76400006103e86005610d80610983565b610d8a9190612e51565b610d949190612ec2565b610d9e9190612ec2565b811015610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd790612ff7565b60405180910390fd5b670de0b6b3a764000081610df49190612e51565b600981905550670de0b6b3a764000082610e0e9190612e51565b6007819055505050565b610e2061121d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea590613089565b60405180910390fd5b610eb8828261201a565b5050565b600080610ec761129b565b90506000610ed58286611107565b905083811015610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f119061311b565b60405180910390fd5b610f2782868684036112a3565b60019250505092915050565b600080610f3e61129b565b9050610f4b8185856114f8565b600191505092915050565b600a60009054906101000a900460ff1681565b610f7161121d565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161100e9190612aa9565b60405180910390a25050565b60075481565b600061102a61121d565b620186a06001611038610983565b6110429190612e51565b61104c9190612ec2565b82101561108e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611085906131ad565b60405180910390fd5b6103e8600561109b610983565b6110a59190612e51565b6110af9190612ec2565b8211156110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e89061323f565b60405180910390fd5b8160088190555060019050919050565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b61119c61121d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361120b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611202906132d1565b60405180910390fd5b61121481611f54565b50565b60095481565b61122561129b565b73ffffffffffffffffffffffffffffffffffffffff16611243610c30565b73ffffffffffffffffffffffffffffffffffffffff1614611299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112909061333d565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611312576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611309906133cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890613461565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161145f9190612b4d565b60405180910390a3505050565b60006114788484611107565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114f257818110156114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db906134cd565b60405180910390fd5b6114f184848484036112a3565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e9061355f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd906135f1565b60405180910390fd5b600081036115ef576115ea838360006120bb565b611f4f565b6115f7610c30565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156116655750611635610c30565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561169e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156116d8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156116f15750600560149054906101000a900460ff16155b15611ad457600a60009054906101000a900460ff166117eb57601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806117ab5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e19061365d565b60405180910390fd5b5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561188e5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611935576007548111156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf906136ef565b60405180910390fd5b6009546118e483610b0b565b826118ef9190612d51565b1115611930576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119279061375b565b60405180910390fd5b611ad3565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119d85750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a2757600754811115611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a19906137ed565b60405180910390fd5b611ad2565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ad157600954611a8483610b0b565b82611a8f9190612d51565b1115611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac79061375b565b60405180910390fd5b5b5b5b5b6000611adf30610b0b565b905060006008548210159050808015611b045750600a60019054906101000a900460ff165b8015611b1d5750600560149054906101000a900460ff16155b8015611b735750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611bc95750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c1f5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c63576001600560146101000a81548160ff021916908315150217905550611c47612331565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d195750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d2357600090505b60008115611f3657601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611d8657506000600e54115b15611e2057611db36064611da5600e548861253e90919063ffffffff16565b61255490919063ffffffff16565b9050600e5460105482611dc69190612e51565b611dd09190612ec2565b60126000828254611de19190612d51565b92505081905550600e54600f5482611df99190612e51565b611e039190612ec2565b60116000828254611e149190612d51565b92505081905550611f12565b601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e7b57506000600b54115b15611f1157611ea86064611e9a600b548861253e90919063ffffffff16565b61255490919063ffffffff16565b9050600b54600d5482611ebb9190612e51565b611ec59190612ec2565b60126000828254611ed69190612d51565b92505081905550600b54600c5482611eee9190612e51565b611ef89190612ec2565b60116000828254611f099190612d51565b925050819055505b5b6000811115611f2757611f268730836120bb565b5b8085611f33919061380d565b94505b611f418787876120bb565b601354600e81905550505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361212a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121219061355f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612190906135f1565b60405180910390fd5b6121a483838361256a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561222a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612221906138b3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123189190612b4d565b60405180910390a361232b84848461256f565b50505050565b600061233c30610b0b565b905060006011546012546123509190612d51565b90506000808314806123625750600082145b1561236f5750505061253c565b601460085461237e9190612e51565b8311156123975760146008546123949190612e51565b92505b6000600283601254866123aa9190612e51565b6123b49190612ec2565b6123be9190612ec2565b905060006123d5828661257490919063ffffffff16565b905060004790506123e58261258a565b60006123fa824761257490919063ffffffff16565b90506000612425876124176011548561253e90919063ffffffff16565b61255490919063ffffffff16565b905060008183612435919061380d565b9050600060128190555060006011819055506000861180156124575750600081115b156124a45761246686826127c7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260125460405161249b939291906138d3565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516124ea9061393b565b60006040518083038185875af1925050503d8060008114612527576040519150601f19603f3d011682016040523d82523d6000602084013e61252c565b606091505b5050809750505050505050505050505b565b6000818361254c9190612e51565b905092915050565b600081836125629190612ec2565b905092915050565b505050565b505050565b60008183612582919061380d565b905092915050565b6000600267ffffffffffffffff8111156125a7576125a6613950565b5b6040519080825280602002602001820160405280156125d55781602001602082028036833780820191505090505b50905030816000815181106125ed576125ec61397f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b691906139c3565b816001815181106126ca576126c961397f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061272f307f0000000000000000000000000000000000000000000000000000000000000000846112a3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612791959493929190613ae9565b600060405180830381600087803b1580156127ab57600080fd5b505af11580156127bf573d6000803e3d6000fd5b505050505050565b6127f2307f0000000000000000000000000000000000000000000000000000000000000000846112a3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161287996959493929190613b43565b60606040518083038185885af1158015612897573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128bc9190613bb9565b5050505050565b600080fd5b6000819050919050565b6128db816128c8565b81146128e657600080fd5b50565b6000813590506128f8816128d2565b92915050565b60008060408385031215612915576129146128c3565b5b6000612923858286016128e9565b9250506020612934858286016128e9565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561297857808201518184015260208101905061295d565b60008484015250505050565b6000601f19601f8301169050919050565b60006129a08261293e565b6129aa8185612949565b93506129ba81856020860161295a565b6129c381612984565b840191505092915050565b600060208201905081810360008301526129e88184612995565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a1b826129f0565b9050919050565b612a2b81612a10565b8114612a3657600080fd5b50565b600081359050612a4881612a22565b92915050565b60008060408385031215612a6557612a646128c3565b5b6000612a7385828601612a39565b9250506020612a84858286016128e9565b9150509250929050565b60008115159050919050565b612aa381612a8e565b82525050565b6000602082019050612abe6000830184612a9a565b92915050565b6000819050919050565b6000612ae9612ae4612adf846129f0565b612ac4565b6129f0565b9050919050565b6000612afb82612ace565b9050919050565b6000612b0d82612af0565b9050919050565b612b1d81612b02565b82525050565b6000602082019050612b386000830184612b14565b92915050565b612b47816128c8565b82525050565b6000602082019050612b626000830184612b3e565b92915050565b600080600060608486031215612b8157612b806128c3565b5b6000612b8f86828701612a39565b9350506020612ba086828701612a39565b9250506040612bb1868287016128e9565b9150509250925092565b612bc481612a10565b82525050565b6000602082019050612bdf6000830184612bbb565b92915050565b600060ff82169050919050565b612bfb81612be5565b82525050565b6000602082019050612c166000830184612bf2565b92915050565b600060208284031215612c3257612c316128c3565b5b6000612c4084828501612a39565b91505092915050565b612c5281612a8e565b8114612c5d57600080fd5b50565b600081359050612c6f81612c49565b92915050565b60008060408385031215612c8c57612c8b6128c3565b5b6000612c9a85828601612a39565b9250506020612cab85828601612c60565b9150509250929050565b600060208284031215612ccb57612cca6128c3565b5b6000612cd9848285016128e9565b91505092915050565b60008060408385031215612cf957612cf86128c3565b5b6000612d0785828601612a39565b9250506020612d1885828601612a39565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d5c826128c8565b9150612d67836128c8565b9250828201905080821115612d7f57612d7e612d22565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000612dbb601d83612949565b9150612dc682612d85565b602082019050919050565b60006020820190508181036000830152612dea81612dae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e3857607f821691505b602082108103612e4b57612e4a612df1565b5b50919050565b6000612e5c826128c8565b9150612e67836128c8565b9250828202612e75816128c8565b91508282048414831517612e8c57612e8b612d22565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ecd826128c8565b9150612ed8836128c8565b925082612ee857612ee7612e93565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e3560008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f4f602183612949565b9150612f5a82612ef3565b604082019050919050565b60006020820190508181036000830152612f7e81612f42565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000612fe1602483612949565b9150612fec82612f85565b604082019050919050565b6000602082019050818103600083015261301081612fd4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613073603983612949565b915061307e82613017565b604082019050919050565b600060208201905081810360008301526130a281613066565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613105602583612949565b9150613110826130a9565b604082019050919050565b60006020820190508181036000830152613134816130f8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613197603583612949565b91506131a28261313b565b604082019050919050565b600060208201905081810360008301526131c68161318a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613229603483612949565b9150613234826131cd565b604082019050919050565b600060208201905081810360008301526132588161321c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132bb602683612949565b91506132c68261325f565b604082019050919050565b600060208201905081810360008301526132ea816132ae565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613327602083612949565b9150613332826132f1565b602082019050919050565b600060208201905081810360008301526133568161331a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133b9602483612949565b91506133c48261335d565b604082019050919050565b600060208201905081810360008301526133e8816133ac565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061344b602283612949565b9150613456826133ef565b604082019050919050565b6000602082019050818103600083015261347a8161343e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006134b7601d83612949565b91506134c282613481565b602082019050919050565b600060208201905081810360008301526134e6816134aa565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613549602583612949565b9150613554826134ed565b604082019050919050565b600060208201905081810360008301526135788161353c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135db602383612949565b91506135e68261357f565b604082019050919050565b6000602082019050818103600083015261360a816135ce565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613647601683612949565b915061365282613611565b602082019050919050565b600060208201905081810360008301526136768161363a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006136d9603583612949565b91506136e48261367d565b604082019050919050565b60006020820190508181036000830152613708816136cc565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613745601383612949565b91506137508261370f565b602082019050919050565b6000602082019050818103600083015261377481613738565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006137d7603683612949565b91506137e28261377b565b604082019050919050565b60006020820190508181036000830152613806816137ca565b9050919050565b6000613818826128c8565b9150613823836128c8565b925082820390508181111561383b5761383a612d22565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061389d602683612949565b91506138a882613841565b604082019050919050565b600060208201905081810360008301526138cc81613890565b9050919050565b60006060820190506138e86000830186612b3e565b6138f56020830185612b3e565b6139026040830184612b3e565b949350505050565b600081905092915050565b50565b600061392560008361390a565b915061393082613915565b600082019050919050565b600061394682613918565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506139bd81612a22565b92915050565b6000602082840312156139d9576139d86128c3565b5b60006139e7848285016139ae565b91505092915050565b6000819050919050565b6000613a15613a10613a0b846139f0565b612ac4565b6128c8565b9050919050565b613a25816139fa565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a6081612a10565b82525050565b6000613a728383613a57565b60208301905092915050565b6000602082019050919050565b6000613a9682613a2b565b613aa08185613a36565b9350613aab83613a47565b8060005b83811015613adc578151613ac38882613a66565b9750613ace83613a7e565b925050600181019050613aaf565b5085935050505092915050565b600060a082019050613afe6000830188612b3e565b613b0b6020830187613a1c565b8181036040830152613b1d8186613a8b565b9050613b2c6060830185612bbb565b613b396080830184612b3e565b9695505050505050565b600060c082019050613b586000830189612bbb565b613b656020830188612b3e565b613b726040830187613a1c565b613b7f6060830186613a1c565b613b8c6080830185612bbb565b613b9960a0830184612b3e565b979650505050505050565b600081519050613bb3816128d2565b92915050565b600080600060608486031215613bd257613bd16128c3565b5b6000613be086828701613ba4565b9350506020613bf186828701613ba4565b9250506040613c0286828701613ba4565b915050925092509256fea2646970667358221220a7edc60e071ab6fb0ea50b2150175adfdc027c2595d67623cefe6c0d7d425f8164736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c806375f0a8741161010d578063bbc0c742116100a0578063d85ba0631161006f578063d85ba06314610744578063dd62ed3e1461076f578063e2f45605146107ac578063f2fde38b146107d7578063f8b45b051461080057610204565b8063bbc0c74214610688578063c0246668146106b3578063c8c8ebe4146106dc578063d257b34f1461070757610204565b806396188399116100dc57806396188399146105bc5780639a7a23d6146105e5578063a457c2d71461060e578063a9059cbb1461064b57610204565b806375f0a874146105245780638a8c523c1461054f5780638da5cb5b1461056657806395d89b411461059157610204565b806339509351116101905780636a486a8e1161015f5780636a486a8e146104515780636ddd17131461047c57806370a08231146104a7578063715018a6146104e45780637571336a146104fb57610204565b8063395093511461038357806349bd5a5e146103c05780634fbee193146103eb57806366ca9b831461042857610204565b806318160ddd116101cc57806318160ddd146102c557806323b872dd146102f057806327c8f8351461032d578063313ce5671461035857610204565b806302dbd8f81461020957806306fdde0314610232578063095ea7b31461025d5780631694505e1461029a57610204565b3661020457005b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906128fe565b61082b565b005b34801561023e57600080fd5b506102476108aa565b60405161025491906129ce565b60405180910390f35b34801561026957600080fd5b50610284600480360381019061027f9190612a4e565b61093c565b6040516102919190612aa9565b60405180910390f35b3480156102a657600080fd5b506102af61095f565b6040516102bc9190612b23565b60405180910390f35b3480156102d157600080fd5b506102da610983565b6040516102e79190612b4d565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190612b68565b61098d565b6040516103249190612aa9565b60405180910390f35b34801561033957600080fd5b506103426109bc565b60405161034f9190612bca565b60405180910390f35b34801561036457600080fd5b5061036d6109c2565b60405161037a9190612c01565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190612a4e565b6109cb565b6040516103b79190612aa9565b60405180910390f35b3480156103cc57600080fd5b506103d5610a02565b6040516103e29190612bca565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190612c1c565b610a26565b60405161041f9190612aa9565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a91906128fe565b610a7c565b005b34801561045d57600080fd5b50610466610af2565b6040516104739190612b4d565b60405180910390f35b34801561048857600080fd5b50610491610af8565b60405161049e9190612aa9565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190612c1c565b610b0b565b6040516104db9190612b4d565b60405180910390f35b3480156104f057600080fd5b506104f9610b53565b005b34801561050757600080fd5b50610522600480360381019061051d9190612c75565b610b67565b005b34801561053057600080fd5b50610539610bca565b6040516105469190612bca565b60405180910390f35b34801561055b57600080fd5b50610564610bf0565b005b34801561057257600080fd5b5061057b610c30565b6040516105889190612bca565b60405180910390f35b34801561059d57600080fd5b506105a6610c5a565b6040516105b391906129ce565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de91906128fe565b610cec565b005b3480156105f157600080fd5b5061060c60048036038101906106079190612c75565b610e18565b005b34801561061a57600080fd5b5061063560048036038101906106309190612a4e565b610ebc565b6040516106429190612aa9565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190612a4e565b610f33565b60405161067f9190612aa9565b60405180910390f35b34801561069457600080fd5b5061069d610f56565b6040516106aa9190612aa9565b60405180910390f35b3480156106bf57600080fd5b506106da60048036038101906106d59190612c75565b610f69565b005b3480156106e857600080fd5b506106f161101a565b6040516106fe9190612b4d565b60405180910390f35b34801561071357600080fd5b5061072e60048036038101906107299190612cb5565b611020565b60405161073b9190612aa9565b60405180910390f35b34801561075057600080fd5b50610759611101565b6040516107669190612b4d565b60405180910390f35b34801561077b57600080fd5b5061079660048036038101906107919190612ce2565b611107565b6040516107a39190612b4d565b60405180910390f35b3480156107b857600080fd5b506107c161118e565b6040516107ce9190612b4d565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190612c1c565b611194565b005b34801561080c57600080fd5b50610815611217565b6040516108229190612b4d565b60405180910390f35b61083361121d565b81600f8190555080601081905550601054600f546108519190612d51565b600e81905550600e546013819055506014600e5411156108a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089d90612dd1565b60405180910390fd5b5050565b6060600380546108b990612e20565b80601f01602080910402602001604051908101604052809291908181526020018280546108e590612e20565b80156109325780601f1061090757610100808354040283529160200191610932565b820191906000526020600020905b81548152906001019060200180831161091557829003601f168201915b5050505050905090565b60008061094761129b565b90506109548185856112a3565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60008061099861129b565b90506109a585828561146c565b6109b08585856114f8565b60019150509392505050565b61dead81565b60006012905090565b6000806109d661129b565b90506109f78185856109e88589611107565b6109f29190612d51565b6112a3565b600191505092915050565b7f00000000000000000000000020ff644a878ba018599dda5deece796d480f1d5581565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610a8461121d565b81600c8190555080600d81905550600d54600c54610aa29190612d51565b600b819055506014600b541115610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590612dd1565b60405180910390fd5b5050565b600e5481565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b5b61121d565b610b656000611f54565b565b610b6f61121d565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bf861121d565b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c6990612e20565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9590612e20565b8015610ce25780601f10610cb757610100808354040283529160200191610ce2565b820191906000526020600020905b815481529060010190602001808311610cc557829003601f168201915b5050505050905090565b610cf461121d565b670de0b6b3a76400006103e86005610d0a610983565b610d149190612e51565b610d1e9190612ec2565b610d289190612ec2565b821015610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190612f65565b60405180910390fd5b670de0b6b3a76400006103e86005610d80610983565b610d8a9190612e51565b610d949190612ec2565b610d9e9190612ec2565b811015610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd790612ff7565b60405180910390fd5b670de0b6b3a764000081610df49190612e51565b600981905550670de0b6b3a764000082610e0e9190612e51565b6007819055505050565b610e2061121d565b7f00000000000000000000000020ff644a878ba018599dda5deece796d480f1d5573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea590613089565b60405180910390fd5b610eb8828261201a565b5050565b600080610ec761129b565b90506000610ed58286611107565b905083811015610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f119061311b565b60405180910390fd5b610f2782868684036112a3565b60019250505092915050565b600080610f3e61129b565b9050610f4b8185856114f8565b600191505092915050565b600a60009054906101000a900460ff1681565b610f7161121d565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161100e9190612aa9565b60405180910390a25050565b60075481565b600061102a61121d565b620186a06001611038610983565b6110429190612e51565b61104c9190612ec2565b82101561108e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611085906131ad565b60405180910390fd5b6103e8600561109b610983565b6110a59190612e51565b6110af9190612ec2565b8211156110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e89061323f565b60405180910390fd5b8160088190555060019050919050565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b61119c61121d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361120b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611202906132d1565b60405180910390fd5b61121481611f54565b50565b60095481565b61122561129b565b73ffffffffffffffffffffffffffffffffffffffff16611243610c30565b73ffffffffffffffffffffffffffffffffffffffff1614611299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112909061333d565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611312576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611309906133cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890613461565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161145f9190612b4d565b60405180910390a3505050565b60006114788484611107565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114f257818110156114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db906134cd565b60405180910390fd5b6114f184848484036112a3565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e9061355f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd906135f1565b60405180910390fd5b600081036115ef576115ea838360006120bb565b611f4f565b6115f7610c30565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156116655750611635610c30565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561169e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156116d8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156116f15750600560149054906101000a900460ff16155b15611ad457600a60009054906101000a900460ff166117eb57601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806117ab5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e19061365d565b60405180910390fd5b5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561188e5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611935576007548111156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf906136ef565b60405180910390fd5b6009546118e483610b0b565b826118ef9190612d51565b1115611930576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119279061375b565b60405180910390fd5b611ad3565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119d85750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a2757600754811115611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a19906137ed565b60405180910390fd5b611ad2565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ad157600954611a8483610b0b565b82611a8f9190612d51565b1115611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac79061375b565b60405180910390fd5b5b5b5b5b6000611adf30610b0b565b905060006008548210159050808015611b045750600a60019054906101000a900460ff165b8015611b1d5750600560149054906101000a900460ff16155b8015611b735750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611bc95750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c1f5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c63576001600560146101000a81548160ff021916908315150217905550611c47612331565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d195750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d2357600090505b60008115611f3657601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611d8657506000600e54115b15611e2057611db36064611da5600e548861253e90919063ffffffff16565b61255490919063ffffffff16565b9050600e5460105482611dc69190612e51565b611dd09190612ec2565b60126000828254611de19190612d51565b92505081905550600e54600f5482611df99190612e51565b611e039190612ec2565b60116000828254611e149190612d51565b92505081905550611f12565b601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e7b57506000600b54115b15611f1157611ea86064611e9a600b548861253e90919063ffffffff16565b61255490919063ffffffff16565b9050600b54600d5482611ebb9190612e51565b611ec59190612ec2565b60126000828254611ed69190612d51565b92505081905550600b54600c5482611eee9190612e51565b611ef89190612ec2565b60116000828254611f099190612d51565b925050819055505b5b6000811115611f2757611f268730836120bb565b5b8085611f33919061380d565b94505b611f418787876120bb565b601354600e81905550505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361212a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121219061355f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612190906135f1565b60405180910390fd5b6121a483838361256a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561222a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612221906138b3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123189190612b4d565b60405180910390a361232b84848461256f565b50505050565b600061233c30610b0b565b905060006011546012546123509190612d51565b90506000808314806123625750600082145b1561236f5750505061253c565b601460085461237e9190612e51565b8311156123975760146008546123949190612e51565b92505b6000600283601254866123aa9190612e51565b6123b49190612ec2565b6123be9190612ec2565b905060006123d5828661257490919063ffffffff16565b905060004790506123e58261258a565b60006123fa824761257490919063ffffffff16565b90506000612425876124176011548561253e90919063ffffffff16565b61255490919063ffffffff16565b905060008183612435919061380d565b9050600060128190555060006011819055506000861180156124575750600081115b156124a45761246686826127c7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260125460405161249b939291906138d3565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516124ea9061393b565b60006040518083038185875af1925050503d8060008114612527576040519150601f19603f3d011682016040523d82523d6000602084013e61252c565b606091505b5050809750505050505050505050505b565b6000818361254c9190612e51565b905092915050565b600081836125629190612ec2565b905092915050565b505050565b505050565b60008183612582919061380d565b905092915050565b6000600267ffffffffffffffff8111156125a7576125a6613950565b5b6040519080825280602002602001820160405280156125d55781602001602082028036833780820191505090505b50905030816000815181106125ed576125ec61397f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b691906139c3565b816001815181106126ca576126c961397f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061272f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846112a3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612791959493929190613ae9565b600060405180830381600087803b1580156127ab57600080fd5b505af11580156127bf573d6000803e3d6000fd5b505050505050565b6127f2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846112a3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161287996959493929190613b43565b60606040518083038185885af1158015612897573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128bc9190613bb9565b5050505050565b600080fd5b6000819050919050565b6128db816128c8565b81146128e657600080fd5b50565b6000813590506128f8816128d2565b92915050565b60008060408385031215612915576129146128c3565b5b6000612923858286016128e9565b9250506020612934858286016128e9565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561297857808201518184015260208101905061295d565b60008484015250505050565b6000601f19601f8301169050919050565b60006129a08261293e565b6129aa8185612949565b93506129ba81856020860161295a565b6129c381612984565b840191505092915050565b600060208201905081810360008301526129e88184612995565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a1b826129f0565b9050919050565b612a2b81612a10565b8114612a3657600080fd5b50565b600081359050612a4881612a22565b92915050565b60008060408385031215612a6557612a646128c3565b5b6000612a7385828601612a39565b9250506020612a84858286016128e9565b9150509250929050565b60008115159050919050565b612aa381612a8e565b82525050565b6000602082019050612abe6000830184612a9a565b92915050565b6000819050919050565b6000612ae9612ae4612adf846129f0565b612ac4565b6129f0565b9050919050565b6000612afb82612ace565b9050919050565b6000612b0d82612af0565b9050919050565b612b1d81612b02565b82525050565b6000602082019050612b386000830184612b14565b92915050565b612b47816128c8565b82525050565b6000602082019050612b626000830184612b3e565b92915050565b600080600060608486031215612b8157612b806128c3565b5b6000612b8f86828701612a39565b9350506020612ba086828701612a39565b9250506040612bb1868287016128e9565b9150509250925092565b612bc481612a10565b82525050565b6000602082019050612bdf6000830184612bbb565b92915050565b600060ff82169050919050565b612bfb81612be5565b82525050565b6000602082019050612c166000830184612bf2565b92915050565b600060208284031215612c3257612c316128c3565b5b6000612c4084828501612a39565b91505092915050565b612c5281612a8e565b8114612c5d57600080fd5b50565b600081359050612c6f81612c49565b92915050565b60008060408385031215612c8c57612c8b6128c3565b5b6000612c9a85828601612a39565b9250506020612cab85828601612c60565b9150509250929050565b600060208284031215612ccb57612cca6128c3565b5b6000612cd9848285016128e9565b91505092915050565b60008060408385031215612cf957612cf86128c3565b5b6000612d0785828601612a39565b9250506020612d1885828601612a39565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d5c826128c8565b9150612d67836128c8565b9250828201905080821115612d7f57612d7e612d22565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000612dbb601d83612949565b9150612dc682612d85565b602082019050919050565b60006020820190508181036000830152612dea81612dae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e3857607f821691505b602082108103612e4b57612e4a612df1565b5b50919050565b6000612e5c826128c8565b9150612e67836128c8565b9250828202612e75816128c8565b91508282048414831517612e8c57612e8b612d22565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ecd826128c8565b9150612ed8836128c8565b925082612ee857612ee7612e93565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e3560008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f4f602183612949565b9150612f5a82612ef3565b604082019050919050565b60006020820190508181036000830152612f7e81612f42565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000612fe1602483612949565b9150612fec82612f85565b604082019050919050565b6000602082019050818103600083015261301081612fd4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613073603983612949565b915061307e82613017565b604082019050919050565b600060208201905081810360008301526130a281613066565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613105602583612949565b9150613110826130a9565b604082019050919050565b60006020820190508181036000830152613134816130f8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613197603583612949565b91506131a28261313b565b604082019050919050565b600060208201905081810360008301526131c68161318a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613229603483612949565b9150613234826131cd565b604082019050919050565b600060208201905081810360008301526132588161321c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132bb602683612949565b91506132c68261325f565b604082019050919050565b600060208201905081810360008301526132ea816132ae565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613327602083612949565b9150613332826132f1565b602082019050919050565b600060208201905081810360008301526133568161331a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133b9602483612949565b91506133c48261335d565b604082019050919050565b600060208201905081810360008301526133e8816133ac565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061344b602283612949565b9150613456826133ef565b604082019050919050565b6000602082019050818103600083015261347a8161343e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006134b7601d83612949565b91506134c282613481565b602082019050919050565b600060208201905081810360008301526134e6816134aa565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613549602583612949565b9150613554826134ed565b604082019050919050565b600060208201905081810360008301526135788161353c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135db602383612949565b91506135e68261357f565b604082019050919050565b6000602082019050818103600083015261360a816135ce565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613647601683612949565b915061365282613611565b602082019050919050565b600060208201905081810360008301526136768161363a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006136d9603583612949565b91506136e48261367d565b604082019050919050565b60006020820190508181036000830152613708816136cc565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613745601383612949565b91506137508261370f565b602082019050919050565b6000602082019050818103600083015261377481613738565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006137d7603683612949565b91506137e28261377b565b604082019050919050565b60006020820190508181036000830152613806816137ca565b9050919050565b6000613818826128c8565b9150613823836128c8565b925082820390508181111561383b5761383a612d22565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061389d602683612949565b91506138a882613841565b604082019050919050565b600060208201905081810360008301526138cc81613890565b9050919050565b60006060820190506138e86000830186612b3e565b6138f56020830185612b3e565b6139026040830184612b3e565b949350505050565b600081905092915050565b50565b600061392560008361390a565b915061393082613915565b600082019050919050565b600061394682613918565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506139bd81612a22565b92915050565b6000602082840312156139d9576139d86128c3565b5b60006139e7848285016139ae565b91505092915050565b6000819050919050565b6000613a15613a10613a0b846139f0565b612ac4565b6128c8565b9050919050565b613a25816139fa565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a6081612a10565b82525050565b6000613a728383613a57565b60208301905092915050565b6000602082019050919050565b6000613a9682613a2b565b613aa08185613a36565b9350613aab83613a47565b8060005b83811015613adc578151613ac38882613a66565b9750613ace83613a7e565b925050600181019050613aaf565b5085935050505092915050565b600060a082019050613afe6000830188612b3e565b613b0b6020830187613a1c565b8181036040830152613b1d8186613a8b565b9050613b2c6060830185612bbb565b613b396080830184612b3e565b9695505050505050565b600060c082019050613b586000830189612bbb565b613b656020830188612b3e565b613b726040830187613a1c565b613b7f6060830186613a1c565b613b8c6080830185612bbb565b613b9960a0830184612b3e565b979650505050505050565b600081519050613bb3816128d2565b92915050565b600080600060608486031215613bd257613bd16128c3565b5b6000613be086828701613ba4565b9350506020613bf186828701613ba4565b9250506040613c0286828701613ba4565b915050925092509256fea2646970667358221220a7edc60e071ab6fb0ea50b2150175adfdc027c2595d67623cefe6c0d7d425f8164736f6c63430008130033
Deployed Bytecode Sourcemap
37722:11877:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42561:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9506:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12007:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37796:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10635:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12829:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37899:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10477:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13533:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37854:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43645:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42220:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38337:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38185:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10806:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2886:103;;;;;;;;;;;;;:::i;:::-;;42045:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37991:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40883:112;;;;;;;;;;;;;:::i;:::-;;2245:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9725:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41508:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43137:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14306:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11189:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38145:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42947:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38030:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41003:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38225:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11486:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38072:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3144:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38112:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42561:378;2131:13;:11;:13::i;:::-;42703::::1;42684:16;:32;;;;42746:13;42727:16;:32;;;;42805:16;;42786;;:35;;;;:::i;:::-;42770:13;:51;;;;42846:13;;42832:11;:27;;;;42895:2;42878:13;;:19;;42870:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42561:378:::0;;:::o;9506:100::-;9560:13;9593:5;9586:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9506:100;:::o;12007:242::-;12126:4;12148:13;12164:12;:10;:12::i;:::-;12148:28;;12187:32;12196:5;12203:7;12212:6;12187:8;:32::i;:::-;12237:4;12230:11;;;12007:242;;;;:::o;37796:51::-;;;:::o;10635:108::-;10696:7;10723:12;;10716:19;;10635:108;:::o;12829:295::-;12960:4;12977:15;12995:12;:10;:12::i;:::-;12977:30;;13018:38;13034:4;13040:7;13049:6;13018:15;:38::i;:::-;13067:27;13077:4;13083:2;13087:6;13067:9;:27::i;:::-;13112:4;13105:11;;;12829:295;;;;;:::o;37899:53::-;37945:6;37899:53;:::o;10477:93::-;10535:5;10560:2;10553:9;;10477:93;:::o;13533:270::-;13648:4;13670:13;13686:12;:10;:12::i;:::-;13670:28;;13709:64;13718:5;13725:7;13762:10;13734:25;13744:5;13751:7;13734:9;:25::i;:::-;:38;;;;:::i;:::-;13709:8;:64::i;:::-;13791:4;13784:11;;;13533:270;;;;:::o;37854:38::-;;;:::o;43645:126::-;43711:4;43735:19;:28;43755:7;43735:28;;;;;;;;;;;;;;;;;;;;;;;;;43728:35;;43645:126;;;:::o;42220:333::-;2131:13;:11;:13::i;:::-;42360::::1;42342:15;:31;;;;42402:13;42384:15;:31;;;;42459:15;;42441;;:33;;;;:::i;:::-;42426:12;:48;;;;42509:2;42493:12;;:18;;42485:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42220:333:::0;;:::o;38337:28::-;;;;:::o;38185:31::-;;;;;;;;;;;;;:::o;10806:177::-;10925:7;10957:9;:18;10967:7;10957:18;;;;;;;;;;;;;;;;10950:25;;10806:177;;;:::o;2886:103::-;2131:13;:11;:13::i;:::-;2951:30:::1;2978:1;2951:18;:30::i;:::-;2886:103::o:0;42045:167::-;2131:13;:11;:13::i;:::-;42200:4:::1;42158:31;:39;42190:6;42158:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42045:167:::0;;:::o;37991:30::-;;;;;;;;;;;;;:::o;40883:112::-;2131:13;:11;:13::i;:::-;40954:4:::1;40938:13;;:20;;;;;;;;;;;;;;;;;;40983:4;40969:11;;:18;;;;;;;;;;;;;;;;;;40883:112::o:0;2245:87::-;2291:7;2318:6;;;;;;;;;;;2311:13;;2245:87;:::o;9725:104::-;9781:13;9814:7;9807:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9725:104;:::o;41508:529::-;2131:13;:11;:13::i;:::-;41710:4:::1;41702;41697:1;41681:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41680:26;;;;:::i;:::-;41679:35;;;;:::i;:::-;41666:9;:48;;41644:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;41858:4;41850;41845:1;41829:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41828:26;;;;:::i;:::-;41827:35;;;;:::i;:::-;41808:15;:54;;41786:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41968:6;41949:15;:26;;;;:::i;:::-;41937:9;:38;;;;42022:6;42009:9;:20;;;;:::i;:::-;41986;:43;;;;41508:529:::0;;:::o;43137:304::-;2131:13;:11;:13::i;:::-;43281::::1;43273:21;;:4;:21;;::::0;43251:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43392:41;43421:4;43427:5;43392:28;:41::i;:::-;43137:304:::0;;:::o;14306:505::-;14426:4;14448:13;14464:12;:10;:12::i;:::-;14448:28;;14487:24;14514:25;14524:5;14531:7;14514:9;:25::i;:::-;14487:52;;14592:15;14572:16;:35;;14550:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14708:60;14717:5;14724:7;14752:15;14733:16;:34;14708:8;:60::i;:::-;14799:4;14792:11;;;;14306:505;;;;:::o;11189:234::-;11304:4;11326:13;11342:12;:10;:12::i;:::-;11326:28;;11365;11375:5;11382:2;11386:6;11365:9;:28::i;:::-;11411:4;11404:11;;;11189:234;;;;:::o;38145:33::-;;;;;;;;;;;;;:::o;42947:182::-;2131:13;:11;:13::i;:::-;43063:8:::1;43032:19;:28;43052:7;43032:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43103:7;43087:34;;;43112:8;43087:34;;;;;;:::i;:::-;;;;;;;;42947:182:::0;;:::o;38030:35::-;;;;:::o;41003:497::-;41111:4;2131:13;:11;:13::i;:::-;41190:6:::1;41185:1;41169:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41168:28;;;;:::i;:::-;41155:9;:41;;41133:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;41345:4;41340:1;41324:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41323:26;;;;:::i;:::-;41310:9;:39;;41288:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;41461:9;41440:18;:30;;;;41488:4;41481:11;;41003:497:::0;;;:::o;38225:27::-;;;;:::o;11486:201::-;11620:7;11652:11;:18;11664:5;11652:18;;;;;;;;;;;;;;;:27;11671:7;11652:27;;;;;;;;;;;;;;;;11645:34;;11486:201;;;;:::o;38072:33::-;;;;:::o;3144:238::-;2131:13;:11;:13::i;:::-;3267:1:::1;3247:22;;:8;:22;;::::0;3225:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3346:28;3365:8;3346:18;:28::i;:::-;3144:238:::0;:::o;38112:24::-;;;;:::o;2410:132::-;2485:12;:10;:12::i;:::-;2474:23;;:7;:5;:7::i;:::-;:23;;;2466:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2410:132::o;790:98::-;843:7;870:10;863:17;;790:98;:::o;18439:380::-;18592:1;18575:19;;:5;:19;;;18567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18673:1;18654:21;;:7;:21;;;18646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18757:6;18727:11;:18;18739:5;18727:18;;;;;;;;;;;;;;;:27;18746:7;18727:27;;;;;;;;;;;;;;;:36;;;;18795:7;18779:32;;18788:5;18779:32;;;18804:6;18779:32;;;;;;:::i;:::-;;;;;;;;18439:380;;;:::o;19110:502::-;19245:24;19272:25;19282:5;19289:7;19272:9;:25::i;:::-;19245:52;;19332:17;19312:16;:37;19308:297;;19412:6;19392:16;:26;;19366:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19527:51;19536:5;19543:7;19571:6;19552:16;:25;19527:8;:51::i;:::-;19308:297;19234:378;19110:502;;;:::o;43779:3449::-;43927:1;43911:18;;:4;:18;;;43903:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44004:1;43990:16;;:2;:16;;;43982:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44073:1;44063:6;:11;44059:93;;44091:28;44107:4;44113:2;44117:1;44091:15;:28::i;:::-;44134:7;;44059:93;44190:7;:5;:7::i;:::-;44182:15;;:4;:15;;;;:45;;;;;44220:7;:5;:7::i;:::-;44214:13;;:2;:13;;;;44182:45;:78;;;;;44258:1;44244:16;;:2;:16;;;;44182:78;:112;;;;;37945:6;44277:17;;:2;:17;;;;44182:112;:138;;;;;44312:8;;;;;;;;;;;44311:9;44182:138;44164:1476;;;44352:13;;;;;;;;;;;44347:203;;44416:19;:25;44436:4;44416:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44445:19;:23;44465:2;44445:23;;;;;;;;;;;;;;;;;;;;;;;;;44416:52;44386:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;44347:203;44612:25;:31;44638:4;44612:31;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;44665:31;:35;44697:2;44665:35;;;;;;;;;;;;;;;;;;;;;;;;;44664:36;44612:88;44590:1039;;;44775:20;;44765:6;:30;;44735:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;44967:9;;44950:13;44960:2;44950:9;:13::i;:::-;44941:6;:22;;;;:::i;:::-;:35;;44911:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;44590:1039;;;45121:25;:29;45147:2;45121:29;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;45172:31;:37;45204:4;45172:37;;;;;;;;;;;;;;;;;;;;;;;;;45171:38;45121:88;45099:530;;;45284:20;;45274:6;:30;;45244:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;45099:530;;;45429:31;:35;45461:2;45429:35;;;;;;;;;;;;;;;;;;;;;;;;;45424:205;;45541:9;;45524:13;45534:2;45524:9;:13::i;:::-;45515:6;:22;;;;:::i;:::-;:35;;45485:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;45424:205;45099:530;44590:1039;44164:1476;45652:28;45683:24;45701:4;45683:9;:24::i;:::-;45652:55;;45720:12;45759:18;;45735:20;:42;;45720:57;;45808:7;:35;;;;;45832:11;;;;;;;;;;;45808:35;:61;;;;;45861:8;;;;;;;;;;;45860:9;45808:61;:110;;;;;45887:25;:31;45913:4;45887:31;;;;;;;;;;;;;;;;;;;;;;;;;45886:32;45808:110;:153;;;;;45936:19;:25;45956:4;45936:25;;;;;;;;;;;;;;;;;;;;;;;;;45935:26;45808:153;:194;;;;;45979:19;:23;45999:2;45979:23;;;;;;;;;;;;;;;;;;;;;;;;;45978:24;45808:194;45790:326;;;46040:4;46029:8;;:15;;;;;;;;;;;;;;;;;;46061:10;:8;:10::i;:::-;46099:5;46088:8;;:16;;;;;;;;;;;;;;;;;;45790:326;46128:12;46144:8;;;;;;;;;;;46143:9;46128:24;;46169:19;:25;46189:4;46169:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;46198:19;:23;46218:2;46198:23;;;;;;;;;;;;;;;;;;;;;;;;;46169:52;46165:100;;;46248:5;46238:15;;46165:100;46277:12;46310:7;46306:831;;;46362:25;:29;46388:2;46362:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;46411:1;46395:13;;:17;46362:50;46358:630;;;46440:34;46470:3;46440:25;46451:13;;46440:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46433:41;;46543:13;;46523:16;;46516:4;:23;;;;:::i;:::-;46515:41;;;;:::i;:::-;46493:18;;:63;;;;;;;:::i;:::-;;;;;;;;46625:13;;46605:16;;46598:4;:23;;;;:::i;:::-;46597:41;;;;:::i;:::-;46575:18;;:63;;;;;;;:::i;:::-;;;;;;;;46358:630;;;46700:25;:31;46726:4;46700:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;46750:1;46735:12;;:16;46700:51;46696:292;;;46779:33;46808:3;46779:24;46790:12;;46779:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46772:40;;46880:12;;46861:15;;46854:4;:22;;;;:::i;:::-;46853:39;;;;:::i;:::-;46831:18;;:61;;;;;;;:::i;:::-;;;;;;;;46960:12;;46941:15;;46934:4;:22;;;;:::i;:::-;46933:39;;;;:::i;:::-;46911:18;;:61;;;;;;;:::i;:::-;;;;;;;;46696:292;46358:630;47015:1;47008:4;:8;47004:91;;;47037:42;47053:4;47067;47074;47037:15;:42::i;:::-;47004:91;47121:4;47111:14;;;;;:::i;:::-;;;46306:831;47149:33;47165:4;47171:2;47175:6;47149:15;:33::i;:::-;47209:11;;47193:13;:27;;;;43892:3336;;;;43779:3449;;;;:::o;3542:191::-;3616:16;3635:6;;;;;;;;;;;3616:25;;3661:8;3652:6;;:17;;;;;;;;;;;;;;;;;;3716:8;3685:40;;3706:8;3685:40;;;;;;;;;;;;3605:128;3542:191;:::o;43449:188::-;43566:5;43532:25;:31;43558:4;43532:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43623:5;43589:40;;43617:4;43589:40;;;;;;;;;;;;43449:188;;:::o;15281:877::-;15428:1;15412:18;;:4;:18;;;15404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15505:1;15491:16;;:2;:16;;;15483:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15560:38;15581:4;15587:2;15591:6;15560:20;:38::i;:::-;15611:19;15633:9;:15;15643:4;15633:15;;;;;;;;;;;;;;;;15611:37;;15696:6;15681:11;:21;;15659:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;15836:6;15822:11;:20;15804:9;:15;15814:4;15804:15;;;;;;;;;;;;;;;:38;;;;16039:6;16022:9;:13;16032:2;16022:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16089:2;16074:26;;16083:4;16074:26;;;16093:6;16074:26;;;;;;:::i;:::-;;;;;;;;16113:37;16133:4;16139:2;16143:6;16113:19;:37::i;:::-;15393:765;15281:877;;;:::o;48123:1473::-;48162:23;48188:24;48206:4;48188:9;:24::i;:::-;48162:50;;48223:25;48272:18;;48251;;:39;;;;:::i;:::-;48223:67;;48301:12;48349:1;48330:15;:20;:46;;;;48375:1;48354:17;:22;48330:46;48326:85;;;48393:7;;;;;48326:85;48466:2;48445:18;;:23;;;;:::i;:::-;48427:15;:41;48423:115;;;48524:2;48503:18;;:23;;;;:::i;:::-;48485:41;;48423:115;48550:23;48663:1;48630:17;48595:18;;48577:15;:36;;;;:::i;:::-;48576:71;;;;:::i;:::-;:88;;;;:::i;:::-;48550:114;;48675:26;48704:36;48724:15;48704;:19;;:36;;;;:::i;:::-;48675:65;;48753:25;48781:21;48753:49;;48815:36;48832:18;48815:16;:36::i;:::-;48864:18;48885:44;48911:17;48885:21;:25;;:44;;;;:::i;:::-;48864:65;;48942:23;48968:81;49021:17;48968:34;48983:18;;48968:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;48942:107;;49062:23;49101:15;49088:10;:28;;;;:::i;:::-;49062:54;;49150:1;49129:18;:22;;;;49183:1;49162:18;:22;;;;49219:1;49201:15;:19;:42;;;;;49242:1;49224:15;:19;49201:42;49197:278;;;49260:46;49273:15;49290;49260:12;:46::i;:::-;49326:137;49359:18;49396:15;49430:18;;49326:137;;;;;;;;:::i;:::-;;;;;;;;49197:278;49509:15;;;;;;;;;;;49501:29;;49552:21;49501:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49487:101;;;;;48151:1445;;;;;;;;;48123:1473;:::o;24787:98::-;24845:7;24876:1;24872;:5;;;;:::i;:::-;24865:12;;24787:98;;;;:::o;25186:::-;25244:7;25275:1;25271;:5;;;;:::i;:::-;25264:12;;25186:98;;;;:::o;20212:125::-;;;;:::o;20941:124::-;;;;:::o;24430:98::-;24488:7;24519:1;24515;:5;;;;:::i;:::-;24508:12;;24430:98;;;;:::o;47236:501::-;47302:21;47340:1;47326:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47302:40;;47371:4;47353;47358:1;47353:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47397:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47387:4;47392:1;47387:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47432:62;47449:4;47464:15;47482:11;47432:8;:62::i;:::-;47533:15;:66;;;47614:11;47640:1;47656:4;47683;47703:15;47533:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47291:446;47236:501;:::o;47745:370::-;47826:62;47843:4;47858:15;47876:11;47826:8;:62::i;:::-;47901:15;:31;;;47940:9;47973:4;47993:11;48019:1;48035;48051:15;;;;;;;;;;;48081;47901:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47745:370;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:153::-;4349:9;4382:37;4413:5;4382:37;:::i;:::-;4369:50;;4272:153;;;:::o;4431:185::-;4545:64;4603:5;4545:64;:::i;:::-;4540:3;4533:77;4431:185;;:::o;4622:276::-;4742:4;4780:2;4769:9;4765:18;4757:26;;4793:98;4888:1;4877:9;4873:17;4864:6;4793:98;:::i;:::-;4622:276;;;;:::o;4904:118::-;4991:24;5009:5;4991:24;:::i;:::-;4986:3;4979:37;4904:118;;:::o;5028:222::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:71;5240:1;5229:9;5225:17;5216:6;5172:71;:::i;:::-;5028:222;;;;:::o;5256:619::-;5333:6;5341;5349;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5779:2;5805:53;5850:7;5841:6;5830:9;5826:22;5805:53;:::i;:::-;5795:63;;5750:118;5256:619;;;;;:::o;5881:118::-;5968:24;5986:5;5968:24;:::i;:::-;5963:3;5956:37;5881:118;;:::o;6005:222::-;6098:4;6136:2;6125:9;6121:18;6113:26;;6149:71;6217:1;6206:9;6202:17;6193:6;6149:71;:::i;:::-;6005:222;;;;:::o;6233:86::-;6268:7;6308:4;6301:5;6297:16;6286:27;;6233:86;;;:::o;6325:112::-;6408:22;6424:5;6408:22;:::i;:::-;6403:3;6396:35;6325:112;;:::o;6443:214::-;6532:4;6570:2;6559:9;6555:18;6547:26;;6583:67;6647:1;6636:9;6632:17;6623:6;6583:67;:::i;:::-;6443:214;;;;:::o;6663:329::-;6722:6;6771:2;6759:9;6750:7;6746:23;6742:32;6739:119;;;6777:79;;:::i;:::-;6739:119;6897:1;6922:53;6967:7;6958:6;6947:9;6943:22;6922:53;:::i;:::-;6912:63;;6868:117;6663:329;;;;:::o;6998:116::-;7068:21;7083:5;7068:21;:::i;:::-;7061:5;7058:32;7048:60;;7104:1;7101;7094:12;7048:60;6998:116;:::o;7120:133::-;7163:5;7201:6;7188:20;7179:29;;7217:30;7241:5;7217:30;:::i;:::-;7120:133;;;;:::o;7259:468::-;7324:6;7332;7381:2;7369:9;7360:7;7356:23;7352:32;7349:119;;;7387:79;;:::i;:::-;7349:119;7507:1;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7478:117;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7259:468;;;;;:::o;7733:329::-;7792:6;7841:2;7829:9;7820:7;7816:23;7812:32;7809:119;;;7847:79;;:::i;:::-;7809:119;7967:1;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7938:117;7733:329;;;;:::o;8068:474::-;8136:6;8144;8193:2;8181:9;8172:7;8168:23;8164:32;8161:119;;;8199:79;;:::i;:::-;8161:119;8319:1;8344:53;8389:7;8380:6;8369:9;8365:22;8344:53;:::i;:::-;8334:63;;8290:117;8446:2;8472:53;8517:7;8508:6;8497:9;8493:22;8472:53;:::i;:::-;8462:63;;8417:118;8068:474;;;;;:::o;8548:180::-;8596:77;8593:1;8586:88;8693:4;8690:1;8683:15;8717:4;8714:1;8707:15;8734:191;8774:3;8793:20;8811:1;8793:20;:::i;:::-;8788:25;;8827:20;8845:1;8827:20;:::i;:::-;8822:25;;8870:1;8867;8863:9;8856:16;;8891:3;8888:1;8885:10;8882:36;;;8898:18;;:::i;:::-;8882:36;8734:191;;;;:::o;8931:179::-;9071:31;9067:1;9059:6;9055:14;9048:55;8931:179;:::o;9116:366::-;9258:3;9279:67;9343:2;9338:3;9279:67;:::i;:::-;9272:74;;9355:93;9444:3;9355:93;:::i;:::-;9473:2;9468:3;9464:12;9457:19;;9116:366;;;:::o;9488:419::-;9654:4;9692:2;9681:9;9677:18;9669:26;;9741:9;9735:4;9731:20;9727:1;9716:9;9712:17;9705:47;9769:131;9895:4;9769:131;:::i;:::-;9761:139;;9488:419;;;:::o;9913:180::-;9961:77;9958:1;9951:88;10058:4;10055:1;10048:15;10082:4;10079:1;10072:15;10099:320;10143:6;10180:1;10174:4;10170:12;10160:22;;10227:1;10221:4;10217:12;10248:18;10238:81;;10304:4;10296:6;10292:17;10282:27;;10238:81;10366:2;10358:6;10355:14;10335:18;10332:38;10329:84;;10385:18;;:::i;:::-;10329:84;10150:269;10099:320;;;:::o;10425:410::-;10465:7;10488:20;10506:1;10488:20;:::i;:::-;10483:25;;10522:20;10540:1;10522:20;:::i;:::-;10517:25;;10577:1;10574;10570:9;10599:30;10617:11;10599:30;:::i;:::-;10588:41;;10778:1;10769:7;10765:15;10762:1;10759:22;10739:1;10732:9;10712:83;10689:139;;10808:18;;:::i;:::-;10689:139;10473:362;10425:410;;;;:::o;10841:180::-;10889:77;10886:1;10879:88;10986:4;10983:1;10976:15;11010:4;11007:1;11000:15;11027:185;11067:1;11084:20;11102:1;11084:20;:::i;:::-;11079:25;;11118:20;11136:1;11118:20;:::i;:::-;11113:25;;11157:1;11147:35;;11162:18;;:::i;:::-;11147:35;11204:1;11201;11197:9;11192:14;;11027:185;;;;:::o;11218:220::-;11358:34;11354:1;11346:6;11342:14;11335:58;11427:3;11422:2;11414:6;11410:15;11403:28;11218:220;:::o;11444:366::-;11586:3;11607:67;11671:2;11666:3;11607:67;:::i;:::-;11600:74;;11683:93;11772:3;11683:93;:::i;:::-;11801:2;11796:3;11792:12;11785:19;;11444:366;;;:::o;11816:419::-;11982:4;12020:2;12009:9;12005:18;11997:26;;12069:9;12063:4;12059:20;12055:1;12044:9;12040:17;12033:47;12097:131;12223:4;12097:131;:::i;:::-;12089:139;;11816:419;;;:::o;12241:223::-;12381:34;12377:1;12369:6;12365:14;12358:58;12450:6;12445:2;12437:6;12433:15;12426:31;12241:223;:::o;12470:366::-;12612:3;12633:67;12697:2;12692:3;12633:67;:::i;:::-;12626:74;;12709:93;12798:3;12709:93;:::i;:::-;12827:2;12822:3;12818:12;12811:19;;12470:366;;;:::o;12842:419::-;13008:4;13046:2;13035:9;13031:18;13023:26;;13095:9;13089:4;13085:20;13081:1;13070:9;13066:17;13059:47;13123:131;13249:4;13123:131;:::i;:::-;13115:139;;12842:419;;;:::o;13267:244::-;13407:34;13403:1;13395:6;13391:14;13384:58;13476:27;13471:2;13463:6;13459:15;13452:52;13267:244;:::o;13517:366::-;13659:3;13680:67;13744:2;13739:3;13680:67;:::i;:::-;13673:74;;13756:93;13845:3;13756:93;:::i;:::-;13874:2;13869:3;13865:12;13858:19;;13517:366;;;:::o;13889:419::-;14055:4;14093:2;14082:9;14078:18;14070:26;;14142:9;14136:4;14132:20;14128:1;14117:9;14113:17;14106:47;14170:131;14296:4;14170:131;:::i;:::-;14162:139;;13889:419;;;:::o;14314:224::-;14454:34;14450:1;14442:6;14438:14;14431:58;14523:7;14518:2;14510:6;14506:15;14499:32;14314:224;:::o;14544:366::-;14686:3;14707:67;14771:2;14766:3;14707:67;:::i;:::-;14700:74;;14783:93;14872:3;14783:93;:::i;:::-;14901:2;14896:3;14892:12;14885:19;;14544:366;;;:::o;14916:419::-;15082:4;15120:2;15109:9;15105:18;15097:26;;15169:9;15163:4;15159:20;15155:1;15144:9;15140:17;15133:47;15197:131;15323:4;15197:131;:::i;:::-;15189:139;;14916:419;;;:::o;15341:240::-;15481:34;15477:1;15469:6;15465:14;15458:58;15550:23;15545:2;15537:6;15533:15;15526:48;15341:240;:::o;15587:366::-;15729:3;15750:67;15814:2;15809:3;15750:67;:::i;:::-;15743:74;;15826:93;15915:3;15826:93;:::i;:::-;15944:2;15939:3;15935:12;15928:19;;15587:366;;;:::o;15959:419::-;16125:4;16163:2;16152:9;16148:18;16140:26;;16212:9;16206:4;16202:20;16198:1;16187:9;16183:17;16176:47;16240:131;16366:4;16240:131;:::i;:::-;16232:139;;15959:419;;;:::o;16384:239::-;16524:34;16520:1;16512:6;16508:14;16501:58;16593:22;16588:2;16580:6;16576:15;16569:47;16384:239;:::o;16629:366::-;16771:3;16792:67;16856:2;16851:3;16792:67;:::i;:::-;16785:74;;16868:93;16957:3;16868:93;:::i;:::-;16986:2;16981:3;16977:12;16970:19;;16629:366;;;:::o;17001:419::-;17167:4;17205:2;17194:9;17190:18;17182:26;;17254:9;17248:4;17244:20;17240:1;17229:9;17225:17;17218:47;17282:131;17408:4;17282:131;:::i;:::-;17274:139;;17001:419;;;:::o;17426:225::-;17566:34;17562:1;17554:6;17550:14;17543:58;17635:8;17630:2;17622:6;17618:15;17611:33;17426:225;:::o;17657:366::-;17799:3;17820:67;17884:2;17879:3;17820:67;:::i;:::-;17813:74;;17896:93;17985:3;17896:93;:::i;:::-;18014:2;18009:3;18005:12;17998:19;;17657:366;;;:::o;18029:419::-;18195:4;18233:2;18222:9;18218:18;18210:26;;18282:9;18276:4;18272:20;18268:1;18257:9;18253:17;18246:47;18310:131;18436:4;18310:131;:::i;:::-;18302:139;;18029:419;;;:::o;18454:182::-;18594:34;18590:1;18582:6;18578:14;18571:58;18454:182;:::o;18642:366::-;18784:3;18805:67;18869:2;18864:3;18805:67;:::i;:::-;18798:74;;18881:93;18970:3;18881:93;:::i;:::-;18999:2;18994:3;18990:12;18983:19;;18642:366;;;:::o;19014:419::-;19180:4;19218:2;19207:9;19203:18;19195:26;;19267:9;19261:4;19257:20;19253:1;19242:9;19238:17;19231:47;19295:131;19421:4;19295:131;:::i;:::-;19287:139;;19014:419;;;:::o;19439:223::-;19579:34;19575:1;19567:6;19563:14;19556:58;19648:6;19643:2;19635:6;19631:15;19624:31;19439:223;:::o;19668:366::-;19810:3;19831:67;19895:2;19890:3;19831:67;:::i;:::-;19824:74;;19907:93;19996:3;19907:93;:::i;:::-;20025:2;20020:3;20016:12;20009:19;;19668:366;;;:::o;20040:419::-;20206:4;20244:2;20233:9;20229:18;20221:26;;20293:9;20287:4;20283:20;20279:1;20268:9;20264:17;20257:47;20321:131;20447:4;20321:131;:::i;:::-;20313:139;;20040:419;;;:::o;20465:221::-;20605:34;20601:1;20593:6;20589:14;20582:58;20674:4;20669:2;20661:6;20657:15;20650:29;20465:221;:::o;20692:366::-;20834:3;20855:67;20919:2;20914:3;20855:67;:::i;:::-;20848:74;;20931:93;21020:3;20931:93;:::i;:::-;21049:2;21044:3;21040:12;21033:19;;20692:366;;;:::o;21064:419::-;21230:4;21268:2;21257:9;21253:18;21245:26;;21317:9;21311:4;21307:20;21303:1;21292:9;21288:17;21281:47;21345:131;21471:4;21345:131;:::i;:::-;21337:139;;21064:419;;;:::o;21489:179::-;21629:31;21625:1;21617:6;21613:14;21606:55;21489:179;:::o;21674:366::-;21816:3;21837:67;21901:2;21896:3;21837:67;:::i;:::-;21830:74;;21913:93;22002:3;21913:93;:::i;:::-;22031:2;22026:3;22022:12;22015:19;;21674:366;;;:::o;22046:419::-;22212:4;22250:2;22239:9;22235:18;22227:26;;22299:9;22293:4;22289:20;22285:1;22274:9;22270:17;22263:47;22327:131;22453:4;22327:131;:::i;:::-;22319:139;;22046:419;;;:::o;22471:224::-;22611:34;22607:1;22599:6;22595:14;22588:58;22680:7;22675:2;22667:6;22663:15;22656:32;22471:224;:::o;22701:366::-;22843:3;22864:67;22928:2;22923:3;22864:67;:::i;:::-;22857:74;;22940:93;23029:3;22940:93;:::i;:::-;23058:2;23053:3;23049:12;23042:19;;22701:366;;;:::o;23073:419::-;23239:4;23277:2;23266:9;23262:18;23254:26;;23326:9;23320:4;23316:20;23312:1;23301:9;23297:17;23290:47;23354:131;23480:4;23354:131;:::i;:::-;23346:139;;23073:419;;;:::o;23498:222::-;23638:34;23634:1;23626:6;23622:14;23615:58;23707:5;23702:2;23694:6;23690:15;23683:30;23498:222;:::o;23726:366::-;23868:3;23889:67;23953:2;23948:3;23889:67;:::i;:::-;23882:74;;23965:93;24054:3;23965:93;:::i;:::-;24083:2;24078:3;24074:12;24067:19;;23726:366;;;:::o;24098:419::-;24264:4;24302:2;24291:9;24287:18;24279:26;;24351:9;24345:4;24341:20;24337:1;24326:9;24322:17;24315:47;24379:131;24505:4;24379:131;:::i;:::-;24371:139;;24098:419;;;:::o;24523:172::-;24663:24;24659:1;24651:6;24647:14;24640:48;24523:172;:::o;24701:366::-;24843:3;24864:67;24928:2;24923:3;24864:67;:::i;:::-;24857:74;;24940:93;25029:3;24940:93;:::i;:::-;25058:2;25053:3;25049:12;25042:19;;24701:366;;;:::o;25073:419::-;25239:4;25277:2;25266:9;25262:18;25254:26;;25326:9;25320:4;25316:20;25312:1;25301:9;25297:17;25290:47;25354:131;25480:4;25354:131;:::i;:::-;25346:139;;25073:419;;;:::o;25498:240::-;25638:34;25634:1;25626:6;25622:14;25615:58;25707:23;25702:2;25694:6;25690:15;25683:48;25498:240;:::o;25744:366::-;25886:3;25907:67;25971:2;25966:3;25907:67;:::i;:::-;25900:74;;25983:93;26072:3;25983:93;:::i;:::-;26101:2;26096:3;26092:12;26085:19;;25744:366;;;:::o;26116:419::-;26282:4;26320:2;26309:9;26305:18;26297:26;;26369:9;26363:4;26359:20;26355:1;26344:9;26340:17;26333:47;26397:131;26523:4;26397:131;:::i;:::-;26389:139;;26116:419;;;:::o;26541:169::-;26681:21;26677:1;26669:6;26665:14;26658:45;26541:169;:::o;26716:366::-;26858:3;26879:67;26943:2;26938:3;26879:67;:::i;:::-;26872:74;;26955:93;27044:3;26955:93;:::i;:::-;27073:2;27068:3;27064:12;27057:19;;26716:366;;;:::o;27088:419::-;27254:4;27292:2;27281:9;27277:18;27269:26;;27341:9;27335:4;27331:20;27327:1;27316:9;27312:17;27305:47;27369:131;27495:4;27369:131;:::i;:::-;27361:139;;27088:419;;;:::o;27513:241::-;27653:34;27649:1;27641:6;27637:14;27630:58;27722:24;27717:2;27709:6;27705:15;27698:49;27513:241;:::o;27760:366::-;27902:3;27923:67;27987:2;27982:3;27923:67;:::i;:::-;27916:74;;27999:93;28088:3;27999:93;:::i;:::-;28117:2;28112:3;28108:12;28101:19;;27760:366;;;:::o;28132:419::-;28298:4;28336:2;28325:9;28321:18;28313:26;;28385:9;28379:4;28375:20;28371:1;28360:9;28356:17;28349:47;28413:131;28539:4;28413:131;:::i;:::-;28405:139;;28132:419;;;:::o;28557:194::-;28597:4;28617:20;28635:1;28617:20;:::i;:::-;28612:25;;28651:20;28669:1;28651:20;:::i;:::-;28646:25;;28695:1;28692;28688:9;28680:17;;28719:1;28713:4;28710:11;28707:37;;;28724:18;;:::i;:::-;28707:37;28557:194;;;;:::o;28757:225::-;28897:34;28893:1;28885:6;28881:14;28874:58;28966:8;28961:2;28953:6;28949:15;28942:33;28757:225;:::o;28988:366::-;29130:3;29151:67;29215:2;29210:3;29151:67;:::i;:::-;29144:74;;29227:93;29316:3;29227:93;:::i;:::-;29345:2;29340:3;29336:12;29329:19;;28988:366;;;:::o;29360:419::-;29526:4;29564:2;29553:9;29549:18;29541:26;;29613:9;29607:4;29603:20;29599:1;29588:9;29584:17;29577:47;29641:131;29767:4;29641:131;:::i;:::-;29633:139;;29360:419;;;:::o;29785:442::-;29934:4;29972:2;29961:9;29957:18;29949:26;;29985:71;30053:1;30042:9;30038:17;30029:6;29985:71;:::i;:::-;30066:72;30134:2;30123:9;30119:18;30110:6;30066:72;:::i;:::-;30148;30216:2;30205:9;30201:18;30192:6;30148:72;:::i;:::-;29785:442;;;;;;:::o;30233:147::-;30334:11;30371:3;30356:18;;30233:147;;;;:::o;30386:114::-;;:::o;30506:398::-;30665:3;30686:83;30767:1;30762:3;30686:83;:::i;:::-;30679:90;;30778:93;30867:3;30778:93;:::i;:::-;30896:1;30891:3;30887:11;30880:18;;30506:398;;;:::o;30910:379::-;31094:3;31116:147;31259:3;31116:147;:::i;:::-;31109:154;;31280:3;31273:10;;30910:379;;;:::o;31295:180::-;31343:77;31340:1;31333:88;31440:4;31437:1;31430:15;31464:4;31461:1;31454:15;31481:180;31529:77;31526:1;31519:88;31626:4;31623:1;31616:15;31650:4;31647:1;31640:15;31667:143;31724:5;31755:6;31749:13;31740:22;;31771:33;31798:5;31771:33;:::i;:::-;31667:143;;;;:::o;31816:351::-;31886:6;31935:2;31923:9;31914:7;31910:23;31906:32;31903:119;;;31941:79;;:::i;:::-;31903:119;32061:1;32086:64;32142:7;32133:6;32122:9;32118:22;32086:64;:::i;:::-;32076:74;;32032:128;31816:351;;;;:::o;32173:85::-;32218:7;32247:5;32236:16;;32173:85;;;:::o;32264:158::-;32322:9;32355:61;32373:42;32382:32;32408:5;32382:32;:::i;:::-;32373:42;:::i;:::-;32355:61;:::i;:::-;32342:74;;32264:158;;;:::o;32428:147::-;32523:45;32562:5;32523:45;:::i;:::-;32518:3;32511:58;32428:147;;:::o;32581:114::-;32648:6;32682:5;32676:12;32666:22;;32581:114;;;:::o;32701:184::-;32800:11;32834:6;32829:3;32822:19;32874:4;32869:3;32865:14;32850:29;;32701:184;;;;:::o;32891:132::-;32958:4;32981:3;32973:11;;33011:4;33006:3;33002:14;32994:22;;32891:132;;;:::o;33029:108::-;33106:24;33124:5;33106:24;:::i;:::-;33101:3;33094:37;33029:108;;:::o;33143:179::-;33212:10;33233:46;33275:3;33267:6;33233:46;:::i;:::-;33311:4;33306:3;33302:14;33288:28;;33143:179;;;;:::o;33328:113::-;33398:4;33430;33425:3;33421:14;33413:22;;33328:113;;;:::o;33477:732::-;33596:3;33625:54;33673:5;33625:54;:::i;:::-;33695:86;33774:6;33769:3;33695:86;:::i;:::-;33688:93;;33805:56;33855:5;33805:56;:::i;:::-;33884:7;33915:1;33900:284;33925:6;33922:1;33919:13;33900:284;;;34001:6;33995:13;34028:63;34087:3;34072:13;34028:63;:::i;:::-;34021:70;;34114:60;34167:6;34114:60;:::i;:::-;34104:70;;33960:224;33947:1;33944;33940:9;33935:14;;33900:284;;;33904:14;34200:3;34193:10;;33601:608;;;33477:732;;;;:::o;34215:831::-;34478:4;34516:3;34505:9;34501:19;34493:27;;34530:71;34598:1;34587:9;34583:17;34574:6;34530:71;:::i;:::-;34611:80;34687:2;34676:9;34672:18;34663:6;34611:80;:::i;:::-;34738:9;34732:4;34728:20;34723:2;34712:9;34708:18;34701:48;34766:108;34869:4;34860:6;34766:108;:::i;:::-;34758:116;;34884:72;34952:2;34941:9;34937:18;34928:6;34884:72;:::i;:::-;34966:73;35034:3;35023:9;35019:19;35010:6;34966:73;:::i;:::-;34215:831;;;;;;;;:::o;35052:807::-;35301:4;35339:3;35328:9;35324:19;35316:27;;35353:71;35421:1;35410:9;35406:17;35397:6;35353:71;:::i;:::-;35434:72;35502:2;35491:9;35487:18;35478:6;35434:72;:::i;:::-;35516:80;35592:2;35581:9;35577:18;35568:6;35516:80;:::i;:::-;35606;35682:2;35671:9;35667:18;35658:6;35606:80;:::i;:::-;35696:73;35764:3;35753:9;35749:19;35740:6;35696:73;:::i;:::-;35779;35847:3;35836:9;35832:19;35823:6;35779:73;:::i;:::-;35052:807;;;;;;;;;:::o;35865:143::-;35922:5;35953:6;35947:13;35938:22;;35969:33;35996:5;35969:33;:::i;:::-;35865:143;;;;:::o;36014:663::-;36102:6;36110;36118;36167:2;36155:9;36146:7;36142:23;36138:32;36135:119;;;36173:79;;:::i;:::-;36135:119;36293:1;36318:64;36374:7;36365:6;36354:9;36350:22;36318:64;:::i;:::-;36308:74;;36264:128;36431:2;36457:64;36513:7;36504:6;36493:9;36489:22;36457:64;:::i;:::-;36447:74;;36402:129;36570:2;36596:64;36652:7;36643:6;36632:9;36628:22;36596:64;:::i;:::-;36586:74;;36541:129;36014:663;;;;;:::o
Swarm Source
ipfs://a7edc60e071ab6fb0ea50b2150175adfdc027c2595d67623cefe6c0d7d425f81
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.