ERC-20
Overview
Max Total Supply
10,000,000,000,000 SEC
Holders
11
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
269,999,999,999.1 SECValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
SEC
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-28 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence.... */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`... */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract SEC is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address private devOpsWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; bool public enableEarlySellTax = true; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; // Blacklist Map mapping (address => bool) private _blacklist; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyDevOpsFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellDevOpsFee; uint256 public sellLiquidityFee; uint256 public earlySellLiquidityFee; uint256 public earlySellDevOpsFee; uint256 public tokensForDevOps; uint256 public tokensForLiquidity; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event devOpsWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("Secret Ethereum Club", "SEC") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyDevOpsFee = 0; uint256 _buyLiquidityFee = 0; uint256 _sellDevOpsFee = 0; uint256 _sellLiquidityFee = 0; uint256 _earlySellLiquidityFee = 0; uint256 _earlySellDevOpsFee = 0; uint256 totalSupply = 1 * 1e13 * 1e18; maxTransactionAmount = totalSupply * 30 / 1000; // 3% maxTransactionAmountTxn maxWallet = totalSupply * 30 / 1000; // 3% maxWallet swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet buyDevOpsFee = _buyDevOpsFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyDevOpsFee + buyLiquidityFee; sellDevOpsFee = _sellDevOpsFee; sellLiquidityFee = _sellLiquidityFee; sellTotalFees = sellDevOpsFee + sellLiquidityFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellDevOpsFee = _earlySellDevOpsFee; devOpsWallet = address(0x6cbbB275aF3DB5eec432f4Dd02658Abd981aA852); // set as devOps wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(0x6cbbB275aF3DB5eec432f4Dd02658Abd981aA852), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); excludeFromMaxTransaction(address(0x6cbbB275aF3DB5eec432f4Dd02658Abd981aA852), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } function setEarlySellTax(bool onoff) external onlyOwner { enableEarlySellTax = onoff; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _devOpsFee, uint256 _liquidityFee) external onlyOwner { buyDevOpsFee = _devOpsFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyDevOpsFee + buyLiquidityFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function updateSellFees(uint256 _devOpsFee, uint256 _liquidityFee, uint256 _earlySellLiquidityFee, uint256 _earlySellDevOpsFee) external onlyOwner { sellDevOpsFee = _devOpsFee; sellLiquidityFee = _liquidityFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellDevOpsFee = _earlySellDevOpsFee; sellTotalFees = sellDevOpsFee + sellLiquidityFee; require(sellTotalFees <= 20, "Must keep fees at 20% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function blacklistAccount (address account, bool isBlacklisted) public onlyOwner { require(block.number < launchedAt + 40, "Waited too long to blacklist"); _blacklist[account] = isBlacklisted; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateDevOpsWallet(address newDevOpsWallet) external onlyOwner { emit devOpsWalletUpdated(newDevOpsWallet, devOpsWallet); devOpsWallet = newDevOpsWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); 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"); require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } // early sell logic bool isBuy = from == uniswapV2Pair; if (!isBuy && enableEarlySellTax) { if (_holderFirstBuyTimestamp[from] != 0 && (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp)) { sellLiquidityFee = earlySellLiquidityFee; sellDevOpsFee = earlySellDevOpsFee; sellTotalFees = sellDevOpsFee + sellLiquidityFee; } } else { if (_holderFirstBuyTimestamp[to] == 0) { _holderFirstBuyTimestamp[to] = block.timestamp; } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDevOps += fees * sellDevOpsFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDevOps += fees * buyDevOpsFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForDevOps + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForDevOps = ethBalance.mul(tokensForDevOps).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForDevOps - ethForDev; tokensForLiquidity = 0; tokensForDevOps = 0; tokensForDev = 0; if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(devOpsWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devOpsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellDevOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevOps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devOpsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevOpsWallet","type":"address"}],"name":"updateDevOpsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devOpsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevOpsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600a5f6101000a81548160ff0219169083151502179055505f600a60016101000a81548160ff0219169083151502179055505f600a60026101000a81548160ff0219169083151502179055506001600a60036101000a81548160ff0219169083151502179055506001600e5f6101000a81548160ff02191690831515021790555034801562000093575f80fd5b506040518060400160405280601481526020017f53656372657420457468657265756d20436c75620000000000000000000000008152506040518060400160405280600381526020017f5345430000000000000000000000000000000000000000000000000000000000815250816003908162000111919062000d98565b50806004908162000123919062000d98565b5050505f620001376200062160201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ff8160016200062860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a3919062000ee1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000309573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200032f919062000ee1565b6040518363ffffffff1660e01b81526004016200034e92919062000f22565b6020604051808303815f875af11580156200036b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000391919062000ee1565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003d960a05160016200062860201b60201c565b620003ee60a05160016200072160201b60201c565b5f805f805f805f6c7e37be2022c0914b268000000090506103e8601e8262000417919062000f7a565b62000423919062000ff1565b6007819055506103e8601e826200043b919062000f7a565b62000447919062000ff1565b600981905550612710600a826200045f919062000f7a565b6200046b919062000ff1565b600881905550866010819055508560118190555060115460105462000491919062001028565b600f819055508460138190555083601481905550601454601354620004b7919062001028565b6012819055508260158190555081601681905550736cbbb275af3db5eec432f4dd02658abd981aa85260065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200054162000533620007bf60201b60201c565b6001620007e760201b60201c565b62000554306001620007e760201b60201c565b6200056961dead6001620007e760201b60201c565b62000590736cbbb275af3db5eec432f4dd02658abd981aa8526001620007e760201b60201c565b620005b2620005a4620007bf60201b60201c565b60016200062860201b60201c565b620005c53060016200062860201b60201c565b620005da61dead60016200062860201b60201c565b62000601736cbbb275af3db5eec432f4dd02658abd981aa85260016200062860201b60201c565b6200061333826200093060201b60201c565b50505050505050506200121f565b5f33905090565b620006386200062160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006c090620010c0565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007f76200062160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000888576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200087f90620010c0565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009249190620010fc565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009989062001165565b60405180910390fd5b620009b45f838362000acd60201b60201c565b620009cb8160025462000ad260201b90919060201c565b60028190555062000a22815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000ad260201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ac1919062001196565b60405180910390a35050565b505050565b5f80828462000ae2919062001028565b90508381101562000b2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2190620011ff565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000bb057607f821691505b60208210810362000bc65762000bc562000b6b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000c2a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bed565b62000c36868362000bed565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c8062000c7a62000c748462000c4e565b62000c57565b62000c4e565b9050919050565b5f819050919050565b62000c9b8362000c60565b62000cb362000caa8262000c87565b84845462000bf9565b825550505050565b5f90565b62000cc962000cbb565b62000cd681848462000c90565b505050565b5b8181101562000cfd5762000cf15f8262000cbf565b60018101905062000cdc565b5050565b601f82111562000d4c5762000d168162000bcc565b62000d218462000bde565b8101602085101562000d31578190505b62000d4962000d408562000bde565b83018262000cdb565b50505b505050565b5f82821c905092915050565b5f62000d6e5f198460080262000d51565b1980831691505092915050565b5f62000d88838362000d5d565b9150826002028217905092915050565b62000da38262000b34565b67ffffffffffffffff81111562000dbf5762000dbe62000b3e565b5b62000dcb825462000b98565b62000dd882828562000d01565b5f60209050601f83116001811462000e0e575f841562000df9578287015190505b62000e05858262000d7b565b86555062000e74565b601f19841662000e1e8662000bcc565b5f5b8281101562000e475784890151825560018201915060208501945060208101905062000e20565b8683101562000e67578489015162000e63601f89168262000d5d565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000eab8262000e80565b9050919050565b62000ebd8162000e9f565b811462000ec8575f80fd5b50565b5f8151905062000edb8162000eb2565b92915050565b5f6020828403121562000ef95762000ef862000e7c565b5b5f62000f088482850162000ecb565b91505092915050565b62000f1c8162000e9f565b82525050565b5f60408201905062000f375f83018562000f11565b62000f46602083018462000f11565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f868262000c4e565b915062000f938362000c4e565b925082820262000fa38162000c4e565b9150828204841483151762000fbd5762000fbc62000f4d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000ffd8262000c4e565b91506200100a8362000c4e565b9250826200101d576200101c62000fc4565b5b828204905092915050565b5f620010348262000c4e565b9150620010418362000c4e565b92508282019050808211156200105c576200105b62000f4d565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620010a860208362001062565b9150620010b58262001072565b602082019050919050565b5f6020820190508181035f830152620010d9816200109a565b9050919050565b5f8115159050919050565b620010f681620010e0565b82525050565b5f602082019050620011115f830184620010eb565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6200114d601f8362001062565b91506200115a8262001117565b602082019050919050565b5f6020820190508181035f8301526200117e816200113f565b9050919050565b620011908162000c4e565b82525050565b5f602082019050620011ab5f83018462001185565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620011e7601b8362001062565b9150620011f482620011b1565b602082019050919050565b5f6020820190508181035f8301526200121881620011d9565b9050919050565b60805160a051615502620012805f395f81816111560152818161191a01528181612b5c0152612f5101525f8181610d2c01528181612b0401528181613d3e01528181613e1d01528181613e4401528181613eda0152613f0101526155025ff3fe60806040526004361061031d575f3560e01c8063924de9b7116101aa578063c0246668116100f6578063e2f4560511610094578063f11a24d31161006e578063f11a24d314610bba578063f2fde38b14610be4578063f637434214610c0c578063f8b45b0514610c3657610324565b8063e2f4560514610b3e578063e7ad9fcd14610b68578063e884f26014610b9057610324565b8063c8c8ebe4116100d0578063c8c8ebe414610a72578063d257b34f14610a9c578063d85ba06314610ad8578063dd62ed3e14610b0257610324565b8063c0246668146109f8578063c18bc19514610a20578063c876d0b914610a4857610324565b8063a4d15b6411610163578063b2b2c0bb1161013d578063b2b2c0bb14610940578063b62496f51461096a578063bbc0c742146109a6578063bde73318146109d057610324565b8063a4d15b64146108b0578063a5cf68ef146108da578063a9059cbb1461090457610324565b8063924de9b7146107a857806395d89b41146107d05780639a7a23d6146107fa5780639fccce3214610822578063a26577781461084c578063a457c2d71461087457610324565b80634a62bb651161026957806370a08231116102225780637571336a116101fc5780637571336a14610716578063762d868a1461073e5780638a8c523c146107685780638da5cb5b1461077e57610324565b806370a082311461069a578063715018a6146106d6578063751039fc146106ec57610324565b80634a62bb651461058e5780634fbee193146105b8578063541a43cf146105f457806366ca9b831461061e5780636a486a8e146106465780636ddd17131461067057610324565b80631b5cc613116102d65780632d5a5d34116102b05780632d5a5d34146104d6578063313ce567146104fe578063395093511461052857806349bd5a5e1461056457610324565b80631b5cc61314610448578063203e727e1461047257806323b872dd1461049a57610324565b806306fdde0314610328578063095ea7b31461035257806310d5de531461038e5780631694505e146103ca57806318160ddd146103f45780631a8145bb1461041e57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061033c610c60565b6040516103499190614096565b60405180910390f35b34801561035d575f80fd5b5061037860048036038101906103739190614147565b610cf0565b604051610385919061419f565b60405180910390f35b348015610399575f80fd5b506103b460048036038101906103af91906141b8565b610d0d565b6040516103c1919061419f565b60405180910390f35b3480156103d5575f80fd5b506103de610d2a565b6040516103eb919061423e565b60405180910390f35b3480156103ff575f80fd5b50610408610d4e565b6040516104159190614266565b60405180910390f35b348015610429575f80fd5b50610432610d57565b60405161043f9190614266565b60405180910390f35b348015610453575f80fd5b5061045c610d5d565b6040516104699190614266565b60405180910390f35b34801561047d575f80fd5b506104986004803603810190610493919061427f565b610d63565b005b3480156104a5575f80fd5b506104c060048036038101906104bb91906142aa565b610e8c565b6040516104cd919061419f565b60405180910390f35b3480156104e1575f80fd5b506104fc60048036038101906104f79190614324565b610f60565b005b348015610509575f80fd5b5061051261109e565b60405161051f919061437d565b60405180910390f35b348015610533575f80fd5b5061054e60048036038101906105499190614147565b6110a6565b60405161055b919061419f565b60405180910390f35b34801561056f575f80fd5b50610578611154565b60405161058591906143a5565b60405180910390f35b348015610599575f80fd5b506105a2611178565b6040516105af919061419f565b60405180910390f35b3480156105c3575f80fd5b506105de60048036038101906105d991906141b8565b61118a565b6040516105eb919061419f565b60405180910390f35b3480156105ff575f80fd5b506106086111dc565b6040516106159190614266565b60405180910390f35b348015610629575f80fd5b50610644600480360381019061063f91906143be565b6111e2565b005b348015610651575f80fd5b5061065a6112e6565b6040516106679190614266565b60405180910390f35b34801561067b575f80fd5b506106846112ec565b604051610691919061419f565b60405180910390f35b3480156106a5575f80fd5b506106c060048036038101906106bb91906141b8565b6112ff565b6040516106cd9190614266565b60405180910390f35b3480156106e1575f80fd5b506106ea611344565b005b3480156106f7575f80fd5b50610700611497565b60405161070d919061419f565b60405180910390f35b348015610721575f80fd5b5061073c60048036038101906107379190614324565b61154e565b005b348015610749575f80fd5b5061075261163c565b60405161075f9190614266565b60405180910390f35b348015610773575f80fd5b5061077c611642565b005b348015610789575f80fd5b50610792611717565b60405161079f91906143a5565b60405180910390f35b3480156107b3575f80fd5b506107ce60048036038101906107c991906143fc565b61173f565b005b3480156107db575f80fd5b506107e46117f2565b6040516107f19190614096565b60405180910390f35b348015610805575f80fd5b50610820600480360381019061081b9190614324565b611882565b005b34801561082d575f80fd5b506108366119b4565b6040516108439190614266565b60405180910390f35b348015610857575f80fd5b50610872600480360381019061086d91906143fc565b6119ba565b005b34801561087f575f80fd5b5061089a60048036038101906108959190614147565b611a6d565b6040516108a7919061419f565b60405180910390f35b3480156108bb575f80fd5b506108c4611b35565b6040516108d1919061419f565b60405180910390f35b3480156108e5575f80fd5b506108ee611b48565b6040516108fb9190614266565b60405180910390f35b34801561090f575f80fd5b5061092a60048036038101906109259190614147565b611b4e565b604051610937919061419f565b60405180910390f35b34801561094b575f80fd5b50610954611b6b565b6040516109619190614266565b60405180910390f35b348015610975575f80fd5b50610990600480360381019061098b91906141b8565b611b71565b60405161099d919061419f565b60405180910390f35b3480156109b1575f80fd5b506109ba611b8e565b6040516109c7919061419f565b60405180910390f35b3480156109db575f80fd5b506109f660048036038101906109f191906141b8565b611ba1565b005b348015610a03575f80fd5b50610a1e6004803603810190610a199190614324565b611cf5565b005b348015610a2b575f80fd5b50610a466004803603810190610a41919061427f565b611e31565b005b348015610a53575f80fd5b50610a5c611f5a565b604051610a69919061419f565b60405180910390f35b348015610a7d575f80fd5b50610a86611f6c565b604051610a939190614266565b60405180910390f35b348015610aa7575f80fd5b50610ac26004803603810190610abd919061427f565b611f72565b604051610acf919061419f565b60405180910390f35b348015610ae3575f80fd5b50610aec6120e0565b604051610af99190614266565b60405180910390f35b348015610b0d575f80fd5b50610b286004803603810190610b239190614427565b6120e6565b604051610b359190614266565b60405180910390f35b348015610b49575f80fd5b50610b52612168565b604051610b5f9190614266565b60405180910390f35b348015610b73575f80fd5b50610b8e6004803603810190610b899190614465565b61216e565b005b348015610b9b575f80fd5b50610ba4612282565b604051610bb1919061419f565b60405180910390f35b348015610bc5575f80fd5b50610bce612339565b604051610bdb9190614266565b60405180910390f35b348015610bef575f80fd5b50610c0a6004803603810190610c0591906141b8565b61233f565b005b348015610c17575f80fd5b50610c20612501565b604051610c2d9190614266565b60405180910390f35b348015610c41575f80fd5b50610c4a612507565b604051610c579190614266565b60405180910390f35b606060038054610c6f906144f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9b906144f6565b8015610ce65780601f10610cbd57610100808354040283529160200191610ce6565b820191905f5260205f20905b815481529060010190602001808311610cc957829003601f168201915b5050505050905090565b5f610d03610cfc61250d565b8484612514565b6001905092915050565b601c602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60185481565b60165481565b610d6b61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df090614570565b60405180910390fd5b670de0b6b3a76400006103e86001610e0f610d4e565b610e1991906145bb565b610e239190614629565b610e2d9190614629565b811015610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e66906146c9565b60405180910390fd5b670de0b6b3a764000081610e8391906145bb565b60078190555050565b5f610e988484846126d7565b610f5584610ea461250d565b610f50856040518060600160405280602881526020016154806028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f0761250d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546135689092919063ffffffff16565b612514565b600190509392505050565b610f6861250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed90614570565b60405180910390fd5b6028601a5461100591906146e7565b4310611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90614764565b60405180910390fd5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6012905090565b5f61114a6110b261250d565b846111458560015f6110c261250d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546135ca90919063ffffffff16565b612514565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5f9054906101000a900460ff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b6111ea61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90614570565b60405180910390fd5b816010819055508060118190555060115460105461129691906146e7565b600f819055506014600f5411156112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d9906147cc565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61134c61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190614570565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f6114a061250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590614570565b60405180910390fd5b5f600a5f6101000a81548160ff0219169083151502179055506001905090565b61155661250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90614570565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60135481565b61164a61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90614570565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601a81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61174761250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90614570565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611801906144f6565b80601f016020809104026020016040519081016040528092919081815260200182805461182d906144f6565b80156118785780601f1061184f57610100808354040283529160200191611878565b820191905f5260205f20905b81548152906001019060200180831161185b57829003601f168201915b5050505050905090565b61188a61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90614570565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d9061485a565b60405180910390fd5b6119b08282613627565b5050565b60195481565b6119c261250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790614570565b60405180910390fd5b80600a60036101000a81548160ff02191690831515021790555050565b5f611b2b611a7961250d565b84611b26856040518060600160405280602581526020016154a86025913960015f611aa261250d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546135689092919063ffffffff16565b612514565b6001905092915050565b600a60039054906101000a900460ff1681565b60105481565b5f611b61611b5a61250d565b84846126d7565b6001905092915050565b60175481565b601d602052805f5260405f205f915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611ba961250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90614570565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbdcddef9ef45c223fdd883851191fd9fa95aa9b793f97f720258493ceed93d7560405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611cfd61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8290614570565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e25919061419f565b60405180910390a25050565b611e3961250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe90614570565b60405180910390fd5b670de0b6b3a76400006103e86005611edd610d4e565b611ee791906145bb565b611ef19190614629565b611efb9190614629565b811015611f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f34906148e8565b60405180910390fd5b670de0b6b3a764000081611f5191906145bb565b60098190555050565b600e5f9054906101000a900460ff1681565b60075481565b5f611f7b61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200090614570565b60405180910390fd5b620186a06001612017610d4e565b61202191906145bb565b61202b9190614629565b82101561206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490614976565b60405180910390fd5b6103e8600561207a610d4e565b61208491906145bb565b61208e9190614629565b8211156120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c790614a04565b60405180910390fd5b8160088190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b61217661250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90614570565b60405180910390fd5b8360138190555082601481905550816015819055508060168190555060145460135461223091906146e7565b6012819055506014601254111561227c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612273906147cc565b60405180910390fd5b50505050565b5f61228b61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231090614570565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b60115481565b61234761250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc90614570565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a90614a92565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257990614b20565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e790614bae565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126ca9190614266565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273c90614c3c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa90614cca565b60405180910390fd5b600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156128515750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288790614d58565b60405180910390fd5b5f81036128a7576128a283835f6136c5565b613563565b600a5f9054906101000a900460ff1615612f4e576128c3611717565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129315750612901611717565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561296957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129a3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129bc5750600560149054906101000a900460ff16155b15612f4d57600a60019054906101000a900460ff16612ab057601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a705750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa690614dc0565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612c7357612acc611717565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b5357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bab57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c725743600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2690614e74565b60405180910390fd5b43600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d105750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612db757600754811115612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5190614f02565b60405180910390fd5b600954612d66836112ff565b82612d7191906146e7565b1115612db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da990614f6a565b60405180910390fd5b612f4c565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e545750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ea357600754811115612e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9590614ff8565b60405180910390fd5b612f4b565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612f4a57600954612efd836112ff565b82612f0891906146e7565b1115612f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4090614f6a565b60405180910390fd5b5b5b5b5b5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905080158015612fba5750600a60039054906101000a900460ff165b1561308a575f600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541415801561305757504262015180600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461305491906146e7565b10155b156130855760155460148190555060165460138190555060145460135461307e91906146e7565b6012819055505b613112565b5f600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036131115742600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b5f61311c306112ff565b90505f60085482101590508080156131405750600a60029054906101000a900460ff165b80156131595750600560149054906101000a900460ff16155b80156131ac5750601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156131ff5750601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156132525750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613295576001600560146101000a81548160ff02191690831515021790555061327a61394e565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806133445750601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561334d575f90505b5f811561355257601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156133ab57505f601254115b15613443576133d860646133ca60125489613b9390919063ffffffff16565b613c0a90919063ffffffff16565b9050601254601454826133eb91906145bb565b6133f59190614629565b60185f82825461340591906146e7565b925050819055506012546013548261341d91906145bb565b6134279190614629565b60175f82825461343791906146e7565b9250508190555061352f565b601d5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561349a57505f600f54115b1561352e576134c760646134b9600f5489613b9390919063ffffffff16565b613c0a90919063ffffffff16565b9050600f54601154826134da91906145bb565b6134e49190614629565b60185f8282546134f491906146e7565b92505081905550600f546010548261350c91906145bb565b6135169190614629565b60175f82825461352691906146e7565b925050819055505b5b5f811115613543576135428830836136c5565b5b808661354f9190615016565b95505b61355d8888886136c5565b50505050505b505050565b5f8383111582906135af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a69190614096565b60405180910390fd5b505f83856135bd9190615016565b9050809150509392505050565b5f8082846135d891906146e7565b90508381101561361d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361490615093565b60405180910390fd5b8091505092915050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372a90614c3c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036137a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379890614cca565b60405180910390fd5b6137ac838383613c53565b6138158160405180606001604052806026815260200161545a602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546135689092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506138a4815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546135ca90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139419190614266565b60405180910390a3505050565b5f613958306112ff565b90505f60195460175460185461396e91906146e7565b61397891906146e7565b90505f8083148061398857505f82145b1561399557505050613b91565b60146008546139a491906145bb565b8311156139bd5760146008546139ba91906145bb565b92505b5f600283601854866139cf91906145bb565b6139d99190614629565b6139e39190614629565b90505f6139f98286613c5890919063ffffffff16565b90505f479050613a0882613ca1565b5f613a1c8247613c5890919063ffffffff16565b90505f613a4687613a3860175485613b9390919063ffffffff16565b613c0a90919063ffffffff16565b90505f613a7088613a6260195486613b9390919063ffffffff16565b613c0a90919063ffffffff16565b90505f818385613a809190615016565b613a8a9190615016565b90505f6018819055505f6017819055505f6019819055505f87118015613aaf57505f81115b15613afc57613abe8782613ed4565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613af3939291906150b1565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b4190615113565b5f6040518083038185875af1925050503d805f8114613b7b576040519150601f19603f3d011682016040523d82523d5f602084013e613b80565b606091505b505080985050505050505050505050505b565b5f808303613ba3575f9050613c04565b5f8284613bb091906145bb565b9050828482613bbf9190614629565b14613bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf690615197565b60405180910390fd5b809150505b92915050565b5f613c4b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fab565b905092915050565b505050565b5f613c9983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613568565b905092915050565b5f600267ffffffffffffffff811115613cbd57613cbc6151b5565b5b604051908082528060200260200182016040528015613ceb5781602001602082028036833780820191505090505b50905030815f81518110613d0257613d016151e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613da5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dc99190615223565b81600181518110613ddd57613ddc6151e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e42307f000000000000000000000000000000000000000000000000000000000000000084612514565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613ea395949392919061533e565b5f604051808303815f87803b158015613eba575f80fd5b505af1158015613ecc573d5f803e3d5ffd5b505050505050565b613eff307f000000000000000000000000000000000000000000000000000000000000000084612514565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613f6396959493929190615396565b60606040518083038185885af1158015613f7f573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613fa49190615409565b5050505050565b5f8083118290613ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fe89190614096565b60405180910390fd5b505f8385613fff9190614629565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614043578082015181840152602081019050614028565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6140688261400c565b6140728185614016565b9350614082818560208601614026565b61408b8161404e565b840191505092915050565b5f6020820190508181035f8301526140ae818461405e565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6140e3826140ba565b9050919050565b6140f3816140d9565b81146140fd575f80fd5b50565b5f8135905061410e816140ea565b92915050565b5f819050919050565b61412681614114565b8114614130575f80fd5b50565b5f813590506141418161411d565b92915050565b5f806040838503121561415d5761415c6140b6565b5b5f61416a85828601614100565b925050602061417b85828601614133565b9150509250929050565b5f8115159050919050565b61419981614185565b82525050565b5f6020820190506141b25f830184614190565b92915050565b5f602082840312156141cd576141cc6140b6565b5b5f6141da84828501614100565b91505092915050565b5f819050919050565b5f6142066142016141fc846140ba565b6141e3565b6140ba565b9050919050565b5f614217826141ec565b9050919050565b5f6142288261420d565b9050919050565b6142388161421e565b82525050565b5f6020820190506142515f83018461422f565b92915050565b61426081614114565b82525050565b5f6020820190506142795f830184614257565b92915050565b5f60208284031215614294576142936140b6565b5b5f6142a184828501614133565b91505092915050565b5f805f606084860312156142c1576142c06140b6565b5b5f6142ce86828701614100565b93505060206142df86828701614100565b92505060406142f086828701614133565b9150509250925092565b61430381614185565b811461430d575f80fd5b50565b5f8135905061431e816142fa565b92915050565b5f806040838503121561433a576143396140b6565b5b5f61434785828601614100565b925050602061435885828601614310565b9150509250929050565b5f60ff82169050919050565b61437781614362565b82525050565b5f6020820190506143905f83018461436e565b92915050565b61439f816140d9565b82525050565b5f6020820190506143b85f830184614396565b92915050565b5f80604083850312156143d4576143d36140b6565b5b5f6143e185828601614133565b92505060206143f285828601614133565b9150509250929050565b5f60208284031215614411576144106140b6565b5b5f61441e84828501614310565b91505092915050565b5f806040838503121561443d5761443c6140b6565b5b5f61444a85828601614100565b925050602061445b85828601614100565b9150509250929050565b5f805f806080858703121561447d5761447c6140b6565b5b5f61448a87828801614133565b945050602061449b87828801614133565b93505060406144ac87828801614133565b92505060606144bd87828801614133565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061450d57607f821691505b6020821081036145205761451f6144c9565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61455a602083614016565b915061456582614526565b602082019050919050565b5f6020820190508181035f8301526145878161454e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6145c582614114565b91506145d083614114565b92508282026145de81614114565b915082820484148315176145f5576145f461458e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61463382614114565b915061463e83614114565b92508261464e5761464d6145fc565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f6146b3602f83614016565b91506146be82614659565b604082019050919050565b5f6020820190508181035f8301526146e0816146a7565b9050919050565b5f6146f182614114565b91506146fc83614114565b92508282019050808211156147145761471361458e565b5b92915050565b7f57616974656420746f6f206c6f6e6720746f20626c61636b6c697374000000005f82015250565b5f61474e601c83614016565b91506147598261471a565b602082019050919050565b5f6020820190508181035f83015261477b81614742565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c6573730000005f82015250565b5f6147b6601d83614016565b91506147c182614782565b602082019050919050565b5f6020820190508181035f8301526147e3816147aa565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614844603983614016565b915061484f826147ea565b604082019050919050565b5f6020820190508181035f83015261487181614838565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6148d2602483614016565b91506148dd82614878565b604082019050919050565b5f6020820190508181035f8301526148ff816148c6565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614960603583614016565b915061496b82614906565b604082019050919050565b5f6020820190508181035f83015261498d81614954565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6149ee603483614016565b91506149f982614994565b604082019050919050565b5f6020820190508181035f830152614a1b816149e2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614a7c602683614016565b9150614a8782614a22565b604082019050919050565b5f6020820190508181035f830152614aa981614a70565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614b0a602483614016565b9150614b1582614ab0565b604082019050919050565b5f6020820190508181035f830152614b3781614afe565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b98602283614016565b9150614ba382614b3e565b604082019050919050565b5f6020820190508181035f830152614bc581614b8c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614c26602583614016565b9150614c3182614bcc565b604082019050919050565b5f6020820190508181035f830152614c5381614c1a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614cb4602383614016565b9150614cbf82614c5a565b604082019050919050565b5f6020820190508181035f830152614ce181614ca8565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f614d42603183614016565b9150614d4d82614ce8565b604082019050919050565b5f6020820190508181035f830152614d6f81614d36565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614daa601683614016565b9150614db582614d76565b602082019050919050565b5f6020820190508181035f830152614dd781614d9e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614e5e604983614016565b9150614e6982614dde565b606082019050919050565b5f6020820190508181035f830152614e8b81614e52565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614eec603583614016565b9150614ef782614e92565b604082019050919050565b5f6020820190508181035f830152614f1981614ee0565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614f54601383614016565b9150614f5f82614f20565b602082019050919050565b5f6020820190508181035f830152614f8181614f48565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614fe2603683614016565b9150614fed82614f88565b604082019050919050565b5f6020820190508181035f83015261500f81614fd6565b9050919050565b5f61502082614114565b915061502b83614114565b92508282039050818111156150435761504261458e565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61507d601b83614016565b915061508882615049565b602082019050919050565b5f6020820190508181035f8301526150aa81615071565b9050919050565b5f6060820190506150c45f830186614257565b6150d16020830185614257565b6150de6040830184614257565b949350505050565b5f81905092915050565b50565b5f6150fe5f836150e6565b9150615109826150f0565b5f82019050919050565b5f61511d826150f3565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f615181602183614016565b915061518c82615127565b604082019050919050565b5f6020820190508181035f8301526151ae81615175565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061521d816140ea565b92915050565b5f60208284031215615238576152376140b6565b5b5f6152458482850161520f565b91505092915050565b5f819050919050565b5f61527161526c6152678461524e565b6141e3565b614114565b9050919050565b61528181615257565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6152b9816140d9565b82525050565b5f6152ca83836152b0565b60208301905092915050565b5f602082019050919050565b5f6152ec82615287565b6152f68185615291565b9350615301836152a1565b805f5b8381101561533157815161531888826152bf565b9750615323836152d6565b925050600181019050615304565b5085935050505092915050565b5f60a0820190506153515f830188614257565b61535e6020830187615278565b818103604083015261537081866152e2565b905061537f6060830185614396565b61538c6080830184614257565b9695505050505050565b5f60c0820190506153a95f830189614396565b6153b66020830188614257565b6153c36040830187615278565b6153d06060830186615278565b6153dd6080830185614396565b6153ea60a0830184614257565b979650505050505050565b5f815190506154038161411d565b92915050565b5f805f606084860312156154205761541f6140b6565b5b5f61542d868287016153f5565b935050602061543e868287016153f5565b925050604061544f868287016153f5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201bc1c85158a4e85875f0353f8c39591f50657d82333e14ce7c26ac16ecca9c1e64736f6c63430008140033
Deployed Bytecode
0x60806040526004361061031d575f3560e01c8063924de9b7116101aa578063c0246668116100f6578063e2f4560511610094578063f11a24d31161006e578063f11a24d314610bba578063f2fde38b14610be4578063f637434214610c0c578063f8b45b0514610c3657610324565b8063e2f4560514610b3e578063e7ad9fcd14610b68578063e884f26014610b9057610324565b8063c8c8ebe4116100d0578063c8c8ebe414610a72578063d257b34f14610a9c578063d85ba06314610ad8578063dd62ed3e14610b0257610324565b8063c0246668146109f8578063c18bc19514610a20578063c876d0b914610a4857610324565b8063a4d15b6411610163578063b2b2c0bb1161013d578063b2b2c0bb14610940578063b62496f51461096a578063bbc0c742146109a6578063bde73318146109d057610324565b8063a4d15b64146108b0578063a5cf68ef146108da578063a9059cbb1461090457610324565b8063924de9b7146107a857806395d89b41146107d05780639a7a23d6146107fa5780639fccce3214610822578063a26577781461084c578063a457c2d71461087457610324565b80634a62bb651161026957806370a08231116102225780637571336a116101fc5780637571336a14610716578063762d868a1461073e5780638a8c523c146107685780638da5cb5b1461077e57610324565b806370a082311461069a578063715018a6146106d6578063751039fc146106ec57610324565b80634a62bb651461058e5780634fbee193146105b8578063541a43cf146105f457806366ca9b831461061e5780636a486a8e146106465780636ddd17131461067057610324565b80631b5cc613116102d65780632d5a5d34116102b05780632d5a5d34146104d6578063313ce567146104fe578063395093511461052857806349bd5a5e1461056457610324565b80631b5cc61314610448578063203e727e1461047257806323b872dd1461049a57610324565b806306fdde0314610328578063095ea7b31461035257806310d5de531461038e5780631694505e146103ca57806318160ddd146103f45780631a8145bb1461041e57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061033c610c60565b6040516103499190614096565b60405180910390f35b34801561035d575f80fd5b5061037860048036038101906103739190614147565b610cf0565b604051610385919061419f565b60405180910390f35b348015610399575f80fd5b506103b460048036038101906103af91906141b8565b610d0d565b6040516103c1919061419f565b60405180910390f35b3480156103d5575f80fd5b506103de610d2a565b6040516103eb919061423e565b60405180910390f35b3480156103ff575f80fd5b50610408610d4e565b6040516104159190614266565b60405180910390f35b348015610429575f80fd5b50610432610d57565b60405161043f9190614266565b60405180910390f35b348015610453575f80fd5b5061045c610d5d565b6040516104699190614266565b60405180910390f35b34801561047d575f80fd5b506104986004803603810190610493919061427f565b610d63565b005b3480156104a5575f80fd5b506104c060048036038101906104bb91906142aa565b610e8c565b6040516104cd919061419f565b60405180910390f35b3480156104e1575f80fd5b506104fc60048036038101906104f79190614324565b610f60565b005b348015610509575f80fd5b5061051261109e565b60405161051f919061437d565b60405180910390f35b348015610533575f80fd5b5061054e60048036038101906105499190614147565b6110a6565b60405161055b919061419f565b60405180910390f35b34801561056f575f80fd5b50610578611154565b60405161058591906143a5565b60405180910390f35b348015610599575f80fd5b506105a2611178565b6040516105af919061419f565b60405180910390f35b3480156105c3575f80fd5b506105de60048036038101906105d991906141b8565b61118a565b6040516105eb919061419f565b60405180910390f35b3480156105ff575f80fd5b506106086111dc565b6040516106159190614266565b60405180910390f35b348015610629575f80fd5b50610644600480360381019061063f91906143be565b6111e2565b005b348015610651575f80fd5b5061065a6112e6565b6040516106679190614266565b60405180910390f35b34801561067b575f80fd5b506106846112ec565b604051610691919061419f565b60405180910390f35b3480156106a5575f80fd5b506106c060048036038101906106bb91906141b8565b6112ff565b6040516106cd9190614266565b60405180910390f35b3480156106e1575f80fd5b506106ea611344565b005b3480156106f7575f80fd5b50610700611497565b60405161070d919061419f565b60405180910390f35b348015610721575f80fd5b5061073c60048036038101906107379190614324565b61154e565b005b348015610749575f80fd5b5061075261163c565b60405161075f9190614266565b60405180910390f35b348015610773575f80fd5b5061077c611642565b005b348015610789575f80fd5b50610792611717565b60405161079f91906143a5565b60405180910390f35b3480156107b3575f80fd5b506107ce60048036038101906107c991906143fc565b61173f565b005b3480156107db575f80fd5b506107e46117f2565b6040516107f19190614096565b60405180910390f35b348015610805575f80fd5b50610820600480360381019061081b9190614324565b611882565b005b34801561082d575f80fd5b506108366119b4565b6040516108439190614266565b60405180910390f35b348015610857575f80fd5b50610872600480360381019061086d91906143fc565b6119ba565b005b34801561087f575f80fd5b5061089a60048036038101906108959190614147565b611a6d565b6040516108a7919061419f565b60405180910390f35b3480156108bb575f80fd5b506108c4611b35565b6040516108d1919061419f565b60405180910390f35b3480156108e5575f80fd5b506108ee611b48565b6040516108fb9190614266565b60405180910390f35b34801561090f575f80fd5b5061092a60048036038101906109259190614147565b611b4e565b604051610937919061419f565b60405180910390f35b34801561094b575f80fd5b50610954611b6b565b6040516109619190614266565b60405180910390f35b348015610975575f80fd5b50610990600480360381019061098b91906141b8565b611b71565b60405161099d919061419f565b60405180910390f35b3480156109b1575f80fd5b506109ba611b8e565b6040516109c7919061419f565b60405180910390f35b3480156109db575f80fd5b506109f660048036038101906109f191906141b8565b611ba1565b005b348015610a03575f80fd5b50610a1e6004803603810190610a199190614324565b611cf5565b005b348015610a2b575f80fd5b50610a466004803603810190610a41919061427f565b611e31565b005b348015610a53575f80fd5b50610a5c611f5a565b604051610a69919061419f565b60405180910390f35b348015610a7d575f80fd5b50610a86611f6c565b604051610a939190614266565b60405180910390f35b348015610aa7575f80fd5b50610ac26004803603810190610abd919061427f565b611f72565b604051610acf919061419f565b60405180910390f35b348015610ae3575f80fd5b50610aec6120e0565b604051610af99190614266565b60405180910390f35b348015610b0d575f80fd5b50610b286004803603810190610b239190614427565b6120e6565b604051610b359190614266565b60405180910390f35b348015610b49575f80fd5b50610b52612168565b604051610b5f9190614266565b60405180910390f35b348015610b73575f80fd5b50610b8e6004803603810190610b899190614465565b61216e565b005b348015610b9b575f80fd5b50610ba4612282565b604051610bb1919061419f565b60405180910390f35b348015610bc5575f80fd5b50610bce612339565b604051610bdb9190614266565b60405180910390f35b348015610bef575f80fd5b50610c0a6004803603810190610c0591906141b8565b61233f565b005b348015610c17575f80fd5b50610c20612501565b604051610c2d9190614266565b60405180910390f35b348015610c41575f80fd5b50610c4a612507565b604051610c579190614266565b60405180910390f35b606060038054610c6f906144f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9b906144f6565b8015610ce65780601f10610cbd57610100808354040283529160200191610ce6565b820191905f5260205f20905b815481529060010190602001808311610cc957829003601f168201915b5050505050905090565b5f610d03610cfc61250d565b8484612514565b6001905092915050565b601c602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60185481565b60165481565b610d6b61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df090614570565b60405180910390fd5b670de0b6b3a76400006103e86001610e0f610d4e565b610e1991906145bb565b610e239190614629565b610e2d9190614629565b811015610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e66906146c9565b60405180910390fd5b670de0b6b3a764000081610e8391906145bb565b60078190555050565b5f610e988484846126d7565b610f5584610ea461250d565b610f50856040518060600160405280602881526020016154806028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f0761250d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546135689092919063ffffffff16565b612514565b600190509392505050565b610f6861250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed90614570565b60405180910390fd5b6028601a5461100591906146e7565b4310611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90614764565b60405180910390fd5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6012905090565b5f61114a6110b261250d565b846111458560015f6110c261250d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546135ca90919063ffffffff16565b612514565b6001905092915050565b7f000000000000000000000000747408bd0c339b1bf6f82265ba6bba0c514d70bc81565b600a5f9054906101000a900460ff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b6111ea61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90614570565b60405180910390fd5b816010819055508060118190555060115460105461129691906146e7565b600f819055506014600f5411156112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d9906147cc565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61134c61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190614570565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f6114a061250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590614570565b60405180910390fd5b5f600a5f6101000a81548160ff0219169083151502179055506001905090565b61155661250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90614570565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60135481565b61164a61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90614570565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601a81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61174761250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90614570565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611801906144f6565b80601f016020809104026020016040519081016040528092919081815260200182805461182d906144f6565b80156118785780601f1061184f57610100808354040283529160200191611878565b820191905f5260205f20905b81548152906001019060200180831161185b57829003601f168201915b5050505050905090565b61188a61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90614570565b60405180910390fd5b7f000000000000000000000000747408bd0c339b1bf6f82265ba6bba0c514d70bc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d9061485a565b60405180910390fd5b6119b08282613627565b5050565b60195481565b6119c261250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790614570565b60405180910390fd5b80600a60036101000a81548160ff02191690831515021790555050565b5f611b2b611a7961250d565b84611b26856040518060600160405280602581526020016154a86025913960015f611aa261250d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546135689092919063ffffffff16565b612514565b6001905092915050565b600a60039054906101000a900460ff1681565b60105481565b5f611b61611b5a61250d565b84846126d7565b6001905092915050565b60175481565b601d602052805f5260405f205f915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611ba961250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90614570565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbdcddef9ef45c223fdd883851191fd9fa95aa9b793f97f720258493ceed93d7560405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611cfd61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8290614570565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e25919061419f565b60405180910390a25050565b611e3961250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe90614570565b60405180910390fd5b670de0b6b3a76400006103e86005611edd610d4e565b611ee791906145bb565b611ef19190614629565b611efb9190614629565b811015611f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f34906148e8565b60405180910390fd5b670de0b6b3a764000081611f5191906145bb565b60098190555050565b600e5f9054906101000a900460ff1681565b60075481565b5f611f7b61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200090614570565b60405180910390fd5b620186a06001612017610d4e565b61202191906145bb565b61202b9190614629565b82101561206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490614976565b60405180910390fd5b6103e8600561207a610d4e565b61208491906145bb565b61208e9190614629565b8211156120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c790614a04565b60405180910390fd5b8160088190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b61217661250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90614570565b60405180910390fd5b8360138190555082601481905550816015819055508060168190555060145460135461223091906146e7565b6012819055506014601254111561227c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612273906147cc565b60405180910390fd5b50505050565b5f61228b61250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231090614570565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b60115481565b61234761250d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc90614570565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a90614a92565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257990614b20565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e790614bae565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126ca9190614266565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273c90614c3c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa90614cca565b60405180910390fd5b600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156128515750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288790614d58565b60405180910390fd5b5f81036128a7576128a283835f6136c5565b613563565b600a5f9054906101000a900460ff1615612f4e576128c3611717565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129315750612901611717565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561296957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129a3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129bc5750600560149054906101000a900460ff16155b15612f4d57600a60019054906101000a900460ff16612ab057601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a705750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa690614dc0565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612c7357612acc611717565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b5357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bab57507f000000000000000000000000747408bd0c339b1bf6f82265ba6bba0c514d70bc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c725743600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2690614e74565b60405180910390fd5b43600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d105750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612db757600754811115612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5190614f02565b60405180910390fd5b600954612d66836112ff565b82612d7191906146e7565b1115612db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da990614f6a565b60405180910390fd5b612f4c565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e545750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ea357600754811115612e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9590614ff8565b60405180910390fd5b612f4b565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612f4a57600954612efd836112ff565b82612f0891906146e7565b1115612f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4090614f6a565b60405180910390fd5b5b5b5b5b5b5f7f000000000000000000000000747408bd0c339b1bf6f82265ba6bba0c514d70bc73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905080158015612fba5750600a60039054906101000a900460ff165b1561308a575f600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541415801561305757504262015180600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461305491906146e7565b10155b156130855760155460148190555060165460138190555060145460135461307e91906146e7565b6012819055505b613112565b5f600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036131115742600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b5f61311c306112ff565b90505f60085482101590508080156131405750600a60029054906101000a900460ff165b80156131595750600560149054906101000a900460ff16155b80156131ac5750601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156131ff5750601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156132525750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613295576001600560146101000a81548160ff02191690831515021790555061327a61394e565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806133445750601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561334d575f90505b5f811561355257601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156133ab57505f601254115b15613443576133d860646133ca60125489613b9390919063ffffffff16565b613c0a90919063ffffffff16565b9050601254601454826133eb91906145bb565b6133f59190614629565b60185f82825461340591906146e7565b925050819055506012546013548261341d91906145bb565b6134279190614629565b60175f82825461343791906146e7565b9250508190555061352f565b601d5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561349a57505f600f54115b1561352e576134c760646134b9600f5489613b9390919063ffffffff16565b613c0a90919063ffffffff16565b9050600f54601154826134da91906145bb565b6134e49190614629565b60185f8282546134f491906146e7565b92505081905550600f546010548261350c91906145bb565b6135169190614629565b60175f82825461352691906146e7565b925050819055505b5b5f811115613543576135428830836136c5565b5b808661354f9190615016565b95505b61355d8888886136c5565b50505050505b505050565b5f8383111582906135af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a69190614096565b60405180910390fd5b505f83856135bd9190615016565b9050809150509392505050565b5f8082846135d891906146e7565b90508381101561361d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361490615093565b60405180910390fd5b8091505092915050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372a90614c3c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036137a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379890614cca565b60405180910390fd5b6137ac838383613c53565b6138158160405180606001604052806026815260200161545a602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546135689092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506138a4815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546135ca90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139419190614266565b60405180910390a3505050565b5f613958306112ff565b90505f60195460175460185461396e91906146e7565b61397891906146e7565b90505f8083148061398857505f82145b1561399557505050613b91565b60146008546139a491906145bb565b8311156139bd5760146008546139ba91906145bb565b92505b5f600283601854866139cf91906145bb565b6139d99190614629565b6139e39190614629565b90505f6139f98286613c5890919063ffffffff16565b90505f479050613a0882613ca1565b5f613a1c8247613c5890919063ffffffff16565b90505f613a4687613a3860175485613b9390919063ffffffff16565b613c0a90919063ffffffff16565b90505f613a7088613a6260195486613b9390919063ffffffff16565b613c0a90919063ffffffff16565b90505f818385613a809190615016565b613a8a9190615016565b90505f6018819055505f6017819055505f6019819055505f87118015613aaf57505f81115b15613afc57613abe8782613ed4565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613af3939291906150b1565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b4190615113565b5f6040518083038185875af1925050503d805f8114613b7b576040519150601f19603f3d011682016040523d82523d5f602084013e613b80565b606091505b505080985050505050505050505050505b565b5f808303613ba3575f9050613c04565b5f8284613bb091906145bb565b9050828482613bbf9190614629565b14613bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf690615197565b60405180910390fd5b809150505b92915050565b5f613c4b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fab565b905092915050565b505050565b5f613c9983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613568565b905092915050565b5f600267ffffffffffffffff811115613cbd57613cbc6151b5565b5b604051908082528060200260200182016040528015613ceb5781602001602082028036833780820191505090505b50905030815f81518110613d0257613d016151e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613da5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dc99190615223565b81600181518110613ddd57613ddc6151e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e42307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612514565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613ea395949392919061533e565b5f604051808303815f87803b158015613eba575f80fd5b505af1158015613ecc573d5f803e3d5ffd5b505050505050565b613eff307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612514565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613f6396959493929190615396565b60606040518083038185885af1158015613f7f573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613fa49190615409565b5050505050565b5f8083118290613ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fe89190614096565b60405180910390fd5b505f8385613fff9190614629565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614043578082015181840152602081019050614028565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6140688261400c565b6140728185614016565b9350614082818560208601614026565b61408b8161404e565b840191505092915050565b5f6020820190508181035f8301526140ae818461405e565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6140e3826140ba565b9050919050565b6140f3816140d9565b81146140fd575f80fd5b50565b5f8135905061410e816140ea565b92915050565b5f819050919050565b61412681614114565b8114614130575f80fd5b50565b5f813590506141418161411d565b92915050565b5f806040838503121561415d5761415c6140b6565b5b5f61416a85828601614100565b925050602061417b85828601614133565b9150509250929050565b5f8115159050919050565b61419981614185565b82525050565b5f6020820190506141b25f830184614190565b92915050565b5f602082840312156141cd576141cc6140b6565b5b5f6141da84828501614100565b91505092915050565b5f819050919050565b5f6142066142016141fc846140ba565b6141e3565b6140ba565b9050919050565b5f614217826141ec565b9050919050565b5f6142288261420d565b9050919050565b6142388161421e565b82525050565b5f6020820190506142515f83018461422f565b92915050565b61426081614114565b82525050565b5f6020820190506142795f830184614257565b92915050565b5f60208284031215614294576142936140b6565b5b5f6142a184828501614133565b91505092915050565b5f805f606084860312156142c1576142c06140b6565b5b5f6142ce86828701614100565b93505060206142df86828701614100565b92505060406142f086828701614133565b9150509250925092565b61430381614185565b811461430d575f80fd5b50565b5f8135905061431e816142fa565b92915050565b5f806040838503121561433a576143396140b6565b5b5f61434785828601614100565b925050602061435885828601614310565b9150509250929050565b5f60ff82169050919050565b61437781614362565b82525050565b5f6020820190506143905f83018461436e565b92915050565b61439f816140d9565b82525050565b5f6020820190506143b85f830184614396565b92915050565b5f80604083850312156143d4576143d36140b6565b5b5f6143e185828601614133565b92505060206143f285828601614133565b9150509250929050565b5f60208284031215614411576144106140b6565b5b5f61441e84828501614310565b91505092915050565b5f806040838503121561443d5761443c6140b6565b5b5f61444a85828601614100565b925050602061445b85828601614100565b9150509250929050565b5f805f806080858703121561447d5761447c6140b6565b5b5f61448a87828801614133565b945050602061449b87828801614133565b93505060406144ac87828801614133565b92505060606144bd87828801614133565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061450d57607f821691505b6020821081036145205761451f6144c9565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61455a602083614016565b915061456582614526565b602082019050919050565b5f6020820190508181035f8301526145878161454e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6145c582614114565b91506145d083614114565b92508282026145de81614114565b915082820484148315176145f5576145f461458e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61463382614114565b915061463e83614114565b92508261464e5761464d6145fc565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f6146b3602f83614016565b91506146be82614659565b604082019050919050565b5f6020820190508181035f8301526146e0816146a7565b9050919050565b5f6146f182614114565b91506146fc83614114565b92508282019050808211156147145761471361458e565b5b92915050565b7f57616974656420746f6f206c6f6e6720746f20626c61636b6c697374000000005f82015250565b5f61474e601c83614016565b91506147598261471a565b602082019050919050565b5f6020820190508181035f83015261477b81614742565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c6573730000005f82015250565b5f6147b6601d83614016565b91506147c182614782565b602082019050919050565b5f6020820190508181035f8301526147e3816147aa565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614844603983614016565b915061484f826147ea565b604082019050919050565b5f6020820190508181035f83015261487181614838565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6148d2602483614016565b91506148dd82614878565b604082019050919050565b5f6020820190508181035f8301526148ff816148c6565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614960603583614016565b915061496b82614906565b604082019050919050565b5f6020820190508181035f83015261498d81614954565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6149ee603483614016565b91506149f982614994565b604082019050919050565b5f6020820190508181035f830152614a1b816149e2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614a7c602683614016565b9150614a8782614a22565b604082019050919050565b5f6020820190508181035f830152614aa981614a70565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614b0a602483614016565b9150614b1582614ab0565b604082019050919050565b5f6020820190508181035f830152614b3781614afe565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b98602283614016565b9150614ba382614b3e565b604082019050919050565b5f6020820190508181035f830152614bc581614b8c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614c26602583614016565b9150614c3182614bcc565b604082019050919050565b5f6020820190508181035f830152614c5381614c1a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614cb4602383614016565b9150614cbf82614c5a565b604082019050919050565b5f6020820190508181035f830152614ce181614ca8565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f614d42603183614016565b9150614d4d82614ce8565b604082019050919050565b5f6020820190508181035f830152614d6f81614d36565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614daa601683614016565b9150614db582614d76565b602082019050919050565b5f6020820190508181035f830152614dd781614d9e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614e5e604983614016565b9150614e6982614dde565b606082019050919050565b5f6020820190508181035f830152614e8b81614e52565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614eec603583614016565b9150614ef782614e92565b604082019050919050565b5f6020820190508181035f830152614f1981614ee0565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614f54601383614016565b9150614f5f82614f20565b602082019050919050565b5f6020820190508181035f830152614f8181614f48565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614fe2603683614016565b9150614fed82614f88565b604082019050919050565b5f6020820190508181035f83015261500f81614fd6565b9050919050565b5f61502082614114565b915061502b83614114565b92508282039050818111156150435761504261458e565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61507d601b83614016565b915061508882615049565b602082019050919050565b5f6020820190508181035f8301526150aa81615071565b9050919050565b5f6060820190506150c45f830186614257565b6150d16020830185614257565b6150de6040830184614257565b949350505050565b5f81905092915050565b50565b5f6150fe5f836150e6565b9150615109826150f0565b5f82019050919050565b5f61511d826150f3565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f615181602183614016565b915061518c82615127565b604082019050919050565b5f6020820190508181035f8301526151ae81615175565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061521d816140ea565b92915050565b5f60208284031215615238576152376140b6565b5b5f6152458482850161520f565b91505092915050565b5f819050919050565b5f61527161526c6152678461524e565b6141e3565b614114565b9050919050565b61528181615257565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6152b9816140d9565b82525050565b5f6152ca83836152b0565b60208301905092915050565b5f602082019050919050565b5f6152ec82615287565b6152f68185615291565b9350615301836152a1565b805f5b8381101561533157815161531888826152bf565b9750615323836152d6565b925050600181019050615304565b5085935050505092915050565b5f60a0820190506153515f830188614257565b61535e6020830187615278565b818103604083015261537081866152e2565b905061537f6060830185614396565b61538c6080830184614257565b9695505050505050565b5f60c0820190506153a95f830189614396565b6153b66020830188614257565b6153c36040830187615278565b6153d06060830186615278565b6153dd6080830185614396565b6153ea60a0830184614257565b979650505050505050565b5f815190506154038161411d565b92915050565b5f805f606084860312156154205761541f6140b6565b5b5f61542d868287016153f5565b935050602061543e868287016153f5565b925050604061544f868287016153f5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201bc1c85158a4e85875f0353f8c39591f50657d82333e14ce7c26ac16ecca9c1e64736f6c63430008140033
Deployed Bytecode Sourcemap
28795:16031:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6893:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9067:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30347:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28869:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8016:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30061:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29981;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34714:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9719:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36513:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7857:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10484:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28927:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29160:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37393:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29938:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35532:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29827:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29240:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8188:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21395:148;;;;;;;;;;;;;:::i;:::-;;33820:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35181:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29862:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33619:148;;;;;;;;;;;;;:::i;:::-;;20751:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35422:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7113:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36739:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30101:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34145:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11206:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29278:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29753:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8529:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30024:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30570:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29200:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37191:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36322:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34957:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29670:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29044:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34319:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29719:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8768:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29086:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35839:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34002:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29787:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21699:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29897:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29126:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6893:100;6947:13;6980:5;6973:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6893:100;:::o;9067:169::-;9150:4;9167:39;9176:12;:10;:12::i;:::-;9190:7;9199:6;9167:8;:39::i;:::-;9224:4;9217:11;;9067:169;;;;:::o;30347:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;28869:51::-;;;:::o;8016:108::-;8077:7;8104:12;;8097:19;;8016:108;:::o;30061:33::-;;;;:::o;29981:::-;;;;:::o;34714:234::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34833:4:::1;34827;34823:1;34807:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34806:31;;;;:::i;:::-;34796:6;:41;;34788:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34933:6;34923;:17;;;;:::i;:::-;34900:20;:40;;;;34714:234:::0;:::o;9719:355::-;9859:4;9876:36;9886:6;9894:9;9905:6;9876:9;:36::i;:::-;9923:121;9932:6;9940:12;:10;:12::i;:::-;9954:89;9992:6;9954:89;;;;;;;;;;;;;;;;;:11;:19;9966:6;9954:19;;;;;;;;;;;;;;;:33;9974:12;:10;:12::i;:::-;9954:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;9923:8;:121::i;:::-;10062:4;10055:11;;9719:355;;;;;:::o;36513:217::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36641:2:::1;36628:10;;:15;;;;:::i;:::-;36613:12;:30;36605:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36709:13;36687:10;:19;36698:7;36687:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;36513:217:::0;;:::o;7857:93::-;7915:5;7940:2;7933:9;;7857:93;:::o;10484:218::-;10572:4;10589:83;10598:12;:10;:12::i;:::-;10612:7;10621:50;10660:10;10621:11;:25;10633:12;:10;:12::i;:::-;10621:25;;;;;;;;;;;;;;;:34;10647:7;10621:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10589:8;:83::i;:::-;10690:4;10683:11;;10484:218;;;;:::o;28927:38::-;;;:::o;29160:33::-;;;;;;;;;;;;;:::o;37393:125::-;37458:4;37482:19;:28;37502:7;37482:28;;;;;;;;;;;;;;;;;;;;;;;;;37475:35;;37393:125;;;:::o;29938:36::-;;;;:::o;35532:298::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35643:10:::1;35628:12;:25;;;;35682:13;35664:15;:31;;;;35736:15;;35721:12;;:30;;;;:::i;:::-;35706:12;:45;;;;35786:2;35770:12;;:18;;35762:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35532:298:::0;;:::o;29827:28::-;;;;:::o;29240:31::-;;;;;;;;;;;;;:::o;8188:127::-;8262:7;8289:9;:18;8299:7;8289:18;;;;;;;;;;;;;;;;8282:25;;8188:127;;;:::o;21395:148::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21502:1:::1;21465:40;;21486:6;;;;;;;;;;;21465:40;;;;;;;;;;;;21533:1;21516:6;;:19;;;;;;;;;;;;;;;;;;21395:148::o:0;33820:120::-;33872:4;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33905:5:::1;33888:14;;:22;;;;;;;;;;;;;;;;;;33928:4;33921:11;;33820:120:::0;:::o;35181:144::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35313:4:::1;35271:31;:39;35303:6;35271:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35181:144:::0;;:::o;29862:28::-;;;;:::o;33619:148::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33690:4:::1;33674:13;;:20;;;;;;;;;;;;;;;;;;33719:4;33705:11;;:18;;;;;;;;;;;;;;;;;;33747:12;33734:10;:25;;;;33619:148::o:0;20751:79::-;20789:7;20816:6;;;;;;;;;;;20809:13;;20751:79;:::o;35422:101::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35508:7:::1;35494:11;;:21;;;;;;;;;;;;;;;;;;35422:101:::0;:::o;7113:104::-;7169:13;7202:7;7195:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7113:104;:::o;36739:245::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36846:13:::1;36838:21;;:4;:21;;::::0;36830:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36935:41;36964:4;36970:5;36935:28;:41::i;:::-;36739:245:::0;;:::o;30101:27::-;;;;:::o;34145:102::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34234:5:::1;34213:18;;:26;;;;;;;;;;;;;;;;;;34145:102:::0;:::o;11206:269::-;11299:4;11316:129;11325:12;:10;:12::i;:::-;11339:7;11348:96;11387:15;11348:96;;;;;;;;;;;;;;;;;:11;:25;11360:12;:10;:12::i;:::-;11348:25;;;;;;;;;;;;;;;:34;11374:7;11348:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11316:8;:129::i;:::-;11463:4;11456:11;;11206:269;;;;:::o;29278:37::-;;;;;;;;;;;;;:::o;29753:27::-;;;;:::o;8529:175::-;8615:4;8632:42;8642:12;:10;:12::i;:::-;8656:9;8667:6;8632:9;:42::i;:::-;8692:4;8685:11;;8529:175;;;;:::o;30024:30::-;;;;:::o;30570:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29200:33::-;;;;;;;;;;;;;:::o;37191:187::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37316:12:::1;;;;;;;;;;;37279:50;;37299:15;37279:50;;;;;;;;;;;;37355:15;37340:12;;:30;;;;;;;;;;;;;;;;;;37191:187:::0;:::o;36322:182::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36438:8:::1;36407:19;:28;36427:7;36407:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36478:7;36462:34;;;36487:8;36462:34;;;;;;:::i;:::-;;;;;;;;36322:182:::0;;:::o;34957:215::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35079:4:::1;35073;35069:1;35053:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35052:31;;;;:::i;:::-;35042:6;:41;;35034:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35157:6;35147;:17;;;;:::i;:::-;35135:9;:29;;;;34957:215:::0;:::o;29670:39::-;;;;;;;;;;;;;:::o;29044:35::-;;;;:::o;34319:386::-;34400:4;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34457:6:::1;34453:1;34437:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34424:9;:39;;34416:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34573:4;34569:1;34553:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34540:9;:37;;34532:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34666:9;34645:18;:30;;;;34693:4;34686:11;;34319:386:::0;;;:::o;29719:27::-;;;;:::o;8768:151::-;8857:7;8884:11;:18;8896:5;8884:18;;;;;;;;;;;;;;;:27;8903:7;8884:27;;;;;;;;;;;;;;;;8877:34;;8768:151;;;;:::o;29086:33::-;;;;:::o;35839:474::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36013:10:::1;35997:13;:26;;;;36053:13;36034:16;:32;;;;36101:22;36077:21;:46;;;;36155:19;36134:18;:40;;;;36217:16;;36201:13;;:32;;;;:::i;:::-;36185:13;:48;;;;36269:2;36252:13;;:19;;36244:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35839:474:::0;;;;:::o;34002:134::-;34062:4;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34101:5:::1;34078:20;;:28;;;;;;;;;;;;;;;;;;34124:4;34117:11;;34002:134:::0;:::o;29787:30::-;;;;:::o;21699:244::-;20974:12;:10;:12::i;:::-;20964:22;;:6;;;;;;;;;;;:22;;;20956:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21808:1:::1;21788:22;;:8;:22;;::::0;21780:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21898:8;21869:38;;21890:6;;;;;;;;;;;21869:38;;;;;;;;;;;;21927:8;21918:6;;:17;;;;;;;;;;;;;;;;;;21699:244:::0;:::o;29897:31::-;;;;:::o;29126:24::-;;;;:::o;97:98::-;150:7;177:10;170:17;;97:98;:::o;14402:381::-;14555:1;14538:19;;:5;:19;;;14530:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14636:1;14617:21;;:7;:21;;;14609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14721:6;14691:11;:18;14703:5;14691:18;;;;;;;;;;;;;;;:27;14710:7;14691:27;;;;;;;;;;;;;;;:36;;;;14759:7;14743:32;;14752:5;14743:32;;;14768:6;14743:32;;;;;;:::i;:::-;;;;;;;;14402:381;;;:::o;37578:4621::-;37726:1;37710:18;;:4;:18;;;37702:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37803:1;37789:16;;:2;:16;;;37781:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37865:10;:14;37876:2;37865:14;;;;;;;;;;;;;;;;;;;;;;;;;37864:15;:36;;;;;37884:10;:16;37895:4;37884:16;;;;;;;;;;;;;;;;;;;;;;;;;37883:17;37864:36;37856:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;37979:1;37969:6;:11;37966:92;;37997:28;38013:4;38019:2;38023:1;37997:15;:28::i;:::-;38040:7;;37966:92;38074:14;;;;;;;;;;;38071:1811;;;38134:7;:5;:7::i;:::-;38126:15;;:4;:15;;;;:49;;;;;38168:7;:5;:7::i;:::-;38162:13;;:2;:13;;;;38126:49;:86;;;;;38210:1;38196:16;;:2;:16;;;;38126:86;:128;;;;;38247:6;38233:21;;:2;:21;;;;38126:128;:158;;;;;38276:8;;;;;;;;;;;38275:9;38126:158;38104:1767;;;38322:13;;;;;;;;;;;38318:148;;38367:19;:25;38387:4;38367:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38396:19;:23;38416:2;38396:23;;;;;;;;;;;;;;;;;;;;;;;;;38367:52;38359:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38318:148;38625:20;;;;;;;;;;;38621:423;;;38679:7;:5;:7::i;:::-;38673:13;;:2;:13;;;;:47;;;;;38704:15;38690:30;;:2;:30;;;;38673:47;:79;;;;;38738:13;38724:28;;:2;:28;;;;38673:79;38669:356;;;38830:12;38788:28;:39;38817:9;38788:39;;;;;;;;;;;;;;;;:54;38780:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38989:12;38947:28;:39;38976:9;38947:39;;;;;;;;;;;;;;;:54;;;;38669:356;38621:423;39097:25;:31;39123:4;39097:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39133:31;:35;39165:2;39133:35;;;;;;;;;;;;;;;;;;;;;;;;;39132:36;39097:71;39093:763;;;39215:20;;39205:6;:30;;39197:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39354:9;;39337:13;39347:2;39337:9;:13::i;:::-;39328:6;:22;;;;:::i;:::-;:35;;39320:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39093:763;;;39466:25;:29;39492:2;39466:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39500:31;:37;39532:4;39500:37;;;;;;;;;;;;;;;;;;;;;;;;;39499:38;39466:71;39462:394;;;39584:20;;39574:6;:30;;39566:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39462:394;;;39710:31;:35;39742:2;39710:35;;;;;;;;;;;;;;;;;;;;;;;;;39706:150;;39803:9;;39786:13;39796:2;39786:9;:13::i;:::-;39777:6;:22;;;;:::i;:::-;:35;;39769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39706:150;39462:394;39093:763;38104:1767;38071:1811;39924:10;39945:13;39937:21;;:4;:21;;;39924:34;;39974:5;39973:6;:28;;;;;39983:18;;;;;;;;;;;39973:28;39969:535;;;40056:1;40022:24;:30;40047:4;40022:30;;;;;;;;;;;;;;;;:35;;:120;;;;;40126:15;40113:8;40079:24;:30;40104:4;40079:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;40022:120;40018:322;;;40183:21;;40164:16;:40;;;;40239:18;;40223:13;:34;;;;40308:16;;40292:13;;:32;;;;:::i;:::-;40276:13;:48;;;;40018:322;39969:535;;;40409:1;40377:24;:28;40402:2;40377:28;;;;;;;;;;;;;;;;:33;40373:120;;40462:15;40431:24;:28;40456:2;40431:28;;;;;;;;;;;;;;;:46;;;;40373:120;39969:535;40517:28;40548:24;40566:4;40548:9;:24::i;:::-;40517:55;;40586:12;40625:18;;40601:20;:42;;40586:57;;40675:7;:35;;;;;40699:11;;;;;;;;;;;40675:35;:61;;;;;40728:8;;;;;;;;;;;40727:9;40675:61;:110;;;;;40754:25;:31;40780:4;40754:31;;;;;;;;;;;;;;;;;;;;;;;;;40753:32;40675:110;:153;;;;;40803:19;:25;40823:4;40803:25;;;;;;;;;;;;;;;;;;;;;;;;;40802:26;40675:153;:194;;;;;40846:19;:23;40866:2;40846:23;;;;;;;;;;;;;;;;;;;;;;;;;40845:24;40675:194;40657:328;;;40907:4;40896:8;;:15;;;;;;;;;;;;;;;;;;40929:10;:8;:10::i;:::-;40968:5;40957:8;;:16;;;;;;;;;;;;;;;;;;40657:328;40998:12;41014:8;;;;;;;;;;;41013:9;40998:24;;41124:19;:25;41144:4;41124:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41153:19;:23;41173:2;41153:23;;;;;;;;;;;;;;;;;;;;;;;;;41124:52;41121:99;;;41203:5;41193:15;;41121:99;41233:12;41337:7;41334:811;;;41388:25;:29;41414:2;41388:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41437:1;41421:13;;:17;41388:50;41384:608;;;41465:34;41495:3;41465:25;41476:13;;41465:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41458:41;;41566:13;;41547:16;;41540:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41518:18;;:61;;;;;;;:::i;:::-;;;;;;;;41640:13;;41624;;41617:4;:20;;;;:::i;:::-;:36;;;;:::i;:::-;41598:15;;:55;;;;;;;:::i;:::-;;;;;;;;41384:608;;;41714:25;:31;41740:4;41714:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41764:1;41749:12;;:16;41714:51;41711:281;;;41793:33;41822:3;41793:24;41804:12;;41793:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41786:40;;41892:12;;41874:15;;41867:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41845:18;;:59;;;;;;;:::i;:::-;;;;;;;;41964:12;;41949;;41942:4;:19;;;;:::i;:::-;:34;;;;:::i;:::-;41923:15;;:53;;;;;;;:::i;:::-;;;;;;;;41711:281;41384:608;42019:1;42012:4;:8;42009:93;;;42044:42;42060:4;42074;42081;42044:15;:42::i;:::-;42009:93;42129:4;42119:14;;;;;:::i;:::-;;;41334:811;42158:33;42174:4;42180:2;42184:6;42158:15;:33::i;:::-;37691:4508;;;;;37578:4621;;;;:::o;16689:193::-;16775:7;16808:1;16803;:6;;16811:12;16795:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16835:9;16851:1;16847;:5;;;;:::i;:::-;16835:17;;16873:1;16866:8;;;16689:193;;;;;:::o;15783:182::-;15841:7;15861:9;15877:1;15873;:5;;;;:::i;:::-;15861:17;;15902:1;15897;:6;;15889:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;15956:1;15949:8;;;15783:182;;;;:::o;36993:189::-;37110:5;37076:25;:31;37102:4;37076:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37168:5;37134:40;;37162:4;37134:40;;;;;;;;;;;;36993:189;;:::o;11966:575::-;12124:1;12106:20;;:6;:20;;;12098:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12208:1;12187:23;;:9;:23;;;12179:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12264:47;12285:6;12293:9;12304:6;12264:20;:47::i;:::-;12345:71;12367:6;12345:71;;;;;;;;;;;;;;;;;:9;:17;12355:6;12345:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12325:9;:17;12335:6;12325:17;;;;;;;;;;;;;;;:91;;;;12450:32;12475:6;12450:9;:20;12460:9;12450:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12427:9;:20;12437:9;12427:20;;;;;;;;;;;;;;;:55;;;;12515:9;12498:35;;12507:6;12498:35;;;12526:6;12498:35;;;;;;:::i;:::-;;;;;;;;11966:575;;;:::o;43343:1478::-;43382:23;43408:24;43426:4;43408:9;:24::i;:::-;43382:50;;43443:25;43510:12;;43492:15;;43471:18;;:36;;;;:::i;:::-;:51;;;;:::i;:::-;43443:79;;43533:12;43581:1;43562:15;:20;:46;;;;43607:1;43586:17;:22;43562:46;43559:60;;;43611:7;;;;;43559:60;43674:2;43653:18;;:23;;;;:::i;:::-;43635:15;:41;43632:111;;;43729:2;43708:18;;:23;;;;:::i;:::-;43690:41;;43632:111;43805:23;43890:1;43870:17;43849:18;;43831:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43805:86;;43902:26;43931:36;43951:15;43931;:19;;:36;;;;:::i;:::-;43902:65;;43981:25;44009:21;43981:49;;44044:36;44061:18;44044:16;:36::i;:::-;44095:18;44116:44;44142:17;44116:21;:25;;:44;;;;:::i;:::-;44095:65;;44174:20;44197:54;44233:17;44197:31;44212:15;;44197:10;:14;;:31;;;;:::i;:::-;:35;;:54;;;;:::i;:::-;44174:77;;44262:17;44282:51;44315:17;44282:28;44297:12;;44282:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44262:71;;44344:23;44398:9;44383:12;44370:10;:25;;;;:::i;:::-;:37;;;;:::i;:::-;44344:63;;44445:1;44424:18;:22;;;;44475:1;44457:15;:19;;;;44502:1;44487:12;:16;;;;44538:1;44520:15;:19;:42;;;;;44561:1;44543:15;:19;44520:42;44517:210;;;44578:46;44591:15;44608;44578:12;:46::i;:::-;44644:71;44659:18;44679:15;44696:18;;44644:71;;;;;;;;:::i;:::-;;;;;;;;44517:210;44761:12;;;;;;;;;;;44753:26;;44787:21;44753:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44740:73;;;;;43371:1450;;;;;;;;;;43343:1478;:::o;17142:473::-;17200:7;17450:1;17445;:6;17441:47;;17475:1;17468:8;;;;17441:47;17501:9;17517:1;17513;:5;;;;:::i;:::-;17501:17;;17546:1;17541;17537;:5;;;;:::i;:::-;:10;17529:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17606:1;17599:8;;;17142:473;;;;;:::o;18092:132::-;18150:7;18177:39;18181:1;18184;18177:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18170:46;;18092:132;;;;:::o;15387:125::-;;;;:::o;16249:136::-;16307:7;16334:43;16338:1;16341;16334:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16327:50;;16249:136;;;;:::o;42208:597::-;42337:21;42375:1;42361:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42337:40;;42406:4;42388;42393:1;42388:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42432:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42422:4;42427:1;42422:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42468:62;42485:4;42500:15;42518:11;42468:8;:62::i;:::-;42570:15;:66;;;42651:11;42677:1;42721:4;42748;42768:15;42570:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42263:542;42208:597;:::o;42814:520::-;42962:62;42979:4;42994:15;43012:11;42962:8;:62::i;:::-;43068:15;:31;;;43107:9;43140:4;43160:11;43186:1;43229;43280:4;43300:15;43068:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42814:520;;:::o;18721:279::-;18807:7;18839:1;18835;:5;18842:12;18827:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18866:9;18882:1;18878;:5;;;;:::i;:::-;18866:17;;18991:1;18984:8;;;18721:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:116::-;6141:21;6156:5;6141:21;:::i;:::-;6134:5;6131:32;6121:60;;6177:1;6174;6167:12;6121:60;6071:116;:::o;6193:133::-;6236:5;6274:6;6261:20;6252:29;;6290:30;6314:5;6290:30;:::i;:::-;6193:133;;;;:::o;6332:468::-;6397:6;6405;6454:2;6442:9;6433:7;6429:23;6425:32;6422:119;;;6460:79;;:::i;:::-;6422:119;6580:1;6605:53;6650:7;6641:6;6630:9;6626:22;6605:53;:::i;:::-;6595:63;;6551:117;6707:2;6733:50;6775:7;6766:6;6755:9;6751:22;6733:50;:::i;:::-;6723:60;;6678:115;6332:468;;;;;:::o;6806:86::-;6841:7;6881:4;6874:5;6870:16;6859:27;;6806:86;;;:::o;6898:112::-;6981:22;6997:5;6981:22;:::i;:::-;6976:3;6969:35;6898:112;;:::o;7016:214::-;7105:4;7143:2;7132:9;7128:18;7120:26;;7156:67;7220:1;7209:9;7205:17;7196:6;7156:67;:::i;:::-;7016:214;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:474::-;7656:6;7664;7713:2;7701:9;7692:7;7688:23;7684:32;7681:119;;;7719:79;;:::i;:::-;7681:119;7839:1;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7810:117;7966:2;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7937:118;7588:474;;;;;:::o;8068:323::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8270:114;8068:323;;;;:::o;8397:474::-;8465:6;8473;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8619:117;8775:2;8801:53;8846:7;8837:6;8826:9;8822:22;8801:53;:::i;:::-;8791:63;;8746:118;8397:474;;;;;:::o;8877:765::-;8963:6;8971;8979;8987;9036:3;9024:9;9015:7;9011:23;9007:33;9004:120;;;9043:79;;:::i;:::-;9004:120;9163:1;9188:53;9233:7;9224:6;9213:9;9209:22;9188:53;:::i;:::-;9178:63;;9134:117;9290:2;9316:53;9361:7;9352:6;9341:9;9337:22;9316:53;:::i;:::-;9306:63;;9261:118;9418:2;9444:53;9489:7;9480:6;9469:9;9465:22;9444:53;:::i;:::-;9434:63;;9389:118;9546:2;9572:53;9617:7;9608:6;9597:9;9593:22;9572:53;:::i;:::-;9562:63;;9517:118;8877:765;;;;;;;:::o;9648:180::-;9696:77;9693:1;9686:88;9793:4;9790:1;9783:15;9817:4;9814:1;9807:15;9834:320;9878:6;9915:1;9909:4;9905:12;9895:22;;9962:1;9956:4;9952:12;9983:18;9973:81;;10039:4;10031:6;10027:17;10017:27;;9973:81;10101:2;10093:6;10090:14;10070:18;10067:38;10064:84;;10120:18;;:::i;:::-;10064:84;9885:269;9834:320;;;:::o;10160:182::-;10300:34;10296:1;10288:6;10284:14;10277:58;10160:182;:::o;10348:366::-;10490:3;10511:67;10575:2;10570:3;10511:67;:::i;:::-;10504:74;;10587:93;10676:3;10587:93;:::i;:::-;10705:2;10700:3;10696:12;10689:19;;10348:366;;;:::o;10720:419::-;10886:4;10924:2;10913:9;10909:18;10901:26;;10973:9;10967:4;10963:20;10959:1;10948:9;10944:17;10937:47;11001:131;11127:4;11001:131;:::i;:::-;10993:139;;10720:419;;;:::o;11145:180::-;11193:77;11190:1;11183:88;11290:4;11287:1;11280:15;11314:4;11311:1;11304:15;11331:410;11371:7;11394:20;11412:1;11394:20;:::i;:::-;11389:25;;11428:20;11446:1;11428:20;:::i;:::-;11423:25;;11483:1;11480;11476:9;11505:30;11523:11;11505:30;:::i;:::-;11494:41;;11684:1;11675:7;11671:15;11668:1;11665:22;11645:1;11638:9;11618:83;11595:139;;11714:18;;:::i;:::-;11595:139;11379:362;11331:410;;;;:::o;11747:180::-;11795:77;11792:1;11785:88;11892:4;11889:1;11882:15;11916:4;11913:1;11906:15;11933:185;11973:1;11990:20;12008:1;11990:20;:::i;:::-;11985:25;;12024:20;12042:1;12024:20;:::i;:::-;12019:25;;12063:1;12053:35;;12068:18;;:::i;:::-;12053:35;12110:1;12107;12103:9;12098:14;;11933:185;;;;:::o;12124:234::-;12264:34;12260:1;12252:6;12248:14;12241:58;12333:17;12328:2;12320:6;12316:15;12309:42;12124:234;:::o;12364:366::-;12506:3;12527:67;12591:2;12586:3;12527:67;:::i;:::-;12520:74;;12603:93;12692:3;12603:93;:::i;:::-;12721:2;12716:3;12712:12;12705:19;;12364:366;;;:::o;12736:419::-;12902:4;12940:2;12929:9;12925:18;12917:26;;12989:9;12983:4;12979:20;12975:1;12964:9;12960:17;12953:47;13017:131;13143:4;13017:131;:::i;:::-;13009:139;;12736:419;;;:::o;13161:191::-;13201:3;13220:20;13238:1;13220:20;:::i;:::-;13215:25;;13254:20;13272:1;13254:20;:::i;:::-;13249:25;;13297:1;13294;13290:9;13283:16;;13318:3;13315:1;13312:10;13309:36;;;13325:18;;:::i;:::-;13309:36;13161:191;;;;:::o;13358:178::-;13498:30;13494:1;13486:6;13482:14;13475:54;13358:178;:::o;13542:366::-;13684:3;13705:67;13769:2;13764:3;13705:67;:::i;:::-;13698:74;;13781:93;13870:3;13781:93;:::i;:::-;13899:2;13894:3;13890:12;13883:19;;13542:366;;;:::o;13914:419::-;14080:4;14118:2;14107:9;14103:18;14095:26;;14167:9;14161:4;14157:20;14153:1;14142:9;14138:17;14131:47;14195:131;14321:4;14195:131;:::i;:::-;14187:139;;13914:419;;;:::o;14339:179::-;14479:31;14475:1;14467:6;14463:14;14456:55;14339:179;:::o;14524:366::-;14666:3;14687:67;14751:2;14746:3;14687:67;:::i;:::-;14680:74;;14763:93;14852:3;14763:93;:::i;:::-;14881:2;14876:3;14872:12;14865:19;;14524:366;;;:::o;14896:419::-;15062:4;15100:2;15089:9;15085:18;15077:26;;15149:9;15143:4;15139:20;15135:1;15124:9;15120:17;15113:47;15177:131;15303:4;15177:131;:::i;:::-;15169:139;;14896:419;;;:::o;15321:244::-;15461:34;15457:1;15449:6;15445:14;15438:58;15530:27;15525:2;15517:6;15513:15;15506:52;15321:244;:::o;15571:366::-;15713:3;15734:67;15798:2;15793:3;15734:67;:::i;:::-;15727:74;;15810:93;15899:3;15810:93;:::i;:::-;15928:2;15923:3;15919:12;15912:19;;15571:366;;;:::o;15943:419::-;16109:4;16147:2;16136:9;16132:18;16124:26;;16196:9;16190:4;16186:20;16182:1;16171:9;16167:17;16160:47;16224:131;16350:4;16224:131;:::i;:::-;16216:139;;15943:419;;;:::o;16368:223::-;16508:34;16504:1;16496:6;16492:14;16485:58;16577:6;16572:2;16564:6;16560:15;16553:31;16368:223;:::o;16597:366::-;16739:3;16760:67;16824:2;16819:3;16760:67;:::i;:::-;16753:74;;16836:93;16925:3;16836:93;:::i;:::-;16954:2;16949:3;16945:12;16938:19;;16597:366;;;:::o;16969:419::-;17135:4;17173:2;17162:9;17158:18;17150:26;;17222:9;17216:4;17212:20;17208:1;17197:9;17193:17;17186:47;17250:131;17376:4;17250:131;:::i;:::-;17242:139;;16969:419;;;:::o;17394:240::-;17534:34;17530:1;17522:6;17518:14;17511:58;17603:23;17598:2;17590:6;17586:15;17579:48;17394:240;:::o;17640:366::-;17782:3;17803:67;17867:2;17862:3;17803:67;:::i;:::-;17796:74;;17879:93;17968:3;17879:93;:::i;:::-;17997:2;17992:3;17988:12;17981:19;;17640:366;;;:::o;18012:419::-;18178:4;18216:2;18205:9;18201:18;18193:26;;18265:9;18259:4;18255:20;18251:1;18240:9;18236:17;18229:47;18293:131;18419:4;18293:131;:::i;:::-;18285:139;;18012:419;;;:::o;18437:239::-;18577:34;18573:1;18565:6;18561:14;18554:58;18646:22;18641:2;18633:6;18629:15;18622:47;18437:239;:::o;18682:366::-;18824:3;18845:67;18909:2;18904:3;18845:67;:::i;:::-;18838:74;;18921:93;19010:3;18921:93;:::i;:::-;19039:2;19034:3;19030:12;19023:19;;18682:366;;;:::o;19054:419::-;19220:4;19258:2;19247:9;19243:18;19235:26;;19307:9;19301:4;19297:20;19293:1;19282:9;19278:17;19271:47;19335:131;19461:4;19335:131;:::i;:::-;19327:139;;19054:419;;;:::o;19479:225::-;19619:34;19615:1;19607:6;19603:14;19596:58;19688:8;19683:2;19675:6;19671:15;19664:33;19479:225;:::o;19710:366::-;19852:3;19873:67;19937:2;19932:3;19873:67;:::i;:::-;19866:74;;19949:93;20038:3;19949:93;:::i;:::-;20067:2;20062:3;20058:12;20051:19;;19710:366;;;:::o;20082:419::-;20248:4;20286:2;20275:9;20271:18;20263:26;;20335:9;20329:4;20325:20;20321:1;20310:9;20306:17;20299:47;20363:131;20489:4;20363:131;:::i;:::-;20355:139;;20082:419;;;:::o;20507:223::-;20647:34;20643:1;20635:6;20631:14;20624:58;20716:6;20711:2;20703:6;20699:15;20692:31;20507:223;:::o;20736:366::-;20878:3;20899:67;20963:2;20958:3;20899:67;:::i;:::-;20892:74;;20975:93;21064:3;20975:93;:::i;:::-;21093:2;21088:3;21084:12;21077:19;;20736:366;;;:::o;21108:419::-;21274:4;21312:2;21301:9;21297:18;21289:26;;21361:9;21355:4;21351:20;21347:1;21336:9;21332:17;21325:47;21389:131;21515:4;21389:131;:::i;:::-;21381:139;;21108:419;;;:::o;21533:221::-;21673:34;21669:1;21661:6;21657:14;21650:58;21742:4;21737:2;21729:6;21725:15;21718:29;21533:221;:::o;21760:366::-;21902:3;21923:67;21987:2;21982:3;21923:67;:::i;:::-;21916:74;;21999:93;22088:3;21999:93;:::i;:::-;22117:2;22112:3;22108:12;22101:19;;21760:366;;;:::o;22132:419::-;22298:4;22336:2;22325:9;22321:18;22313:26;;22385:9;22379:4;22375:20;22371:1;22360:9;22356:17;22349:47;22413:131;22539:4;22413:131;:::i;:::-;22405:139;;22132:419;;;:::o;22557:224::-;22697:34;22693:1;22685:6;22681:14;22674:58;22766:7;22761:2;22753:6;22749:15;22742:32;22557:224;:::o;22787:366::-;22929:3;22950:67;23014:2;23009:3;22950:67;:::i;:::-;22943:74;;23026:93;23115:3;23026:93;:::i;:::-;23144:2;23139:3;23135:12;23128:19;;22787:366;;;:::o;23159:419::-;23325:4;23363:2;23352:9;23348:18;23340:26;;23412:9;23406:4;23402:20;23398:1;23387:9;23383:17;23376:47;23440:131;23566:4;23440:131;:::i;:::-;23432:139;;23159:419;;;:::o;23584:222::-;23724:34;23720:1;23712:6;23708:14;23701:58;23793:5;23788:2;23780:6;23776:15;23769:30;23584:222;:::o;23812:366::-;23954:3;23975:67;24039:2;24034:3;23975:67;:::i;:::-;23968:74;;24051:93;24140:3;24051:93;:::i;:::-;24169:2;24164:3;24160:12;24153:19;;23812:366;;;:::o;24184:419::-;24350:4;24388:2;24377:9;24373:18;24365:26;;24437:9;24431:4;24427:20;24423:1;24412:9;24408:17;24401:47;24465:131;24591:4;24465:131;:::i;:::-;24457:139;;24184:419;;;:::o;24609:236::-;24749:34;24745:1;24737:6;24733:14;24726:58;24818:19;24813:2;24805:6;24801:15;24794:44;24609:236;:::o;24851:366::-;24993:3;25014:67;25078:2;25073:3;25014:67;:::i;:::-;25007:74;;25090:93;25179:3;25090:93;:::i;:::-;25208:2;25203:3;25199:12;25192:19;;24851:366;;;:::o;25223:419::-;25389:4;25427:2;25416:9;25412:18;25404:26;;25476:9;25470:4;25466:20;25462:1;25451:9;25447:17;25440:47;25504:131;25630:4;25504:131;:::i;:::-;25496:139;;25223:419;;;:::o;25648:172::-;25788:24;25784:1;25776:6;25772:14;25765:48;25648:172;:::o;25826:366::-;25968:3;25989:67;26053:2;26048:3;25989:67;:::i;:::-;25982:74;;26065:93;26154:3;26065:93;:::i;:::-;26183:2;26178:3;26174:12;26167:19;;25826:366;;;:::o;26198:419::-;26364:4;26402:2;26391:9;26387:18;26379:26;;26451:9;26445:4;26441:20;26437:1;26426:9;26422:17;26415:47;26479:131;26605:4;26479:131;:::i;:::-;26471:139;;26198:419;;;:::o;26623:297::-;26763:34;26759:1;26751:6;26747:14;26740:58;26832:34;26827:2;26819:6;26815:15;26808:59;26901:11;26896:2;26888:6;26884:15;26877:36;26623:297;:::o;26926:366::-;27068:3;27089:67;27153:2;27148:3;27089:67;:::i;:::-;27082:74;;27165:93;27254:3;27165:93;:::i;:::-;27283:2;27278:3;27274:12;27267:19;;26926:366;;;:::o;27298:419::-;27464:4;27502:2;27491:9;27487:18;27479:26;;27551:9;27545:4;27541:20;27537:1;27526:9;27522:17;27515:47;27579:131;27705:4;27579:131;:::i;:::-;27571:139;;27298:419;;;:::o;27723:240::-;27863:34;27859:1;27851:6;27847:14;27840:58;27932:23;27927:2;27919:6;27915:15;27908:48;27723:240;:::o;27969:366::-;28111:3;28132:67;28196:2;28191:3;28132:67;:::i;:::-;28125:74;;28208:93;28297:3;28208:93;:::i;:::-;28326:2;28321:3;28317:12;28310:19;;27969:366;;;:::o;28341:419::-;28507:4;28545:2;28534:9;28530:18;28522:26;;28594:9;28588:4;28584:20;28580:1;28569:9;28565:17;28558:47;28622:131;28748:4;28622:131;:::i;:::-;28614:139;;28341:419;;;:::o;28766:169::-;28906:21;28902:1;28894:6;28890:14;28883:45;28766:169;:::o;28941:366::-;29083:3;29104:67;29168:2;29163:3;29104:67;:::i;:::-;29097:74;;29180:93;29269:3;29180:93;:::i;:::-;29298:2;29293:3;29289:12;29282:19;;28941:366;;;:::o;29313:419::-;29479:4;29517:2;29506:9;29502:18;29494:26;;29566:9;29560:4;29556:20;29552:1;29541:9;29537:17;29530:47;29594:131;29720:4;29594:131;:::i;:::-;29586:139;;29313:419;;;:::o;29738:241::-;29878:34;29874:1;29866:6;29862:14;29855:58;29947:24;29942:2;29934:6;29930:15;29923:49;29738:241;:::o;29985:366::-;30127:3;30148:67;30212:2;30207:3;30148:67;:::i;:::-;30141:74;;30224:93;30313:3;30224:93;:::i;:::-;30342:2;30337:3;30333:12;30326:19;;29985:366;;;:::o;30357:419::-;30523:4;30561:2;30550:9;30546:18;30538:26;;30610:9;30604:4;30600:20;30596:1;30585:9;30581:17;30574:47;30638:131;30764:4;30638:131;:::i;:::-;30630:139;;30357:419;;;:::o;30782:194::-;30822:4;30842:20;30860:1;30842:20;:::i;:::-;30837:25;;30876:20;30894:1;30876:20;:::i;:::-;30871:25;;30920:1;30917;30913:9;30905:17;;30944:1;30938:4;30935:11;30932:37;;;30949:18;;:::i;:::-;30932:37;30782:194;;;;:::o;30982:177::-;31122:29;31118:1;31110:6;31106:14;31099:53;30982:177;:::o;31165:366::-;31307:3;31328:67;31392:2;31387:3;31328:67;:::i;:::-;31321:74;;31404:93;31493:3;31404:93;:::i;:::-;31522:2;31517:3;31513:12;31506:19;;31165:366;;;:::o;31537:419::-;31703:4;31741:2;31730:9;31726:18;31718:26;;31790:9;31784:4;31780:20;31776:1;31765:9;31761:17;31754:47;31818:131;31944:4;31818:131;:::i;:::-;31810:139;;31537:419;;;:::o;31962:442::-;32111:4;32149:2;32138:9;32134:18;32126:26;;32162:71;32230:1;32219:9;32215:17;32206:6;32162:71;:::i;:::-;32243:72;32311:2;32300:9;32296:18;32287:6;32243:72;:::i;:::-;32325;32393:2;32382:9;32378:18;32369:6;32325:72;:::i;:::-;31962:442;;;;;;:::o;32410:147::-;32511:11;32548:3;32533:18;;32410:147;;;;:::o;32563:114::-;;:::o;32683:398::-;32842:3;32863:83;32944:1;32939:3;32863:83;:::i;:::-;32856:90;;32955:93;33044:3;32955:93;:::i;:::-;33073:1;33068:3;33064:11;33057:18;;32683:398;;;:::o;33087:379::-;33271:3;33293:147;33436:3;33293:147;:::i;:::-;33286:154;;33457:3;33450:10;;33087:379;;;:::o;33472:220::-;33612:34;33608:1;33600:6;33596:14;33589:58;33681:3;33676:2;33668:6;33664:15;33657:28;33472:220;:::o;33698:366::-;33840:3;33861:67;33925:2;33920:3;33861:67;:::i;:::-;33854:74;;33937:93;34026:3;33937:93;:::i;:::-;34055:2;34050:3;34046:12;34039:19;;33698:366;;;:::o;34070:419::-;34236:4;34274:2;34263:9;34259:18;34251:26;;34323:9;34317:4;34313:20;34309:1;34298:9;34294:17;34287:47;34351:131;34477:4;34351:131;:::i;:::-;34343:139;;34070:419;;;:::o;34495:180::-;34543:77;34540:1;34533:88;34640:4;34637:1;34630:15;34664:4;34661:1;34654:15;34681:180;34729:77;34726:1;34719:88;34826:4;34823:1;34816:15;34850:4;34847:1;34840:15;34867:143;34924:5;34955:6;34949:13;34940:22;;34971:33;34998:5;34971:33;:::i;:::-;34867:143;;;;:::o;35016:351::-;35086:6;35135:2;35123:9;35114:7;35110:23;35106:32;35103:119;;;35141:79;;:::i;:::-;35103:119;35261:1;35286:64;35342:7;35333:6;35322:9;35318:22;35286:64;:::i;:::-;35276:74;;35232:128;35016:351;;;;:::o;35373:85::-;35418:7;35447:5;35436:16;;35373:85;;;:::o;35464:158::-;35522:9;35555:61;35573:42;35582:32;35608:5;35582:32;:::i;:::-;35573:42;:::i;:::-;35555:61;:::i;:::-;35542:74;;35464:158;;;:::o;35628:147::-;35723:45;35762:5;35723:45;:::i;:::-;35718:3;35711:58;35628:147;;:::o;35781:114::-;35848:6;35882:5;35876:12;35866:22;;35781:114;;;:::o;35901:184::-;36000:11;36034:6;36029:3;36022:19;36074:4;36069:3;36065:14;36050:29;;35901:184;;;;:::o;36091:132::-;36158:4;36181:3;36173:11;;36211:4;36206:3;36202:14;36194:22;;36091:132;;;:::o;36229:108::-;36306:24;36324:5;36306:24;:::i;:::-;36301:3;36294:37;36229:108;;:::o;36343:179::-;36412:10;36433:46;36475:3;36467:6;36433:46;:::i;:::-;36511:4;36506:3;36502:14;36488:28;;36343:179;;;;:::o;36528:113::-;36598:4;36630;36625:3;36621:14;36613:22;;36528:113;;;:::o;36677:732::-;36796:3;36825:54;36873:5;36825:54;:::i;:::-;36895:86;36974:6;36969:3;36895:86;:::i;:::-;36888:93;;37005:56;37055:5;37005:56;:::i;:::-;37084:7;37115:1;37100:284;37125:6;37122:1;37119:13;37100:284;;;37201:6;37195:13;37228:63;37287:3;37272:13;37228:63;:::i;:::-;37221:70;;37314:60;37367:6;37314:60;:::i;:::-;37304:70;;37160:224;37147:1;37144;37140:9;37135:14;;37100:284;;;37104:14;37400:3;37393:10;;36801:608;;;36677:732;;;;:::o;37415:831::-;37678:4;37716:3;37705:9;37701:19;37693:27;;37730:71;37798:1;37787:9;37783:17;37774:6;37730:71;:::i;:::-;37811:80;37887:2;37876:9;37872:18;37863:6;37811:80;:::i;:::-;37938:9;37932:4;37928:20;37923:2;37912:9;37908:18;37901:48;37966:108;38069:4;38060:6;37966:108;:::i;:::-;37958:116;;38084:72;38152:2;38141:9;38137:18;38128:6;38084:72;:::i;:::-;38166:73;38234:3;38223:9;38219:19;38210:6;38166:73;:::i;:::-;37415:831;;;;;;;;:::o;38252:807::-;38501:4;38539:3;38528:9;38524:19;38516:27;;38553:71;38621:1;38610:9;38606:17;38597:6;38553:71;:::i;:::-;38634:72;38702:2;38691:9;38687:18;38678:6;38634:72;:::i;:::-;38716:80;38792:2;38781:9;38777:18;38768:6;38716:80;:::i;:::-;38806;38882:2;38871:9;38867:18;38858:6;38806:80;:::i;:::-;38896:73;38964:3;38953:9;38949:19;38940:6;38896:73;:::i;:::-;38979;39047:3;39036:9;39032:19;39023:6;38979:73;:::i;:::-;38252:807;;;;;;;;;:::o;39065:143::-;39122:5;39153:6;39147:13;39138:22;;39169:33;39196:5;39169:33;:::i;:::-;39065:143;;;;:::o;39214:663::-;39302:6;39310;39318;39367:2;39355:9;39346:7;39342:23;39338:32;39335:119;;;39373:79;;:::i;:::-;39335:119;39493:1;39518:64;39574:7;39565:6;39554:9;39550:22;39518:64;:::i;:::-;39508:74;;39464:128;39631:2;39657:64;39713:7;39704:6;39693:9;39689:22;39657:64;:::i;:::-;39647:74;;39602:129;39770:2;39796:64;39852:7;39843:6;39832:9;39828:22;39796:64;:::i;:::-;39786:74;;39741:129;39214:663;;;;;:::o
Swarm Source
ipfs://1bc1c85158a4e85875f0353f8c39591f50657d82333e14ce7c26ac16ecca9c1e
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.