ERC-20
Overview
Max Total Supply
1,000,000,000 666
Holders
44
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
17,000,000 666Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SixSixSix
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-02 */ //SPDX-License-Identifier: Unlicensed pragma solidity 0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } 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); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to 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 {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract SixSixSix is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address private marketingWallet; address private devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = true; bool public swapEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public partners; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event Setpartner(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("666","666") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setpartner(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 10; uint256 _buyLiquidityFee = 5; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 20; uint256 _sellLiquidityFee = 20; uint256 _sellDevFee = 0; uint256 totalSupply = 1 * 1e9 * 1e18; maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxWallet = totalSupply * 20 / 1000; // 2% swapTokensAtAmount = totalSupply * 5 / 10000; // 0.1% buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = 0x344FF6491E98c2DD29b3178885C1e5259c5cFF9E; devWallet = 0x344FF6491E98c2DD29b3178885C1e5259c5cFF9E; // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // change the minimum amount of tokens to sell from fees 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 updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateBuyFees( uint256 _devFee, uint256 _liquidityFee, uint256 _marketingFee ) external onlyOwner { buyDevFee = _devFee; buyLiquidityFee = _liquidityFee; buyMarketingFee = _marketingFee; buyTotalFees = buyDevFee + buyLiquidityFee + buyMarketingFee; require(buyTotalFees <= 30, "Must keep fees at 20% or less"); } function updateSellFees( uint256 _devFee, uint256 _liquidityFee, uint256 _marketingFee ) external onlyOwner { sellDevFee = _devFee; sellLiquidityFee = _liquidityFee; sellMarketingFee = _marketingFee; sellTotalFees = sellDevFee + sellLiquidityFee + sellMarketingFee; require(sellTotalFees <= 95, "Must keep fees at 95% or less"); } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setpartner(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from partners"); _setpartner(pair, value); } function _setpartner(address pair, bool value) private { partners[pair] = value; emit Setpartner(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } 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(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } //when buy if (partners[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } else if (partners[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 && !partners[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (partners[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(partners[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens 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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); 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":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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":"Setpartner","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":"devWalletUpdated","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":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","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":"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"partners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"setpartner","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","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
60c06040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600381526020017f36363600000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f36363600000000000000000000000000000000000000000000000000000000008152508160039081620000e0919062000de2565b508060049081620000f2919062000de2565b5050506000620001076200063560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001d28160016200063d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000278919062000f33565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000f33565b6040518363ffffffff1660e01b81526004016200032592919062000f76565b6020604051808303816000875af115801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b919062000f33565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003b360a05160016200063d60201b60201c565b620003c860a05160016200073a60201b60201c565b6000600a9050600060059050600080601490506000601490506000806b033b2e3c9fd0803ce800000090506103e860148262000405919062000fd2565b6200041191906200104c565b6008819055506103e860148262000429919062000fd2565b6200043591906200104c565b600a819055506127106005826200044d919062000fd2565b6200045991906200104c565b60098190555086600d8190555085600e8190555084600f81905550600f54600e54600d5462000489919062001084565b62000495919062001084565b600c81905550836011819055508260128190555081601381905550601354601254601154620004c5919062001084565b620004d1919062001084565b60108190555073344ff6491e98c2dd29b3178885c1e5259c5cff9e600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073344ff6491e98c2dd29b3178885c1e5259c5cff9e600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005a362000595620007db60201b60201c565b60016200080560201b60201c565b620005b63060016200080560201b60201c565b620005cb61dead60016200080560201b60201c565b620005ed620005df620007db60201b60201c565b60016200063d60201b60201c565b620006003060016200063d60201b60201c565b6200061561dead60016200063d60201b60201c565b6200062733826200095260201b60201c565b50505050505050506200128e565b600033905090565b6200064d6200063560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d69062001120565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008156200063560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089e9062001120565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200094691906200115f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009bb90620011cc565b60405180910390fd5b620009d86000838362000b0060201b60201c565b620009f48160025462000b0560201b6200231f1790919060201c565b60028190555062000a52816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b0560201b6200231f1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000af49190620011ff565b60405180910390a35050565b505050565b600080828462000b16919062001084565b90508381101562000b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b55906200126c565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bea57607f821691505b60208210810362000c005762000bff62000ba2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c6a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c2b565b62000c76868362000c2b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cc362000cbd62000cb78462000c8e565b62000c98565b62000c8e565b9050919050565b6000819050919050565b62000cdf8362000ca2565b62000cf762000cee8262000cca565b84845462000c38565b825550505050565b600090565b62000d0e62000cff565b62000d1b81848462000cd4565b505050565b5b8181101562000d435762000d3760008262000d04565b60018101905062000d21565b5050565b601f82111562000d925762000d5c8162000c06565b62000d678462000c1b565b8101602085101562000d77578190505b62000d8f62000d868562000c1b565b83018262000d20565b50505b505050565b600082821c905092915050565b600062000db76000198460080262000d97565b1980831691505092915050565b600062000dd2838362000da4565b9150826002028217905092915050565b62000ded8262000b68565b67ffffffffffffffff81111562000e095762000e0862000b73565b5b62000e15825462000bd1565b62000e2282828562000d47565b600060209050601f83116001811462000e5a576000841562000e45578287015190505b62000e51858262000dc4565b86555062000ec1565b601f19841662000e6a8662000c06565b60005b8281101562000e945784890151825560018201915060208501945060208101905062000e6d565b8683101562000eb4578489015162000eb0601f89168262000da4565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000efb8262000ece565b9050919050565b62000f0d8162000eee565b811462000f1957600080fd5b50565b60008151905062000f2d8162000f02565b92915050565b60006020828403121562000f4c5762000f4b62000ec9565b5b600062000f5c8482850162000f1c565b91505092915050565b62000f708162000eee565b82525050565b600060408201905062000f8d600083018562000f65565b62000f9c602083018462000f65565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fdf8262000c8e565b915062000fec8362000c8e565b925082820262000ffc8162000c8e565b9150828204841483151762001016576200101562000fa3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010598262000c8e565b9150620010668362000c8e565b9250826200107957620010786200101d565b5b828204905092915050565b6000620010918262000c8e565b91506200109e8362000c8e565b9250828201905080821115620010b957620010b862000fa3565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001108602083620010bf565b91506200111582620010d0565b602082019050919050565b600060208201905081810360008301526200113b81620010f9565b9050919050565b60008115159050919050565b620011598162001142565b82525050565b60006020820190506200117660008301846200114e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011b4601f83620010bf565b9150620011c1826200117c565b602082019050919050565b60006020820190508181036000830152620011e781620011a5565b9050919050565b620011f98162000c8e565b82525050565b6000602082019050620012166000830184620011ee565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001254601b83620010bf565b915062001261826200121c565b602082019050919050565b60006020820190508181036000830152620012878162001245565b9050919050565b60805160a051614f35620012de60003960008181610e7501526111d6015260008181610c530152818161384e0152818161392f01528181613956015281816139f20152613a190152614f356000f3fe6080604052600436106102b25760003560e01c80638a8c523c11610175578063bbc0c742116100dc578063d85ba06311610095578063f11a24d31161006f578063f11a24d314610ad7578063f2fde38b14610b02578063f637434214610b2b578063f8b45b0514610b56576102b9565b8063d85ba06314610a44578063dd62ed3e14610a6f578063e2f4560514610aac576102b9565b8063bbc0c74214610936578063c024666814610961578063c17b5b8c1461098a578063c18bc195146109b3578063c8c8ebe4146109dc578063d257b34f14610a07576102b9565b80639c3b4fdc1161012e5780639c3b4fdc146108125780639fccce321461083d578063a0d82dc514610868578063a457c2d714610893578063a9059cbb146108d0578063aacebbe31461090d576102b9565b80638a8c523c146107145780638da5cb5b1461072b5780639213691314610756578063924de9b71461078157806395c33652146107aa57806395d89b41146107e7576102b9565b8063395093511161021957806370a08231116101d257806370a0823114610618578063715018a614610655578063751039fc1461066c5780637571336a146106975780637bce5a04146106c05780638095d564146106eb576102b9565b806339509351146104f257806349bd5a5e1461052f5780634a62bb651461055a5780634fbee193146105855780636a486a8e146105c25780636ddd1713146105ed576102b9565b80631a8145bb1161026b5780631a8145bb146103e25780631a89e9471461040d5780631f3fed8f14610436578063203e727e1461046157806323b872dd1461048a578063313ce567146104c7576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e5780631816467f146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b81565b6040516102e09190613bb9565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613c74565b610c13565b60405161031d9190613ccf565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613cea565b610c31565b60405161035a9190613ccf565b60405180910390f35b34801561036f57600080fd5b50610378610c51565b6040516103859190613d76565b60405180910390f35b34801561039a57600080fd5b506103a3610c75565b6040516103b09190613da0565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613cea565b610c7f565b005b3480156103ee57600080fd5b506103f7610dd6565b6040516104049190613da0565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613de7565b610ddc565b005b34801561044257600080fd5b5061044b610f0f565b6040516104589190613da0565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613e27565b610f15565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613e54565b61103f565b6040516104be9190613ccf565b60405180910390f35b3480156104d357600080fd5b506104dc611118565b6040516104e99190613ec3565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190613c74565b611121565b6040516105269190613ccf565b60405180910390f35b34801561053b57600080fd5b506105446111d4565b6040516105519190613eed565b60405180910390f35b34801561056657600080fd5b5061056f6111f8565b60405161057c9190613ccf565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613cea565b61120b565b6040516105b99190613ccf565b60405180910390f35b3480156105ce57600080fd5b506105d7611261565b6040516105e49190613da0565b60405180910390f35b3480156105f957600080fd5b50610602611267565b60405161060f9190613ccf565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613cea565b61127a565b60405161064c9190613da0565b60405180910390f35b34801561066157600080fd5b5061066a6112c2565b005b34801561067857600080fd5b5061068161141a565b60405161068e9190613ccf565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190613de7565b6114d5565b005b3480156106cc57600080fd5b506106d56115c7565b6040516106e29190613da0565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190613f08565b6115cd565b005b34801561072057600080fd5b506107296116e7565b005b34801561073757600080fd5b506107406117bd565b60405161074d9190613eed565b60405180910390f35b34801561076257600080fd5b5061076b6117e7565b6040516107789190613da0565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190613f5b565b6117ed565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613cea565b6118a1565b6040516107de9190613ccf565b60405180910390f35b3480156107f357600080fd5b506107fc6118c1565b6040516108099190613bb9565b60405180910390f35b34801561081e57600080fd5b50610827611953565b6040516108349190613da0565b60405180910390f35b34801561084957600080fd5b50610852611959565b60405161085f9190613da0565b60405180910390f35b34801561087457600080fd5b5061087d61195f565b60405161088a9190613da0565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613c74565b611965565b6040516108c79190613ccf565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613c74565b611a32565b6040516109049190613ccf565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190613cea565b611a50565b005b34801561094257600080fd5b5061094b611ba7565b6040516109589190613ccf565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190613de7565b611bba565b005b34801561099657600080fd5b506109b160048036038101906109ac9190613f08565b611cfa565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190613e27565b611e14565b005b3480156109e857600080fd5b506109f1611f3e565b6040516109fe9190613da0565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190613e27565b611f44565b604051610a3b9190613ccf565b60405180910390f35b348015610a5057600080fd5b50610a596120b4565b604051610a669190613da0565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190613f88565b6120ba565b604051610aa39190613da0565b60405180910390f35b348015610ab857600080fd5b50610ac1612141565b604051610ace9190613da0565b60405180910390f35b348015610ae357600080fd5b50610aec612147565b604051610af99190613da0565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190613cea565b61214d565b005b348015610b3757600080fd5b50610b40612313565b604051610b4d9190613da0565b60405180910390f35b348015610b6257600080fd5b50610b6b612319565b604051610b789190613da0565b60405180910390f35b606060038054610b9090613ff7565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbc90613ff7565b8015610c095780601f10610bde57610100808354040283529160200191610c09565b820191906000526020600020905b815481529060010190602001808311610bec57829003601f168201915b5050505050905090565b6000610c27610c2061237d565b8484612385565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610c8761237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90614074565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610de461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614074565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890614106565b60405180910390fd5b610f0b828261254e565b5050565b60145481565b610f1d61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614074565b60405180910390fd5b670de0b6b3a76400006103e86001610fc2610c75565b610fcc9190614155565b610fd691906141c6565b610fe091906141c6565b811015611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990614269565b60405180910390fd5b670de0b6b3a7640000816110369190614155565b60088190555050565b600061104c8484846125ef565b61110d8461105861237d565b61110885604051806060016040528060288152602001614eb360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110be61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b600190509392505050565b60006012905090565b60006111ca61112e61237d565b846111c5856001600061113f61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b612385565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ca61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061142461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90614074565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114dd61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390614074565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6115d561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614074565b60405180910390fd5b82600f8190555081600e8190555080600d81905550600d54600e54600f5461168c9190614289565b6116969190614289565b600c81905550601e600c5411156116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614309565b60405180910390fd5b505050565b6116ef61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177590614074565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6117f561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90614074565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6060600480546118d090613ff7565b80601f01602080910402602001604051908101604052809291908181526020018280546118fc90613ff7565b80156119495780601f1061191e57610100808354040283529160200191611949565b820191906000526020600020905b81548152906001019060200180831161192c57829003601f168201915b5050505050905090565b600f5481565b60165481565b60135481565b6000611a2861197261237d565b84611a2385604051806060016040528060258152602001614edb602591396001600061199c61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b6001905092915050565b6000611a46611a3f61237d565b84846125ef565b6001905092915050565b611a5861237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90614074565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b611bc261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890614074565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cee9190613ccf565b60405180910390a25050565b611d0261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8890614074565b60405180910390fd5b826013819055508160128190555080601181905550601154601254601354611db99190614289565b611dc39190614289565b601081905550605f6010541115611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690614375565b60405180910390fd5b505050565b611e1c61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290614074565b60405180910390fd5b670de0b6b3a76400006103e86005611ec1610c75565b611ecb9190614155565b611ed591906141c6565b611edf91906141c6565b811015611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614407565b60405180910390fd5b670de0b6b3a764000081611f359190614155565b600a8190555050565b60085481565b6000611f4e61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614074565b60405180910390fd5b620186a06001611feb610c75565b611ff59190614155565b611fff91906141c6565b821015612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614499565b60405180910390fd5b6103e8600561204e610c75565b6120589190614155565b61206291906141c6565b8211156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061452b565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61215561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a906145bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b600080828461232e9190614289565b905083811015612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90614629565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb906146bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245a9061474d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125419190613da0565b60405180910390a3505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361265e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612655906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c490614871565b60405180910390fd5b600081036126e6576126e183836000613122565b6130b9565b600b60009054906101000a900460ff1615612be1576127036117bd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561277157506127416117bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127aa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127e4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127fd5750600560149054906101000a900460ff16155b15612be057600b60019054906101000a900460ff166128f757601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128b75750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed906148dd565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561299a5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a41576008548111156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db9061496f565b60405180910390fd5b600a546129f08361127a565b826129fb9190614289565b1115612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a33906149db565b60405180910390fd5b612bdf565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ae45750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3357600854811115612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2590614a6d565b60405180910390fd5b612bde565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bdd57600a54612b908361127a565b82612b9b9190614289565b1115612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd3906149db565b60405180910390fd5b5b5b5b5b5b6000612bec3061127a565b905060006009548210159050808015612c115750600b60029054906101000a900460ff165b8015612c2a5750600560149054906101000a900460ff16155b8015612c805750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cd65750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d2c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d70576001600560146101000a81548160ff021916908315150217905550612d546133b5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e265750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e3057600090505b600081156130a957601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e9357506000601054115b15612f6057612ec06064612eb26010548861369c90919063ffffffff16565b61371690919063ffffffff16565b905060105460125482612ed39190614155565b612edd91906141c6565b60156000828254612eee9190614289565b9250508190555060105460135482612f069190614155565b612f1091906141c6565b60166000828254612f219190614289565b9250508190555060105460115482612f399190614155565b612f4391906141c6565b60146000828254612f549190614289565b92505081905550613085565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fbb57506000600c54115b1561308457612fe86064612fda600c548861369c90919063ffffffff16565b61371690919063ffffffff16565b9050600c54600e5482612ffb9190614155565b61300591906141c6565b601560008282546130169190614289565b92505081905550600c54600f548261302e9190614155565b61303891906141c6565b601660008282546130499190614289565b92505081905550600c54600d54826130619190614155565b61306b91906141c6565b6014600082825461307c9190614289565b925050819055505b5b600081111561309a57613099873083613122565b5b80856130a69190614a8d565b94505b6130b4878787613122565b505050505b505050565b6000838311158290613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd9190613bb9565b60405180910390fd5b50600083856131159190614a8d565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613191576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613188906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790614871565b60405180910390fd5b61320b838383613760565b61327681604051806060016040528060268152602001614e8d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613309816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133a89190613da0565b60405180910390a3505050565b60006133c03061127a565b905060006016546014546015546133d79190614289565b6133e19190614289565b90506000808314806133f35750600082145b156134005750505061369a565b601460095461340f9190614155565b8311156134285760146009546134259190614155565b92505b60006002836015548661343b9190614155565b61344591906141c6565b61344f91906141c6565b90506000613466828661376590919063ffffffff16565b90506000479050613476826137af565b600061348b824761376590919063ffffffff16565b905060006134b6876134a86014548561369c90919063ffffffff16565b61371690919063ffffffff16565b905060006134e1886134d36016548661369c90919063ffffffff16565b61371690919063ffffffff16565b905060008183856134f29190614a8d565b6134fc9190614a8d565b9050600060158190555060006014819055506000601681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161355c90614af2565b60006040518083038185875af1925050503d8060008114613599576040519150601f19603f3d011682016040523d82523d6000602084013e61359e565b606091505b5050809850506000871180156135b45750600081115b15613601576135c387826139ec565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826015546040516135f893929190614b07565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364790614af2565b60006040518083038185875af1925050503d8060008114613684576040519150601f19603f3d011682016040523d82523d6000602084013e613689565b606091505b505080985050505050505050505050505b565b60008083036136ae5760009050613710565b600082846136bc9190614155565b90508284826136cb91906141c6565b1461370b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370290614bb0565b60405180910390fd5b809150505b92915050565b600061375883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ac6565b905092915050565b505050565b60006137a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130be565b905092915050565b6000600267ffffffffffffffff8111156137cc576137cb614bd0565b5b6040519080825280602002602001820160405280156137fa5781602001602082028036833780820191505090505b509050308160008151811061381257613811614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138db9190614c43565b816001815181106138ef576138ee614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613954307f000000000000000000000000000000000000000000000000000000000000000084612385565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139b6959493929190614d69565b600060405180830381600087803b1580156139d057600080fd5b505af11580156139e4573d6000803e3d6000fd5b505050505050565b613a17307f000000000000000000000000000000000000000000000000000000000000000084612385565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613a7c96959493929190614dc3565b60606040518083038185885af1158015613a9a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613abf9190614e39565b5050505050565b60008083118290613b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b049190613bb9565b60405180910390fd5b5060008385613b1c91906141c6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b63578082015181840152602081019050613b48565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b8b82613b29565b613b958185613b34565b9350613ba5818560208601613b45565b613bae81613b6f565b840191505092915050565b60006020820190508181036000830152613bd38184613b80565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c0b82613be0565b9050919050565b613c1b81613c00565b8114613c2657600080fd5b50565b600081359050613c3881613c12565b92915050565b6000819050919050565b613c5181613c3e565b8114613c5c57600080fd5b50565b600081359050613c6e81613c48565b92915050565b60008060408385031215613c8b57613c8a613bdb565b5b6000613c9985828601613c29565b9250506020613caa85828601613c5f565b9150509250929050565b60008115159050919050565b613cc981613cb4565b82525050565b6000602082019050613ce46000830184613cc0565b92915050565b600060208284031215613d0057613cff613bdb565b5b6000613d0e84828501613c29565b91505092915050565b6000819050919050565b6000613d3c613d37613d3284613be0565b613d17565b613be0565b9050919050565b6000613d4e82613d21565b9050919050565b6000613d6082613d43565b9050919050565b613d7081613d55565b82525050565b6000602082019050613d8b6000830184613d67565b92915050565b613d9a81613c3e565b82525050565b6000602082019050613db56000830184613d91565b92915050565b613dc481613cb4565b8114613dcf57600080fd5b50565b600081359050613de181613dbb565b92915050565b60008060408385031215613dfe57613dfd613bdb565b5b6000613e0c85828601613c29565b9250506020613e1d85828601613dd2565b9150509250929050565b600060208284031215613e3d57613e3c613bdb565b5b6000613e4b84828501613c5f565b91505092915050565b600080600060608486031215613e6d57613e6c613bdb565b5b6000613e7b86828701613c29565b9350506020613e8c86828701613c29565b9250506040613e9d86828701613c5f565b9150509250925092565b600060ff82169050919050565b613ebd81613ea7565b82525050565b6000602082019050613ed86000830184613eb4565b92915050565b613ee781613c00565b82525050565b6000602082019050613f026000830184613ede565b92915050565b600080600060608486031215613f2157613f20613bdb565b5b6000613f2f86828701613c5f565b9350506020613f4086828701613c5f565b9250506040613f5186828701613c5f565b9150509250925092565b600060208284031215613f7157613f70613bdb565b5b6000613f7f84828501613dd2565b91505092915050565b60008060408385031215613f9f57613f9e613bdb565b5b6000613fad85828601613c29565b9250506020613fbe85828601613c29565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061400f57607f821691505b60208210810361402257614021613fc8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061405e602083613b34565b915061406982614028565b602082019050919050565b6000602082019050818103600083015261408d81614051565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f706172746e657273000000000000000000000000000000000000000000000000602082015250565b60006140f0602883613b34565b91506140fb82614094565b604082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416082613c3e565b915061416b83613c3e565b925082820261417981613c3e565b915082820484148315176141905761418f614126565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141d182613c3e565b91506141dc83613c3e565b9250826141ec576141eb614197565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614253602f83613b34565b915061425e826141f7565b604082019050919050565b6000602082019050818103600083015261428281614246565b9050919050565b600061429482613c3e565b915061429f83613c3e565b92508282019050808211156142b7576142b6614126565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b60006142f3601d83613b34565b91506142fe826142bd565b602082019050919050565b60006020820190508181036000830152614322816142e6565b9050919050565b7f4d757374206b656570206665657320617420393525206f72206c657373000000600082015250565b600061435f601d83613b34565b915061436a82614329565b602082019050919050565b6000602082019050818103600083015261438e81614352565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006143f1602483613b34565b91506143fc82614395565b604082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614483603583613b34565b915061448e82614427565b604082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614515603483613b34565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145a7602683613b34565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614613601b83613b34565b915061461e826145dd565b602082019050919050565b6000602082019050818103600083015261464281614606565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146a5602483613b34565b91506146b082614649565b604082019050919050565b600060208201905081810360008301526146d481614698565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614737602283613b34565b9150614742826146db565b604082019050919050565b600060208201905081810360008301526147668161472a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147c9602583613b34565b91506147d48261476d565b604082019050919050565b600060208201905081810360008301526147f8816147bc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061485b602383613b34565b9150614866826147ff565b604082019050919050565b6000602082019050818103600083015261488a8161484e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148c7601683613b34565b91506148d282614891565b602082019050919050565b600060208201905081810360008301526148f6816148ba565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614959603583613b34565b9150614964826148fd565b604082019050919050565b600060208201905081810360008301526149888161494c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149c5601383613b34565b91506149d08261498f565b602082019050919050565b600060208201905081810360008301526149f4816149b8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a57603683613b34565b9150614a62826149fb565b604082019050919050565b60006020820190508181036000830152614a8681614a4a565b9050919050565b6000614a9882613c3e565b9150614aa383613c3e565b9250828203905081811115614abb57614aba614126565b5b92915050565b600081905092915050565b50565b6000614adc600083614ac1565b9150614ae782614acc565b600082019050919050565b6000614afd82614acf565b9150819050919050565b6000606082019050614b1c6000830186613d91565b614b296020830185613d91565b614b366040830184613d91565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9a602183613b34565b9150614ba582614b3e565b604082019050919050565b60006020820190508181036000830152614bc981614b8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c3d81613c12565b92915050565b600060208284031215614c5957614c58613bdb565b5b6000614c6784828501614c2e565b91505092915050565b6000819050919050565b6000614c95614c90614c8b84614c70565b613d17565b613c3e565b9050919050565b614ca581614c7a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ce081613c00565b82525050565b6000614cf28383614cd7565b60208301905092915050565b6000602082019050919050565b6000614d1682614cab565b614d208185614cb6565b9350614d2b83614cc7565b8060005b83811015614d5c578151614d438882614ce6565b9750614d4e83614cfe565b925050600181019050614d2f565b5085935050505092915050565b600060a082019050614d7e6000830188613d91565b614d8b6020830187614c9c565b8181036040830152614d9d8186614d0b565b9050614dac6060830185613ede565b614db96080830184613d91565b9695505050505050565b600060c082019050614dd86000830189613ede565b614de56020830188613d91565b614df26040830187614c9c565b614dff6060830186614c9c565b614e0c6080830185613ede565b614e1960a0830184613d91565b979650505050505050565b600081519050614e3381613c48565b92915050565b600080600060608486031215614e5257614e51613bdb565b5b6000614e6086828701614e24565b9350506020614e7186828701614e24565b9250506040614e8286828701614e24565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dee14a88732cee8a385aff871d7b5dba17fc2460cb504b75acae41e25cedff3d64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102b25760003560e01c80638a8c523c11610175578063bbc0c742116100dc578063d85ba06311610095578063f11a24d31161006f578063f11a24d314610ad7578063f2fde38b14610b02578063f637434214610b2b578063f8b45b0514610b56576102b9565b8063d85ba06314610a44578063dd62ed3e14610a6f578063e2f4560514610aac576102b9565b8063bbc0c74214610936578063c024666814610961578063c17b5b8c1461098a578063c18bc195146109b3578063c8c8ebe4146109dc578063d257b34f14610a07576102b9565b80639c3b4fdc1161012e5780639c3b4fdc146108125780639fccce321461083d578063a0d82dc514610868578063a457c2d714610893578063a9059cbb146108d0578063aacebbe31461090d576102b9565b80638a8c523c146107145780638da5cb5b1461072b5780639213691314610756578063924de9b71461078157806395c33652146107aa57806395d89b41146107e7576102b9565b8063395093511161021957806370a08231116101d257806370a0823114610618578063715018a614610655578063751039fc1461066c5780637571336a146106975780637bce5a04146106c05780638095d564146106eb576102b9565b806339509351146104f257806349bd5a5e1461052f5780634a62bb651461055a5780634fbee193146105855780636a486a8e146105c25780636ddd1713146105ed576102b9565b80631a8145bb1161026b5780631a8145bb146103e25780631a89e9471461040d5780631f3fed8f14610436578063203e727e1461046157806323b872dd1461048a578063313ce567146104c7576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e5780631816467f146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b81565b6040516102e09190613bb9565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613c74565b610c13565b60405161031d9190613ccf565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613cea565b610c31565b60405161035a9190613ccf565b60405180910390f35b34801561036f57600080fd5b50610378610c51565b6040516103859190613d76565b60405180910390f35b34801561039a57600080fd5b506103a3610c75565b6040516103b09190613da0565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613cea565b610c7f565b005b3480156103ee57600080fd5b506103f7610dd6565b6040516104049190613da0565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613de7565b610ddc565b005b34801561044257600080fd5b5061044b610f0f565b6040516104589190613da0565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613e27565b610f15565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613e54565b61103f565b6040516104be9190613ccf565b60405180910390f35b3480156104d357600080fd5b506104dc611118565b6040516104e99190613ec3565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190613c74565b611121565b6040516105269190613ccf565b60405180910390f35b34801561053b57600080fd5b506105446111d4565b6040516105519190613eed565b60405180910390f35b34801561056657600080fd5b5061056f6111f8565b60405161057c9190613ccf565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613cea565b61120b565b6040516105b99190613ccf565b60405180910390f35b3480156105ce57600080fd5b506105d7611261565b6040516105e49190613da0565b60405180910390f35b3480156105f957600080fd5b50610602611267565b60405161060f9190613ccf565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613cea565b61127a565b60405161064c9190613da0565b60405180910390f35b34801561066157600080fd5b5061066a6112c2565b005b34801561067857600080fd5b5061068161141a565b60405161068e9190613ccf565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190613de7565b6114d5565b005b3480156106cc57600080fd5b506106d56115c7565b6040516106e29190613da0565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190613f08565b6115cd565b005b34801561072057600080fd5b506107296116e7565b005b34801561073757600080fd5b506107406117bd565b60405161074d9190613eed565b60405180910390f35b34801561076257600080fd5b5061076b6117e7565b6040516107789190613da0565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190613f5b565b6117ed565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613cea565b6118a1565b6040516107de9190613ccf565b60405180910390f35b3480156107f357600080fd5b506107fc6118c1565b6040516108099190613bb9565b60405180910390f35b34801561081e57600080fd5b50610827611953565b6040516108349190613da0565b60405180910390f35b34801561084957600080fd5b50610852611959565b60405161085f9190613da0565b60405180910390f35b34801561087457600080fd5b5061087d61195f565b60405161088a9190613da0565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613c74565b611965565b6040516108c79190613ccf565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613c74565b611a32565b6040516109049190613ccf565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190613cea565b611a50565b005b34801561094257600080fd5b5061094b611ba7565b6040516109589190613ccf565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190613de7565b611bba565b005b34801561099657600080fd5b506109b160048036038101906109ac9190613f08565b611cfa565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190613e27565b611e14565b005b3480156109e857600080fd5b506109f1611f3e565b6040516109fe9190613da0565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190613e27565b611f44565b604051610a3b9190613ccf565b60405180910390f35b348015610a5057600080fd5b50610a596120b4565b604051610a669190613da0565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190613f88565b6120ba565b604051610aa39190613da0565b60405180910390f35b348015610ab857600080fd5b50610ac1612141565b604051610ace9190613da0565b60405180910390f35b348015610ae357600080fd5b50610aec612147565b604051610af99190613da0565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190613cea565b61214d565b005b348015610b3757600080fd5b50610b40612313565b604051610b4d9190613da0565b60405180910390f35b348015610b6257600080fd5b50610b6b612319565b604051610b789190613da0565b60405180910390f35b606060038054610b9090613ff7565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbc90613ff7565b8015610c095780601f10610bde57610100808354040283529160200191610c09565b820191906000526020600020905b815481529060010190602001808311610bec57829003601f168201915b5050505050905090565b6000610c27610c2061237d565b8484612385565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610c8761237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90614074565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610de461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614074565b60405180910390fd5b7f000000000000000000000000ab8c16b16c99943b3bb228b888fdf142dfa108ca73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890614106565b60405180910390fd5b610f0b828261254e565b5050565b60145481565b610f1d61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614074565b60405180910390fd5b670de0b6b3a76400006103e86001610fc2610c75565b610fcc9190614155565b610fd691906141c6565b610fe091906141c6565b811015611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990614269565b60405180910390fd5b670de0b6b3a7640000816110369190614155565b60088190555050565b600061104c8484846125ef565b61110d8461105861237d565b61110885604051806060016040528060288152602001614eb360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110be61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b600190509392505050565b60006012905090565b60006111ca61112e61237d565b846111c5856001600061113f61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b612385565b6001905092915050565b7f000000000000000000000000ab8c16b16c99943b3bb228b888fdf142dfa108ca81565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ca61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061142461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90614074565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114dd61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390614074565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6115d561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614074565b60405180910390fd5b82600f8190555081600e8190555080600d81905550600d54600e54600f5461168c9190614289565b6116969190614289565b600c81905550601e600c5411156116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614309565b60405180910390fd5b505050565b6116ef61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177590614074565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6117f561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90614074565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6060600480546118d090613ff7565b80601f01602080910402602001604051908101604052809291908181526020018280546118fc90613ff7565b80156119495780601f1061191e57610100808354040283529160200191611949565b820191906000526020600020905b81548152906001019060200180831161192c57829003601f168201915b5050505050905090565b600f5481565b60165481565b60135481565b6000611a2861197261237d565b84611a2385604051806060016040528060258152602001614edb602591396001600061199c61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b6001905092915050565b6000611a46611a3f61237d565b84846125ef565b6001905092915050565b611a5861237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90614074565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b611bc261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890614074565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cee9190613ccf565b60405180910390a25050565b611d0261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8890614074565b60405180910390fd5b826013819055508160128190555080601181905550601154601254601354611db99190614289565b611dc39190614289565b601081905550605f6010541115611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690614375565b60405180910390fd5b505050565b611e1c61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290614074565b60405180910390fd5b670de0b6b3a76400006103e86005611ec1610c75565b611ecb9190614155565b611ed591906141c6565b611edf91906141c6565b811015611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614407565b60405180910390fd5b670de0b6b3a764000081611f359190614155565b600a8190555050565b60085481565b6000611f4e61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614074565b60405180910390fd5b620186a06001611feb610c75565b611ff59190614155565b611fff91906141c6565b821015612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614499565b60405180910390fd5b6103e8600561204e610c75565b6120589190614155565b61206291906141c6565b8211156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061452b565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61215561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a906145bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b600080828461232e9190614289565b905083811015612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90614629565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb906146bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245a9061474d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125419190613da0565b60405180910390a3505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361265e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612655906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c490614871565b60405180910390fd5b600081036126e6576126e183836000613122565b6130b9565b600b60009054906101000a900460ff1615612be1576127036117bd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561277157506127416117bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127aa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127e4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127fd5750600560149054906101000a900460ff16155b15612be057600b60019054906101000a900460ff166128f757601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128b75750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed906148dd565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561299a5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a41576008548111156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db9061496f565b60405180910390fd5b600a546129f08361127a565b826129fb9190614289565b1115612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a33906149db565b60405180910390fd5b612bdf565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ae45750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3357600854811115612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2590614a6d565b60405180910390fd5b612bde565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bdd57600a54612b908361127a565b82612b9b9190614289565b1115612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd3906149db565b60405180910390fd5b5b5b5b5b5b6000612bec3061127a565b905060006009548210159050808015612c115750600b60029054906101000a900460ff165b8015612c2a5750600560149054906101000a900460ff16155b8015612c805750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cd65750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d2c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d70576001600560146101000a81548160ff021916908315150217905550612d546133b5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e265750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e3057600090505b600081156130a957601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e9357506000601054115b15612f6057612ec06064612eb26010548861369c90919063ffffffff16565b61371690919063ffffffff16565b905060105460125482612ed39190614155565b612edd91906141c6565b60156000828254612eee9190614289565b9250508190555060105460135482612f069190614155565b612f1091906141c6565b60166000828254612f219190614289565b9250508190555060105460115482612f399190614155565b612f4391906141c6565b60146000828254612f549190614289565b92505081905550613085565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fbb57506000600c54115b1561308457612fe86064612fda600c548861369c90919063ffffffff16565b61371690919063ffffffff16565b9050600c54600e5482612ffb9190614155565b61300591906141c6565b601560008282546130169190614289565b92505081905550600c54600f548261302e9190614155565b61303891906141c6565b601660008282546130499190614289565b92505081905550600c54600d54826130619190614155565b61306b91906141c6565b6014600082825461307c9190614289565b925050819055505b5b600081111561309a57613099873083613122565b5b80856130a69190614a8d565b94505b6130b4878787613122565b505050505b505050565b6000838311158290613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd9190613bb9565b60405180910390fd5b50600083856131159190614a8d565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613191576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613188906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790614871565b60405180910390fd5b61320b838383613760565b61327681604051806060016040528060268152602001614e8d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613309816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133a89190613da0565b60405180910390a3505050565b60006133c03061127a565b905060006016546014546015546133d79190614289565b6133e19190614289565b90506000808314806133f35750600082145b156134005750505061369a565b601460095461340f9190614155565b8311156134285760146009546134259190614155565b92505b60006002836015548661343b9190614155565b61344591906141c6565b61344f91906141c6565b90506000613466828661376590919063ffffffff16565b90506000479050613476826137af565b600061348b824761376590919063ffffffff16565b905060006134b6876134a86014548561369c90919063ffffffff16565b61371690919063ffffffff16565b905060006134e1886134d36016548661369c90919063ffffffff16565b61371690919063ffffffff16565b905060008183856134f29190614a8d565b6134fc9190614a8d565b9050600060158190555060006014819055506000601681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161355c90614af2565b60006040518083038185875af1925050503d8060008114613599576040519150601f19603f3d011682016040523d82523d6000602084013e61359e565b606091505b5050809850506000871180156135b45750600081115b15613601576135c387826139ec565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826015546040516135f893929190614b07565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364790614af2565b60006040518083038185875af1925050503d8060008114613684576040519150601f19603f3d011682016040523d82523d6000602084013e613689565b606091505b505080985050505050505050505050505b565b60008083036136ae5760009050613710565b600082846136bc9190614155565b90508284826136cb91906141c6565b1461370b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370290614bb0565b60405180910390fd5b809150505b92915050565b600061375883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ac6565b905092915050565b505050565b60006137a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130be565b905092915050565b6000600267ffffffffffffffff8111156137cc576137cb614bd0565b5b6040519080825280602002602001820160405280156137fa5781602001602082028036833780820191505090505b509050308160008151811061381257613811614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138db9190614c43565b816001815181106138ef576138ee614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613954307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612385565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139b6959493929190614d69565b600060405180830381600087803b1580156139d057600080fd5b505af11580156139e4573d6000803e3d6000fd5b505050505050565b613a17307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612385565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613a7c96959493929190614dc3565b60606040518083038185885af1158015613a9a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613abf9190614e39565b5050505050565b60008083118290613b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b049190613bb9565b60405180910390fd5b5060008385613b1c91906141c6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b63578082015181840152602081019050613b48565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b8b82613b29565b613b958185613b34565b9350613ba5818560208601613b45565b613bae81613b6f565b840191505092915050565b60006020820190508181036000830152613bd38184613b80565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c0b82613be0565b9050919050565b613c1b81613c00565b8114613c2657600080fd5b50565b600081359050613c3881613c12565b92915050565b6000819050919050565b613c5181613c3e565b8114613c5c57600080fd5b50565b600081359050613c6e81613c48565b92915050565b60008060408385031215613c8b57613c8a613bdb565b5b6000613c9985828601613c29565b9250506020613caa85828601613c5f565b9150509250929050565b60008115159050919050565b613cc981613cb4565b82525050565b6000602082019050613ce46000830184613cc0565b92915050565b600060208284031215613d0057613cff613bdb565b5b6000613d0e84828501613c29565b91505092915050565b6000819050919050565b6000613d3c613d37613d3284613be0565b613d17565b613be0565b9050919050565b6000613d4e82613d21565b9050919050565b6000613d6082613d43565b9050919050565b613d7081613d55565b82525050565b6000602082019050613d8b6000830184613d67565b92915050565b613d9a81613c3e565b82525050565b6000602082019050613db56000830184613d91565b92915050565b613dc481613cb4565b8114613dcf57600080fd5b50565b600081359050613de181613dbb565b92915050565b60008060408385031215613dfe57613dfd613bdb565b5b6000613e0c85828601613c29565b9250506020613e1d85828601613dd2565b9150509250929050565b600060208284031215613e3d57613e3c613bdb565b5b6000613e4b84828501613c5f565b91505092915050565b600080600060608486031215613e6d57613e6c613bdb565b5b6000613e7b86828701613c29565b9350506020613e8c86828701613c29565b9250506040613e9d86828701613c5f565b9150509250925092565b600060ff82169050919050565b613ebd81613ea7565b82525050565b6000602082019050613ed86000830184613eb4565b92915050565b613ee781613c00565b82525050565b6000602082019050613f026000830184613ede565b92915050565b600080600060608486031215613f2157613f20613bdb565b5b6000613f2f86828701613c5f565b9350506020613f4086828701613c5f565b9250506040613f5186828701613c5f565b9150509250925092565b600060208284031215613f7157613f70613bdb565b5b6000613f7f84828501613dd2565b91505092915050565b60008060408385031215613f9f57613f9e613bdb565b5b6000613fad85828601613c29565b9250506020613fbe85828601613c29565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061400f57607f821691505b60208210810361402257614021613fc8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061405e602083613b34565b915061406982614028565b602082019050919050565b6000602082019050818103600083015261408d81614051565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f706172746e657273000000000000000000000000000000000000000000000000602082015250565b60006140f0602883613b34565b91506140fb82614094565b604082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416082613c3e565b915061416b83613c3e565b925082820261417981613c3e565b915082820484148315176141905761418f614126565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141d182613c3e565b91506141dc83613c3e565b9250826141ec576141eb614197565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614253602f83613b34565b915061425e826141f7565b604082019050919050565b6000602082019050818103600083015261428281614246565b9050919050565b600061429482613c3e565b915061429f83613c3e565b92508282019050808211156142b7576142b6614126565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b60006142f3601d83613b34565b91506142fe826142bd565b602082019050919050565b60006020820190508181036000830152614322816142e6565b9050919050565b7f4d757374206b656570206665657320617420393525206f72206c657373000000600082015250565b600061435f601d83613b34565b915061436a82614329565b602082019050919050565b6000602082019050818103600083015261438e81614352565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006143f1602483613b34565b91506143fc82614395565b604082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614483603583613b34565b915061448e82614427565b604082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614515603483613b34565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145a7602683613b34565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614613601b83613b34565b915061461e826145dd565b602082019050919050565b6000602082019050818103600083015261464281614606565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146a5602483613b34565b91506146b082614649565b604082019050919050565b600060208201905081810360008301526146d481614698565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614737602283613b34565b9150614742826146db565b604082019050919050565b600060208201905081810360008301526147668161472a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147c9602583613b34565b91506147d48261476d565b604082019050919050565b600060208201905081810360008301526147f8816147bc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061485b602383613b34565b9150614866826147ff565b604082019050919050565b6000602082019050818103600083015261488a8161484e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148c7601683613b34565b91506148d282614891565b602082019050919050565b600060208201905081810360008301526148f6816148ba565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614959603583613b34565b9150614964826148fd565b604082019050919050565b600060208201905081810360008301526149888161494c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149c5601383613b34565b91506149d08261498f565b602082019050919050565b600060208201905081810360008301526149f4816149b8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a57603683613b34565b9150614a62826149fb565b604082019050919050565b60006020820190508181036000830152614a8681614a4a565b9050919050565b6000614a9882613c3e565b9150614aa383613c3e565b9250828203905081811115614abb57614aba614126565b5b92915050565b600081905092915050565b50565b6000614adc600083614ac1565b9150614ae782614acc565b600082019050919050565b6000614afd82614acf565b9150819050919050565b6000606082019050614b1c6000830186613d91565b614b296020830185613d91565b614b366040830184613d91565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9a602183613b34565b9150614ba582614b3e565b604082019050919050565b60006020820190508181036000830152614bc981614b8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c3d81613c12565b92915050565b600060208284031215614c5957614c58613bdb565b5b6000614c6784828501614c2e565b91505092915050565b6000819050919050565b6000614c95614c90614c8b84614c70565b613d17565b613c3e565b9050919050565b614ca581614c7a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ce081613c00565b82525050565b6000614cf28383614cd7565b60208301905092915050565b6000602082019050919050565b6000614d1682614cab565b614d208185614cb6565b9350614d2b83614cc7565b8060005b83811015614d5c578151614d438882614ce6565b9750614d4e83614cfe565b925050600181019050614d2f565b5085935050505092915050565b600060a082019050614d7e6000830188613d91565b614d8b6020830187614c9c565b8181036040830152614d9d8186614d0b565b9050614dac6060830185613ede565b614db96080830184613d91565b9695505050505050565b600060c082019050614dd86000830189613ede565b614de56020830188613d91565b614df26040830187614c9c565b614dff6060830186614c9c565b614e0c6080830185613ede565b614e1960a0830184613d91565b979650505050505050565b600081519050614e3381613c48565b92915050565b600080600060608486031215614e5257614e51613bdb565b5b6000614e6086828701614e24565b9350506020614e7186828701614e24565b9250506040614e8286828701614e24565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dee14a88732cee8a385aff871d7b5dba17fc2460cb504b75acae41e25cedff3d64736f6c63430008110033
Deployed Bytecode Sourcemap
29313:13840:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7411:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9585:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30458:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29393:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8534:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36790:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30172:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36223:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30132:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34374:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10237:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8375:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11002:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29451:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29719:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36957:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29986:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29798:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8706:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21913:148;;;;;;;;;;;;;:::i;:::-;;33780:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34841:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29878:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34999:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33579:148;;;;;;;;;;;;;:::i;:::-;;21269:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30021:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35919:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30681:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7631:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29952:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30212:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30097:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11724:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9047:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36573:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29759:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36029:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35410:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34617:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29603:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33979:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29844:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9286:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29645:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29915:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22217:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30059:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29685:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7411:100;7465:13;7498:5;7491:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7411:100;:::o;9585:169::-;9668:4;9685:39;9694:12;:10;:12::i;:::-;9708:7;9717:6;9685:8;:39::i;:::-;9742:4;9735:11;;9585:169;;;;:::o;30458:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29393:51::-;;;:::o;8534:108::-;8595:7;8622:12;;8615:19;;8534:108;:::o;36790:157::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36897:9:::1;;;;;;;;;;;36869:38;;36886:9;36869:38;;;;;;;;;;;;36930:9;36918;;:21;;;;;;;;;;;;;;;;;;36790:157:::0;:::o;30172:33::-;;;;:::o;36223:194::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36313:13:::1;36305:21;;:4;:21;;::::0;36297:74:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36385:24;36397:4;36403:5;36385:11;:24::i;:::-;36223:194:::0;;:::o;30132:33::-;;;;:::o;34374:234::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34493:4:::1;34487;34483:1;34467:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34466:31;;;;:::i;:::-;34456:6;:41;;34448:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34593:6;34583;:17;;;;:::i;:::-;34560:20;:40;;;;34374:234:::0;:::o;10237:355::-;10377:4;10394:36;10404:6;10412:9;10423:6;10394:9;:36::i;:::-;10441:121;10450:6;10458:12;:10;:12::i;:::-;10472:89;10510:6;10472:89;;;;;;;;;;;;;;;;;:11;:19;10484:6;10472:19;;;;;;;;;;;;;;;:33;10492:12;:10;:12::i;:::-;10472:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10441:8;:121::i;:::-;10580:4;10573:11;;10237:355;;;;;:::o;8375:93::-;8433:5;8458:2;8451:9;;8375:93;:::o;11002:218::-;11090:4;11107:83;11116:12;:10;:12::i;:::-;11130:7;11139:50;11178:10;11139:11;:25;11151:12;:10;:12::i;:::-;11139:25;;;;;;;;;;;;;;;:34;11165:7;11139:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11107:8;:83::i;:::-;11208:4;11201:11;;11002:218;;;;:::o;29451:38::-;;;:::o;29719:33::-;;;;;;;;;;;;;:::o;36957:125::-;37022:4;37046:19;:28;37066:7;37046:28;;;;;;;;;;;;;;;;;;;;;;;;;37039:35;;36957:125;;;:::o;29986:28::-;;;;:::o;29798:30::-;;;;;;;;;;;;;:::o;8706:127::-;8780:7;8807:9;:18;8817:7;8807:18;;;;;;;;;;;;;;;;8800:25;;8706:127;;;:::o;21913:148::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22020:1:::1;21983:40;;22004:6;;;;;;;;;;;21983:40;;;;;;;;;;;;22051:1;22034:6;;:19;;;;;;;;;;;;;;;;;;21913:148::o:0;33780:120::-;33832:4;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33865:5:::1;33848:14;;:22;;;;;;;;;;;;;;;;;;33888:4;33881:11;;33780:120:::0;:::o;34841:144::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34973:4:::1;34931:31;:39;34963:6;34931:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34841:144:::0;;:::o;29878:30::-;;;;:::o;34999:403::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35161:7:::1;35149:9;:19;;;;35197:13;35179:15;:31;;;;35239:13;35221:15;:31;;;;35308:15;;35290;;35278:9;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;35263:12;:60;;;;35358:2;35342:12;;:18;;35334:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34999:403:::0;;;:::o;33579:148::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33650:4:::1;33634:13;;:20;;;;;;;;;;;;;;;;;;33679:4;33665:11;;:18;;;;;;;;;;;;;;;;;;33707:12;33694:10;:25;;;;33579:148::o:0;21269:79::-;21307:7;21334:6;;;;;;;;;;;21327:13;;21269:79;:::o;30021:31::-;;;;:::o;35919:101::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36005:7:::1;35991:11;;:21;;;;;;;;;;;;;;;;;;35919:101:::0;:::o;30681:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;7631:104::-;7687:13;7720:7;7713:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7631:104;:::o;29952:24::-;;;;:::o;30212:27::-;;;;:::o;30097:25::-;;;;:::o;11724:269::-;11817:4;11834:129;11843:12;:10;:12::i;:::-;11857:7;11866:96;11905:15;11866:96;;;;;;;;;;;;;;;;;:11;:25;11878:12;:10;:12::i;:::-;11866:25;;;;;;;;;;;;;;;:34;11892:7;11866:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11834:8;:129::i;:::-;11981:4;11974:11;;11724:269;;;;:::o;9047:175::-;9133:4;9150:42;9160:12;:10;:12::i;:::-;9174:9;9185:6;9150:9;:42::i;:::-;9210:4;9203:11;;9047:175;;;;:::o;36573:208::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36710:15:::1;;;;;;;;;;;36667:59;;36690:18;36667:59;;;;;;;;;;;;36755:18;36737:15;;:36;;;;;;;;;;;;;;;;;;36573:208:::0;:::o;29759:32::-;;;;;;;;;;;;;:::o;36029:182::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36145:8:::1;36114:19;:28;36134:7;36114:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36185:7;36169:34;;;36194:8;36169:34;;;;;;:::i;:::-;;;;;;;;36029:182:::0;;:::o;35410:412::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35574:7:::1;35561:10;:20;;;;35611:13;35592:16;:32;;;;35654:13;35635:16;:32;;;;35726:16;;35707;;35694:10;;:29;;;;:::i;:::-;:48;;;;:::i;:::-;35678:13;:64;;;;35778:2;35761:13;;:19;;35753:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35410:412:::0;;;:::o;34617:215::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34739:4:::1;34733;34729:1;34713:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34712:31;;;;:::i;:::-;34702:6;:41;;34694:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34817:6;34807;:17;;;;:::i;:::-;34795:9;:29;;;;34617:215:::0;:::o;29603:35::-;;;;:::o;33979:386::-;34060:4;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34117:6:::1;34113:1;34097:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34084:9;:39;;34076:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34233:4;34229:1;34213:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34200:9;:37;;34192:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34326:9;34305:18;:30;;;;34353:4;34346:11;;33979:386:::0;;;:::o;29844:27::-;;;;:::o;9286:151::-;9375:7;9402:11;:18;9414:5;9402:18;;;;;;;;;;;;;;;:27;9421:7;9402:27;;;;;;;;;;;;;;;;9395:34;;9286:151;;;;:::o;29645:33::-;;;;:::o;29915:30::-;;;;:::o;22217:244::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22326:1:::1;22306:22;;:8;:22;;::::0;22298:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22416:8;22387:38;;22408:6;;;;;;;;;;;22387:38;;;;;;;;;;;;22445:8;22436:6;;:17;;;;;;;;;;;;;;;;;;22217:244:::0;:::o;30059:31::-;;;;:::o;29685:24::-;;;;:::o;16301:182::-;16359:7;16379:9;16395:1;16391;:5;;;;:::i;:::-;16379:17;;16420:1;16415;:6;;16407:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16474:1;16467:8;;;16301:182;;;;:::o;102:98::-;155:7;182:10;175:17;;102:98;:::o;14920:381::-;15073:1;15056:19;;:5;:19;;;15048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15154:1;15135:21;;:7;:21;;;15127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15239:6;15209:11;:18;15221:5;15209:18;;;;;;;;;;;;;;;:27;15228:7;15209:27;;;;;;;;;;;;;;;:36;;;;15277:7;15261:32;;15270:5;15261:32;;;15286:6;15261:32;;;;;;:::i;:::-;;;;;;;;14920:381;;;:::o;36426:138::-;36509:5;36492:8;:14;36501:4;36492:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;36550:5;36533:23;;36544:4;36533:23;;;;;;;;;;;;36426:138;;:::o;37091:3347::-;37239:1;37223:18;;:4;:18;;;37215:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37316:1;37302:16;;:2;:16;;;37294:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37386:1;37376:6;:11;37373:92;;37404:28;37420:4;37426:2;37430:1;37404:15;:28::i;:::-;37447:7;;37373:92;37481:14;;;;;;;;;;;37478:1170;;;37541:7;:5;:7::i;:::-;37533:15;;:4;:15;;;;:49;;;;;37575:7;:5;:7::i;:::-;37569:13;;:2;:13;;;;37533:49;:86;;;;;37617:1;37603:16;;:2;:16;;;;37533:86;:128;;;;;37654:6;37640:21;;:2;:21;;;;37533:128;:158;;;;;37683:8;;;;;;;;;;;37682:9;37533:158;37511:1126;;;37729:13;;;;;;;;;;;37725:148;;37774:19;:25;37794:4;37774:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37803:19;:23;37823:2;37803:23;;;;;;;;;;;;;;;;;;;;;;;;;37774:52;37766:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37725:148;37926:8;:14;37935:4;37926:14;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;37945:31;:35;37977:2;37945:35;;;;;;;;;;;;;;;;;;;;;;;;;37944:36;37926:54;37922:700;;;38027:20;;38017:6;:30;;38009:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;38166:9;;38149:13;38159:2;38149:9;:13::i;:::-;38140:6;:22;;;;:::i;:::-;:35;;38132:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37922:700;;;38249:8;:12;38258:2;38249:12;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;38266:31;:37;38298:4;38266:37;;;;;;;;;;;;;;;;;;;;;;;;;38265:38;38249:54;38245:377;;;38350:20;;38340:6;:30;;38332:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;38245:377;;;38476:31;:35;38508:2;38476:35;;;;;;;;;;;;;;;;;;;;;;;;;38472:150;;38569:9;;38552:13;38562:2;38552:9;:13::i;:::-;38543:6;:22;;;;:::i;:::-;:35;;38535:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38472:150;38245:377;37922:700;37511:1126;37478:1170;38661:28;38692:24;38710:4;38692:9;:24::i;:::-;38661:55;;38730:12;38769:18;;38745:20;:42;;38730:57;;38819:7;:35;;;;;38843:11;;;;;;;;;;;38819:35;:61;;;;;38872:8;;;;;;;;;;;38871:9;38819:61;:93;;;;;38898:8;:14;38907:4;38898:14;;;;;;;;;;;;;;;;;;;;;;;;;38897:15;38819:93;:136;;;;;38930:19;:25;38950:4;38930:25;;;;;;;;;;;;;;;;;;;;;;;;;38929:26;38819:136;:177;;;;;38973:19;:23;38993:2;38973:23;;;;;;;;;;;;;;;;;;;;;;;;;38972:24;38819:177;38801:311;;;39034:4;39023:8;;:15;;;;;;;;;;;;;;;;;;39056:10;:8;:10::i;:::-;39095:5;39084:8;;:16;;;;;;;;;;;;;;;;;;38801:311;39125:12;39141:8;;;;;;;;;;;39140:9;39125:24;;39251:19;:25;39271:4;39251:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39280:19;:23;39300:2;39280:23;;;;;;;;;;;;;;;;;;;;;;;;;39251:52;39248:99;;;39330:5;39320:15;;39248:99;39360:12;39464:7;39461:923;;;39515:8;:12;39524:2;39515:12;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;39547:1;39531:13;;:17;39515:33;39511:720;;;39575:34;39605:3;39575:25;39586:13;;39575:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39568:41;;39676:13;;39657:16;;39650:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39628:18;;:61;;;;;;;:::i;:::-;;;;;;;;39744:13;;39731:10;;39724:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;39708:12;;:49;;;;;;;:::i;:::-;;;;;;;;39824:13;;39805:16;;39798:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39776:18;;:61;;;;;;;:::i;:::-;;;;;;;;39511:720;;;39898:8;:14;39907:4;39898:14;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;39931:1;39916:12;;:16;39898:34;39895:336;;;39960:33;39989:3;39960:24;39971:12;;39960:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39953:40;;40059:12;;40041:15;;40034:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40012:18;;:59;;;;;;;:::i;:::-;;;;;;;;40125:12;;40113:9;;40106:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;40090:12;;:47;;;;;;;:::i;:::-;;;;;;;;40203:12;;40185:15;;40178:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40156:18;;:59;;;;;;;:::i;:::-;;;;;;;;39895:336;39511:720;40258:1;40251:4;:8;40248:93;;;40283:42;40299:4;40313;40320;40283:15;:42::i;:::-;40248:93;40368:4;40358:14;;;;;:::i;:::-;;;39461:923;40397:33;40413:4;40419:2;40423:6;40397:15;:33::i;:::-;37204:3234;;;;37091:3347;;;;:::o;17207:193::-;17293:7;17326:1;17321;:6;;17329:12;17313:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17353:9;17369:1;17365;:5;;;;:::i;:::-;17353:17;;17391:1;17384:8;;;17207:193;;;;;:::o;12484:575::-;12642:1;12624:20;;:6;:20;;;12616:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12726:1;12705:23;;:9;:23;;;12697:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12782:47;12803:6;12811:9;12822:6;12782:20;:47::i;:::-;12863:71;12885:6;12863:71;;;;;;;;;;;;;;;;;:9;:17;12873:6;12863:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12843:9;:17;12853:6;12843:17;;;;;;;;;;;;;;;:91;;;;12968:32;12993:6;12968:9;:20;12978:9;12968:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12945:9;:20;12955:9;12945:20;;;;;;;;;;;;;;;:55;;;;13033:9;13016:35;;13025:6;13016:35;;;13044:6;13016:35;;;;;;:::i;:::-;;;;;;;;12484:575;;;:::o;41582:1568::-;41621:23;41647:24;41665:4;41647:9;:24::i;:::-;41621:50;;41682:25;41752:12;;41731:18;;41710;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;41682:82;;41775:12;41823:1;41804:15;:20;:46;;;;41849:1;41828:17;:22;41804:46;41801:60;;;41853:7;;;;;41801:60;41916:2;41895:18;;:23;;;;:::i;:::-;41877:15;:41;41874:111;;;41971:2;41950:18;;:23;;;;:::i;:::-;41932:41;;41874:111;42047:23;42132:1;42112:17;42091:18;;42073:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42047:86;;42144:26;42173:36;42193:15;42173;:19;;:36;;;;:::i;:::-;42144:65;;42223:25;42251:21;42223:49;;42286:36;42303:18;42286:16;:36::i;:::-;42337:18;42358:44;42384:17;42358:21;:25;;:44;;;;:::i;:::-;42337:65;;42416:23;42442:57;42481:17;42442:34;42457:18;;42442:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;42416:83;;42510:17;42530:51;42563:17;42530:28;42545:12;;42530:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42510:71;;42592:23;42649:9;42631:15;42618:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;42592:66;;42696:1;42675:18;:22;;;;42729:1;42708:18;:22;;;;42756:1;42741:12;:16;;;;42792:9;;;;;;;;;;;42784:23;;42815:9;42784:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42771:58;;;;;42864:1;42846:15;:19;:42;;;;;42887:1;42869:15;:19;42846:42;42843:210;;;42904:46;42917:15;42934;42904:12;:46::i;:::-;42970:71;42985:18;43005:15;43022:18;;42970:71;;;;;;;;:::i;:::-;;;;;;;;42843:210;43087:15;;;;;;;;;;;43079:29;;43116:21;43079:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43066:76;;;;;41610:1540;;;;;;;;;;41582:1568;:::o;17660:473::-;17718:7;17968:1;17963;:6;17959:47;;17993:1;17986:8;;;;17959:47;18019:9;18035:1;18031;:5;;;;:::i;:::-;18019:17;;18064:1;18059;18055;:5;;;;:::i;:::-;:10;18047:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18124:1;18117:8;;;17660:473;;;;;:::o;18610:132::-;18668:7;18695:39;18699:1;18702;18695:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18688:46;;18610:132;;;;:::o;15905:125::-;;;;:::o;16767:136::-;16825:7;16852:43;16856:1;16859;16852:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16845:50;;16767:136;;;;:::o;40447:597::-;40576:21;40614:1;40600:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40576:40;;40645:4;40627;40632:1;40627:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40671:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40661:4;40666:1;40661:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40707:62;40724:4;40739:15;40757:11;40707:8;:62::i;:::-;40809:15;:66;;;40890:11;40916:1;40960:4;40987;41007:15;40809:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40502:542;40447:597;:::o;41053:520::-;41201:62;41218:4;41233:15;41251:11;41201:8;:62::i;:::-;41307:15;:31;;;41346:9;41379:4;41399:11;41425:1;41468;41519:4;41539:15;41307:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41053:520;;:::o;19239:279::-;19325:7;19357:1;19353;:5;19360:12;19345:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19384:9;19400:1;19396;:5;;;;:::i;:::-;19384:17;;19509:1;19502:8;;;19239:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:116::-;5181:21;5196:5;5181:21;:::i;:::-;5174:5;5171:32;5161:60;;5217:1;5214;5207:12;5161:60;5111:116;:::o;5233:133::-;5276:5;5314:6;5301:20;5292:29;;5330:30;5354:5;5330:30;:::i;:::-;5233:133;;;;:::o;5372:468::-;5437:6;5445;5494:2;5482:9;5473:7;5469:23;5465:32;5462:119;;;5500:79;;:::i;:::-;5462:119;5620:1;5645:53;5690:7;5681:6;5670:9;5666:22;5645:53;:::i;:::-;5635:63;;5591:117;5747:2;5773:50;5815:7;5806:6;5795:9;5791:22;5773:50;:::i;:::-;5763:60;;5718:115;5372:468;;;;;:::o;5846:329::-;5905:6;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;5846:329;;;;:::o;6181:619::-;6258:6;6266;6274;6323:2;6311:9;6302:7;6298:23;6294:32;6291:119;;;6329:79;;:::i;:::-;6291:119;6449:1;6474:53;6519:7;6510:6;6499:9;6495:22;6474:53;:::i;:::-;6464:63;;6420:117;6576:2;6602:53;6647:7;6638:6;6627:9;6623:22;6602:53;:::i;:::-;6592:63;;6547:118;6704:2;6730:53;6775:7;6766:6;6755:9;6751:22;6730:53;:::i;:::-;6720:63;;6675:118;6181:619;;;;;:::o;6806:86::-;6841:7;6881:4;6874:5;6870:16;6859:27;;6806:86;;;:::o;6898:112::-;6981:22;6997:5;6981:22;:::i;:::-;6976:3;6969:35;6898:112;;:::o;7016:214::-;7105:4;7143:2;7132:9;7128:18;7120:26;;7156:67;7220:1;7209:9;7205:17;7196:6;7156:67;:::i;:::-;7016:214;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:227::-;10659:34;10655:1;10647:6;10643:14;10636:58;10728:10;10723:2;10715:6;10711:15;10704:35;10519:227;:::o;10752:366::-;10894:3;10915:67;10979:2;10974:3;10915:67;:::i;:::-;10908:74;;10991:93;11080:3;10991:93;:::i;:::-;11109:2;11104:3;11100:12;11093:19;;10752:366;;;:::o;11124:419::-;11290:4;11328:2;11317:9;11313:18;11305:26;;11377:9;11371:4;11367:20;11363:1;11352:9;11348:17;11341:47;11405:131;11531:4;11405:131;:::i;:::-;11397:139;;11124:419;;;:::o;11549:180::-;11597:77;11594:1;11587:88;11694:4;11691:1;11684:15;11718:4;11715:1;11708:15;11735:410;11775:7;11798:20;11816:1;11798:20;:::i;:::-;11793:25;;11832:20;11850:1;11832:20;:::i;:::-;11827:25;;11887:1;11884;11880:9;11909:30;11927:11;11909:30;:::i;:::-;11898:41;;12088:1;12079:7;12075:15;12072:1;12069:22;12049:1;12042:9;12022:83;11999:139;;12118:18;;:::i;:::-;11999:139;11783:362;11735:410;;;;:::o;12151:180::-;12199:77;12196:1;12189:88;12296:4;12293:1;12286:15;12320:4;12317:1;12310:15;12337:185;12377:1;12394:20;12412:1;12394:20;:::i;:::-;12389:25;;12428:20;12446:1;12428:20;:::i;:::-;12423:25;;12467:1;12457:35;;12472:18;;:::i;:::-;12457:35;12514:1;12511;12507:9;12502:14;;12337:185;;;;:::o;12528:234::-;12668:34;12664:1;12656:6;12652:14;12645:58;12737:17;12732:2;12724:6;12720:15;12713:42;12528:234;:::o;12768:366::-;12910:3;12931:67;12995:2;12990:3;12931:67;:::i;:::-;12924:74;;13007:93;13096:3;13007:93;:::i;:::-;13125:2;13120:3;13116:12;13109:19;;12768:366;;;:::o;13140:419::-;13306:4;13344:2;13333:9;13329:18;13321:26;;13393:9;13387:4;13383:20;13379:1;13368:9;13364:17;13357:47;13421:131;13547:4;13421:131;:::i;:::-;13413:139;;13140:419;;;:::o;13565:191::-;13605:3;13624:20;13642:1;13624:20;:::i;:::-;13619:25;;13658:20;13676:1;13658:20;:::i;:::-;13653:25;;13701:1;13698;13694:9;13687:16;;13722:3;13719:1;13716:10;13713:36;;;13729:18;;:::i;:::-;13713:36;13565:191;;;;:::o;13762:179::-;13902:31;13898:1;13890:6;13886:14;13879:55;13762:179;:::o;13947:366::-;14089:3;14110:67;14174:2;14169:3;14110:67;:::i;:::-;14103:74;;14186:93;14275:3;14186:93;:::i;:::-;14304:2;14299:3;14295:12;14288:19;;13947:366;;;:::o;14319:419::-;14485:4;14523:2;14512:9;14508:18;14500:26;;14572:9;14566:4;14562:20;14558:1;14547:9;14543:17;14536:47;14600:131;14726:4;14600:131;:::i;:::-;14592:139;;14319:419;;;:::o;14744:179::-;14884:31;14880:1;14872:6;14868:14;14861:55;14744:179;:::o;14929:366::-;15071:3;15092:67;15156:2;15151:3;15092:67;:::i;:::-;15085:74;;15168:93;15257:3;15168:93;:::i;:::-;15286:2;15281:3;15277:12;15270:19;;14929:366;;;:::o;15301:419::-;15467:4;15505:2;15494:9;15490:18;15482:26;;15554:9;15548:4;15544:20;15540:1;15529:9;15525:17;15518:47;15582:131;15708:4;15582:131;:::i;:::-;15574:139;;15301:419;;;:::o;15726:223::-;15866:34;15862:1;15854:6;15850:14;15843:58;15935:6;15930:2;15922:6;15918:15;15911:31;15726:223;:::o;15955:366::-;16097:3;16118:67;16182:2;16177:3;16118:67;:::i;:::-;16111:74;;16194:93;16283:3;16194:93;:::i;:::-;16312:2;16307:3;16303:12;16296:19;;15955:366;;;:::o;16327:419::-;16493:4;16531:2;16520:9;16516:18;16508:26;;16580:9;16574:4;16570:20;16566:1;16555:9;16551:17;16544:47;16608:131;16734:4;16608:131;:::i;:::-;16600:139;;16327:419;;;:::o;16752:240::-;16892:34;16888:1;16880:6;16876:14;16869:58;16961:23;16956:2;16948:6;16944:15;16937:48;16752:240;:::o;16998:366::-;17140:3;17161:67;17225:2;17220:3;17161:67;:::i;:::-;17154:74;;17237:93;17326:3;17237:93;:::i;:::-;17355:2;17350:3;17346:12;17339:19;;16998:366;;;:::o;17370:419::-;17536:4;17574:2;17563:9;17559:18;17551:26;;17623:9;17617:4;17613:20;17609:1;17598:9;17594:17;17587:47;17651:131;17777:4;17651:131;:::i;:::-;17643:139;;17370:419;;;:::o;17795:239::-;17935:34;17931:1;17923:6;17919:14;17912:58;18004:22;17999:2;17991:6;17987:15;17980:47;17795:239;:::o;18040:366::-;18182:3;18203:67;18267:2;18262:3;18203:67;:::i;:::-;18196:74;;18279:93;18368:3;18279:93;:::i;:::-;18397:2;18392:3;18388:12;18381:19;;18040:366;;;:::o;18412:419::-;18578:4;18616:2;18605:9;18601:18;18593:26;;18665:9;18659:4;18655:20;18651:1;18640:9;18636:17;18629:47;18693:131;18819:4;18693:131;:::i;:::-;18685:139;;18412:419;;;:::o;18837:225::-;18977:34;18973:1;18965:6;18961:14;18954:58;19046:8;19041:2;19033:6;19029:15;19022:33;18837:225;:::o;19068:366::-;19210:3;19231:67;19295:2;19290:3;19231:67;:::i;:::-;19224:74;;19307:93;19396:3;19307:93;:::i;:::-;19425:2;19420:3;19416:12;19409:19;;19068:366;;;:::o;19440:419::-;19606:4;19644:2;19633:9;19629:18;19621:26;;19693:9;19687:4;19683:20;19679:1;19668:9;19664:17;19657:47;19721:131;19847:4;19721:131;:::i;:::-;19713:139;;19440:419;;;:::o;19865:177::-;20005:29;20001:1;19993:6;19989:14;19982:53;19865:177;:::o;20048:366::-;20190:3;20211:67;20275:2;20270:3;20211:67;:::i;:::-;20204:74;;20287:93;20376:3;20287:93;:::i;:::-;20405:2;20400:3;20396:12;20389:19;;20048:366;;;:::o;20420:419::-;20586:4;20624:2;20613:9;20609:18;20601:26;;20673:9;20667:4;20663:20;20659:1;20648:9;20644:17;20637:47;20701:131;20827:4;20701:131;:::i;:::-;20693:139;;20420:419;;;:::o;20845:223::-;20985:34;20981:1;20973:6;20969:14;20962:58;21054:6;21049:2;21041:6;21037:15;21030:31;20845:223;:::o;21074:366::-;21216:3;21237:67;21301:2;21296:3;21237:67;:::i;:::-;21230:74;;21313:93;21402:3;21313:93;:::i;:::-;21431:2;21426:3;21422:12;21415:19;;21074:366;;;:::o;21446:419::-;21612:4;21650:2;21639:9;21635:18;21627:26;;21699:9;21693:4;21689:20;21685:1;21674:9;21670:17;21663:47;21727:131;21853:4;21727:131;:::i;:::-;21719:139;;21446:419;;;:::o;21871:221::-;22011:34;22007:1;21999:6;21995:14;21988:58;22080:4;22075:2;22067:6;22063:15;22056:29;21871:221;:::o;22098:366::-;22240:3;22261:67;22325:2;22320:3;22261:67;:::i;:::-;22254:74;;22337:93;22426:3;22337:93;:::i;:::-;22455:2;22450:3;22446:12;22439:19;;22098:366;;;:::o;22470:419::-;22636:4;22674:2;22663:9;22659:18;22651:26;;22723:9;22717:4;22713:20;22709:1;22698:9;22694:17;22687:47;22751:131;22877:4;22751:131;:::i;:::-;22743:139;;22470:419;;;:::o;22895:224::-;23035:34;23031:1;23023:6;23019:14;23012:58;23104:7;23099:2;23091:6;23087:15;23080:32;22895:224;:::o;23125:366::-;23267:3;23288:67;23352:2;23347:3;23288:67;:::i;:::-;23281:74;;23364:93;23453:3;23364:93;:::i;:::-;23482:2;23477:3;23473:12;23466:19;;23125:366;;;:::o;23497:419::-;23663:4;23701:2;23690:9;23686:18;23678:26;;23750:9;23744:4;23740:20;23736:1;23725:9;23721:17;23714:47;23778:131;23904:4;23778:131;:::i;:::-;23770:139;;23497:419;;;:::o;23922:222::-;24062:34;24058:1;24050:6;24046:14;24039:58;24131:5;24126:2;24118:6;24114:15;24107:30;23922:222;:::o;24150:366::-;24292:3;24313:67;24377:2;24372:3;24313:67;:::i;:::-;24306:74;;24389:93;24478:3;24389:93;:::i;:::-;24507:2;24502:3;24498:12;24491:19;;24150:366;;;:::o;24522:419::-;24688:4;24726:2;24715:9;24711:18;24703:26;;24775:9;24769:4;24765:20;24761:1;24750:9;24746:17;24739:47;24803:131;24929:4;24803:131;:::i;:::-;24795:139;;24522:419;;;:::o;24947:172::-;25087:24;25083:1;25075:6;25071:14;25064:48;24947:172;:::o;25125:366::-;25267:3;25288:67;25352:2;25347:3;25288:67;:::i;:::-;25281:74;;25364:93;25453:3;25364:93;:::i;:::-;25482:2;25477:3;25473:12;25466:19;;25125:366;;;:::o;25497:419::-;25663:4;25701:2;25690:9;25686:18;25678:26;;25750:9;25744:4;25740:20;25736:1;25725:9;25721:17;25714:47;25778:131;25904:4;25778:131;:::i;:::-;25770:139;;25497:419;;;:::o;25922:240::-;26062:34;26058:1;26050:6;26046:14;26039:58;26131:23;26126:2;26118:6;26114:15;26107:48;25922:240;:::o;26168:366::-;26310:3;26331:67;26395:2;26390:3;26331:67;:::i;:::-;26324:74;;26407:93;26496:3;26407:93;:::i;:::-;26525:2;26520:3;26516:12;26509:19;;26168:366;;;:::o;26540:419::-;26706:4;26744:2;26733:9;26729:18;26721:26;;26793:9;26787:4;26783:20;26779:1;26768:9;26764:17;26757:47;26821:131;26947:4;26821:131;:::i;:::-;26813:139;;26540:419;;;:::o;26965:169::-;27105:21;27101:1;27093:6;27089:14;27082:45;26965:169;:::o;27140:366::-;27282:3;27303:67;27367:2;27362:3;27303:67;:::i;:::-;27296:74;;27379:93;27468:3;27379:93;:::i;:::-;27497:2;27492:3;27488:12;27481:19;;27140:366;;;:::o;27512:419::-;27678:4;27716:2;27705:9;27701:18;27693:26;;27765:9;27759:4;27755:20;27751:1;27740:9;27736:17;27729:47;27793:131;27919:4;27793:131;:::i;:::-;27785:139;;27512:419;;;:::o;27937:241::-;28077:34;28073:1;28065:6;28061:14;28054:58;28146:24;28141:2;28133:6;28129:15;28122:49;27937:241;:::o;28184:366::-;28326:3;28347:67;28411:2;28406:3;28347:67;:::i;:::-;28340:74;;28423:93;28512:3;28423:93;:::i;:::-;28541:2;28536:3;28532:12;28525:19;;28184:366;;;:::o;28556:419::-;28722:4;28760:2;28749:9;28745:18;28737:26;;28809:9;28803:4;28799:20;28795:1;28784:9;28780:17;28773:47;28837:131;28963:4;28837:131;:::i;:::-;28829:139;;28556:419;;;:::o;28981:194::-;29021:4;29041:20;29059:1;29041:20;:::i;:::-;29036:25;;29075:20;29093:1;29075:20;:::i;:::-;29070:25;;29119:1;29116;29112:9;29104:17;;29143:1;29137:4;29134:11;29131:37;;;29148:18;;:::i;:::-;29131:37;28981:194;;;;:::o;29181:147::-;29282:11;29319:3;29304:18;;29181:147;;;;:::o;29334:114::-;;:::o;29454:398::-;29613:3;29634:83;29715:1;29710:3;29634:83;:::i;:::-;29627:90;;29726:93;29815:3;29726:93;:::i;:::-;29844:1;29839:3;29835:11;29828:18;;29454:398;;;:::o;29858:379::-;30042:3;30064:147;30207:3;30064:147;:::i;:::-;30057:154;;30228:3;30221:10;;29858:379;;;:::o;30243:442::-;30392:4;30430:2;30419:9;30415:18;30407:26;;30443:71;30511:1;30500:9;30496:17;30487:6;30443:71;:::i;:::-;30524:72;30592:2;30581:9;30577:18;30568:6;30524:72;:::i;:::-;30606;30674:2;30663:9;30659:18;30650:6;30606:72;:::i;:::-;30243:442;;;;;;:::o;30691:220::-;30831:34;30827:1;30819:6;30815:14;30808:58;30900:3;30895:2;30887:6;30883:15;30876:28;30691:220;:::o;30917:366::-;31059:3;31080:67;31144:2;31139:3;31080:67;:::i;:::-;31073:74;;31156:93;31245:3;31156:93;:::i;:::-;31274:2;31269:3;31265:12;31258:19;;30917:366;;;:::o;31289:419::-;31455:4;31493:2;31482:9;31478:18;31470:26;;31542:9;31536:4;31532:20;31528:1;31517:9;31513:17;31506:47;31570:131;31696:4;31570:131;:::i;:::-;31562:139;;31289:419;;;:::o;31714:180::-;31762:77;31759:1;31752:88;31859:4;31856:1;31849:15;31883:4;31880:1;31873:15;31900:180;31948:77;31945:1;31938:88;32045:4;32042:1;32035:15;32069:4;32066:1;32059:15;32086:143;32143:5;32174:6;32168:13;32159:22;;32190:33;32217:5;32190:33;:::i;:::-;32086:143;;;;:::o;32235:351::-;32305:6;32354:2;32342:9;32333:7;32329:23;32325:32;32322:119;;;32360:79;;:::i;:::-;32322:119;32480:1;32505:64;32561:7;32552:6;32541:9;32537:22;32505:64;:::i;:::-;32495:74;;32451:128;32235:351;;;;:::o;32592:85::-;32637:7;32666:5;32655:16;;32592:85;;;:::o;32683:158::-;32741:9;32774:61;32792:42;32801:32;32827:5;32801:32;:::i;:::-;32792:42;:::i;:::-;32774:61;:::i;:::-;32761:74;;32683:158;;;:::o;32847:147::-;32942:45;32981:5;32942:45;:::i;:::-;32937:3;32930:58;32847:147;;:::o;33000:114::-;33067:6;33101:5;33095:12;33085:22;;33000:114;;;:::o;33120:184::-;33219:11;33253:6;33248:3;33241:19;33293:4;33288:3;33284:14;33269:29;;33120:184;;;;:::o;33310:132::-;33377:4;33400:3;33392:11;;33430:4;33425:3;33421:14;33413:22;;33310:132;;;:::o;33448:108::-;33525:24;33543:5;33525:24;:::i;:::-;33520:3;33513:37;33448:108;;:::o;33562:179::-;33631:10;33652:46;33694:3;33686:6;33652:46;:::i;:::-;33730:4;33725:3;33721:14;33707:28;;33562:179;;;;:::o;33747:113::-;33817:4;33849;33844:3;33840:14;33832:22;;33747:113;;;:::o;33896:732::-;34015:3;34044:54;34092:5;34044:54;:::i;:::-;34114:86;34193:6;34188:3;34114:86;:::i;:::-;34107:93;;34224:56;34274:5;34224:56;:::i;:::-;34303:7;34334:1;34319:284;34344:6;34341:1;34338:13;34319:284;;;34420:6;34414:13;34447:63;34506:3;34491:13;34447:63;:::i;:::-;34440:70;;34533:60;34586:6;34533:60;:::i;:::-;34523:70;;34379:224;34366:1;34363;34359:9;34354:14;;34319:284;;;34323:14;34619:3;34612:10;;34020:608;;;33896:732;;;;:::o;34634:831::-;34897:4;34935:3;34924:9;34920:19;34912:27;;34949:71;35017:1;35006:9;35002:17;34993:6;34949:71;:::i;:::-;35030:80;35106:2;35095:9;35091:18;35082:6;35030:80;:::i;:::-;35157:9;35151:4;35147:20;35142:2;35131:9;35127:18;35120:48;35185:108;35288:4;35279:6;35185:108;:::i;:::-;35177:116;;35303:72;35371:2;35360:9;35356:18;35347:6;35303:72;:::i;:::-;35385:73;35453:3;35442:9;35438:19;35429:6;35385:73;:::i;:::-;34634:831;;;;;;;;:::o;35471:807::-;35720:4;35758:3;35747:9;35743:19;35735:27;;35772:71;35840:1;35829:9;35825:17;35816:6;35772:71;:::i;:::-;35853:72;35921:2;35910:9;35906:18;35897:6;35853:72;:::i;:::-;35935:80;36011:2;36000:9;35996:18;35987:6;35935:80;:::i;:::-;36025;36101:2;36090:9;36086:18;36077:6;36025:80;:::i;:::-;36115:73;36183:3;36172:9;36168:19;36159:6;36115:73;:::i;:::-;36198;36266:3;36255:9;36251:19;36242:6;36198:73;:::i;:::-;35471:807;;;;;;;;;:::o;36284:143::-;36341:5;36372:6;36366:13;36357:22;;36388:33;36415:5;36388:33;:::i;:::-;36284:143;;;;:::o;36433:663::-;36521:6;36529;36537;36586:2;36574:9;36565:7;36561:23;36557:32;36554:119;;;36592:79;;:::i;:::-;36554:119;36712:1;36737:64;36793:7;36784:6;36773:9;36769:22;36737:64;:::i;:::-;36727:74;;36683:128;36850:2;36876:64;36932:7;36923:6;36912:9;36908:22;36876:64;:::i;:::-;36866:74;;36821:129;36989:2;37015:64;37071:7;37062:6;37051:9;37047:22;37015:64;:::i;:::-;37005:74;;36960:129;36433:663;;;;;:::o
Swarm Source
ipfs://dee14a88732cee8a385aff871d7b5dba17fc2460cb504b75acae41e25cedff3d
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.