Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
69,000,000,000 BASEPEPE
Holders
68
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
149,940,557.311734452949330845 BASEPEPEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BasePepe
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-16 */ /** The First and Biggest Meme on Base Chain. https://Base-Pepe.com/ https://medium.com/@BasePepe https://twitter.com/BasePepeERC https://t.me/BasePepe_Entry */ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ /** * @dev Returns the amount of tokens in existence. */ /** * @dev Returns the amount of tokens owned by `account`. */ /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ /** * @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. */ /** * @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. */ 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); } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ 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; } 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; } library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } function functionCall( address target, bytes memory data ) internal returns (bytes memory) { return functionCallWithValue( target, data, 0, "Address: low-level call failed" ); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @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 functionStaticCall( address target, bytes memory data ) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } function functionDelegateCall( address target, bytes memory data ) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert( bytes memory returndata, string memory errorMessage ) private pure { if (returndata.length > 0) { /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } interface IERC20Permit { function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); } interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address from, address to, uint256 amount ) external returns (bool); } library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 oldAllowance = token.allowance(address(this), spender); _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, oldAllowance + value ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require( oldAllowance >= value, "SafeERC20: decreased allowance below zero" ); _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, oldAllowance - value ) ); } } function forceApprove( IERC20 token, address spender, uint256 value ) internal { bytes memory approvalCall = abi.encodeWithSelector( token.approve.selector, spender, value ); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, 0) ); _callOptionalReturn(token, approvalCall); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require( nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed" ); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); require( returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } function _callOptionalReturnBool( IERC20 token, bytes memory data ) private returns (bool) { (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token)); } } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; } function _nonReentrantAfter() private { _status = _NOT_ENTERED; } function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } function transfer( address to, uint256 amount ) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve( address spender, uint256 amount ) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } 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); } function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract BasePepe is Ownable, ReentrancyGuard, ERC20 { using SafeERC20 for IERC20; uint256 public liquidityTaxBuy; uint256 public liquidityTaxSell; uint256 public marketingTaxBuy; uint256 public marketingTaxSell; uint256 public immutable denominator; uint256 public liquidityTokenAmount; uint256 public marketingTokenAmount; address public marketingWallet; bool private swapping; uint256 public swapTokensAtAmount; bool public isSwapBackEnabled; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; uint256 public maxWalletLimit; mapping(address => bool) private _isAutomatedMarketMakerPair; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedFromMaxWalletLimit; modifier inSwap() { swapping = true; _; swapping = false; } event UpdateBuyTax(uint256 liquidityTaxBuy, uint256 marketingTaxBuy); event UpdateSellTax(uint256 liquidityTaxSell, uint256 marketingTaxSell); event UpdateMarketingWallet(address indexed marketingWallet); event UpdateMaxWalletLimit(uint256 maxWalletLimit); event UpdateExcludeFromMaxWalletLimit( address indexed account, bool isExcluded ); event UpdateSwapTokensAtAmount(uint256 swapTokensAtAmount); event UpdateSwapBackStatus(bool status); event UpdateAutomatedMarketMakerPair(address indexed pair, bool status); event UpdateExcludeFromFees(address indexed account, bool isExcluded); constructor() ERC20("Base Pepe", "BASEPEPE") { _mint(owner(), 69_000_000_000 * (10 ** 18)); liquidityTaxBuy = 0; liquidityTaxSell = 200; marketingTaxBuy = 500; marketingTaxSell = 1300; denominator = 10_000; marketingWallet = 0xa5C356CDA0b8D63d7b512d98d2Ad1F14F640A574; swapTokensAtAmount = totalSupply() / 100_000; isSwapBackEnabled = true; address router = getRouterAddress(); uniswapV2Router = IUniswapV2Router02(router); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); _approve(address(this), address(uniswapV2Router), type(uint256).max); maxWalletLimit = 150; _isAutomatedMarketMakerPair[address(uniswapV2Pair)] = true; _isExcludedFromMaxWalletLimit[address(0xdead)] = true; _isExcludedFromMaxWalletLimit[address(owner())] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Pair)] = true; _isExcludedFromFees[address(0xdead)] = true; _isExcludedFromFees[address(owner())] = true; _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[address(uniswapV2Router)] = true; } receive() external payable {} fallback() external payable {} function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function getRouterAddress() public view returns (address) { if (block.chainid == 56) { return 0x10ED43C718714eb63d5aA57B78B54704E256024E; } else if (block.chainid == 97) { return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; } else if (block.chainid == 1 || block.chainid == 5) { return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; } else { revert("Cannot found router on this network"); } } function claimStuckTokens(address token) external onlyOwner { require(token != address(this), "Owner cannot claim native tokens"); if (token == address(0x0)) { payable(msg.sender).transfer(address(this).balance); return; } IERC20 ERC20token = IERC20(token); uint256 balance = ERC20token.balanceOf(address(this)); ERC20token.safeTransfer(msg.sender, balance); } function setBuyTax( uint256 _liquidityTaxBuy, uint256 _marketingTaxBuy ) external onlyOwner { require( liquidityTaxBuy != _liquidityTaxBuy || marketingTaxBuy != _marketingTaxBuy, "Buy Tax already on that amount" ); require( _liquidityTaxBuy + _marketingTaxBuy <= 4_000, "Buy Tax cannot be more than 10%" ); liquidityTaxBuy = _liquidityTaxBuy; marketingTaxBuy = _marketingTaxBuy; emit UpdateBuyTax(_liquidityTaxBuy, _marketingTaxBuy); } function setSellTax( uint256 _liquidityTaxSell, uint256 _marketingTaxSell ) external onlyOwner { require( liquidityTaxSell != _liquidityTaxSell || marketingTaxSell != _marketingTaxSell, "Sell Tax already on that amount" ); require( _liquidityTaxSell + _marketingTaxSell <= 4_000, "Sell Tax cannot be more than 10%" ); liquidityTaxSell = _liquidityTaxSell; marketingTaxSell = _marketingTaxSell; emit UpdateSellTax(_liquidityTaxSell, _marketingTaxSell); } function setMarketingWallet(address _marketingWallet) external onlyOwner { require( _marketingWallet != marketingWallet, "Marketing wallet is already that address" ); require( _marketingWallet != address(0), "Marketing wallet cannot be the zero address" ); require( !isContract(_marketingWallet), "Marketing wallet cannot be a contract" ); marketingWallet = _marketingWallet; emit UpdateMarketingWallet(_marketingWallet); } function setSwapTokensAtAmount(uint256 amount) external onlyOwner { require( swapTokensAtAmount != amount, "SwapTokensAtAmount already on that amount" ); require( amount >= totalSupply() / 1_000_000, "Amount must be equal or greater than 0.000001% of Total Supply" ); swapTokensAtAmount = amount; emit UpdateSwapTokensAtAmount(amount); } function toggleSwapBack(bool status) external onlyOwner { require(isSwapBackEnabled != status, "SwapBack already on status"); isSwapBackEnabled = status; emit UpdateSwapBackStatus(status); } function setMaxWalletLimit(uint256 amount) external onlyOwner { require( maxWalletLimit != amount, "maxWalletLimit already on that amount" ); require( amount >= 10 && amount <= 10_000, "maxWalletLimit cannot be below 0.1% of totalSupply (10) or more than 100% of totalSupply (10000)" ); maxWalletLimit = amount; emit UpdateMaxWalletLimit(amount); } function setAutomatedMarketMakerPair( address pair, bool status ) external onlyOwner { require( _isAutomatedMarketMakerPair[pair] != status, "Pair address is already the value of 'status'" ); require(pair != address(uniswapV2Pair), "Cannot set this pair"); _isAutomatedMarketMakerPair[pair] = status; emit UpdateAutomatedMarketMakerPair(pair, status); } function isAutomatedMarketMakerPair( address pair ) external view returns (bool) { return _isAutomatedMarketMakerPair[pair]; } function setExcludeFromFees( address account, bool excluded ) external onlyOwner { require( _isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedFromFees[account] = excluded; emit UpdateExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) external view returns (bool) { return _isExcludedFromFees[account]; } function setExcludeFromMaxWalletLimit( address account, bool excluded ) external onlyOwner { require( account != address(this), "State of this contract address cannot be modified" ); require( _isExcludedFromMaxWalletLimit[account] != excluded, "Account is already the value of 'excluded'" ); require(account != address(uniswapV2Pair), "Cannot set this pair"); _isExcludedFromMaxWalletLimit[account] = excluded; emit UpdateExcludeFromMaxWalletLimit(account, excluded); } function isExcludedFromMaxWalletLimit( address account ) external view returns (bool) { return _isExcludedFromMaxWalletLimit[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; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && !swapping && !_isAutomatedMarketMakerPair[from] && isSwapBackEnabled && liquidityTokenAmount + marketingTokenAmount > 0 ) { swapBack(); } bool takeFee = true; if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) { takeFee = false; } if (!_isExcludedFromMaxWalletLimit[to]) { require( balanceOf(to) + amount <= (totalSupply() * maxWalletLimit) / denominator, "Balance of to user cannot more than wallet limit" ); } if (takeFee) { uint256 tempLiquidityAmount; uint256 tempMarketingAmount; if (_isAutomatedMarketMakerPair[from]) { tempLiquidityAmount = (amount * liquidityTaxBuy) / denominator; tempMarketingAmount = (amount * marketingTaxBuy) / denominator; } else if (_isAutomatedMarketMakerPair[to]) { tempLiquidityAmount = (amount * liquidityTaxSell) / denominator; tempMarketingAmount = (amount * marketingTaxSell) / denominator; } liquidityTokenAmount += tempLiquidityAmount; marketingTokenAmount += tempMarketingAmount; uint256 fees = tempLiquidityAmount + tempMarketingAmount; if (fees > 0) { amount -= fees; super._transfer(from, address(this), fees); } } super._transfer(from, to, amount); } function swapBack() internal inSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uint256 contractTokenBalance = balanceOf(address(this)); uint256 totalTax = liquidityTokenAmount + marketingTokenAmount; uint256 liquifyToken = (contractTokenBalance * (liquidityTokenAmount / 2)) / totalTax; uint256 swapBackAmount = contractTokenBalance - liquifyToken; totalTax -= (liquidityTokenAmount) / 2; try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( swapBackAmount, 0, path, address(this), block.timestamp ) {} catch { return; } uint256 newBalance = address(this).balance; uint256 marketingBNB = (newBalance * marketingTokenAmount) / totalTax; uint256 liquifyBNB = newBalance - marketingBNB; if (liquifyToken > 0 && liquifyBNB > 0) { try uniswapV2Router.addLiquidityETH{value: liquifyBNB}( address(this), liquifyToken, 0, 0, address(0xdead), block.timestamp ) {} catch {} } if (marketingBNB > 0) { sendBNB(marketingWallet, marketingBNB); } liquidityTokenAmount = 0; marketingTokenAmount = 0; } function sendBNB( address _to, uint256 amount ) internal nonReentrant returns (bool) { if (address(this).balance < amount) return false; (bool success, ) = payable(_to).call{value: amount}(""); return success; } function manualSwapBack() external { uint256 contractTokenBalance = balanceOf(address(this)); require(contractTokenBalance > 0, "Cant Swap Back 0 Token!"); swapBack(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxBuy","type":"uint256"}],"name":"UpdateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletLimit","type":"uint256"}],"name":"UpdateMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxSell","type":"uint256"}],"name":"UpdateSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateSwapBackStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"UpdateSwapTokensAtAmount","type":"event"},{"stateMutability":"payable","type":"fallback"},{"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":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","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":"denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxBuy","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxSell","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxSell","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"bool","name":"status","type":"bool"}],"name":"toggleSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040523480156200001157600080fd5b506040518060400160405280600981526020017f42617365205065706500000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f42415345504550450000000000000000000000000000000000000000000000008152506200009e620000926200077c60201b60201c565b6200078460201b60201c565b600180819055508160059081620000b6919062000eff565b508060069081620000c8919062000eff565b505050620000f8620000df6200084860201b60201c565b6bdef376571332906a880000006200087160201b60201c565b600060078190555060c86008819055506101f4600981905550610514600a819055506127106080818152505073a5c356cda0b8d63d7b512d98d2ad1f14f640a574600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620186a06200018d620009df60201b60201c565b62000199919062001044565b600e819055506001600f60006101000a81548160ff0219169083151502179055506000620001cc620009e960201b60201c565b90508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000250573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002769190620010e6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060a05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003069190620010e6565b6040518363ffffffff1660e01b81526004016200032592919062001129565b6020604051808303816000875af115801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b9190620010e6565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050620003d33060a0517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000aaa60201b60201c565b609660108190555060016011600060c05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000620004a56200084860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600060c05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016012600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000620006726200084860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016012600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200140a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008da90620011b7565b60405180910390fd5b620008f76000838362000c7b60201b60201c565b80600460008282546200090b9190620011d9565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009bf919062001225565b60405180910390a3620009db6000838362000c8060201b60201c565b5050565b6000600454905090565b60006038460362000a11577310ed43c718714eb63d5aa57b78b54704e256024e905062000aa7565b6061460362000a375773d99d1c33f9fc3444f8101754abc46c52416550d1905062000aa7565b600146148062000a475750600546145b1562000a6a57737a250d5630b4cf539739df2c5dacb4c659f2488d905062000aa7565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a9e90620012b8565b60405180910390fd5b90565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b139062001350565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8590620013e8565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c6e919062001225565b60405180910390a3505050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d0757607f821691505b60208210810362000d1d5762000d1c62000cbf565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d48565b62000d93868362000d48565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000de062000dda62000dd48462000dab565b62000db5565b62000dab565b9050919050565b6000819050919050565b62000dfc8362000dbf565b62000e1462000e0b8262000de7565b84845462000d55565b825550505050565b600090565b62000e2b62000e1c565b62000e3881848462000df1565b505050565b5b8181101562000e605762000e5460008262000e21565b60018101905062000e3e565b5050565b601f82111562000eaf5762000e798162000d23565b62000e848462000d38565b8101602085101562000e94578190505b62000eac62000ea38562000d38565b83018262000e3d565b50505b505050565b600082821c905092915050565b600062000ed46000198460080262000eb4565b1980831691505092915050565b600062000eef838362000ec1565b9150826002028217905092915050565b62000f0a8262000c85565b67ffffffffffffffff81111562000f265762000f2562000c90565b5b62000f32825462000cee565b62000f3f82828562000e64565b600060209050601f83116001811462000f77576000841562000f62578287015190505b62000f6e858262000ee1565b86555062000fde565b601f19841662000f878662000d23565b60005b8281101562000fb15784890151825560018201915060208501945060208101905062000f8a565b8683101562000fd1578489015162000fcd601f89168262000ec1565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010518262000dab565b91506200105e8362000dab565b92508262001071576200107062000fe6565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010ae8262001081565b9050919050565b620010c081620010a1565b8114620010cc57600080fd5b50565b600081519050620010e081620010b5565b92915050565b600060208284031215620010ff57620010fe6200107c565b5b60006200110f84828501620010cf565b91505092915050565b6200112381620010a1565b82525050565b600060408201905062001140600083018562001118565b6200114f602083018462001118565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200119f601f8362001156565b9150620011ac8262001167565b602082019050919050565b60006020820190508181036000830152620011d28162001190565b9050919050565b6000620011e68262000dab565b9150620011f38362000dab565b92508282019050808211156200120e576200120d62001015565b5b92915050565b6200121f8162000dab565b82525050565b60006020820190506200123c600083018462001214565b92915050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760008201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b6000620012a060238362001156565b9150620012ad8262001242565b604082019050919050565b60006020820190508181036000830152620012d38162001291565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200133860248362001156565b91506200134582620012da565b604082019050919050565b600060208201905081810360008301526200136b8162001329565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620013d060228362001156565b9150620013dd8262001372565b604082019050919050565b600060208201905081810360008301526200140381620013c1565b9050919050565b60805160a05160c051614d6e6200148060003960008181610de30152818161137a015261162a015260008181610b940152818161272c0152818161287f015261296101526000818161156c0152818161239e0152818161248f015281816124ca0152818161255c01526125970152614d6e6000f3fe6080604052600436106102555760003560e01c806371afc713116101395780639a7a23d6116100b6578063d54f7d5e1161007a578063d54f7d5e146108d4578063d63cad22146108ff578063dd62ed3e14610928578063e2f4560514610965578063f2fde38b14610990578063f9d0831a146109b95761025c565b80639a7a23d6146107cb578063a457c2d7146107f4578063a8a69b9d14610831578063a9059cbb1461086e578063afa4f3b2146108ab5761025c565b80638123bdc8116100fd5780638123bdc8146106f65780638a96082e146107215780638da5cb5b1461074a57806395d89b411461077557806396ce0795146107a05761025c565b806371afc7131461060f578063721e62331461063a578063728d41c91461066557806375f0a8741461068e5780637949a403146106b95761025c565b8063313ce567116101d257806352dfc8d01161019657806352dfc8d0146105255780635d098b381461055057806366a88d961461057957806366eb3785146105a457806370a08231146105bb578063715018a6146105f85761025c565b8063313ce5671461042a578063395093511461045557806342d0b0bc1461049257806349bd5a5e146104bd5780634fbee193146104e85761025c565b806318160ddd1161021957806318160ddd146103455780631f88a23e1461037057806323b872dd14610399578063247b912d146103d6578063248ba7ed146103ff5761025c565b806305a1f36d1461025e57806306fdde0314610287578063095ea7b3146102b25780630abc8e7b146102ef5780631694505e1461031a5761025c565b3661025c57005b005b34801561026a57600080fd5b5061028560048036038101906102809190613208565b6109e2565b005b34801561029357600080fd5b5061029c610ad7565b6040516102a991906132d8565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613358565b610b69565b6040516102e691906133b3565b60405180910390f35b3480156102fb57600080fd5b50610304610b8c565b60405161031191906133dd565b60405180910390f35b34801561032657600080fd5b5061032f610b92565b60405161033c9190613457565b60405180910390f35b34801561035157600080fd5b5061035a610bb6565b60405161036791906133dd565b60405180910390f35b34801561037c57600080fd5b506103976004803603810190610392919061349e565b610bc0565b005b3480156103a557600080fd5b506103c060048036038101906103bb91906134cb565b610c71565b6040516103cd91906133b3565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613208565b610ca0565b005b34801561040b57600080fd5b50610414610d95565b60405161042191906133dd565b60405180910390f35b34801561043657600080fd5b5061043f610d9b565b60405161044c919061353a565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190613358565b610da4565b60405161048991906133b3565b60405180910390f35b34801561049e57600080fd5b506104a7610ddb565b6040516104b491906133dd565b60405180910390f35b3480156104c957600080fd5b506104d2610de1565b6040516104df9190613564565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a919061357f565b610e05565b60405161051c91906133b3565b60405180910390f35b34801561053157600080fd5b5061053a610e5b565b60405161054791906133b3565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061357f565b610e6e565b005b34801561058557600080fd5b5061058e611045565b60405161059b91906133dd565b60405180910390f35b3480156105b057600080fd5b506105b961104b565b005b3480156105c757600080fd5b506105e260048036038101906105dd919061357f565b6110a6565b6040516105ef91906133dd565b60405180910390f35b34801561060457600080fd5b5061060d6110ef565b005b34801561061b57600080fd5b50610624611103565b60405161063191906133dd565b60405180910390f35b34801561064657600080fd5b5061064f611109565b60405161065c91906133dd565b60405180910390f35b34801561067157600080fd5b5061068c600480360381019061068791906135ac565b61110f565b005b34801561069a57600080fd5b506106a36111ee565b6040516106b09190613564565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db919061357f565b611214565b6040516106ed91906133b3565b60405180910390f35b34801561070257600080fd5b5061070b61126a565b60405161071891906133dd565b60405180910390f35b34801561072d57600080fd5b50610748600480360381019061074391906135d9565b611270565b005b34801561075657600080fd5b5061075f6114af565b60405161076c9190613564565b60405180910390f35b34801561078157600080fd5b5061078a6114d8565b60405161079791906132d8565b60405180910390f35b3480156107ac57600080fd5b506107b561156a565b6040516107c291906133dd565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed91906135d9565b61158e565b005b34801561080057600080fd5b5061081b60048036038101906108169190613358565b61175f565b60405161082891906133b3565b60405180910390f35b34801561083d57600080fd5b506108586004803603810190610853919061357f565b6117d6565b60405161086591906133b3565b60405180910390f35b34801561087a57600080fd5b5061089560048036038101906108909190613358565b61182c565b6040516108a291906133b3565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd91906135ac565b61184f565b005b3480156108e057600080fd5b506108e9611934565b6040516108f69190613564565b60405180910390f35b34801561090b57600080fd5b50610926600480360381019061092191906135d9565b6119ec565b005b34801561093457600080fd5b5061094f600480360381019061094a9190613619565b611b2f565b60405161095c91906133dd565b60405180910390f35b34801561097157600080fd5b5061097a611bb6565b60405161098791906133dd565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b2919061357f565b611bbc565b005b3480156109c557600080fd5b506109e060048036038101906109db919061357f565b611c3f565b005b6109ea611de9565b816007541415806109fd57508060095414155b610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a33906136a5565b60405180910390fd5b610fa08183610a4b91906136f4565b1115610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390613774565b60405180910390fd5b81600781905550806009819055507f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec8282604051610acb929190613794565b60405180910390a15050565b606060058054610ae6906137ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610b12906137ec565b8015610b5f5780601f10610b3457610100808354040283529160200191610b5f565b820191906000526020600020905b815481529060010190602001808311610b4257829003601f168201915b5050505050905090565b600080610b74611e67565b9050610b81818585611e6f565b600191505092915050565b60075481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600454905090565b610bc8611de9565b801515600f60009054906101000a900460ff16151503610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490613869565b60405180910390fd5b80600f60006101000a81548160ff0219169083151502179055507fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b781604051610c6691906133b3565b60405180910390a150565b600080610c7c611e67565b9050610c89858285612038565b610c948585856120c4565b60019150509392505050565b610ca8611de9565b81600854141580610cbb575080600a5414155b610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf1906138d5565b60405180910390fd5b610fa08183610d0991906136f4565b1115610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4190613941565b60405180910390fd5b8160088190555080600a819055507fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e8282604051610d89929190613794565b60405180910390a15050565b60085481565b60006012905090565b600080610daf611e67565b9050610dd0818585610dc18589611b2f565b610dcb91906136f4565b611e6f565b600191505092915050565b600a5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f60009054906101000a900460ff1681565b610e76611de9565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd906139d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90613a65565b60405180910390fd5b610f7e8161264f565b15610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613af7565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f060405160405180910390a250565b60105481565b6000611056306110a6565b90506000811161109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290613b63565b60405180910390fd5b6110a3612672565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110f7611de9565b6111016000612a79565b565b600c5481565b60095481565b611117611de9565b806010540361115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290613bf5565b60405180910390fd5b600a811015801561116e57506127108111155b6111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490613cad565b60405180910390fd5b806010819055507f071f030755f9025ecd66a1867810c7348bbb888c00d1ec32bf7c9d6a5a6001e8816040516111e391906133dd565b60405180910390a150565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b611278611de9565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613d3f565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f90613dd1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613e3d565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f0e89fd97e9b48b2465436024d8fa33a1d7721523f27d529a278d7244d3ef5e58826040516114a391906133b3565b60405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546114e7906137ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611513906137ec565b80156115605780601f1061153557610100808354040283529160200191611560565b820191906000526020600020905b81548152906001019060200180831161154357829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b611596611de9565b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90613ecf565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90613e3d565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f1332058260405161175391906133b3565b60405180910390a25050565b60008061176a611e67565b905060006117788286611b2f565b9050838110156117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490613f61565b60405180910390fd5b6117ca8286868403611e6f565b60019250505092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080611837611e67565b90506118448185856120c4565b600191505092915050565b611857611de9565b80600e540361189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189290613ff3565b60405180910390fd5b620f42406118a7610bb6565b6118b19190614042565b8110156118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea906140e5565b60405180910390fd5b80600e819055507fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e488160405161192991906133dd565b60405180910390a150565b60006038460361195a577310ed43c718714eb63d5aa57b78b54704e256024e90506119e9565b6061460361197e5773d99d1c33f9fc3444f8101754abc46c52416550d190506119e9565b600146148061198d5750600546145b156119ae57737a250d5630b4cf539739df2c5dacb4c659f2488d90506119e9565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614177565b60405180910390fd5b90565b6119f4611de9565b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90613dd1565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe182604051611b2391906133b3565b60405180910390a25050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b611bc4611de9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90614209565b60405180910390fd5b611c3c81612a79565b50565b611c47611de9565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cac90614275565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d35573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d2f573d6000803e3d6000fd5b50611de6565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d759190613564565b602060405180830381865afa158015611d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db691906142aa565b9050611de333828473ffffffffffffffffffffffffffffffffffffffff16612b3d9092919063ffffffff16565b50505b50565b611df1611e67565b73ffffffffffffffffffffffffffffffffffffffff16611e0f6114af565b73ffffffffffffffffffffffffffffffffffffffff1614611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90614323565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed5906143b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4490614447565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202b91906133dd565b60405180910390a3505050565b60006120448484611b2f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146120be57818110156120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a7906144b3565b60405180910390fd5b6120bd8484848403611e6f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212a90614545565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612199906145d7565b60405180910390fd5b600081036121bb576121b683836000612bc3565b61264a565b60006121c6306110a6565b90506000600e5482101590508080156121ec5750600d60149054906101000a900460ff16155b80156122425750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561225a5750600f60009054906101000a900460ff165b801561227557506000600c54600b5461227391906136f4565b115b1561228357612282612672565b5b600060019050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061232a5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123415750600d60149054906101000a900460ff165b1561234b57600090505b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612432577f00000000000000000000000000000000000000000000000000000000000000006010546123c8610bb6565b6123d291906145f7565b6123dc9190614042565b846123e6876110a6565b6123f091906136f4565b1115612431576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612428906146ab565b60405180910390fd5b5b801561263b57600080601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612508577f0000000000000000000000000000000000000000000000000000000000000000600754876124bc91906145f7565b6124c69190614042565b91507f0000000000000000000000000000000000000000000000000000000000000000600954876124f791906145f7565b6125019190614042565b90506125d2565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125d1577f00000000000000000000000000000000000000000000000000000000000000006008548761258991906145f7565b6125939190614042565b91507f0000000000000000000000000000000000000000000000000000000000000000600a54876125c491906145f7565b6125ce9190614042565b90505b5b81600b60008282546125e491906136f4565b9250508190555080600c60008282546125fd91906136f4565b925050819055506000818361261291906136f4565b9050600081111561263757808761262991906146cb565b9650612636893083612bc3565b5b5050505b612646868686612bc3565b5050505b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6001600d60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156126aa576126a96146ff565b5b6040519080825280602002602001820160405280156126d85781602001602082028036833780820191505090505b50905030816000815181106126f0576126ef61472e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b99190614772565b816001815181106127cd576127cc61472e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000612812306110a6565b90506000600c54600b5461282691906136f4565b90506000816002600b5461283a9190614042565b8461284591906145f7565b61284f9190614042565b90506000818461285f91906146cb565b90506002600b546128709190614042565b8361287b91906146cb565b92507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478260008830426040518663ffffffff1660e01b81526004016128df959493929190614898565b600060405180830381600087803b1580156128f957600080fd5b505af192505050801561290a575060015b612918575050505050612a5c565b6000479050600084600c548361292e91906145f7565b6129389190614042565b90506000818361294891906146cb565b905060008511801561295a5750600081115b15612a0c577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308860008061dead426040518863ffffffff1660e01b81526004016129c6969594939291906148f2565b60606040518083038185885af193505050508015612a0257506040513d601f19601f820116820180604052508101906129ff9190614953565b60015b15612a0b575050505b5b6000821115612a4357612a41600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612e3c565b505b6000600b819055506000600c8190555050505050505050505b6000600d60146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bbe8363a9059cbb60e01b8484604051602401612b5c9291906149a6565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ed6565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2990614545565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c98906145d7565b60405180910390fd5b612cac838383612f9e565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2a90614a41565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e2391906133dd565b60405180910390a3612e36848484612fa3565b50505050565b6000612e46612fa8565b81471015612e575760009050612ec8565b60008373ffffffffffffffffffffffffffffffffffffffff1683604051612e7d90614a92565b60006040518083038185875af1925050503d8060008114612eba576040519150601f19603f3d011682016040523d82523d6000602084013e612ebf565b606091505b50509050809150505b612ed0612ff7565b92915050565b6000612f38826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166130009092919063ffffffff16565b9050600081511480612f5a575080806020019051810190612f599190614abc565b5b612f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9090614b5b565b60405180910390fd5b505050565b505050565b505050565b600260015403612fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe490614bc7565b60405180910390fd5b6002600181905550565b60018081905550565b606061300f8484600085613018565b90509392505050565b60608247101561305d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305490614c59565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516130869190614cb5565b60006040518083038185875af1925050503d80600081146130c3576040519150601f19603f3d011682016040523d82523d6000602084013e6130c8565b606091505b50915091506130d9878383876130e5565b92505050949350505050565b6060831561314757600083510361313f576130ff8561315a565b61313e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313590614d18565b60405180910390fd5b5b829050613152565b613151838361317d565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156131905781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c491906132d8565b60405180910390fd5b600080fd5b6000819050919050565b6131e5816131d2565b81146131f057600080fd5b50565b600081359050613202816131dc565b92915050565b6000806040838503121561321f5761321e6131cd565b5b600061322d858286016131f3565b925050602061323e858286016131f3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613282578082015181840152602081019050613267565b60008484015250505050565b6000601f19601f8301169050919050565b60006132aa82613248565b6132b48185613253565b93506132c4818560208601613264565b6132cd8161328e565b840191505092915050565b600060208201905081810360008301526132f2818461329f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613325826132fa565b9050919050565b6133358161331a565b811461334057600080fd5b50565b6000813590506133528161332c565b92915050565b6000806040838503121561336f5761336e6131cd565b5b600061337d85828601613343565b925050602061338e858286016131f3565b9150509250929050565b60008115159050919050565b6133ad81613398565b82525050565b60006020820190506133c860008301846133a4565b92915050565b6133d7816131d2565b82525050565b60006020820190506133f260008301846133ce565b92915050565b6000819050919050565b600061341d613418613413846132fa565b6133f8565b6132fa565b9050919050565b600061342f82613402565b9050919050565b600061344182613424565b9050919050565b61345181613436565b82525050565b600060208201905061346c6000830184613448565b92915050565b61347b81613398565b811461348657600080fd5b50565b60008135905061349881613472565b92915050565b6000602082840312156134b4576134b36131cd565b5b60006134c284828501613489565b91505092915050565b6000806000606084860312156134e4576134e36131cd565b5b60006134f286828701613343565b935050602061350386828701613343565b9250506040613514868287016131f3565b9150509250925092565b600060ff82169050919050565b6135348161351e565b82525050565b600060208201905061354f600083018461352b565b92915050565b61355e8161331a565b82525050565b60006020820190506135796000830184613555565b92915050565b600060208284031215613595576135946131cd565b5b60006135a384828501613343565b91505092915050565b6000602082840312156135c2576135c16131cd565b5b60006135d0848285016131f3565b91505092915050565b600080604083850312156135f0576135ef6131cd565b5b60006135fe85828601613343565b925050602061360f85828601613489565b9150509250929050565b600080604083850312156136305761362f6131cd565b5b600061363e85828601613343565b925050602061364f85828601613343565b9150509250929050565b7f4275792054617820616c7265616479206f6e207468617420616d6f756e740000600082015250565b600061368f601e83613253565b915061369a82613659565b602082019050919050565b600060208201905081810360008301526136be81613682565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136ff826131d2565b915061370a836131d2565b9250828201905080821115613722576137216136c5565b5b92915050565b7f427579205461782063616e6e6f74206265206d6f7265207468616e2031302500600082015250565b600061375e601f83613253565b915061376982613728565b602082019050919050565b6000602082019050818103600083015261378d81613751565b9050919050565b60006040820190506137a960008301856133ce565b6137b660208301846133ce565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061380457607f821691505b602082108103613817576138166137bd565b5b50919050565b7f537761704261636b20616c7265616479206f6e20737461747573000000000000600082015250565b6000613853601a83613253565b915061385e8261381d565b602082019050919050565b6000602082019050818103600083015261388281613846565b9050919050565b7f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e7400600082015250565b60006138bf601f83613253565b91506138ca82613889565b602082019050919050565b600060208201905081810360008301526138ee816138b2565b9050919050565b7f53656c6c205461782063616e6e6f74206265206d6f7265207468616e20313025600082015250565b600061392b602083613253565b9150613936826138f5565b602082019050919050565b6000602082019050818103600083015261395a8161391e565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006139bd602883613253565b91506139c882613961565b604082019050919050565b600060208201905081810360008301526139ec816139b0565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613a4f602b83613253565b9150613a5a826139f3565b604082019050919050565b60006020820190508181036000830152613a7e81613a42565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b6000613ae1602583613253565b9150613aec82613a85565b604082019050919050565b60006020820190508181036000830152613b1081613ad4565b9050919050565b7f43616e742053776170204261636b203020546f6b656e21000000000000000000600082015250565b6000613b4d601783613253565b9150613b5882613b17565b602082019050919050565b60006020820190508181036000830152613b7c81613b40565b9050919050565b7f6d617857616c6c65744c696d697420616c7265616479206f6e2074686174206160008201527f6d6f756e74000000000000000000000000000000000000000000000000000000602082015250565b6000613bdf602583613253565b9150613bea82613b83565b604082019050919050565b60006020820190508181036000830152613c0e81613bd2565b9050919050565b7f6d617857616c6c65744c696d69742063616e6e6f742062652062656c6f77203060008201527f2e3125206f6620746f74616c537570706c792028313029206f72206d6f72652060208201527f7468616e2031303025206f6620746f74616c537570706c792028313030303029604082015250565b6000613c97606083613253565b9150613ca282613c15565b606082019050919050565b60006020820190508181036000830152613cc681613c8a565b9050919050565b7f5374617465206f66207468697320636f6e74726163742061646472657373206360008201527f616e6e6f74206265206d6f646966696564000000000000000000000000000000602082015250565b6000613d29603183613253565b9150613d3482613ccd565b604082019050919050565b60006020820190508181036000830152613d5881613d1c565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613dbb602a83613253565b9150613dc682613d5f565b604082019050919050565b60006020820190508181036000830152613dea81613dae565b9050919050565b7f43616e6e6f742073657420746869732070616972000000000000000000000000600082015250565b6000613e27601483613253565b9150613e3282613df1565b602082019050919050565b60006020820190508181036000830152613e5681613e1a565b9050919050565b7f50616972206164647265737320697320616c7265616479207468652076616c7560008201527f65206f6620277374617475732700000000000000000000000000000000000000602082015250565b6000613eb9602d83613253565b9150613ec482613e5d565b604082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f4b602583613253565b9150613f5682613eef565b604082019050919050565b60006020820190508181036000830152613f7a81613f3e565b9050919050565b7f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e20746860008201527f617420616d6f756e740000000000000000000000000000000000000000000000602082015250565b6000613fdd602983613253565b9150613fe882613f81565b604082019050919050565b6000602082019050818103600083015261400c81613fd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061404d826131d2565b9150614058836131d2565b92508261406857614067614013565b5b828204905092915050565b7f416d6f756e74206d75737420626520657175616c206f7220677265617465722060008201527f7468616e20302e30303030303125206f6620546f74616c20537570706c790000602082015250565b60006140cf603e83613253565b91506140da82614073565b604082019050919050565b600060208201905081810360008301526140fe816140c2565b9050919050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760008201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b6000614161602383613253565b915061416c82614105565b604082019050919050565b6000602082019050818103600083015261419081614154565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141f3602683613253565b91506141fe82614197565b604082019050919050565b60006020820190508181036000830152614222816141e6565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e73600082015250565b600061425f602083613253565b915061426a82614229565b602082019050919050565b6000602082019050818103600083015261428e81614252565b9050919050565b6000815190506142a4816131dc565b92915050565b6000602082840312156142c0576142bf6131cd565b5b60006142ce84828501614295565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061430d602083613253565b9150614318826142d7565b602082019050919050565b6000602082019050818103600083015261433c81614300565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061439f602483613253565b91506143aa82614343565b604082019050919050565b600060208201905081810360008301526143ce81614392565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614431602283613253565b915061443c826143d5565b604082019050919050565b6000602082019050818103600083015261446081614424565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061449d601d83613253565b91506144a882614467565b602082019050919050565b600060208201905081810360008301526144cc81614490565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061452f602583613253565b915061453a826144d3565b604082019050919050565b6000602082019050818103600083015261455e81614522565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145c1602383613253565b91506145cc82614565565b604082019050919050565b600060208201905081810360008301526145f0816145b4565b9050919050565b6000614602826131d2565b915061460d836131d2565b925082820261461b816131d2565b91508282048414831517614632576146316136c5565b5b5092915050565b7f42616c616e6365206f6620746f20757365722063616e6e6f74206d6f7265207460008201527f68616e2077616c6c6574206c696d697400000000000000000000000000000000602082015250565b6000614695603083613253565b91506146a082614639565b604082019050919050565b600060208201905081810360008301526146c481614688565b9050919050565b60006146d6826131d2565b91506146e1836131d2565b92508282039050818111156146f9576146f86136c5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061476c8161332c565b92915050565b600060208284031215614788576147876131cd565b5b60006147968482850161475d565b91505092915050565b6000819050919050565b60006147c46147bf6147ba8461479f565b6133f8565b6131d2565b9050919050565b6147d4816147a9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61480f8161331a565b82525050565b60006148218383614806565b60208301905092915050565b6000602082019050919050565b6000614845826147da565b61484f81856147e5565b935061485a836147f6565b8060005b8381101561488b5781516148728882614815565b975061487d8361482d565b92505060018101905061485e565b5085935050505092915050565b600060a0820190506148ad60008301886133ce565b6148ba60208301876147cb565b81810360408301526148cc818661483a565b90506148db6060830185613555565b6148e860808301846133ce565b9695505050505050565b600060c0820190506149076000830189613555565b61491460208301886133ce565b61492160408301876147cb565b61492e60608301866147cb565b61493b6080830185613555565b61494860a08301846133ce565b979650505050505050565b60008060006060848603121561496c5761496b6131cd565b5b600061497a86828701614295565b935050602061498b86828701614295565b925050604061499c86828701614295565b9150509250925092565b60006040820190506149bb6000830185613555565b6149c860208301846133ce565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614a2b602683613253565b9150614a36826149cf565b604082019050919050565b60006020820190508181036000830152614a5a81614a1e565b9050919050565b600081905092915050565b50565b6000614a7c600083614a61565b9150614a8782614a6c565b600082019050919050565b6000614a9d82614a6f565b9150819050919050565b600081519050614ab681613472565b92915050565b600060208284031215614ad257614ad16131cd565b5b6000614ae084828501614aa7565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614b45602a83613253565b9150614b5082614ae9565b604082019050919050565b60006020820190508181036000830152614b7481614b38565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614bb1601f83613253565b9150614bbc82614b7b565b602082019050919050565b60006020820190508181036000830152614be081614ba4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614c43602683613253565b9150614c4e82614be7565b604082019050919050565b60006020820190508181036000830152614c7281614c36565b9050919050565b600081519050919050565b6000614c8f82614c79565b614c998185614a61565b9350614ca9818560208601613264565b80840191505092915050565b6000614cc18284614c84565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614d02601d83613253565b9150614d0d82614ccc565b602082019050919050565b60006020820190508181036000830152614d3181614cf5565b905091905056fea26469706673582212204975492405e883d4b850e08391a22ef9b1a39b82e4b71ef335383dc7465fdb7064736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102555760003560e01c806371afc713116101395780639a7a23d6116100b6578063d54f7d5e1161007a578063d54f7d5e146108d4578063d63cad22146108ff578063dd62ed3e14610928578063e2f4560514610965578063f2fde38b14610990578063f9d0831a146109b95761025c565b80639a7a23d6146107cb578063a457c2d7146107f4578063a8a69b9d14610831578063a9059cbb1461086e578063afa4f3b2146108ab5761025c565b80638123bdc8116100fd5780638123bdc8146106f65780638a96082e146107215780638da5cb5b1461074a57806395d89b411461077557806396ce0795146107a05761025c565b806371afc7131461060f578063721e62331461063a578063728d41c91461066557806375f0a8741461068e5780637949a403146106b95761025c565b8063313ce567116101d257806352dfc8d01161019657806352dfc8d0146105255780635d098b381461055057806366a88d961461057957806366eb3785146105a457806370a08231146105bb578063715018a6146105f85761025c565b8063313ce5671461042a578063395093511461045557806342d0b0bc1461049257806349bd5a5e146104bd5780634fbee193146104e85761025c565b806318160ddd1161021957806318160ddd146103455780631f88a23e1461037057806323b872dd14610399578063247b912d146103d6578063248ba7ed146103ff5761025c565b806305a1f36d1461025e57806306fdde0314610287578063095ea7b3146102b25780630abc8e7b146102ef5780631694505e1461031a5761025c565b3661025c57005b005b34801561026a57600080fd5b5061028560048036038101906102809190613208565b6109e2565b005b34801561029357600080fd5b5061029c610ad7565b6040516102a991906132d8565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613358565b610b69565b6040516102e691906133b3565b60405180910390f35b3480156102fb57600080fd5b50610304610b8c565b60405161031191906133dd565b60405180910390f35b34801561032657600080fd5b5061032f610b92565b60405161033c9190613457565b60405180910390f35b34801561035157600080fd5b5061035a610bb6565b60405161036791906133dd565b60405180910390f35b34801561037c57600080fd5b506103976004803603810190610392919061349e565b610bc0565b005b3480156103a557600080fd5b506103c060048036038101906103bb91906134cb565b610c71565b6040516103cd91906133b3565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613208565b610ca0565b005b34801561040b57600080fd5b50610414610d95565b60405161042191906133dd565b60405180910390f35b34801561043657600080fd5b5061043f610d9b565b60405161044c919061353a565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190613358565b610da4565b60405161048991906133b3565b60405180910390f35b34801561049e57600080fd5b506104a7610ddb565b6040516104b491906133dd565b60405180910390f35b3480156104c957600080fd5b506104d2610de1565b6040516104df9190613564565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a919061357f565b610e05565b60405161051c91906133b3565b60405180910390f35b34801561053157600080fd5b5061053a610e5b565b60405161054791906133b3565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061357f565b610e6e565b005b34801561058557600080fd5b5061058e611045565b60405161059b91906133dd565b60405180910390f35b3480156105b057600080fd5b506105b961104b565b005b3480156105c757600080fd5b506105e260048036038101906105dd919061357f565b6110a6565b6040516105ef91906133dd565b60405180910390f35b34801561060457600080fd5b5061060d6110ef565b005b34801561061b57600080fd5b50610624611103565b60405161063191906133dd565b60405180910390f35b34801561064657600080fd5b5061064f611109565b60405161065c91906133dd565b60405180910390f35b34801561067157600080fd5b5061068c600480360381019061068791906135ac565b61110f565b005b34801561069a57600080fd5b506106a36111ee565b6040516106b09190613564565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db919061357f565b611214565b6040516106ed91906133b3565b60405180910390f35b34801561070257600080fd5b5061070b61126a565b60405161071891906133dd565b60405180910390f35b34801561072d57600080fd5b50610748600480360381019061074391906135d9565b611270565b005b34801561075657600080fd5b5061075f6114af565b60405161076c9190613564565b60405180910390f35b34801561078157600080fd5b5061078a6114d8565b60405161079791906132d8565b60405180910390f35b3480156107ac57600080fd5b506107b561156a565b6040516107c291906133dd565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed91906135d9565b61158e565b005b34801561080057600080fd5b5061081b60048036038101906108169190613358565b61175f565b60405161082891906133b3565b60405180910390f35b34801561083d57600080fd5b506108586004803603810190610853919061357f565b6117d6565b60405161086591906133b3565b60405180910390f35b34801561087a57600080fd5b5061089560048036038101906108909190613358565b61182c565b6040516108a291906133b3565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd91906135ac565b61184f565b005b3480156108e057600080fd5b506108e9611934565b6040516108f69190613564565b60405180910390f35b34801561090b57600080fd5b50610926600480360381019061092191906135d9565b6119ec565b005b34801561093457600080fd5b5061094f600480360381019061094a9190613619565b611b2f565b60405161095c91906133dd565b60405180910390f35b34801561097157600080fd5b5061097a611bb6565b60405161098791906133dd565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b2919061357f565b611bbc565b005b3480156109c557600080fd5b506109e060048036038101906109db919061357f565b611c3f565b005b6109ea611de9565b816007541415806109fd57508060095414155b610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a33906136a5565b60405180910390fd5b610fa08183610a4b91906136f4565b1115610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390613774565b60405180910390fd5b81600781905550806009819055507f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec8282604051610acb929190613794565b60405180910390a15050565b606060058054610ae6906137ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610b12906137ec565b8015610b5f5780601f10610b3457610100808354040283529160200191610b5f565b820191906000526020600020905b815481529060010190602001808311610b4257829003601f168201915b5050505050905090565b600080610b74611e67565b9050610b81818585611e6f565b600191505092915050565b60075481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600454905090565b610bc8611de9565b801515600f60009054906101000a900460ff16151503610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490613869565b60405180910390fd5b80600f60006101000a81548160ff0219169083151502179055507fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b781604051610c6691906133b3565b60405180910390a150565b600080610c7c611e67565b9050610c89858285612038565b610c948585856120c4565b60019150509392505050565b610ca8611de9565b81600854141580610cbb575080600a5414155b610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf1906138d5565b60405180910390fd5b610fa08183610d0991906136f4565b1115610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4190613941565b60405180910390fd5b8160088190555080600a819055507fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e8282604051610d89929190613794565b60405180910390a15050565b60085481565b60006012905090565b600080610daf611e67565b9050610dd0818585610dc18589611b2f565b610dcb91906136f4565b611e6f565b600191505092915050565b600a5481565b7f000000000000000000000000fdbf02262644962c72eb698693339bd6c5fc0cca81565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f60009054906101000a900460ff1681565b610e76611de9565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd906139d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90613a65565b60405180910390fd5b610f7e8161264f565b15610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613af7565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f060405160405180910390a250565b60105481565b6000611056306110a6565b90506000811161109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290613b63565b60405180910390fd5b6110a3612672565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110f7611de9565b6111016000612a79565b565b600c5481565b60095481565b611117611de9565b806010540361115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290613bf5565b60405180910390fd5b600a811015801561116e57506127108111155b6111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490613cad565b60405180910390fd5b806010819055507f071f030755f9025ecd66a1867810c7348bbb888c00d1ec32bf7c9d6a5a6001e8816040516111e391906133dd565b60405180910390a150565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b611278611de9565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613d3f565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f90613dd1565b60405180910390fd5b7f000000000000000000000000fdbf02262644962c72eb698693339bd6c5fc0cca73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613e3d565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f0e89fd97e9b48b2465436024d8fa33a1d7721523f27d529a278d7244d3ef5e58826040516114a391906133b3565b60405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546114e7906137ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611513906137ec565b80156115605780601f1061153557610100808354040283529160200191611560565b820191906000526020600020905b81548152906001019060200180831161154357829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000271081565b611596611de9565b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90613ecf565b60405180910390fd5b7f000000000000000000000000fdbf02262644962c72eb698693339bd6c5fc0cca73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90613e3d565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f1332058260405161175391906133b3565b60405180910390a25050565b60008061176a611e67565b905060006117788286611b2f565b9050838110156117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490613f61565b60405180910390fd5b6117ca8286868403611e6f565b60019250505092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080611837611e67565b90506118448185856120c4565b600191505092915050565b611857611de9565b80600e540361189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189290613ff3565b60405180910390fd5b620f42406118a7610bb6565b6118b19190614042565b8110156118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea906140e5565b60405180910390fd5b80600e819055507fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e488160405161192991906133dd565b60405180910390a150565b60006038460361195a577310ed43c718714eb63d5aa57b78b54704e256024e90506119e9565b6061460361197e5773d99d1c33f9fc3444f8101754abc46c52416550d190506119e9565b600146148061198d5750600546145b156119ae57737a250d5630b4cf539739df2c5dacb4c659f2488d90506119e9565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614177565b60405180910390fd5b90565b6119f4611de9565b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90613dd1565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe182604051611b2391906133b3565b60405180910390a25050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b611bc4611de9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90614209565b60405180910390fd5b611c3c81612a79565b50565b611c47611de9565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cac90614275565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d35573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d2f573d6000803e3d6000fd5b50611de6565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d759190613564565b602060405180830381865afa158015611d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db691906142aa565b9050611de333828473ffffffffffffffffffffffffffffffffffffffff16612b3d9092919063ffffffff16565b50505b50565b611df1611e67565b73ffffffffffffffffffffffffffffffffffffffff16611e0f6114af565b73ffffffffffffffffffffffffffffffffffffffff1614611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90614323565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed5906143b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4490614447565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202b91906133dd565b60405180910390a3505050565b60006120448484611b2f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146120be57818110156120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a7906144b3565b60405180910390fd5b6120bd8484848403611e6f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212a90614545565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612199906145d7565b60405180910390fd5b600081036121bb576121b683836000612bc3565b61264a565b60006121c6306110a6565b90506000600e5482101590508080156121ec5750600d60149054906101000a900460ff16155b80156122425750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561225a5750600f60009054906101000a900460ff165b801561227557506000600c54600b5461227391906136f4565b115b1561228357612282612672565b5b600060019050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061232a5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123415750600d60149054906101000a900460ff165b1561234b57600090505b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612432577f00000000000000000000000000000000000000000000000000000000000027106010546123c8610bb6565b6123d291906145f7565b6123dc9190614042565b846123e6876110a6565b6123f091906136f4565b1115612431576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612428906146ab565b60405180910390fd5b5b801561263b57600080601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612508577f0000000000000000000000000000000000000000000000000000000000002710600754876124bc91906145f7565b6124c69190614042565b91507f0000000000000000000000000000000000000000000000000000000000002710600954876124f791906145f7565b6125019190614042565b90506125d2565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125d1577f00000000000000000000000000000000000000000000000000000000000027106008548761258991906145f7565b6125939190614042565b91507f0000000000000000000000000000000000000000000000000000000000002710600a54876125c491906145f7565b6125ce9190614042565b90505b5b81600b60008282546125e491906136f4565b9250508190555080600c60008282546125fd91906136f4565b925050819055506000818361261291906136f4565b9050600081111561263757808761262991906146cb565b9650612636893083612bc3565b5b5050505b612646868686612bc3565b5050505b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6001600d60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156126aa576126a96146ff565b5b6040519080825280602002602001820160405280156126d85781602001602082028036833780820191505090505b50905030816000815181106126f0576126ef61472e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b99190614772565b816001815181106127cd576127cc61472e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000612812306110a6565b90506000600c54600b5461282691906136f4565b90506000816002600b5461283a9190614042565b8461284591906145f7565b61284f9190614042565b90506000818461285f91906146cb565b90506002600b546128709190614042565b8361287b91906146cb565b92507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478260008830426040518663ffffffff1660e01b81526004016128df959493929190614898565b600060405180830381600087803b1580156128f957600080fd5b505af192505050801561290a575060015b612918575050505050612a5c565b6000479050600084600c548361292e91906145f7565b6129389190614042565b90506000818361294891906146cb565b905060008511801561295a5750600081115b15612a0c577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308860008061dead426040518863ffffffff1660e01b81526004016129c6969594939291906148f2565b60606040518083038185885af193505050508015612a0257506040513d601f19601f820116820180604052508101906129ff9190614953565b60015b15612a0b575050505b5b6000821115612a4357612a41600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612e3c565b505b6000600b819055506000600c8190555050505050505050505b6000600d60146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bbe8363a9059cbb60e01b8484604051602401612b5c9291906149a6565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ed6565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2990614545565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c98906145d7565b60405180910390fd5b612cac838383612f9e565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2a90614a41565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e2391906133dd565b60405180910390a3612e36848484612fa3565b50505050565b6000612e46612fa8565b81471015612e575760009050612ec8565b60008373ffffffffffffffffffffffffffffffffffffffff1683604051612e7d90614a92565b60006040518083038185875af1925050503d8060008114612eba576040519150601f19603f3d011682016040523d82523d6000602084013e612ebf565b606091505b50509050809150505b612ed0612ff7565b92915050565b6000612f38826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166130009092919063ffffffff16565b9050600081511480612f5a575080806020019051810190612f599190614abc565b5b612f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9090614b5b565b60405180910390fd5b505050565b505050565b505050565b600260015403612fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe490614bc7565b60405180910390fd5b6002600181905550565b60018081905550565b606061300f8484600085613018565b90509392505050565b60608247101561305d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305490614c59565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516130869190614cb5565b60006040518083038185875af1925050503d80600081146130c3576040519150601f19603f3d011682016040523d82523d6000602084013e6130c8565b606091505b50915091506130d9878383876130e5565b92505050949350505050565b6060831561314757600083510361313f576130ff8561315a565b61313e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313590614d18565b60405180910390fd5b5b829050613152565b613151838361317d565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156131905781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c491906132d8565b60405180910390fd5b600080fd5b6000819050919050565b6131e5816131d2565b81146131f057600080fd5b50565b600081359050613202816131dc565b92915050565b6000806040838503121561321f5761321e6131cd565b5b600061322d858286016131f3565b925050602061323e858286016131f3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613282578082015181840152602081019050613267565b60008484015250505050565b6000601f19601f8301169050919050565b60006132aa82613248565b6132b48185613253565b93506132c4818560208601613264565b6132cd8161328e565b840191505092915050565b600060208201905081810360008301526132f2818461329f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613325826132fa565b9050919050565b6133358161331a565b811461334057600080fd5b50565b6000813590506133528161332c565b92915050565b6000806040838503121561336f5761336e6131cd565b5b600061337d85828601613343565b925050602061338e858286016131f3565b9150509250929050565b60008115159050919050565b6133ad81613398565b82525050565b60006020820190506133c860008301846133a4565b92915050565b6133d7816131d2565b82525050565b60006020820190506133f260008301846133ce565b92915050565b6000819050919050565b600061341d613418613413846132fa565b6133f8565b6132fa565b9050919050565b600061342f82613402565b9050919050565b600061344182613424565b9050919050565b61345181613436565b82525050565b600060208201905061346c6000830184613448565b92915050565b61347b81613398565b811461348657600080fd5b50565b60008135905061349881613472565b92915050565b6000602082840312156134b4576134b36131cd565b5b60006134c284828501613489565b91505092915050565b6000806000606084860312156134e4576134e36131cd565b5b60006134f286828701613343565b935050602061350386828701613343565b9250506040613514868287016131f3565b9150509250925092565b600060ff82169050919050565b6135348161351e565b82525050565b600060208201905061354f600083018461352b565b92915050565b61355e8161331a565b82525050565b60006020820190506135796000830184613555565b92915050565b600060208284031215613595576135946131cd565b5b60006135a384828501613343565b91505092915050565b6000602082840312156135c2576135c16131cd565b5b60006135d0848285016131f3565b91505092915050565b600080604083850312156135f0576135ef6131cd565b5b60006135fe85828601613343565b925050602061360f85828601613489565b9150509250929050565b600080604083850312156136305761362f6131cd565b5b600061363e85828601613343565b925050602061364f85828601613343565b9150509250929050565b7f4275792054617820616c7265616479206f6e207468617420616d6f756e740000600082015250565b600061368f601e83613253565b915061369a82613659565b602082019050919050565b600060208201905081810360008301526136be81613682565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136ff826131d2565b915061370a836131d2565b9250828201905080821115613722576137216136c5565b5b92915050565b7f427579205461782063616e6e6f74206265206d6f7265207468616e2031302500600082015250565b600061375e601f83613253565b915061376982613728565b602082019050919050565b6000602082019050818103600083015261378d81613751565b9050919050565b60006040820190506137a960008301856133ce565b6137b660208301846133ce565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061380457607f821691505b602082108103613817576138166137bd565b5b50919050565b7f537761704261636b20616c7265616479206f6e20737461747573000000000000600082015250565b6000613853601a83613253565b915061385e8261381d565b602082019050919050565b6000602082019050818103600083015261388281613846565b9050919050565b7f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e7400600082015250565b60006138bf601f83613253565b91506138ca82613889565b602082019050919050565b600060208201905081810360008301526138ee816138b2565b9050919050565b7f53656c6c205461782063616e6e6f74206265206d6f7265207468616e20313025600082015250565b600061392b602083613253565b9150613936826138f5565b602082019050919050565b6000602082019050818103600083015261395a8161391e565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006139bd602883613253565b91506139c882613961565b604082019050919050565b600060208201905081810360008301526139ec816139b0565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613a4f602b83613253565b9150613a5a826139f3565b604082019050919050565b60006020820190508181036000830152613a7e81613a42565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b6000613ae1602583613253565b9150613aec82613a85565b604082019050919050565b60006020820190508181036000830152613b1081613ad4565b9050919050565b7f43616e742053776170204261636b203020546f6b656e21000000000000000000600082015250565b6000613b4d601783613253565b9150613b5882613b17565b602082019050919050565b60006020820190508181036000830152613b7c81613b40565b9050919050565b7f6d617857616c6c65744c696d697420616c7265616479206f6e2074686174206160008201527f6d6f756e74000000000000000000000000000000000000000000000000000000602082015250565b6000613bdf602583613253565b9150613bea82613b83565b604082019050919050565b60006020820190508181036000830152613c0e81613bd2565b9050919050565b7f6d617857616c6c65744c696d69742063616e6e6f742062652062656c6f77203060008201527f2e3125206f6620746f74616c537570706c792028313029206f72206d6f72652060208201527f7468616e2031303025206f6620746f74616c537570706c792028313030303029604082015250565b6000613c97606083613253565b9150613ca282613c15565b606082019050919050565b60006020820190508181036000830152613cc681613c8a565b9050919050565b7f5374617465206f66207468697320636f6e74726163742061646472657373206360008201527f616e6e6f74206265206d6f646966696564000000000000000000000000000000602082015250565b6000613d29603183613253565b9150613d3482613ccd565b604082019050919050565b60006020820190508181036000830152613d5881613d1c565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613dbb602a83613253565b9150613dc682613d5f565b604082019050919050565b60006020820190508181036000830152613dea81613dae565b9050919050565b7f43616e6e6f742073657420746869732070616972000000000000000000000000600082015250565b6000613e27601483613253565b9150613e3282613df1565b602082019050919050565b60006020820190508181036000830152613e5681613e1a565b9050919050565b7f50616972206164647265737320697320616c7265616479207468652076616c7560008201527f65206f6620277374617475732700000000000000000000000000000000000000602082015250565b6000613eb9602d83613253565b9150613ec482613e5d565b604082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f4b602583613253565b9150613f5682613eef565b604082019050919050565b60006020820190508181036000830152613f7a81613f3e565b9050919050565b7f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e20746860008201527f617420616d6f756e740000000000000000000000000000000000000000000000602082015250565b6000613fdd602983613253565b9150613fe882613f81565b604082019050919050565b6000602082019050818103600083015261400c81613fd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061404d826131d2565b9150614058836131d2565b92508261406857614067614013565b5b828204905092915050565b7f416d6f756e74206d75737420626520657175616c206f7220677265617465722060008201527f7468616e20302e30303030303125206f6620546f74616c20537570706c790000602082015250565b60006140cf603e83613253565b91506140da82614073565b604082019050919050565b600060208201905081810360008301526140fe816140c2565b9050919050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760008201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b6000614161602383613253565b915061416c82614105565b604082019050919050565b6000602082019050818103600083015261419081614154565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141f3602683613253565b91506141fe82614197565b604082019050919050565b60006020820190508181036000830152614222816141e6565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e73600082015250565b600061425f602083613253565b915061426a82614229565b602082019050919050565b6000602082019050818103600083015261428e81614252565b9050919050565b6000815190506142a4816131dc565b92915050565b6000602082840312156142c0576142bf6131cd565b5b60006142ce84828501614295565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061430d602083613253565b9150614318826142d7565b602082019050919050565b6000602082019050818103600083015261433c81614300565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061439f602483613253565b91506143aa82614343565b604082019050919050565b600060208201905081810360008301526143ce81614392565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614431602283613253565b915061443c826143d5565b604082019050919050565b6000602082019050818103600083015261446081614424565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061449d601d83613253565b91506144a882614467565b602082019050919050565b600060208201905081810360008301526144cc81614490565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061452f602583613253565b915061453a826144d3565b604082019050919050565b6000602082019050818103600083015261455e81614522565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145c1602383613253565b91506145cc82614565565b604082019050919050565b600060208201905081810360008301526145f0816145b4565b9050919050565b6000614602826131d2565b915061460d836131d2565b925082820261461b816131d2565b91508282048414831517614632576146316136c5565b5b5092915050565b7f42616c616e6365206f6620746f20757365722063616e6e6f74206d6f7265207460008201527f68616e2077616c6c6574206c696d697400000000000000000000000000000000602082015250565b6000614695603083613253565b91506146a082614639565b604082019050919050565b600060208201905081810360008301526146c481614688565b9050919050565b60006146d6826131d2565b91506146e1836131d2565b92508282039050818111156146f9576146f86136c5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061476c8161332c565b92915050565b600060208284031215614788576147876131cd565b5b60006147968482850161475d565b91505092915050565b6000819050919050565b60006147c46147bf6147ba8461479f565b6133f8565b6131d2565b9050919050565b6147d4816147a9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61480f8161331a565b82525050565b60006148218383614806565b60208301905092915050565b6000602082019050919050565b6000614845826147da565b61484f81856147e5565b935061485a836147f6565b8060005b8381101561488b5781516148728882614815565b975061487d8361482d565b92505060018101905061485e565b5085935050505092915050565b600060a0820190506148ad60008301886133ce565b6148ba60208301876147cb565b81810360408301526148cc818661483a565b90506148db6060830185613555565b6148e860808301846133ce565b9695505050505050565b600060c0820190506149076000830189613555565b61491460208301886133ce565b61492160408301876147cb565b61492e60608301866147cb565b61493b6080830185613555565b61494860a08301846133ce565b979650505050505050565b60008060006060848603121561496c5761496b6131cd565b5b600061497a86828701614295565b935050602061498b86828701614295565b925050604061499c86828701614295565b9150509250925092565b60006040820190506149bb6000830185613555565b6149c860208301846133ce565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614a2b602683613253565b9150614a36826149cf565b604082019050919050565b60006020820190508181036000830152614a5a81614a1e565b9050919050565b600081905092915050565b50565b6000614a7c600083614a61565b9150614a8782614a6c565b600082019050919050565b6000614a9d82614a6f565b9150819050919050565b600081519050614ab681613472565b92915050565b600060208284031215614ad257614ad16131cd565b5b6000614ae084828501614aa7565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614b45602a83613253565b9150614b5082614ae9565b604082019050919050565b60006020820190508181036000830152614b7481614b38565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614bb1601f83613253565b9150614bbc82614b7b565b602082019050919050565b60006020820190508181036000830152614be081614ba4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614c43602683613253565b9150614c4e82614be7565b604082019050919050565b60006020820190508181036000830152614c7281614c36565b9050919050565b600081519050919050565b6000614c8f82614c79565b614c998185614a61565b9350614ca9818560208601613264565b80840191505092915050565b6000614cc18284614c84565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614d02601d83613253565b9150614d0d82614ccc565b602082019050919050565b60006020820190508181036000830152614d3181614cf5565b905091905056fea26469706673582212204975492405e883d4b850e08391a22ef9b1a39b82e4b71ef335383dc7465fdb7064736f6c63430008130033
Deployed Bytecode Sourcemap
26646:13457:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30874:599;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20274:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21272:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26741:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27171:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20595:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33154:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21506:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31481:617;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26778:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20494:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21809:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26855:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27229:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34856:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27133:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32106:580;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27276:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39895:205;;;;;;;;;;;;;:::i;:::-;;20711:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26091:103;;;;;;;;;;;;;:::i;:::-;;26982:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26818:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33386:463;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27026:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34323:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26940:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34992:616;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25856:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20382:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26895:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33859:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22080:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35616:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20862:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32694:452;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29921:490;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34485:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21088:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27093:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26202:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30419:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30874:599;25815:13;:11;:13::i;:::-;31041:16:::1;31022:15;;:35;;:91;;;;31097:16;31078:15;;:35;;31022:91;31000:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;31243:5;31223:16;31204;:35;;;;:::i;:::-;:44;;31182:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;31338:16;31320:15;:34;;;;31383:16;31365:15;:34;;;;31417:48;31430:16;31448;31417:48;;;;;;;:::i;:::-;;;;;;;;30874:599:::0;;:::o;20274:100::-;20328:13;20361:5;20354:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20274:100;:::o;21272:226::-;21380:4;21397:13;21413:12;:10;:12::i;:::-;21397:28;;21436:32;21445:5;21452:7;21461:6;21436:8;:32::i;:::-;21486:4;21479:11;;;21272:226;;;;:::o;26741:30::-;;;;:::o;27171:51::-;;;:::o;20595:108::-;20656:7;20683:12;;20676:19;;20595:108;:::o;33154:224::-;25815:13;:11;:13::i;:::-;33250:6:::1;33229:27;;:17;;;;;;;;;;;:27;;::::0;33221:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33320:6;33300:17;;:26;;;;;;;;;;;;;;;;;;33342:28;33363:6;33342:28;;;;;;:::i;:::-;;;;;;;;33154:224:::0;:::o;21506:295::-;21637:4;21654:15;21672:12;:10;:12::i;:::-;21654:30;;21695:38;21711:4;21717:7;21726:6;21695:15;:38::i;:::-;21744:27;21754:4;21760:2;21764:6;21744:9;:27::i;:::-;21789:4;21782:11;;;21506:295;;;;;:::o;31481:617::-;25815:13;:11;:13::i;:::-;31652:17:::1;31632:16;;:37;;:95;;;;31710:17;31690:16;;:37;;31632:95;31610:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;31860:5;31839:17;31819;:37;;;;:::i;:::-;:46;;31797:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;31957:17;31938:16;:36;;;;32004:17;31985:16;:36;;;;32039:51;32053:17;32072;32039:51;;;;;;;:::i;:::-;;;;;;;;31481:617:::0;;:::o;26778:31::-;;;;:::o;20494:93::-;20552:5;20577:2;20570:9;;20494:93;:::o;21809:263::-;21922:4;21939:13;21955:12;:10;:12::i;:::-;21939:28;;21978:64;21987:5;21994:7;22031:10;22003:25;22013:5;22020:7;22003:9;:25::i;:::-;:38;;;;:::i;:::-;21978:8;:64::i;:::-;22060:4;22053:11;;;21809:263;;;;:::o;26855:31::-;;;;:::o;27229:38::-;;;:::o;34856:128::-;34924:4;34948:19;:28;34968:7;34948:28;;;;;;;;;;;;;;;;;;;;;;;;;34941:35;;34856:128;;;:::o;27133:29::-;;;;;;;;;;;;;:::o;32106:580::-;25815:13;:11;:13::i;:::-;32232:15:::1;;;;;;;;;;;32212:35;;:16;:35;;::::0;32190:125:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32376:1;32348:30;;:16;:30;;::::0;32326:123:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32483:28;32494:16;32483:10;:28::i;:::-;32482:29;32460:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;32607:16;32589:15;;:34;;;;;;;;;;;;;;;;;;32661:16;32639:39;;;;;;;;;;;;32106:580:::0;:::o;27276:29::-;;;;:::o;39895:205::-;39941:28;39972:24;39990:4;39972:9;:24::i;:::-;39941:55;;40040:1;40017:20;:24;40009:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40082:10;:8;:10::i;:::-;39930:170;39895:205::o;20711:143::-;20801:7;20828:9;:18;20838:7;20828:18;;;;;;;;;;;;;;;;20821:25;;20711:143;;;:::o;26091:103::-;25815:13;:11;:13::i;:::-;26156:30:::1;26183:1;26156:18;:30::i;:::-;26091:103::o:0;26982:35::-;;;;:::o;26818:30::-;;;;:::o;33386:463::-;25815:13;:11;:13::i;:::-;33499:6:::1;33481:14;;:24:::0;33459:111:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33613:2;33603:6;:12;;:32;;;;;33629:6;33619;:16;;33603:32;33581:178;;;;;;;;;;;;:::i;:::-;;;;;;;;;33789:6;33772:14;:23;;;;33813:28;33834:6;33813:28;;;;;;:::i;:::-;;;;;;;;33386:463:::0;:::o;27026:30::-;;;;;;;;;;;;;:::o;34323:154::-;34412:4;34436:27;:33;34464:4;34436:33;;;;;;;;;;;;;;;;;;;;;;;;;34429:40;;34323:154;;;:::o;26940:35::-;;;;:::o;34992:616::-;25815:13;:11;:13::i;:::-;35158:4:::1;35139:24;;:7;:24;;::::0;35117:123:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35315:8;35273:50;;:29;:38;35303:7;35273:38;;;;;;;;;;;;;;;;;;;;;;;;;:50;;::::0;35251:142:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35431:13;35412:33;;:7;:33;;::::0;35404:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35524:8;35483:29;:38;35513:7;35483:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;35582:7;35550:50;;;35591:8;35550:50;;;;;;:::i;:::-;;;;;;;;34992:616:::0;;:::o;25856:87::-;25902:7;25929:6;;;;;;;;;;;25922:13;;25856:87;:::o;20382:104::-;20438:13;20471:7;20464:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20382:104;:::o;26895:36::-;;;:::o;33859:456::-;25815:13;:11;:13::i;:::-;34037:6:::1;34000:43;;:27;:33;34028:4;34000:33;;;;;;;;;;;;;;;;;;;;;;;;;:43;;::::0;33978:138:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34151:13;34135:30;;:4;:30;;::::0;34127:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34239:6;34203:27;:33;34231:4;34203:33;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;34294:4;34263:44;;;34300:6;34263:44;;;;;;:::i;:::-;;;;;;;;33859:456:::0;;:::o;22080:498::-;22198:4;22215:13;22231:12;:10;:12::i;:::-;22215:28;;22254:24;22281:25;22291:5;22298:7;22281:9;:25::i;:::-;22254:52;;22359:15;22339:16;:35;;22317:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;22475:60;22484:5;22491:7;22519:15;22500:16;:34;22475:8;:60::i;:::-;22566:4;22559:11;;;;22080:498;;;;:::o;35616:164::-;35710:4;35734:29;:38;35764:7;35734:38;;;;;;;;;;;;;;;;;;;;;;;;;35727:45;;35616:164;;;:::o;20862:218::-;20966:4;20983:13;20999:12;:10;:12::i;:::-;20983:28;;21022;21032:5;21039:2;21043:6;21022:9;:28::i;:::-;21068:4;21061:11;;;20862:218;;;;:::o;32694:452::-;25815:13;:11;:13::i;:::-;32815:6:::1;32793:18;;:28:::0;32771:119:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32949:9;32933:13;:11;:13::i;:::-;:25;;;;:::i;:::-;32923:6;:35;;32901:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;33082:6;33061:18;:27;;;;33106:32;33131:6;33106:32;;;;;;:::i;:::-;;;;;;;;32694:452:::0;:::o;29921:490::-;29970:7;30011:2;29994:13;:19;29990:414;;30037:42;30030:49;;;;29990:414;30118:2;30101:13;:19;30097:307;;30144:42;30137:49;;;;30097:307;30225:1;30208:13;:18;:40;;;;30247:1;30230:13;:18;30208:40;30204:200;;;30272:42;30265:49;;;;30204:200;30347:45;;;;;;;;;;:::i;:::-;;;;;;;;29921:490;;:::o;34485:363::-;25815:13;:11;:13::i;:::-;34654:8:::1;34622:40;;:19;:28;34642:7;34622:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;34600:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34774:8;34743:19;:28;34763:7;34743:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34822:7;34800:40;;;34831:8;34800:40;;;;;;:::i;:::-;;;;;;;;34485:363:::0;;:::o;21088:176::-;21202:7;21229:11;:18;21241:5;21229:18;;;;;;;;;;;;;;;:27;21248:7;21229:27;;;;;;;;;;;;;;;;21222:34;;21088:176;;;;:::o;27093:33::-;;;;:::o;26202:238::-;25815:13;:11;:13::i;:::-;26325:1:::1;26305:22;;:8;:22;;::::0;26283:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26404:28;26423:8;26404:18;:28::i;:::-;26202:238:::0;:::o;30419:447::-;25815:13;:11;:13::i;:::-;30515:4:::1;30498:22;;:5;:22;;::::0;30490:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30591:3;30574:21;;:5;:21;;::::0;30570:126:::1;;30620:10;30612:28;;:51;30641:21;30612:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30678:7;;30570:126;30706:17;30733:5;30706:33;;30750:15;30768:10;:20;;;30797:4;30768:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30750:53;;30814:44;30838:10;30850:7;30814:10;:23;;;;:44;;;;;:::i;:::-;30479:387;;25839:1;30419:447:::0;:::o;25951:132::-;26026:12;:10;:12::i;:::-;26015:23;;:7;:5;:7::i;:::-;:23;;;26007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25951:132::o;19654:98::-;19707:7;19734:10;19727:17;;19654:98;:::o;24356:380::-;24509:1;24492:19;;:5;:19;;;24484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24590:1;24571:21;;:7;:21;;;24563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24674:6;24644:11;:18;24656:5;24644:18;;;;;;;;;;;;;;;:27;24663:7;24644:27;;;;;;;;;;;;;;;:36;;;;24712:7;24696:32;;24705:5;24696:32;;;24721:6;24696:32;;;;;;:::i;:::-;;;;;;;;24356:380;;;:::o;24744:502::-;24879:24;24906:25;24916:5;24923:7;24906:9;:25::i;:::-;24879:52;;24966:17;24946:16;:37;24942:297;;25046:6;25026:16;:26;;25000:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;25161:51;25170:5;25177:7;25205:6;25186:16;:25;25161:8;:51::i;:::-;24942:297;24868:378;24744:502;;;:::o;35788:2206::-;35936:1;35920:18;;:4;:18;;;35912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36013:1;35999:16;;:2;:16;;;35991:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36082:1;36072:6;:11;36068:93;;36100:28;36116:4;36122:2;36126:1;36100:15;:28::i;:::-;36143:7;;36068:93;36173:28;36204:24;36222:4;36204:9;:24::i;:::-;36173:55;;36241:12;36280:18;;36256:20;:42;;36241:57;;36329:7;:33;;;;;36354:8;;;;;;;;;;;36353:9;36329:33;:84;;;;;36380:27;:33;36408:4;36380:33;;;;;;;;;;;;;;;;;;;;;;;;;36379:34;36329:84;:118;;;;;36430:17;;;;;;;;;;;36329:118;:182;;;;;36510:1;36487:20;;36464;;:43;;;;:::i;:::-;:47;36329:182;36311:249;;;36538:10;:8;:10::i;:::-;36311:249;36572:12;36587:4;36572:19;;36608;:25;36628:4;36608:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36637:19;:23;36657:2;36637:23;;;;;;;;;;;;;;;;;;;;;;;;;36608:52;:64;;;;36664:8;;;;;;;;;;;36608:64;36604:112;;;36699:5;36689:15;;36604:112;36734:29;:33;36764:2;36734:33;;;;;;;;;;;;;;;;;;;;;;;;;36729:294;;36904:11;36886:14;;36870:13;:11;:13::i;:::-;:30;;;;:::i;:::-;36869:46;;;;:::i;:::-;36834:6;36818:13;36828:2;36818:9;:13::i;:::-;:22;;;;:::i;:::-;:97;;36788:219;;;;;;;;;;;;:::i;:::-;;;;;;;;;36729:294;37049:7;37045:896;;;37073:27;37115;37163;:33;37191:4;37163:33;;;;;;;;;;;;;;;;;;;;;;;;;37159:440;;;37268:11;37249:15;;37240:6;:24;;;;:::i;:::-;37239:40;;;;:::i;:::-;37217:62;;37349:11;37330:15;;37321:6;:24;;;;:::i;:::-;37320:40;;;;:::i;:::-;37298:62;;37159:440;;;37386:27;:31;37414:2;37386:31;;;;;;;;;;;;;;;;;;;;;;;;;37382:217;;;37490:11;37470:16;;37461:6;:25;;;;:::i;:::-;37460:41;;;;:::i;:::-;37438:63;;37572:11;37552:16;;37543:6;:25;;;;:::i;:::-;37542:41;;;;:::i;:::-;37520:63;;37382:217;37159:440;37639:19;37615:20;;:43;;;;;;;:::i;:::-;;;;;;;;37697:19;37673:20;;:43;;;;;;;:::i;:::-;;;;;;;;37733:12;37770:19;37748;:41;;;;:::i;:::-;37733:56;;37817:1;37810:4;:8;37806:124;;;37849:4;37839:14;;;;;:::i;:::-;;;37872:42;37888:4;37902;37909;37872:15;:42::i;:::-;37806:124;37058:883;;;37045:896;37953:33;37969:4;37975:2;37979:6;37953:15;:33::i;:::-;35901:2093;;;35788:2206;;;;:::o;29798:115::-;29858:4;29904:1;29882:7;:19;;;:23;29875:30;;29798:115;;;:::o;38002:1607::-;27551:4;27540:8;;:15;;;;;;;;;;;;;;;;;;38049:21:::1;38087:1;38073:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38049:40;;38118:4;38100;38105:1;38100:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;38144:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38134:4;38139:1;38134:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;38179:28;38210:24;38228:4;38210:9;:24::i;:::-;38179:55;;38247:16;38289:20;;38266;;:43;;;;:::i;:::-;38247:62;;38322:20;38412:8;38406:1;38383:20;;:24;;;;:::i;:::-;38346:20;:62;;;;:::i;:::-;38345:75;;;;:::i;:::-;38322:98;;38433:22;38481:12;38458:20;:35;;;;:::i;:::-;38433:60;;38543:1;38519:20;;38518:26;;;;:::i;:::-;38506:38;;;;;:::i;:::-;;;38574:15;:66;;;38659:14;38692:1;38712:4;38743;38767:15;38574:223;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;38557:292;;38831:7;;;;;;;38557:292;38861:18;38882:21;38861:42;;38916:20;38977:8;38953:20;;38940:10;:33;;;;:::i;:::-;38939:46;;;;:::i;:::-;38916:69;;38996:18;39030:12;39017:10;:25;;;;:::i;:::-;38996:46;;39074:1;39059:12;:16;:34;;;;;39092:1;39079:10;:14;39059:34;39055:376;;;39131:15;:31;;;39170:10;39212:4;39240:12;39275:1;39299::::0;39331:6:::1;39361:15;39131:264;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39110:310:::0;::::1;;;;;;39055:376;39462:1;39447:12;:16;39443:87;;;39480:38;39488:15;;;;;;;;;;;39505:12;39480:7;:38::i;:::-;;39443:87;39565:1;39542:20;:24;;;;39600:1;39577:20;:24;;;;38038:1571;;;;;;;;27566:1;27589:5:::0;27578:8;;:16;;;;;;;;;;;;;;;;;;38002:1607::o;26448:191::-;26522:16;26541:6;;;;;;;;;;;26522:25;;26567:8;26558:6;;:17;;;;;;;;;;;;;;;;;;26622:8;26591:40;;26612:8;26591:40;;;;;;;;;;;;26511:128;26448:191;:::o;14821:214::-;14904:123;14938:5;14981:23;;;15006:2;15010:5;14958:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14904:19;:123::i;:::-;14821:214;;;:::o;22586:714::-;22733:1;22717:18;;:4;:18;;;22709:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22810:1;22796:16;;:2;:16;;;22788:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22865:38;22886:4;22892:2;22896:6;22865:20;:38::i;:::-;22916:19;22938:9;:15;22948:4;22938:15;;;;;;;;;;;;;;;;22916:37;;23001:6;22986:11;:21;;22964:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;23141:6;23127:11;:20;23109:9;:15;23119:4;23109:15;;;;;;;;;;;;;;;:38;;;;23181:6;23164:9;:13;23174:2;23164:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;23231:2;23216:26;;23225:4;23216:26;;;23235:6;23216:26;;;;;;:::i;:::-;;;;;;;;23255:37;23275:4;23281:2;23285:6;23255:19;:37::i;:::-;22698:602;22586:714;;;:::o;39617:270::-;39719:4;19178:21;:19;:21::i;:::-;39764:6:::1;39740:21;:30;39736:48;;;39779:5;39772:12;;;;39736:48;39798:12;39824:3;39816:17;;39841:6;39816:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39797:55;;;39872:7;39865:14;;;19210:1;19222:20:::0;:18;:20::i;:::-;39617:270;;;;:::o;17929:380::-;18010:23;18036:106;18078:4;18036:106;;;;;;;;;;;;;;;;;18044:5;18036:27;;;;:106;;;;;:::i;:::-;18010:132;;18196:1;18175:10;:17;:22;:56;;;;18212:10;18201:30;;;;;;;;;;;;:::i;:::-;18175:56;18153:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;17999:310;17929:380;;:::o;25254:125::-;;;;:::o;25387:124::-;;;;:::o;19258:152::-;19038:1;19316:7;;:19;19308:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;19038:1;19384:7;:18;;;;19258:152::o;19418:79::-;18994:1;19467:7;:22;;;;19418:79::o;9039:229::-;9176:12;9208:52;9230:6;9238:4;9244:1;9247:12;9208:21;:52::i;:::-;9201:59;;9039:229;;;;;:::o;9640:612::-;9810:12;9882:5;9857:21;:30;;9835:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;9965:12;9979:23;10006:6;:11;;10025:5;10046:4;10006:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9964:97;;;;10092:152;10137:6;10162:7;10188:10;10217:12;10092:26;:152::i;:::-;10072:172;;;;9640:612;;;;;;:::o;12391:477::-;12576:12;12605:7;12601:260;;;12654:1;12633:10;:17;:22;12629:123;;12684:18;12695:6;12684:10;:18::i;:::-;12676:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;12629:123;12773:10;12766:17;;;;12601:260;12816:33;12824:10;12836:12;12816:7;:33::i;:::-;12391:477;;;;;;;:::o;8201:115::-;8261:4;8307:1;8285:7;:19;;;:23;8278:30;;8201:115;;;:::o;13189:425::-;13332:1;13312:10;:17;:21;13308:299;;;13455:10;13449:17;13512:15;13499:10;13495:2;13491:19;13484:44;13308:299;13582:12;13575:20;;;;;;;;;;;:::i;:::-;;;;;;;;88:117:1;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:118::-;4013:24;4031:5;4013:24;:::i;:::-;4008:3;4001:37;3926:118;;:::o;4050:222::-;4143:4;4181:2;4170:9;4166:18;4158:26;;4194:71;4262:1;4251:9;4247:17;4238:6;4194:71;:::i;:::-;4050:222;;;;:::o;4278:60::-;4306:3;4327:5;4320:12;;4278:60;;;:::o;4344:142::-;4394:9;4427:53;4445:34;4454:24;4472:5;4454:24;:::i;:::-;4445:34;:::i;:::-;4427:53;:::i;:::-;4414:66;;4344:142;;;:::o;4492:126::-;4542:9;4575:37;4606:5;4575:37;:::i;:::-;4562:50;;4492:126;;;:::o;4624:152::-;4700:9;4733:37;4764:5;4733:37;:::i;:::-;4720:50;;4624:152;;;:::o;4782:183::-;4895:63;4952:5;4895:63;:::i;:::-;4890:3;4883:76;4782:183;;:::o;4971:274::-;5090:4;5128:2;5117:9;5113:18;5105:26;;5141:97;5235:1;5224:9;5220:17;5211:6;5141:97;:::i;:::-;4971:274;;;;:::o;5251:116::-;5321:21;5336:5;5321:21;:::i;:::-;5314:5;5311:32;5301:60;;5357:1;5354;5347:12;5301:60;5251:116;:::o;5373:133::-;5416:5;5454:6;5441:20;5432:29;;5470:30;5494:5;5470:30;:::i;:::-;5373:133;;;;:::o;5512:323::-;5568:6;5617:2;5605:9;5596:7;5592:23;5588:32;5585:119;;;5623:79;;:::i;:::-;5585:119;5743:1;5768:50;5810:7;5801:6;5790:9;5786:22;5768:50;:::i;:::-;5758:60;;5714:114;5512:323;;;;:::o;5841:619::-;5918:6;5926;5934;5983:2;5971:9;5962:7;5958:23;5954:32;5951:119;;;5989:79;;:::i;:::-;5951:119;6109:1;6134:53;6179:7;6170:6;6159:9;6155:22;6134:53;:::i;:::-;6124:63;;6080:117;6236:2;6262:53;6307:7;6298:6;6287:9;6283:22;6262:53;:::i;:::-;6252:63;;6207:118;6364:2;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6335:118;5841:619;;;;;:::o;6466:86::-;6501:7;6541:4;6534:5;6530:16;6519:27;;6466:86;;;:::o;6558:112::-;6641:22;6657:5;6641:22;:::i;:::-;6636:3;6629:35;6558:112;;:::o;6676:214::-;6765:4;6803:2;6792:9;6788:18;6780:26;;6816:67;6880:1;6869:9;6865:17;6856:6;6816:67;:::i;:::-;6676:214;;;;:::o;6896:118::-;6983:24;7001:5;6983:24;:::i;:::-;6978:3;6971:37;6896:118;;:::o;7020:222::-;7113:4;7151:2;7140:9;7136:18;7128:26;;7164:71;7232:1;7221:9;7217:17;7208:6;7164:71;:::i;:::-;7020:222;;;;:::o;7248:329::-;7307:6;7356:2;7344:9;7335:7;7331:23;7327:32;7324:119;;;7362:79;;:::i;:::-;7324:119;7482:1;7507:53;7552:7;7543:6;7532:9;7528:22;7507:53;:::i;:::-;7497:63;;7453:117;7248:329;;;;:::o;7583:::-;7642:6;7691:2;7679:9;7670:7;7666:23;7662:32;7659:119;;;7697:79;;:::i;:::-;7659:119;7817:1;7842:53;7887:7;7878:6;7867:9;7863:22;7842:53;:::i;:::-;7832:63;;7788:117;7583:329;;;;:::o;7918:468::-;7983:6;7991;8040:2;8028:9;8019:7;8015:23;8011:32;8008:119;;;8046:79;;:::i;:::-;8008:119;8166:1;8191:53;8236:7;8227:6;8216:9;8212:22;8191:53;:::i;:::-;8181:63;;8137:117;8293:2;8319:50;8361:7;8352:6;8341:9;8337:22;8319:50;:::i;:::-;8309:60;;8264:115;7918:468;;;;;:::o;8392:474::-;8460:6;8468;8517:2;8505:9;8496:7;8492:23;8488:32;8485:119;;;8523:79;;:::i;:::-;8485:119;8643:1;8668:53;8713:7;8704:6;8693:9;8689:22;8668:53;:::i;:::-;8658:63;;8614:117;8770:2;8796:53;8841:7;8832:6;8821:9;8817:22;8796:53;:::i;:::-;8786:63;;8741:118;8392:474;;;;;:::o;8872:180::-;9012:32;9008:1;9000:6;8996:14;8989:56;8872:180;:::o;9058:366::-;9200:3;9221:67;9285:2;9280:3;9221:67;:::i;:::-;9214:74;;9297:93;9386:3;9297:93;:::i;:::-;9415:2;9410:3;9406:12;9399:19;;9058:366;;;:::o;9430:419::-;9596:4;9634:2;9623:9;9619:18;9611:26;;9683:9;9677:4;9673:20;9669:1;9658:9;9654:17;9647:47;9711:131;9837:4;9711:131;:::i;:::-;9703:139;;9430:419;;;:::o;9855:180::-;9903:77;9900:1;9893:88;10000:4;9997:1;9990:15;10024:4;10021:1;10014:15;10041:191;10081:3;10100:20;10118:1;10100:20;:::i;:::-;10095:25;;10134:20;10152:1;10134:20;:::i;:::-;10129:25;;10177:1;10174;10170:9;10163:16;;10198:3;10195:1;10192:10;10189:36;;;10205:18;;:::i;:::-;10189:36;10041:191;;;;:::o;10238:181::-;10378:33;10374:1;10366:6;10362:14;10355:57;10238:181;:::o;10425:366::-;10567:3;10588:67;10652:2;10647:3;10588:67;:::i;:::-;10581:74;;10664:93;10753:3;10664:93;:::i;:::-;10782:2;10777:3;10773:12;10766:19;;10425:366;;;:::o;10797:419::-;10963:4;11001:2;10990:9;10986:18;10978:26;;11050:9;11044:4;11040:20;11036:1;11025:9;11021:17;11014:47;11078:131;11204:4;11078:131;:::i;:::-;11070:139;;10797:419;;;:::o;11222:332::-;11343:4;11381:2;11370:9;11366:18;11358:26;;11394:71;11462:1;11451:9;11447:17;11438:6;11394:71;:::i;:::-;11475:72;11543:2;11532:9;11528:18;11519:6;11475:72;:::i;:::-;11222:332;;;;;:::o;11560:180::-;11608:77;11605:1;11598:88;11705:4;11702:1;11695:15;11729:4;11726:1;11719:15;11746:320;11790:6;11827:1;11821:4;11817:12;11807:22;;11874:1;11868:4;11864:12;11895:18;11885:81;;11951:4;11943:6;11939:17;11929:27;;11885:81;12013:2;12005:6;12002:14;11982:18;11979:38;11976:84;;12032:18;;:::i;:::-;11976:84;11797:269;11746:320;;;:::o;12072:176::-;12212:28;12208:1;12200:6;12196:14;12189:52;12072:176;:::o;12254:366::-;12396:3;12417:67;12481:2;12476:3;12417:67;:::i;:::-;12410:74;;12493:93;12582:3;12493:93;:::i;:::-;12611:2;12606:3;12602:12;12595:19;;12254:366;;;:::o;12626:419::-;12792:4;12830:2;12819:9;12815:18;12807:26;;12879:9;12873:4;12869:20;12865:1;12854:9;12850:17;12843:47;12907:131;13033:4;12907:131;:::i;:::-;12899:139;;12626:419;;;:::o;13051:181::-;13191:33;13187:1;13179:6;13175:14;13168:57;13051:181;:::o;13238:366::-;13380:3;13401:67;13465:2;13460:3;13401:67;:::i;:::-;13394:74;;13477:93;13566:3;13477:93;:::i;:::-;13595:2;13590:3;13586:12;13579:19;;13238:366;;;:::o;13610:419::-;13776:4;13814:2;13803:9;13799:18;13791:26;;13863:9;13857:4;13853:20;13849:1;13838:9;13834:17;13827:47;13891:131;14017:4;13891:131;:::i;:::-;13883:139;;13610:419;;;:::o;14035:182::-;14175:34;14171:1;14163:6;14159:14;14152:58;14035:182;:::o;14223:366::-;14365:3;14386:67;14450:2;14445:3;14386:67;:::i;:::-;14379:74;;14462:93;14551:3;14462:93;:::i;:::-;14580:2;14575:3;14571:12;14564:19;;14223:366;;;:::o;14595:419::-;14761:4;14799:2;14788:9;14784:18;14776:26;;14848:9;14842:4;14838:20;14834:1;14823:9;14819:17;14812:47;14876:131;15002:4;14876:131;:::i;:::-;14868:139;;14595:419;;;:::o;15020:227::-;15160:34;15156:1;15148:6;15144:14;15137:58;15229:10;15224:2;15216:6;15212:15;15205:35;15020:227;:::o;15253:366::-;15395:3;15416:67;15480:2;15475:3;15416:67;:::i;:::-;15409:74;;15492:93;15581:3;15492:93;:::i;:::-;15610:2;15605:3;15601:12;15594:19;;15253:366;;;:::o;15625:419::-;15791:4;15829:2;15818:9;15814:18;15806:26;;15878:9;15872:4;15868:20;15864:1;15853:9;15849:17;15842:47;15906:131;16032:4;15906:131;:::i;:::-;15898:139;;15625:419;;;:::o;16050:230::-;16190:34;16186:1;16178:6;16174:14;16167:58;16259:13;16254:2;16246:6;16242:15;16235:38;16050:230;:::o;16286:366::-;16428:3;16449:67;16513:2;16508:3;16449:67;:::i;:::-;16442:74;;16525:93;16614:3;16525:93;:::i;:::-;16643:2;16638:3;16634:12;16627:19;;16286:366;;;:::o;16658:419::-;16824:4;16862:2;16851:9;16847:18;16839:26;;16911:9;16905:4;16901:20;16897:1;16886:9;16882:17;16875:47;16939:131;17065:4;16939:131;:::i;:::-;16931:139;;16658:419;;;:::o;17083:224::-;17223:34;17219:1;17211:6;17207:14;17200:58;17292:7;17287:2;17279:6;17275:15;17268:32;17083:224;:::o;17313:366::-;17455:3;17476:67;17540:2;17535:3;17476:67;:::i;:::-;17469:74;;17552:93;17641:3;17552:93;:::i;:::-;17670:2;17665:3;17661:12;17654:19;;17313:366;;;:::o;17685:419::-;17851:4;17889:2;17878:9;17874:18;17866:26;;17938:9;17932:4;17928:20;17924:1;17913:9;17909:17;17902:47;17966:131;18092:4;17966:131;:::i;:::-;17958:139;;17685:419;;;:::o;18110:173::-;18250:25;18246:1;18238:6;18234:14;18227:49;18110:173;:::o;18289:366::-;18431:3;18452:67;18516:2;18511:3;18452:67;:::i;:::-;18445:74;;18528:93;18617:3;18528:93;:::i;:::-;18646:2;18641:3;18637:12;18630:19;;18289:366;;;:::o;18661:419::-;18827:4;18865:2;18854:9;18850:18;18842:26;;18914:9;18908:4;18904:20;18900:1;18889:9;18885:17;18878:47;18942:131;19068:4;18942:131;:::i;:::-;18934:139;;18661:419;;;:::o;19086:224::-;19226:34;19222:1;19214:6;19210:14;19203:58;19295:7;19290:2;19282:6;19278:15;19271:32;19086:224;:::o;19316:366::-;19458:3;19479:67;19543:2;19538:3;19479:67;:::i;:::-;19472:74;;19555:93;19644:3;19555:93;:::i;:::-;19673:2;19668:3;19664:12;19657:19;;19316:366;;;:::o;19688:419::-;19854:4;19892:2;19881:9;19877:18;19869:26;;19941:9;19935:4;19931:20;19927:1;19916:9;19912:17;19905:47;19969:131;20095:4;19969:131;:::i;:::-;19961:139;;19688:419;;;:::o;20113:320::-;20253:34;20249:1;20241:6;20237:14;20230:58;20322:34;20317:2;20309:6;20305:15;20298:59;20391:34;20386:2;20378:6;20374:15;20367:59;20113:320;:::o;20439:366::-;20581:3;20602:67;20666:2;20661:3;20602:67;:::i;:::-;20595:74;;20678:93;20767:3;20678:93;:::i;:::-;20796:2;20791:3;20787:12;20780:19;;20439:366;;;:::o;20811:419::-;20977:4;21015:2;21004:9;21000:18;20992:26;;21064:9;21058:4;21054:20;21050:1;21039:9;21035:17;21028:47;21092:131;21218:4;21092:131;:::i;:::-;21084:139;;20811:419;;;:::o;21236:236::-;21376:34;21372:1;21364:6;21360:14;21353:58;21445:19;21440:2;21432:6;21428:15;21421:44;21236:236;:::o;21478:366::-;21620:3;21641:67;21705:2;21700:3;21641:67;:::i;:::-;21634:74;;21717:93;21806:3;21717:93;:::i;:::-;21835:2;21830:3;21826:12;21819:19;;21478:366;;;:::o;21850:419::-;22016:4;22054:2;22043:9;22039:18;22031:26;;22103:9;22097:4;22093:20;22089:1;22078:9;22074:17;22067:47;22131:131;22257:4;22131:131;:::i;:::-;22123:139;;21850:419;;;:::o;22275:229::-;22415:34;22411:1;22403:6;22399:14;22392:58;22484:12;22479:2;22471:6;22467:15;22460:37;22275:229;:::o;22510:366::-;22652:3;22673:67;22737:2;22732:3;22673:67;:::i;:::-;22666:74;;22749:93;22838:3;22749:93;:::i;:::-;22867:2;22862:3;22858:12;22851:19;;22510:366;;;:::o;22882:419::-;23048:4;23086:2;23075:9;23071:18;23063:26;;23135:9;23129:4;23125:20;23121:1;23110:9;23106:17;23099:47;23163:131;23289:4;23163:131;:::i;:::-;23155:139;;22882:419;;;:::o;23307:170::-;23447:22;23443:1;23435:6;23431:14;23424:46;23307:170;:::o;23483:366::-;23625:3;23646:67;23710:2;23705:3;23646:67;:::i;:::-;23639:74;;23722:93;23811:3;23722:93;:::i;:::-;23840:2;23835:3;23831:12;23824:19;;23483:366;;;:::o;23855:419::-;24021:4;24059:2;24048:9;24044:18;24036:26;;24108:9;24102:4;24098:20;24094:1;24083:9;24079:17;24072:47;24136:131;24262:4;24136:131;:::i;:::-;24128:139;;23855:419;;;:::o;24280:232::-;24420:34;24416:1;24408:6;24404:14;24397:58;24489:15;24484:2;24476:6;24472:15;24465:40;24280:232;:::o;24518:366::-;24660:3;24681:67;24745:2;24740:3;24681:67;:::i;:::-;24674:74;;24757:93;24846:3;24757:93;:::i;:::-;24875:2;24870:3;24866:12;24859:19;;24518:366;;;:::o;24890:419::-;25056:4;25094:2;25083:9;25079:18;25071:26;;25143:9;25137:4;25133:20;25129:1;25118:9;25114:17;25107:47;25171:131;25297:4;25171:131;:::i;:::-;25163:139;;24890:419;;;:::o;25315:224::-;25455:34;25451:1;25443:6;25439:14;25432:58;25524:7;25519:2;25511:6;25507:15;25500:32;25315:224;:::o;25545:366::-;25687:3;25708:67;25772:2;25767:3;25708:67;:::i;:::-;25701:74;;25784:93;25873:3;25784:93;:::i;:::-;25902:2;25897:3;25893:12;25886:19;;25545:366;;;:::o;25917:419::-;26083:4;26121:2;26110:9;26106:18;26098:26;;26170:9;26164:4;26160:20;26156:1;26145:9;26141:17;26134:47;26198:131;26324:4;26198:131;:::i;:::-;26190:139;;25917:419;;;:::o;26342:228::-;26482:34;26478:1;26470:6;26466:14;26459:58;26551:11;26546:2;26538:6;26534:15;26527:36;26342:228;:::o;26576:366::-;26718:3;26739:67;26803:2;26798:3;26739:67;:::i;:::-;26732:74;;26815:93;26904:3;26815:93;:::i;:::-;26933:2;26928:3;26924:12;26917:19;;26576:366;;;:::o;26948:419::-;27114:4;27152:2;27141:9;27137:18;27129:26;;27201:9;27195:4;27191:20;27187:1;27176:9;27172:17;27165:47;27229:131;27355:4;27229:131;:::i;:::-;27221:139;;26948:419;;;:::o;27373:180::-;27421:77;27418:1;27411:88;27518:4;27515:1;27508:15;27542:4;27539:1;27532:15;27559:185;27599:1;27616:20;27634:1;27616:20;:::i;:::-;27611:25;;27650:20;27668:1;27650:20;:::i;:::-;27645:25;;27689:1;27679:35;;27694:18;;:::i;:::-;27679:35;27736:1;27733;27729:9;27724:14;;27559:185;;;;:::o;27750:249::-;27890:34;27886:1;27878:6;27874:14;27867:58;27959:32;27954:2;27946:6;27942:15;27935:57;27750:249;:::o;28005:366::-;28147:3;28168:67;28232:2;28227:3;28168:67;:::i;:::-;28161:74;;28244:93;28333:3;28244:93;:::i;:::-;28362:2;28357:3;28353:12;28346:19;;28005:366;;;:::o;28377:419::-;28543:4;28581:2;28570:9;28566:18;28558:26;;28630:9;28624:4;28620:20;28616:1;28605:9;28601:17;28594:47;28658:131;28784:4;28658:131;:::i;:::-;28650:139;;28377:419;;;:::o;28802:222::-;28942:34;28938:1;28930:6;28926:14;28919:58;29011:5;29006:2;28998:6;28994:15;28987:30;28802:222;:::o;29030:366::-;29172:3;29193:67;29257:2;29252:3;29193:67;:::i;:::-;29186:74;;29269:93;29358:3;29269:93;:::i;:::-;29387:2;29382:3;29378:12;29371:19;;29030:366;;;:::o;29402:419::-;29568:4;29606:2;29595:9;29591:18;29583:26;;29655:9;29649:4;29645:20;29641:1;29630:9;29626:17;29619:47;29683:131;29809:4;29683:131;:::i;:::-;29675:139;;29402:419;;;:::o;29827:225::-;29967:34;29963:1;29955:6;29951:14;29944:58;30036:8;30031:2;30023:6;30019:15;30012:33;29827:225;:::o;30058:366::-;30200:3;30221:67;30285:2;30280:3;30221:67;:::i;:::-;30214:74;;30297:93;30386:3;30297:93;:::i;:::-;30415:2;30410:3;30406:12;30399:19;;30058:366;;;:::o;30430:419::-;30596:4;30634:2;30623:9;30619:18;30611:26;;30683:9;30677:4;30673:20;30669:1;30658:9;30654:17;30647:47;30711:131;30837:4;30711:131;:::i;:::-;30703:139;;30430:419;;;:::o;30855:182::-;30995:34;30991:1;30983:6;30979:14;30972:58;30855:182;:::o;31043:366::-;31185:3;31206:67;31270:2;31265:3;31206:67;:::i;:::-;31199:74;;31282:93;31371:3;31282:93;:::i;:::-;31400:2;31395:3;31391:12;31384:19;;31043:366;;;:::o;31415:419::-;31581:4;31619:2;31608:9;31604:18;31596:26;;31668:9;31662:4;31658:20;31654:1;31643:9;31639:17;31632:47;31696:131;31822:4;31696:131;:::i;:::-;31688:139;;31415:419;;;:::o;31840:143::-;31897:5;31928:6;31922:13;31913:22;;31944:33;31971:5;31944:33;:::i;:::-;31840:143;;;;:::o;31989:351::-;32059:6;32108:2;32096:9;32087:7;32083:23;32079:32;32076:119;;;32114:79;;:::i;:::-;32076:119;32234:1;32259:64;32315:7;32306:6;32295:9;32291:22;32259:64;:::i;:::-;32249:74;;32205:128;31989:351;;;;:::o;32346:182::-;32486:34;32482:1;32474:6;32470:14;32463:58;32346:182;:::o;32534:366::-;32676:3;32697:67;32761:2;32756:3;32697:67;:::i;:::-;32690:74;;32773:93;32862:3;32773:93;:::i;:::-;32891:2;32886:3;32882:12;32875:19;;32534:366;;;:::o;32906:419::-;33072:4;33110:2;33099:9;33095:18;33087:26;;33159:9;33153:4;33149:20;33145:1;33134:9;33130:17;33123:47;33187:131;33313:4;33187:131;:::i;:::-;33179:139;;32906:419;;;:::o;33331:223::-;33471:34;33467:1;33459:6;33455:14;33448:58;33540:6;33535:2;33527:6;33523:15;33516:31;33331:223;:::o;33560:366::-;33702:3;33723:67;33787:2;33782:3;33723:67;:::i;:::-;33716:74;;33799:93;33888:3;33799:93;:::i;:::-;33917:2;33912:3;33908:12;33901:19;;33560:366;;;:::o;33932:419::-;34098:4;34136:2;34125:9;34121:18;34113:26;;34185:9;34179:4;34175:20;34171:1;34160:9;34156:17;34149:47;34213:131;34339:4;34213:131;:::i;:::-;34205:139;;33932:419;;;:::o;34357:221::-;34497:34;34493:1;34485:6;34481:14;34474:58;34566:4;34561:2;34553:6;34549:15;34542:29;34357:221;:::o;34584:366::-;34726:3;34747:67;34811:2;34806:3;34747:67;:::i;:::-;34740:74;;34823:93;34912:3;34823:93;:::i;:::-;34941:2;34936:3;34932:12;34925:19;;34584:366;;;:::o;34956:419::-;35122:4;35160:2;35149:9;35145:18;35137:26;;35209:9;35203:4;35199:20;35195:1;35184:9;35180:17;35173:47;35237:131;35363:4;35237:131;:::i;:::-;35229:139;;34956:419;;;:::o;35381:179::-;35521:31;35517:1;35509:6;35505:14;35498:55;35381:179;:::o;35566:366::-;35708:3;35729:67;35793:2;35788:3;35729:67;:::i;:::-;35722:74;;35805:93;35894:3;35805:93;:::i;:::-;35923:2;35918:3;35914:12;35907:19;;35566:366;;;:::o;35938:419::-;36104:4;36142:2;36131:9;36127:18;36119:26;;36191:9;36185:4;36181:20;36177:1;36166:9;36162:17;36155:47;36219:131;36345:4;36219:131;:::i;:::-;36211:139;;35938:419;;;:::o;36363:224::-;36503:34;36499:1;36491:6;36487:14;36480:58;36572:7;36567:2;36559:6;36555:15;36548:32;36363:224;:::o;36593:366::-;36735:3;36756:67;36820:2;36815:3;36756:67;:::i;:::-;36749:74;;36832:93;36921:3;36832:93;:::i;:::-;36950:2;36945:3;36941:12;36934:19;;36593:366;;;:::o;36965:419::-;37131:4;37169:2;37158:9;37154:18;37146:26;;37218:9;37212:4;37208:20;37204:1;37193:9;37189:17;37182:47;37246:131;37372:4;37246:131;:::i;:::-;37238:139;;36965:419;;;:::o;37390:222::-;37530:34;37526:1;37518:6;37514:14;37507:58;37599:5;37594:2;37586:6;37582:15;37575:30;37390:222;:::o;37618:366::-;37760:3;37781:67;37845:2;37840:3;37781:67;:::i;:::-;37774:74;;37857:93;37946:3;37857:93;:::i;:::-;37975:2;37970:3;37966:12;37959:19;;37618:366;;;:::o;37990:419::-;38156:4;38194:2;38183:9;38179:18;38171:26;;38243:9;38237:4;38233:20;38229:1;38218:9;38214:17;38207:47;38271:131;38397:4;38271:131;:::i;:::-;38263:139;;37990:419;;;:::o;38415:410::-;38455:7;38478:20;38496:1;38478:20;:::i;:::-;38473:25;;38512:20;38530:1;38512:20;:::i;:::-;38507:25;;38567:1;38564;38560:9;38589:30;38607:11;38589:30;:::i;:::-;38578:41;;38768:1;38759:7;38755:15;38752:1;38749:22;38729:1;38722:9;38702:83;38679:139;;38798:18;;:::i;:::-;38679:139;38463:362;38415:410;;;;:::o;38831:235::-;38971:34;38967:1;38959:6;38955:14;38948:58;39040:18;39035:2;39027:6;39023:15;39016:43;38831:235;:::o;39072:366::-;39214:3;39235:67;39299:2;39294:3;39235:67;:::i;:::-;39228:74;;39311:93;39400:3;39311:93;:::i;:::-;39429:2;39424:3;39420:12;39413:19;;39072:366;;;:::o;39444:419::-;39610:4;39648:2;39637:9;39633:18;39625:26;;39697:9;39691:4;39687:20;39683:1;39672:9;39668:17;39661:47;39725:131;39851:4;39725:131;:::i;:::-;39717:139;;39444:419;;;:::o;39869:194::-;39909:4;39929:20;39947:1;39929:20;:::i;:::-;39924:25;;39963:20;39981:1;39963:20;:::i;:::-;39958:25;;40007:1;40004;40000:9;39992:17;;40031:1;40025:4;40022:11;40019:37;;;40036:18;;:::i;:::-;40019:37;39869:194;;;;:::o;40069:180::-;40117:77;40114:1;40107:88;40214:4;40211:1;40204:15;40238:4;40235:1;40228:15;40255:180;40303:77;40300:1;40293:88;40400:4;40397:1;40390:15;40424:4;40421:1;40414:15;40441:143;40498:5;40529:6;40523:13;40514:22;;40545:33;40572:5;40545:33;:::i;:::-;40441:143;;;;:::o;40590:351::-;40660:6;40709:2;40697:9;40688:7;40684:23;40680:32;40677:119;;;40715:79;;:::i;:::-;40677:119;40835:1;40860:64;40916:7;40907:6;40896:9;40892:22;40860:64;:::i;:::-;40850:74;;40806:128;40590:351;;;;:::o;40947:85::-;40992:7;41021:5;41010:16;;40947:85;;;:::o;41038:158::-;41096:9;41129:61;41147:42;41156:32;41182:5;41156:32;:::i;:::-;41147:42;:::i;:::-;41129:61;:::i;:::-;41116:74;;41038:158;;;:::o;41202:147::-;41297:45;41336:5;41297:45;:::i;:::-;41292:3;41285:58;41202:147;;:::o;41355:114::-;41422:6;41456:5;41450:12;41440:22;;41355:114;;;:::o;41475:184::-;41574:11;41608:6;41603:3;41596:19;41648:4;41643:3;41639:14;41624:29;;41475:184;;;;:::o;41665:132::-;41732:4;41755:3;41747:11;;41785:4;41780:3;41776:14;41768:22;;41665:132;;;:::o;41803:108::-;41880:24;41898:5;41880:24;:::i;:::-;41875:3;41868:37;41803:108;;:::o;41917:179::-;41986:10;42007:46;42049:3;42041:6;42007:46;:::i;:::-;42085:4;42080:3;42076:14;42062:28;;41917:179;;;;:::o;42102:113::-;42172:4;42204;42199:3;42195:14;42187:22;;42102:113;;;:::o;42251:732::-;42370:3;42399:54;42447:5;42399:54;:::i;:::-;42469:86;42548:6;42543:3;42469:86;:::i;:::-;42462:93;;42579:56;42629:5;42579:56;:::i;:::-;42658:7;42689:1;42674:284;42699:6;42696:1;42693:13;42674:284;;;42775:6;42769:13;42802:63;42861:3;42846:13;42802:63;:::i;:::-;42795:70;;42888:60;42941:6;42888:60;:::i;:::-;42878:70;;42734:224;42721:1;42718;42714:9;42709:14;;42674:284;;;42678:14;42974:3;42967:10;;42375:608;;;42251:732;;;;:::o;42989:831::-;43252:4;43290:3;43279:9;43275:19;43267:27;;43304:71;43372:1;43361:9;43357:17;43348:6;43304:71;:::i;:::-;43385:80;43461:2;43450:9;43446:18;43437:6;43385:80;:::i;:::-;43512:9;43506:4;43502:20;43497:2;43486:9;43482:18;43475:48;43540:108;43643:4;43634:6;43540:108;:::i;:::-;43532:116;;43658:72;43726:2;43715:9;43711:18;43702:6;43658:72;:::i;:::-;43740:73;43808:3;43797:9;43793:19;43784:6;43740:73;:::i;:::-;42989:831;;;;;;;;:::o;43826:807::-;44075:4;44113:3;44102:9;44098:19;44090:27;;44127:71;44195:1;44184:9;44180:17;44171:6;44127:71;:::i;:::-;44208:72;44276:2;44265:9;44261:18;44252:6;44208:72;:::i;:::-;44290:80;44366:2;44355:9;44351:18;44342:6;44290:80;:::i;:::-;44380;44456:2;44445:9;44441:18;44432:6;44380:80;:::i;:::-;44470:73;44538:3;44527:9;44523:19;44514:6;44470:73;:::i;:::-;44553;44621:3;44610:9;44606:19;44597:6;44553:73;:::i;:::-;43826:807;;;;;;;;;:::o;44639:663::-;44727:6;44735;44743;44792:2;44780:9;44771:7;44767:23;44763:32;44760:119;;;44798:79;;:::i;:::-;44760:119;44918:1;44943:64;44999:7;44990:6;44979:9;44975:22;44943:64;:::i;:::-;44933:74;;44889:128;45056:2;45082:64;45138:7;45129:6;45118:9;45114:22;45082:64;:::i;:::-;45072:74;;45027:129;45195:2;45221:64;45277:7;45268:6;45257:9;45253:22;45221:64;:::i;:::-;45211:74;;45166:129;44639:663;;;;;:::o;45308:332::-;45429:4;45467:2;45456:9;45452:18;45444:26;;45480:71;45548:1;45537:9;45533:17;45524:6;45480:71;:::i;:::-;45561:72;45629:2;45618:9;45614:18;45605:6;45561:72;:::i;:::-;45308:332;;;;;:::o;45646:225::-;45786:34;45782:1;45774:6;45770:14;45763:58;45855:8;45850:2;45842:6;45838:15;45831:33;45646:225;:::o;45877:366::-;46019:3;46040:67;46104:2;46099:3;46040:67;:::i;:::-;46033:74;;46116:93;46205:3;46116:93;:::i;:::-;46234:2;46229:3;46225:12;46218:19;;45877:366;;;:::o;46249:419::-;46415:4;46453:2;46442:9;46438:18;46430:26;;46502:9;46496:4;46492:20;46488:1;46477:9;46473:17;46466:47;46530:131;46656:4;46530:131;:::i;:::-;46522:139;;46249:419;;;:::o;46674:147::-;46775:11;46812:3;46797:18;;46674:147;;;;:::o;46827:114::-;;:::o;46947:398::-;47106:3;47127:83;47208:1;47203:3;47127:83;:::i;:::-;47120:90;;47219:93;47308:3;47219:93;:::i;:::-;47337:1;47332:3;47328:11;47321:18;;46947:398;;;:::o;47351:379::-;47535:3;47557:147;47700:3;47557:147;:::i;:::-;47550:154;;47721:3;47714:10;;47351:379;;;:::o;47736:137::-;47790:5;47821:6;47815:13;47806:22;;47837:30;47861:5;47837:30;:::i;:::-;47736:137;;;;:::o;47879:345::-;47946:6;47995:2;47983:9;47974:7;47970:23;47966:32;47963:119;;;48001:79;;:::i;:::-;47963:119;48121:1;48146:61;48199:7;48190:6;48179:9;48175:22;48146:61;:::i;:::-;48136:71;;48092:125;47879:345;;;;:::o;48230:229::-;48370:34;48366:1;48358:6;48354:14;48347:58;48439:12;48434:2;48426:6;48422:15;48415:37;48230:229;:::o;48465:366::-;48607:3;48628:67;48692:2;48687:3;48628:67;:::i;:::-;48621:74;;48704:93;48793:3;48704:93;:::i;:::-;48822:2;48817:3;48813:12;48806:19;;48465:366;;;:::o;48837:419::-;49003:4;49041:2;49030:9;49026:18;49018:26;;49090:9;49084:4;49080:20;49076:1;49065:9;49061:17;49054:47;49118:131;49244:4;49118:131;:::i;:::-;49110:139;;48837:419;;;:::o;49262:181::-;49402:33;49398:1;49390:6;49386:14;49379:57;49262:181;:::o;49449:366::-;49591:3;49612:67;49676:2;49671:3;49612:67;:::i;:::-;49605:74;;49688:93;49777:3;49688:93;:::i;:::-;49806:2;49801:3;49797:12;49790:19;;49449:366;;;:::o;49821:419::-;49987:4;50025:2;50014:9;50010:18;50002:26;;50074:9;50068:4;50064:20;50060:1;50049:9;50045:17;50038:47;50102:131;50228:4;50102:131;:::i;:::-;50094:139;;49821:419;;;:::o;50246:225::-;50386:34;50382:1;50374:6;50370:14;50363:58;50455:8;50450:2;50442:6;50438:15;50431:33;50246:225;:::o;50477:366::-;50619:3;50640:67;50704:2;50699:3;50640:67;:::i;:::-;50633:74;;50716:93;50805:3;50716:93;:::i;:::-;50834:2;50829:3;50825:12;50818:19;;50477:366;;;:::o;50849:419::-;51015:4;51053:2;51042:9;51038:18;51030:26;;51102:9;51096:4;51092:20;51088:1;51077:9;51073:17;51066:47;51130:131;51256:4;51130:131;:::i;:::-;51122:139;;50849:419;;;:::o;51274:98::-;51325:6;51359:5;51353:12;51343:22;;51274:98;;;:::o;51378:386::-;51482:3;51510:38;51542:5;51510:38;:::i;:::-;51564:88;51645:6;51640:3;51564:88;:::i;:::-;51557:95;;51661:65;51719:6;51714:3;51707:4;51700:5;51696:16;51661:65;:::i;:::-;51751:6;51746:3;51742:16;51735:23;;51486:278;51378:386;;;;:::o;51770:271::-;51900:3;51922:93;52011:3;52002:6;51922:93;:::i;:::-;51915:100;;52032:3;52025:10;;51770:271;;;;:::o;52047:179::-;52187:31;52183:1;52175:6;52171:14;52164:55;52047:179;:::o;52232:366::-;52374:3;52395:67;52459:2;52454:3;52395:67;:::i;:::-;52388:74;;52471:93;52560:3;52471:93;:::i;:::-;52589:2;52584:3;52580:12;52573:19;;52232:366;;;:::o;52604:419::-;52770:4;52808:2;52797:9;52793:18;52785:26;;52857:9;52851:4;52847:20;52843:1;52832:9;52828:17;52821:47;52885:131;53011:4;52885:131;:::i;:::-;52877:139;;52604:419;;;:::o
Swarm Source
ipfs://4975492405e883d4b850e08391a22ef9b1a39b82e4b71ef335383dc7465fdb70
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.