Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
21,000,000 MIB
Holders
124
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
14,230.748448533512552348 MIBValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MakeItBack
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-16 */ // // // MAKE IT BACK // ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ // ███╗░░░███╗░░██╗░░██████╗░░░ // ████╗░████║░░██║░░██║░░██║░░ // ██╔████╔██║░░██║░░██████║░░░ // ██║╚██╔╝██║░░██║░░██║░░██║░░ // ██║░╚═╝░██║░░██║░░██████║░░░ // ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.9; 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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract MakeItBack is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; // address that will receive the auto added LP tokens address private _deployer; bool private swapping; address public marketingWallet; address public devWallet; address public prizepoolWallet; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public tradingActive = false; bool public swapEnabled = false; // Blacklist Map mapping (address => bool) private _blacklist; uint256 public buyTotalFees; uint256 public buyPrizepoolFee; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellPrizepoolFee; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForPrizepool; 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 _isExcludedMaxBuyTransactionAmount; mapping (address => bool) public _isExcludedMaxSellTransactionAmount; // 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 SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("MAKE IT BACK", "MIB") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxBuyTransaction(address(_uniswapV2Router), true); excludeFromMaxSellTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxBuyTransaction(address(uniswapV2Pair), true); excludeFromMaxSellTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); // buy fee 3.3 % uint256 _buyMarketingFee = 3; uint256 _buyLiquidityFee = 8; uint256 _buyDevFee = 3; uint256 _buyPrizepoolFee = 19; // sell fee 8.8% uint256 _sellMarketingFee = 7; uint256 _sellLiquidityFee = 22; uint256 _sellDevFee = 8; uint256 _sellPrizepoolFee = 51; uint256 totalSupply = 21 * 1e6 * 1e18; maxWallet = totalSupply * 1 / 100; // Max Wallet 1% swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet buyPrizepoolFee = _buyPrizepoolFee; buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyPrizepoolFee + buyMarketingFee + buyLiquidityFee + buyDevFee; sellPrizepoolFee = _sellPrizepoolFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellPrizepoolFee + sellMarketingFee + sellLiquidityFee + sellDevFee; _deployer = address(owner()); // for liq tokens prizepoolWallet = address(0x9b122828B50E66b5097A9EbBae77DD2D4850dC56); // set as prizepool wallet marketingWallet = address(0x1E5B901e238611a96FD178FfCDCC08046E6C238d); // set as marketing wallet devWallet = address(0x2eCDd766bD40e2F53604C8E48927e429Bef1c419); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxBuyTransaction(owner(), true); excludeFromMaxBuyTransaction(address(this), true); excludeFromMaxBuyTransaction(address(0xdead), true); excludeFromMaxSellTransaction(owner(), true); excludeFromMaxSellTransaction(address(this), true); excludeFromMaxSellTransaction(address(0xdead), true); // blacklist Anysniper CA _blacklist[address(0x0Ff5F706A99BE785B35dF6788ED698290ab56ac0)] = 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; } function claimTokens () external onlyOwner { // make sure we capture all ETH that may or may not be sent to this contract payable(devWallet).transfer(address(this).balance); } function claimOtherTokens(IERC20 tokenAddress, address walletaddress) external onlyOwner() { tokenAddress.transfer(walletaddress, tokenAddress.balanceOf(address(this))); } function clearStuckBalance (address payable walletaddress) external onlyOwner() { walletaddress.transfer(address(this).balance); } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 4 / 10000, "Swap amount cannot be lower than 0.01% total supply."); require(newAmount <= totalSupply() * 20 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function excludeFromMaxBuyTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxBuyTransactionAmount[updAds] = isEx; } function excludeFromMaxSellTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxSellTransactionAmount[updAds] = isEx; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function blacklistAccount (address account, bool isBlacklisted) public onlyOwner { // Not allow to blacklist Contract, Token Pair or UniSwap Router if (account != address(this) && account != uniswapV2Pair && account != address(uniswapV2Router)) { _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); } 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 ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxBuyTransactionAmount[to]) { require(amount + balanceOf(to) <= maxWallet + 2, "Max wallet exceeded"); } } // anti bot logic if (block.number <= (launchedAt + 1) && to != uniswapV2Pair && to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D) ) { _blacklist[to] = true; emit BoughtEarly(to); } 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; bool walletToWallet = !automatedMarketMakerPairs[to] && !automatedMarketMakerPairs[from]; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || walletToWallet) { 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(1000); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; tokensForPrizepool += fees * sellPrizepoolFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(1000); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; tokensForPrizepool += fees * buyPrizepoolFee / 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 _deployer, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev + tokensForPrizepool; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Half the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForPrizepool = ethBalance.mul(tokensForPrizepool).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev - ethForPrizepool; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; tokensForPrizepool = 0; (success,) = address(devWallet).call{value: ethForDev}(""); (success,) = address(marketingWallet).call{value: ethForMarketing}(""); (success,) = address(prizepoolWallet).call{value: ethForPrizepool}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[{"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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxBuyTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxSellTransactionAmount","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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyPrizepoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"excludeFromMaxBuyTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxSellTransaction","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":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"prizepoolWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellPrizepoolFee","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":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForPrizepool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600c81526020017f4d414b45204954204241434b00000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d494200000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000cc92919062000e2a565b508060049080519060200190620000e592919062000e2a565b5050506000620000fa620007f960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001c58160016200080160201b60201c565b620001d8816001620008fe60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025357600080fd5b505afa15801562000268573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028e919062000f44565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f157600080fd5b505afa15801562000306573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032c919062000f44565b6040518363ffffffff1660e01b81526004016200034b92919062000f87565b602060405180830381600087803b1580156200036657600080fd5b505af11580156200037b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a1919062000f44565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003e960a05160016200080160201b60201c565b620003fe60a0516001620008fe60201b60201c565b6200041360a0516001620009fb60201b60201c565b60006003905060006008905060006003905060006013905060006007905060006016905060006008905060006033905060006a115eec47f6cf7e350000009050606460018262000464919062000fed565b6200047091906200107d565b600b8190555061271060058262000488919062000fed565b6200049491906200107d565b600a8190555085600f81905550886010819055508760118190555086601281905550601254601154601054600f54620004ce9190620010b5565b620004da9190620010b5565b620004e69190620010b5565b600e8190555081601481905550846015819055508360168190555082601781905550601754601654601554601454620005209190620010b5565b6200052c9190620010b5565b620005389190620010b5565b6013819055506200054e62000a9c60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739b122828b50e66b5097a9ebbae77dd2d4850dc56600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731e5b901e238611a96fd178ffcdcc08046e6c238d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732ecdd766bd40e2f53604c8e48927e429bef1c419600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006af620006a162000a9c60201b60201c565b600162000ac660201b60201c565b620006c230600162000ac660201b60201c565b620006d761dead600162000ac660201b60201c565b620006f9620006eb62000a9c60201b60201c565b60016200080160201b60201c565b6200070c3060016200080160201b60201c565b6200072161dead60016200080160201b60201c565b620007436200073562000a9c60201b60201c565b6001620008fe60201b60201c565b62000756306001620008fe60201b60201c565b6200076b61dead6001620008fe60201b60201c565b6001600d6000730ff5f706a99be785b35df6788ed698290ab56ac073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007e9338262000c1360201b60201c565b5050505050505050505062001346565b600033905090565b62000811620007f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089a9062001173565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6200090e620007f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009979062001173565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000ad6620007f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000b68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b5f9062001173565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000c079190620011b2565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c7d906200121f565b60405180910390fd5b62000c9a6000838362000dc260201b60201c565b62000cb68160025462000dc760201b620021451790919060201c565b60028190555062000d14816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000dc760201b620021451790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000db6919062001252565b60405180910390a35050565b505050565b600080828462000dd89190620010b5565b90508381101562000e20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e1790620012bf565b60405180910390fd5b8091505092915050565b82805462000e389062001310565b90600052602060002090601f01602090048101928262000e5c576000855562000ea8565b82601f1062000e7757805160ff191683800117855562000ea8565b8280016001018555821562000ea8579182015b8281111562000ea757825182559160200191906001019062000e8a565b5b50905062000eb7919062000ebb565b5090565b5b8082111562000ed657600081600090555060010162000ebc565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f0c8262000edf565b9050919050565b62000f1e8162000eff565b811462000f2a57600080fd5b50565b60008151905062000f3e8162000f13565b92915050565b60006020828403121562000f5d5762000f5c62000eda565b5b600062000f6d8482850162000f2d565b91505092915050565b62000f818162000eff565b82525050565b600060408201905062000f9e600083018562000f76565b62000fad602083018462000f76565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ffa8262000fb4565b9150620010078362000fb4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001043576200104262000fbe565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200108a8262000fb4565b9150620010978362000fb4565b925082620010aa57620010a96200104e565b5b828204905092915050565b6000620010c28262000fb4565b9150620010cf8362000fb4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001107576200110662000fbe565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200115b60208362001112565b9150620011688262001123565b602082019050919050565b600060208201905081810360008301526200118e816200114c565b9050919050565b60008115159050919050565b620011ac8162001195565b82525050565b6000602082019050620011c96000830184620011a1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001207601f8362001112565b91506200121482620011cf565b602082019050919050565b600060208201905081810360008301526200123a81620011f8565b9050919050565b6200124c8162000fb4565b82525050565b600060208201905062001269600083018462001241565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620012a7601b8362001112565b9150620012b4826200126f565b602082019050919050565b60006020820190508181036000830152620012da8162001298565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200132957607f821691505b6020821081141562001340576200133f620012e1565b5b50919050565b60805160a051614e96620013ab60003960008181610e9801528181611403015281816119480152612878015260008181610cb701528181610ef0015281816138b8015281816139a8015281816139cf01528181613a6b0152613a920152614e966000f3fe6080604052600436106102cd5760003560e01c80638a8c523c11610175578063b62496f5116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610afd578063f398d30414610b26578063f637434214610b63578063f8b45b0514610b8e576102d4565b8063e2f4560514610a7c578063ee47749f14610aa7578063f11a24d314610ad2576102d4565b8063b62496f514610946578063bbc0c74214610983578063c0246668146109ae578063d257b34f146109d7578063d85ba06314610a14578063dd62ed3e14610a3f576102d4565b80639c3b4fdc1161012e5780639c3b4fdc146108225780639fccce321461084d578063a0d82dc514610878578063a457c2d7146108a3578063a9059cbb146108e0578063ac819f541461091d576102d4565b80638a8c523c146107365780638da5cb5b1461074d5780638ea5220f1461077857806392136913146107a357806395d89b41146107ce5780639a7a23d6146107f9576102d4565b806339509351116102345780636a486a8e116101ed578063715018a6116101c7578063715018a6146106a057806375f0a874146106b7578063764d72bf146106e25780637bce5a041461070b576102d4565b80636a486a8e1461060d5780636ddd17131461063857806370a0823114610663576102d4565b806339509351146105115780633ae7dc201461054e5780633ea3b5671461057757806348c54b9d146105a057806349bd5a5e146105b75780635d87421e146105e2576102d4565b806318160ddd1161028657806318160ddd146103ff5780631a8145bb1461042a5780631f3fed8f1461045557806323b872dd146104805780632d5a5d34146104bd578063313ce567146104e6576102d4565b806306c488a2146102d957806306fdde03146103045780630855f25d1461032f578063095ea7b31461036c578063143e2a8a146103a95780631694505e146103d4576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610bb9565b6040516102fb9190613c14565b60405180910390f35b34801561031057600080fd5b50610319610bdf565b6040516103269190613cc8565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613d1b565b610c71565b6040516103639190613d63565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e9190613db4565b610c91565b6040516103a09190613d63565b60405180910390f35b3480156103b557600080fd5b506103be610caf565b6040516103cb9190613e03565b60405180910390f35b3480156103e057600080fd5b506103e9610cb5565b6040516103f69190613e7d565b60405180910390f35b34801561040b57600080fd5b50610414610cd9565b6040516104219190613e03565b60405180910390f35b34801561043657600080fd5b5061043f610ce3565b60405161044c9190613e03565b60405180910390f35b34801561046157600080fd5b5061046a610ce9565b6040516104779190613e03565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190613e98565b610cef565b6040516104b49190613d63565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613f17565b610dc8565b005b3480156104f257600080fd5b506104fb610fa0565b6040516105089190613f73565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190613db4565b610fa9565b6040516105459190613d63565b60405180910390f35b34801561055a57600080fd5b5061057560048036038101906105709190613fcc565b61105c565b005b34801561058357600080fd5b5061059e60048036038101906105999190613f17565b61120d565b005b3480156105ac57600080fd5b506105b56112ff565b005b3480156105c357600080fd5b506105cc611401565b6040516105d99190613c14565b60405180910390f35b3480156105ee57600080fd5b506105f7611425565b6040516106049190613e03565b60405180910390f35b34801561061957600080fd5b5061062261142b565b60405161062f9190613e03565b60405180910390f35b34801561064457600080fd5b5061064d611431565b60405161065a9190613d63565b60405180910390f35b34801561066f57600080fd5b5061068a60048036038101906106859190613d1b565b611444565b6040516106979190613e03565b60405180910390f35b3480156106ac57600080fd5b506106b561148c565b005b3480156106c357600080fd5b506106cc6115e4565b6040516106d99190613c14565b60405180910390f35b3480156106ee57600080fd5b506107096004803603810190610704919061404a565b61160a565b005b34801561071757600080fd5b506107206116eb565b60405161072d9190613e03565b60405180910390f35b34801561074257600080fd5b5061074b6116f1565b005b34801561075957600080fd5b506107626117c7565b60405161076f9190613c14565b60405180910390f35b34801561078457600080fd5b5061078d6117f1565b60405161079a9190613c14565b60405180910390f35b3480156107af57600080fd5b506107b8611817565b6040516107c59190613e03565b60405180910390f35b3480156107da57600080fd5b506107e361181d565b6040516107f09190613cc8565b60405180910390f35b34801561080557600080fd5b50610820600480360381019061081b9190613f17565b6118af565b005b34801561082e57600080fd5b506108376119e3565b6040516108449190613e03565b60405180910390f35b34801561085957600080fd5b506108626119e9565b60405161086f9190613e03565b60405180910390f35b34801561088457600080fd5b5061088d6119ef565b60405161089a9190613e03565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c59190613db4565b6119f5565b6040516108d79190613d63565b60405180910390f35b3480156108ec57600080fd5b5061090760048036038101906109029190613db4565b611ac2565b6040516109149190613d63565b60405180910390f35b34801561092957600080fd5b50610944600480360381019061093f9190613f17565b611ae0565b005b34801561095257600080fd5b5061096d60048036038101906109689190613d1b565b611bd2565b60405161097a9190613d63565b60405180910390f35b34801561098f57600080fd5b50610998611bf1565b6040516109a59190613d63565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190613f17565b611c04565b005b3480156109e357600080fd5b506109fe60048036038101906109f99190614077565b611d44565b604051610a0b9190613d63565b60405180910390f35b348015610a2057600080fd5b50610a29611eb3565b604051610a369190613e03565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a6191906140a4565b611eb9565b604051610a739190613e03565b60405180910390f35b348015610a8857600080fd5b50610a91611f40565b604051610a9e9190613e03565b60405180910390f35b348015610ab357600080fd5b50610abc611f46565b604051610ac99190613e03565b60405180910390f35b348015610ade57600080fd5b50610ae7611f4c565b604051610af49190613e03565b60405180910390f35b348015610b0957600080fd5b50610b246004803603810190610b1f9190613d1b565b611f52565b005b348015610b3257600080fd5b50610b4d6004803603810190610b489190613d1b565b612119565b604051610b5a9190613d63565b60405180910390f35b348015610b6f57600080fd5b50610b78612139565b604051610b859190613e03565b60405180910390f35b348015610b9a57600080fd5b50610ba361213f565b604051610bb09190613e03565b60405180910390f35b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610bee90614113565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1a90614113565b8015610c675780601f10610c3c57610100808354040283529160200191610c67565b820191906000526020600020905b815481529060010190602001808311610c4a57829003601f168201915b5050505050905090565b601f6020528060005260406000206000915054906101000a900460ff1681565b6000610ca5610c9e6121a3565b84846121ab565b6001905092915050565b60145481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b601a5481565b60185481565b6000610cfc848484612376565b610dbd84610d086121a3565b610db885604051806060016040528060288152602001614e1460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d6e6121a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612faa9092919063ffffffff16565b6121ab565b600190509392505050565b610dd06121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690614191565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610ee757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015610f3f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15610f9c5780600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b60006012905090565b6000611052610fb66121a3565b8461104d8560016000610fc76121a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461214590919063ffffffff16565b6121ab565b6001905092915050565b6110646121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90614191565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111499190613c14565b60206040518083038186803b15801561116157600080fd5b505afa158015611175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119991906141c6565b6040518363ffffffff1660e01b81526004016111b69291906141f3565b602060405180830381600087803b1580156111d057600080fd5b505af11580156111e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112089190614231565b505050565b6112156121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90614191565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113076121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d90614191565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156113fe573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60195481565b60135481565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114946121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a90614191565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116126121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890614191565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156116e7573d6000803e3d6000fd5b5050565b60105481565b6116f96121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90614191565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff02191690831515021790555043601c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b60606004805461182c90614113565b80601f016020809104026020016040519081016040528092919081815260200182805461185890614113565b80156118a55780601f1061187a576101008083540402835291602001916118a5565b820191906000526020600020905b81548152906001019060200180831161188857829003601f168201915b5050505050905090565b6118b76121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90614191565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc906142d0565b60405180910390fd5b6119df828261300e565b5050565b60125481565b601b5481565b60175481565b6000611ab8611a026121a3565b84611ab385604051806060016040528060258152602001614e3c6025913960016000611a2c6121a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612faa9092919063ffffffff16565b6121ab565b6001905092915050565b6000611ad6611acf6121a3565b8484612376565b6001905092915050565b611ae86121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e90614191565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602080528060005260406000206000915054906101000a900460ff1681565b600c60009054906101000a900460ff1681565b611c0c6121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290614191565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d389190613d63565b60405180910390a25050565b6000611d4e6121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614191565b60405180910390fd5b6127106004611dea610cd9565b611df4919061431f565b611dfe91906143a8565b821015611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e379061444b565b60405180910390fd5b6103e86014611e4d610cd9565b611e57919061431f565b611e6191906143a8565b821115611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9a906144dd565b60405180910390fd5b81600a8190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600f5481565b60115481565b611f5a6121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe090614191565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612059576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120509061456f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b60165481565b600b5481565b6000808284612154919061458f565b905083811015612199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219090614631565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561221b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612212906146c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290614755565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123699190613e03565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dd906147e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90614879565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124fa5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125309061490b565b60405180910390fd5b60008114156125535761254e838360006130af565b612fa5565b61255b6117c7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125c957506125996117c7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126025750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561263c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126555750600660149054906101000a900460ff16155b1561285d57600c60009054906101000a900460ff1661274f57601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061270f5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61274e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274590614977565b60405180910390fd5b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127f25750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561285c576002600b54612806919061458f565b61280f83611444565b8261281a919061458f565b111561285b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612852906149e3565b60405180910390fd5b5b5b6001601c5461286c919061458f565b43111580156128c757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129135750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129b4576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a25b60006129bf30611444565b90506000600a5482101590508080156129e45750600c60019054906101000a900460ff165b80156129fd5750600660149054906101000a900460ff16155b8015612a535750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612aa95750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612aff5750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b43576001600660146101000a81548160ff021916908315150217905550612b27613344565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff161590506000602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bfe5750602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9050601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ca15750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612ca95750805b15612cb357600091505b60008215612f9457602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d1657506000601354115b15612e1757612d446103e8612d366013548961370590919063ffffffff16565b61378090919063ffffffff16565b905060135460165482612d57919061431f565b612d6191906143a8565b601a6000828254612d72919061458f565b9250508190555060135460175482612d8a919061431f565b612d9491906143a8565b601b6000828254612da5919061458f565b9250508190555060135460155482612dbd919061431f565b612dc791906143a8565b60186000828254612dd8919061458f565b9250508190555060135460145482612df0919061431f565b612dfa91906143a8565b60196000828254612e0b919061458f565b92505081905550612f70565b602060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e7257506000600e54115b15612f6f57612ea06103e8612e92600e548961370590919063ffffffff16565b61378090919063ffffffff16565b9050600e5460115482612eb3919061431f565b612ebd91906143a8565b601a6000828254612ece919061458f565b92505081905550600e5460125482612ee6919061431f565b612ef091906143a8565b601b6000828254612f01919061458f565b92505081905550600e5460105482612f19919061431f565b612f2391906143a8565b60186000828254612f34919061458f565b92505081905550600e54600f5482612f4c919061431f565b612f5691906143a8565b60196000828254612f67919061458f565b925050819055505b5b6000811115612f8557612f848830836130af565b5b8086612f919190614a03565b95505b612f9f8888886130af565b50505050505b505050565b6000838311158290612ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe99190613cc8565b60405180910390fd5b50600083856130019190614a03565b9050809150509392505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561311f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613116906147e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561318f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318690614879565b60405180910390fd5b61319a8383836137ca565b61320581604051806060016040528060268152602001614dee602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612faa9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613298816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461214590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133379190613e03565b60405180910390a3505050565b600061334f30611444565b90506000601954601b54601854601a54613369919061458f565b613373919061458f565b61337d919061458f565b905060008083148061338f5750600082145b1561339c57505050613703565b6014600a546133ab919061431f565b8311156133c4576014600a546133c1919061431f565b92505b6000600283601a54866133d7919061431f565b6133e191906143a8565b6133eb91906143a8565b9050600061340282866137cf90919063ffffffff16565b9050600047905061341282613819565b600061342782476137cf90919063ffffffff16565b90506000613452876134446018548561370590919063ffffffff16565b61378090919063ffffffff16565b9050600061347d8861346f601b548661370590919063ffffffff16565b61378090919063ffffffff16565b905060006134a88961349a6019548761370590919063ffffffff16565b61378090919063ffffffff16565b90506000818385876134ba9190614a03565b6134c49190614a03565b6134ce9190614a03565b90506000601a8190555060006018819055506000601b819055506000601981905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161353690614a68565b60006040518083038185875af1925050503d8060008114613573576040519150601f19603f3d011682016040523d82523d6000602084013e613578565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516135c490614a68565b60006040518083038185875af1925050503d8060008114613601576040519150601f19603f3d011682016040523d82523d6000602084013e613606565b606091505b505080995050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161365290614a68565b60006040518083038185875af1925050503d806000811461368f576040519150601f19603f3d011682016040523d82523d6000602084013e613694565b606091505b5050809950506000881180156136aa5750600081115b156136f7576136b98882613a65565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601a546040516136ee93929190614a7d565b60405180910390a15b50505050505050505050505b565b600080831415613718576000905061377a565b60008284613726919061431f565b905082848261373591906143a8565b14613775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376c90614b26565b60405180910390fd5b809150505b92915050565b60006137c283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b70565b905092915050565b505050565b600061381183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612faa565b905092915050565b6000600267ffffffffffffffff81111561383657613835614b46565b5b6040519080825280602002602001820160405280156138645781602001602082028036833780820191505090505b509050308160008151811061387c5761387b614b75565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561391c57600080fd5b505afa158015613930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139549190614bb9565b8160018151811061396857613967614b75565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139cd307f0000000000000000000000000000000000000000000000000000000000000000846121ab565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a2f959493929190614cdf565b600060405180830381600087803b158015613a4957600080fd5b505af1158015613a5d573d6000803e3d6000fd5b505050505050565b613a90307f0000000000000000000000000000000000000000000000000000000000000000846121ab565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b1796959493929190614d39565b6060604051808303818588803b158015613b3057600080fd5b505af1158015613b44573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b699190614d9a565b5050505050565b60008083118290613bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bae9190613cc8565b60405180910390fd5b5060008385613bc691906143a8565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bfe82613bd3565b9050919050565b613c0e81613bf3565b82525050565b6000602082019050613c296000830184613c05565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c69578082015181840152602081019050613c4e565b83811115613c78576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c9a82613c2f565b613ca48185613c3a565b9350613cb4818560208601613c4b565b613cbd81613c7e565b840191505092915050565b60006020820190508181036000830152613ce28184613c8f565b905092915050565b600080fd5b613cf881613bf3565b8114613d0357600080fd5b50565b600081359050613d1581613cef565b92915050565b600060208284031215613d3157613d30613cea565b5b6000613d3f84828501613d06565b91505092915050565b60008115159050919050565b613d5d81613d48565b82525050565b6000602082019050613d786000830184613d54565b92915050565b6000819050919050565b613d9181613d7e565b8114613d9c57600080fd5b50565b600081359050613dae81613d88565b92915050565b60008060408385031215613dcb57613dca613cea565b5b6000613dd985828601613d06565b9250506020613dea85828601613d9f565b9150509250929050565b613dfd81613d7e565b82525050565b6000602082019050613e186000830184613df4565b92915050565b6000819050919050565b6000613e43613e3e613e3984613bd3565b613e1e565b613bd3565b9050919050565b6000613e5582613e28565b9050919050565b6000613e6782613e4a565b9050919050565b613e7781613e5c565b82525050565b6000602082019050613e926000830184613e6e565b92915050565b600080600060608486031215613eb157613eb0613cea565b5b6000613ebf86828701613d06565b9350506020613ed086828701613d06565b9250506040613ee186828701613d9f565b9150509250925092565b613ef481613d48565b8114613eff57600080fd5b50565b600081359050613f1181613eeb565b92915050565b60008060408385031215613f2e57613f2d613cea565b5b6000613f3c85828601613d06565b9250506020613f4d85828601613f02565b9150509250929050565b600060ff82169050919050565b613f6d81613f57565b82525050565b6000602082019050613f886000830184613f64565b92915050565b6000613f9982613bf3565b9050919050565b613fa981613f8e565b8114613fb457600080fd5b50565b600081359050613fc681613fa0565b92915050565b60008060408385031215613fe357613fe2613cea565b5b6000613ff185828601613fb7565b925050602061400285828601613d06565b9150509250929050565b600061401782613bd3565b9050919050565b6140278161400c565b811461403257600080fd5b50565b6000813590506140448161401e565b92915050565b6000602082840312156140605761405f613cea565b5b600061406e84828501614035565b91505092915050565b60006020828403121561408d5761408c613cea565b5b600061409b84828501613d9f565b91505092915050565b600080604083850312156140bb576140ba613cea565b5b60006140c985828601613d06565b92505060206140da85828601613d06565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061412b57607f821691505b6020821081141561413f5761413e6140e4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061417b602083613c3a565b915061418682614145565b602082019050919050565b600060208201905081810360008301526141aa8161416e565b9050919050565b6000815190506141c081613d88565b92915050565b6000602082840312156141dc576141db613cea565b5b60006141ea848285016141b1565b91505092915050565b60006040820190506142086000830185613c05565b6142156020830184613df4565b9392505050565b60008151905061422b81613eeb565b92915050565b60006020828403121561424757614246613cea565b5b60006142558482850161421c565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142ba603983613c3a565b91506142c58261425e565b604082019050919050565b600060208201905081810360008301526142e9816142ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061432a82613d7e565b915061433583613d7e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561436e5761436d6142f0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143b382613d7e565b91506143be83613d7e565b9250826143ce576143cd614379565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614435603483613c3a565b9150614440826143d9565b604082019050919050565b6000602082019050818103600083015261446481614428565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006144c7603483613c3a565b91506144d28261446b565b604082019050919050565b600060208201905081810360008301526144f6816144ba565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614559602683613c3a565b9150614564826144fd565b604082019050919050565b600060208201905081810360008301526145888161454c565b9050919050565b600061459a82613d7e565b91506145a583613d7e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145da576145d96142f0565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061461b601b83613c3a565b9150614626826145e5565b602082019050919050565b6000602082019050818103600083015261464a8161460e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146ad602483613c3a565b91506146b882614651565b604082019050919050565b600060208201905081810360008301526146dc816146a0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061473f602283613c3a565b915061474a826146e3565b604082019050919050565b6000602082019050818103600083015261476e81614732565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147d1602583613c3a565b91506147dc82614775565b604082019050919050565b60006020820190508181036000830152614800816147c4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614863602383613c3a565b915061486e82614807565b604082019050919050565b6000602082019050818103600083015261489281614856565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006148f5603183613c3a565b915061490082614899565b604082019050919050565b60006020820190508181036000830152614924816148e8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614961601683613c3a565b915061496c8261492b565b602082019050919050565b6000602082019050818103600083015261499081614954565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149cd601383613c3a565b91506149d882614997565b602082019050919050565b600060208201905081810360008301526149fc816149c0565b9050919050565b6000614a0e82613d7e565b9150614a1983613d7e565b925082821015614a2c57614a2b6142f0565b5b828203905092915050565b600081905092915050565b50565b6000614a52600083614a37565b9150614a5d82614a42565b600082019050919050565b6000614a7382614a45565b9150819050919050565b6000606082019050614a926000830186613df4565b614a9f6020830185613df4565b614aac6040830184613df4565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b10602183613c3a565b9150614b1b82614ab4565b604082019050919050565b60006020820190508181036000830152614b3f81614b03565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614bb381613cef565b92915050565b600060208284031215614bcf57614bce613cea565b5b6000614bdd84828501614ba4565b91505092915050565b6000819050919050565b6000614c0b614c06614c0184614be6565b613e1e565b613d7e565b9050919050565b614c1b81614bf0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c5681613bf3565b82525050565b6000614c688383614c4d565b60208301905092915050565b6000602082019050919050565b6000614c8c82614c21565b614c968185614c2c565b9350614ca183614c3d565b8060005b83811015614cd2578151614cb98882614c5c565b9750614cc483614c74565b925050600181019050614ca5565b5085935050505092915050565b600060a082019050614cf46000830188613df4565b614d016020830187614c12565b8181036040830152614d138186614c81565b9050614d226060830185613c05565b614d2f6080830184613df4565b9695505050505050565b600060c082019050614d4e6000830189613c05565b614d5b6020830188613df4565b614d686040830187614c12565b614d756060830186614c12565b614d826080830185613c05565b614d8f60a0830184613df4565b979650505050505050565b600080600060608486031215614db357614db2613cea565b5b6000614dc1868287016141b1565b9350506020614dd2868287016141b1565b9250506040614de3868287016141b1565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d88fc0df3ec67f4c79c82e577c290ce2575e83e7f4292c78d85093f94e9d6fb264736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102cd5760003560e01c80638a8c523c11610175578063b62496f5116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610afd578063f398d30414610b26578063f637434214610b63578063f8b45b0514610b8e576102d4565b8063e2f4560514610a7c578063ee47749f14610aa7578063f11a24d314610ad2576102d4565b8063b62496f514610946578063bbc0c74214610983578063c0246668146109ae578063d257b34f146109d7578063d85ba06314610a14578063dd62ed3e14610a3f576102d4565b80639c3b4fdc1161012e5780639c3b4fdc146108225780639fccce321461084d578063a0d82dc514610878578063a457c2d7146108a3578063a9059cbb146108e0578063ac819f541461091d576102d4565b80638a8c523c146107365780638da5cb5b1461074d5780638ea5220f1461077857806392136913146107a357806395d89b41146107ce5780639a7a23d6146107f9576102d4565b806339509351116102345780636a486a8e116101ed578063715018a6116101c7578063715018a6146106a057806375f0a874146106b7578063764d72bf146106e25780637bce5a041461070b576102d4565b80636a486a8e1461060d5780636ddd17131461063857806370a0823114610663576102d4565b806339509351146105115780633ae7dc201461054e5780633ea3b5671461057757806348c54b9d146105a057806349bd5a5e146105b75780635d87421e146105e2576102d4565b806318160ddd1161028657806318160ddd146103ff5780631a8145bb1461042a5780631f3fed8f1461045557806323b872dd146104805780632d5a5d34146104bd578063313ce567146104e6576102d4565b806306c488a2146102d957806306fdde03146103045780630855f25d1461032f578063095ea7b31461036c578063143e2a8a146103a95780631694505e146103d4576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610bb9565b6040516102fb9190613c14565b60405180910390f35b34801561031057600080fd5b50610319610bdf565b6040516103269190613cc8565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613d1b565b610c71565b6040516103639190613d63565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e9190613db4565b610c91565b6040516103a09190613d63565b60405180910390f35b3480156103b557600080fd5b506103be610caf565b6040516103cb9190613e03565b60405180910390f35b3480156103e057600080fd5b506103e9610cb5565b6040516103f69190613e7d565b60405180910390f35b34801561040b57600080fd5b50610414610cd9565b6040516104219190613e03565b60405180910390f35b34801561043657600080fd5b5061043f610ce3565b60405161044c9190613e03565b60405180910390f35b34801561046157600080fd5b5061046a610ce9565b6040516104779190613e03565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190613e98565b610cef565b6040516104b49190613d63565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613f17565b610dc8565b005b3480156104f257600080fd5b506104fb610fa0565b6040516105089190613f73565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190613db4565b610fa9565b6040516105459190613d63565b60405180910390f35b34801561055a57600080fd5b5061057560048036038101906105709190613fcc565b61105c565b005b34801561058357600080fd5b5061059e60048036038101906105999190613f17565b61120d565b005b3480156105ac57600080fd5b506105b56112ff565b005b3480156105c357600080fd5b506105cc611401565b6040516105d99190613c14565b60405180910390f35b3480156105ee57600080fd5b506105f7611425565b6040516106049190613e03565b60405180910390f35b34801561061957600080fd5b5061062261142b565b60405161062f9190613e03565b60405180910390f35b34801561064457600080fd5b5061064d611431565b60405161065a9190613d63565b60405180910390f35b34801561066f57600080fd5b5061068a60048036038101906106859190613d1b565b611444565b6040516106979190613e03565b60405180910390f35b3480156106ac57600080fd5b506106b561148c565b005b3480156106c357600080fd5b506106cc6115e4565b6040516106d99190613c14565b60405180910390f35b3480156106ee57600080fd5b506107096004803603810190610704919061404a565b61160a565b005b34801561071757600080fd5b506107206116eb565b60405161072d9190613e03565b60405180910390f35b34801561074257600080fd5b5061074b6116f1565b005b34801561075957600080fd5b506107626117c7565b60405161076f9190613c14565b60405180910390f35b34801561078457600080fd5b5061078d6117f1565b60405161079a9190613c14565b60405180910390f35b3480156107af57600080fd5b506107b8611817565b6040516107c59190613e03565b60405180910390f35b3480156107da57600080fd5b506107e361181d565b6040516107f09190613cc8565b60405180910390f35b34801561080557600080fd5b50610820600480360381019061081b9190613f17565b6118af565b005b34801561082e57600080fd5b506108376119e3565b6040516108449190613e03565b60405180910390f35b34801561085957600080fd5b506108626119e9565b60405161086f9190613e03565b60405180910390f35b34801561088457600080fd5b5061088d6119ef565b60405161089a9190613e03565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c59190613db4565b6119f5565b6040516108d79190613d63565b60405180910390f35b3480156108ec57600080fd5b5061090760048036038101906109029190613db4565b611ac2565b6040516109149190613d63565b60405180910390f35b34801561092957600080fd5b50610944600480360381019061093f9190613f17565b611ae0565b005b34801561095257600080fd5b5061096d60048036038101906109689190613d1b565b611bd2565b60405161097a9190613d63565b60405180910390f35b34801561098f57600080fd5b50610998611bf1565b6040516109a59190613d63565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190613f17565b611c04565b005b3480156109e357600080fd5b506109fe60048036038101906109f99190614077565b611d44565b604051610a0b9190613d63565b60405180910390f35b348015610a2057600080fd5b50610a29611eb3565b604051610a369190613e03565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a6191906140a4565b611eb9565b604051610a739190613e03565b60405180910390f35b348015610a8857600080fd5b50610a91611f40565b604051610a9e9190613e03565b60405180910390f35b348015610ab357600080fd5b50610abc611f46565b604051610ac99190613e03565b60405180910390f35b348015610ade57600080fd5b50610ae7611f4c565b604051610af49190613e03565b60405180910390f35b348015610b0957600080fd5b50610b246004803603810190610b1f9190613d1b565b611f52565b005b348015610b3257600080fd5b50610b4d6004803603810190610b489190613d1b565b612119565b604051610b5a9190613d63565b60405180910390f35b348015610b6f57600080fd5b50610b78612139565b604051610b859190613e03565b60405180910390f35b348015610b9a57600080fd5b50610ba361213f565b604051610bb09190613e03565b60405180910390f35b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610bee90614113565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1a90614113565b8015610c675780601f10610c3c57610100808354040283529160200191610c67565b820191906000526020600020905b815481529060010190602001808311610c4a57829003601f168201915b5050505050905090565b601f6020528060005260406000206000915054906101000a900460ff1681565b6000610ca5610c9e6121a3565b84846121ab565b6001905092915050565b60145481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b601a5481565b60185481565b6000610cfc848484612376565b610dbd84610d086121a3565b610db885604051806060016040528060288152602001614e1460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d6e6121a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612faa9092919063ffffffff16565b6121ab565b600190509392505050565b610dd06121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690614191565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610ee757507f000000000000000000000000bb5e5c6e9ce72288ad3b68cd99ef0cebbe12c48373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015610f3f57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15610f9c5780600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b60006012905090565b6000611052610fb66121a3565b8461104d8560016000610fc76121a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461214590919063ffffffff16565b6121ab565b6001905092915050565b6110646121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90614191565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111499190613c14565b60206040518083038186803b15801561116157600080fd5b505afa158015611175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119991906141c6565b6040518363ffffffff1660e01b81526004016111b69291906141f3565b602060405180830381600087803b1580156111d057600080fd5b505af11580156111e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112089190614231565b505050565b6112156121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90614191565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113076121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d90614191565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156113fe573d6000803e3d6000fd5b50565b7f000000000000000000000000bb5e5c6e9ce72288ad3b68cd99ef0cebbe12c48381565b60195481565b60135481565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114946121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a90614191565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116126121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890614191565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156116e7573d6000803e3d6000fd5b5050565b60105481565b6116f96121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90614191565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff02191690831515021790555043601c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b60606004805461182c90614113565b80601f016020809104026020016040519081016040528092919081815260200182805461185890614113565b80156118a55780601f1061187a576101008083540402835291602001916118a5565b820191906000526020600020905b81548152906001019060200180831161188857829003601f168201915b5050505050905090565b6118b76121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90614191565b60405180910390fd5b7f000000000000000000000000bb5e5c6e9ce72288ad3b68cd99ef0cebbe12c48373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc906142d0565b60405180910390fd5b6119df828261300e565b5050565b60125481565b601b5481565b60175481565b6000611ab8611a026121a3565b84611ab385604051806060016040528060258152602001614e3c6025913960016000611a2c6121a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612faa9092919063ffffffff16565b6121ab565b6001905092915050565b6000611ad6611acf6121a3565b8484612376565b6001905092915050565b611ae86121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e90614191565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602080528060005260406000206000915054906101000a900460ff1681565b600c60009054906101000a900460ff1681565b611c0c6121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290614191565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d389190613d63565b60405180910390a25050565b6000611d4e6121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614191565b60405180910390fd5b6127106004611dea610cd9565b611df4919061431f565b611dfe91906143a8565b821015611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e379061444b565b60405180910390fd5b6103e86014611e4d610cd9565b611e57919061431f565b611e6191906143a8565b821115611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9a906144dd565b60405180910390fd5b81600a8190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600f5481565b60115481565b611f5a6121a3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe090614191565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612059576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120509061456f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b60165481565b600b5481565b6000808284612154919061458f565b905083811015612199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219090614631565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561221b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612212906146c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290614755565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123699190613e03565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dd906147e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90614879565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124fa5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125309061490b565b60405180910390fd5b60008114156125535761254e838360006130af565b612fa5565b61255b6117c7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125c957506125996117c7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126025750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561263c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126555750600660149054906101000a900460ff16155b1561285d57600c60009054906101000a900460ff1661274f57601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061270f5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61274e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274590614977565b60405180910390fd5b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127f25750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561285c576002600b54612806919061458f565b61280f83611444565b8261281a919061458f565b111561285b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612852906149e3565b60405180910390fd5b5b5b6001601c5461286c919061458f565b43111580156128c757507f000000000000000000000000bb5e5c6e9ce72288ad3b68cd99ef0cebbe12c48373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129135750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129b4576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a25b60006129bf30611444565b90506000600a5482101590508080156129e45750600c60019054906101000a900460ff165b80156129fd5750600660149054906101000a900460ff16155b8015612a535750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612aa95750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612aff5750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b43576001600660146101000a81548160ff021916908315150217905550612b27613344565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff161590506000602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bfe5750602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9050601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ca15750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612ca95750805b15612cb357600091505b60008215612f9457602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d1657506000601354115b15612e1757612d446103e8612d366013548961370590919063ffffffff16565b61378090919063ffffffff16565b905060135460165482612d57919061431f565b612d6191906143a8565b601a6000828254612d72919061458f565b9250508190555060135460175482612d8a919061431f565b612d9491906143a8565b601b6000828254612da5919061458f565b9250508190555060135460155482612dbd919061431f565b612dc791906143a8565b60186000828254612dd8919061458f565b9250508190555060135460145482612df0919061431f565b612dfa91906143a8565b60196000828254612e0b919061458f565b92505081905550612f70565b602060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e7257506000600e54115b15612f6f57612ea06103e8612e92600e548961370590919063ffffffff16565b61378090919063ffffffff16565b9050600e5460115482612eb3919061431f565b612ebd91906143a8565b601a6000828254612ece919061458f565b92505081905550600e5460125482612ee6919061431f565b612ef091906143a8565b601b6000828254612f01919061458f565b92505081905550600e5460105482612f19919061431f565b612f2391906143a8565b60186000828254612f34919061458f565b92505081905550600e54600f5482612f4c919061431f565b612f5691906143a8565b60196000828254612f67919061458f565b925050819055505b5b6000811115612f8557612f848830836130af565b5b8086612f919190614a03565b95505b612f9f8888886130af565b50505050505b505050565b6000838311158290612ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe99190613cc8565b60405180910390fd5b50600083856130019190614a03565b9050809150509392505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561311f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613116906147e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561318f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318690614879565b60405180910390fd5b61319a8383836137ca565b61320581604051806060016040528060268152602001614dee602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612faa9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613298816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461214590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133379190613e03565b60405180910390a3505050565b600061334f30611444565b90506000601954601b54601854601a54613369919061458f565b613373919061458f565b61337d919061458f565b905060008083148061338f5750600082145b1561339c57505050613703565b6014600a546133ab919061431f565b8311156133c4576014600a546133c1919061431f565b92505b6000600283601a54866133d7919061431f565b6133e191906143a8565b6133eb91906143a8565b9050600061340282866137cf90919063ffffffff16565b9050600047905061341282613819565b600061342782476137cf90919063ffffffff16565b90506000613452876134446018548561370590919063ffffffff16565b61378090919063ffffffff16565b9050600061347d8861346f601b548661370590919063ffffffff16565b61378090919063ffffffff16565b905060006134a88961349a6019548761370590919063ffffffff16565b61378090919063ffffffff16565b90506000818385876134ba9190614a03565b6134c49190614a03565b6134ce9190614a03565b90506000601a8190555060006018819055506000601b819055506000601981905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161353690614a68565b60006040518083038185875af1925050503d8060008114613573576040519150601f19603f3d011682016040523d82523d6000602084013e613578565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516135c490614a68565b60006040518083038185875af1925050503d8060008114613601576040519150601f19603f3d011682016040523d82523d6000602084013e613606565b606091505b505080995050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161365290614a68565b60006040518083038185875af1925050503d806000811461368f576040519150601f19603f3d011682016040523d82523d6000602084013e613694565b606091505b5050809950506000881180156136aa5750600081115b156136f7576136b98882613a65565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601a546040516136ee93929190614a7d565b60405180910390a15b50505050505050505050505b565b600080831415613718576000905061377a565b60008284613726919061431f565b905082848261373591906143a8565b14613775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376c90614b26565b60405180910390fd5b809150505b92915050565b60006137c283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b70565b905092915050565b505050565b600061381183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612faa565b905092915050565b6000600267ffffffffffffffff81111561383657613835614b46565b5b6040519080825280602002602001820160405280156138645781602001602082028036833780820191505090505b509050308160008151811061387c5761387b614b75565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561391c57600080fd5b505afa158015613930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139549190614bb9565b8160018151811061396857613967614b75565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139cd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121ab565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a2f959493929190614cdf565b600060405180830381600087803b158015613a4957600080fd5b505af1158015613a5d573d6000803e3d6000fd5b505050505050565b613a90307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121ab565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b1796959493929190614d39565b6060604051808303818588803b158015613b3057600080fd5b505af1158015613b44573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b699190614d9a565b5050505050565b60008083118290613bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bae9190613cc8565b60405180910390fd5b5060008385613bc691906143a8565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bfe82613bd3565b9050919050565b613c0e81613bf3565b82525050565b6000602082019050613c296000830184613c05565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c69578082015181840152602081019050613c4e565b83811115613c78576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c9a82613c2f565b613ca48185613c3a565b9350613cb4818560208601613c4b565b613cbd81613c7e565b840191505092915050565b60006020820190508181036000830152613ce28184613c8f565b905092915050565b600080fd5b613cf881613bf3565b8114613d0357600080fd5b50565b600081359050613d1581613cef565b92915050565b600060208284031215613d3157613d30613cea565b5b6000613d3f84828501613d06565b91505092915050565b60008115159050919050565b613d5d81613d48565b82525050565b6000602082019050613d786000830184613d54565b92915050565b6000819050919050565b613d9181613d7e565b8114613d9c57600080fd5b50565b600081359050613dae81613d88565b92915050565b60008060408385031215613dcb57613dca613cea565b5b6000613dd985828601613d06565b9250506020613dea85828601613d9f565b9150509250929050565b613dfd81613d7e565b82525050565b6000602082019050613e186000830184613df4565b92915050565b6000819050919050565b6000613e43613e3e613e3984613bd3565b613e1e565b613bd3565b9050919050565b6000613e5582613e28565b9050919050565b6000613e6782613e4a565b9050919050565b613e7781613e5c565b82525050565b6000602082019050613e926000830184613e6e565b92915050565b600080600060608486031215613eb157613eb0613cea565b5b6000613ebf86828701613d06565b9350506020613ed086828701613d06565b9250506040613ee186828701613d9f565b9150509250925092565b613ef481613d48565b8114613eff57600080fd5b50565b600081359050613f1181613eeb565b92915050565b60008060408385031215613f2e57613f2d613cea565b5b6000613f3c85828601613d06565b9250506020613f4d85828601613f02565b9150509250929050565b600060ff82169050919050565b613f6d81613f57565b82525050565b6000602082019050613f886000830184613f64565b92915050565b6000613f9982613bf3565b9050919050565b613fa981613f8e565b8114613fb457600080fd5b50565b600081359050613fc681613fa0565b92915050565b60008060408385031215613fe357613fe2613cea565b5b6000613ff185828601613fb7565b925050602061400285828601613d06565b9150509250929050565b600061401782613bd3565b9050919050565b6140278161400c565b811461403257600080fd5b50565b6000813590506140448161401e565b92915050565b6000602082840312156140605761405f613cea565b5b600061406e84828501614035565b91505092915050565b60006020828403121561408d5761408c613cea565b5b600061409b84828501613d9f565b91505092915050565b600080604083850312156140bb576140ba613cea565b5b60006140c985828601613d06565b92505060206140da85828601613d06565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061412b57607f821691505b6020821081141561413f5761413e6140e4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061417b602083613c3a565b915061418682614145565b602082019050919050565b600060208201905081810360008301526141aa8161416e565b9050919050565b6000815190506141c081613d88565b92915050565b6000602082840312156141dc576141db613cea565b5b60006141ea848285016141b1565b91505092915050565b60006040820190506142086000830185613c05565b6142156020830184613df4565b9392505050565b60008151905061422b81613eeb565b92915050565b60006020828403121561424757614246613cea565b5b60006142558482850161421c565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142ba603983613c3a565b91506142c58261425e565b604082019050919050565b600060208201905081810360008301526142e9816142ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061432a82613d7e565b915061433583613d7e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561436e5761436d6142f0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143b382613d7e565b91506143be83613d7e565b9250826143ce576143cd614379565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614435603483613c3a565b9150614440826143d9565b604082019050919050565b6000602082019050818103600083015261446481614428565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006144c7603483613c3a565b91506144d28261446b565b604082019050919050565b600060208201905081810360008301526144f6816144ba565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614559602683613c3a565b9150614564826144fd565b604082019050919050565b600060208201905081810360008301526145888161454c565b9050919050565b600061459a82613d7e565b91506145a583613d7e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145da576145d96142f0565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061461b601b83613c3a565b9150614626826145e5565b602082019050919050565b6000602082019050818103600083015261464a8161460e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146ad602483613c3a565b91506146b882614651565b604082019050919050565b600060208201905081810360008301526146dc816146a0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061473f602283613c3a565b915061474a826146e3565b604082019050919050565b6000602082019050818103600083015261476e81614732565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147d1602583613c3a565b91506147dc82614775565b604082019050919050565b60006020820190508181036000830152614800816147c4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614863602383613c3a565b915061486e82614807565b604082019050919050565b6000602082019050818103600083015261489281614856565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006148f5603183613c3a565b915061490082614899565b604082019050919050565b60006020820190508181036000830152614924816148e8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614961601683613c3a565b915061496c8261492b565b602082019050919050565b6000602082019050818103600083015261499081614954565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149cd601383613c3a565b91506149d882614997565b602082019050919050565b600060208201905081810360008301526149fc816149c0565b9050919050565b6000614a0e82613d7e565b9150614a1983613d7e565b925082821015614a2c57614a2b6142f0565b5b828203905092915050565b600081905092915050565b50565b6000614a52600083614a37565b9150614a5d82614a42565b600082019050919050565b6000614a7382614a45565b9150819050919050565b6000606082019050614a926000830186613df4565b614a9f6020830185613df4565b614aac6040830184613df4565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b10602183613c3a565b9150614b1b82614ab4565b604082019050919050565b60006020820190508181036000830152614b3f81614b03565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614bb381613cef565b92915050565b600060208284031215614bcf57614bce613cea565b5b6000614bdd84828501614ba4565b91505092915050565b6000819050919050565b6000614c0b614c06614c0184614be6565b613e1e565b613d7e565b9050919050565b614c1b81614bf0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c5681613bf3565b82525050565b6000614c688383614c4d565b60208301905092915050565b6000602082019050919050565b6000614c8c82614c21565b614c968185614c2c565b9350614ca183614c3d565b8060005b83811015614cd2578151614cb98882614c5c565b9750614cc483614c74565b925050600181019050614ca5565b5085935050505092915050565b600060a082019050614cf46000830188613df4565b614d016020830187614c12565b8181036040830152614d138186614c81565b9050614d226060830185613c05565b614d2f6080830184613df4565b9695505050505050565b600060c082019050614d4e6000830189613c05565b614d5b6020830188613df4565b614d686040830187614c12565b614d756060830186614c12565b614d826080830185613c05565b614d8f60a0830184613df4565b979650505050505050565b600080600060608486031215614db357614db2613cea565b5b6000614dc1868287016141b1565b9350506020614dd2868287016141b1565b9250506040614de3868287016141b1565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d88fc0df3ec67f4c79c82e577c290ce2575e83e7f4292c78d85093f94e9d6fb264736f6c63430008090033
Deployed Bytecode Sourcemap
30167:14176:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30541:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8265:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31623:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10439:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31030:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30248:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9388:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31259:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31179;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11091:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37107:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9229:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11856:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35788:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36596:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35578:198;;;;;;;;;;;;;:::i;:::-;;30306:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31219:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30995:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30695:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9560:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22767:148;;;;;;;;;;;;;:::i;:::-;;30473:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35985:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30883:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35421:148;;;;;;;;;;;;;:::i;:::-;;22123:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30510:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31068:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8485:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37427:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30957:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31299:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31144:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12578:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9901:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36754:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31850:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30655:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36916:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36201:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30812:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10140:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30581:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30846:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30920;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23071:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31549:67;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31106:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30621:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30541:30;;;;;;;;;;;;;:::o;8265:100::-;8319:13;8352:5;8345:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8265:100;:::o;31623:68::-;;;;;;;;;;;;;;;;;;;;;;:::o;10439:169::-;10522:4;10539:39;10548:12;:10;:12::i;:::-;10562:7;10571:6;10539:8;:39::i;:::-;10596:4;10589:11;;10439:169;;;;:::o;31030:31::-;;;;:::o;30248:51::-;;;:::o;9388:108::-;9449:7;9476:12;;9469:19;;9388:108;:::o;31259:33::-;;;;:::o;31179:::-;;;;:::o;11091:355::-;11231:4;11248:36;11258:6;11266:9;11277:6;11248:9;:36::i;:::-;11295:121;11304:6;11312:12;:10;:12::i;:::-;11326:89;11364:6;11326:89;;;;;;;;;;;;;;;;;:11;:19;11338:6;11326:19;;;;;;;;;;;;;;;:33;11346:12;:10;:12::i;:::-;11326:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11295:8;:121::i;:::-;11434:4;11427:11;;11091:355;;;;;:::o;37107:310::-;22346:12;:10;:12::i;:::-;22336:22;;:6;;;;;;;;;;;:22;;;22328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37284:4:::1;37265:24;;:7;:24;;;;:52;;;;;37304:13;37293:24;;:7;:24;;;;37265:52;:91;;;;;37340:15;37321:35;;:7;:35;;;;37265:91;37261:149;;;37391:13;37369:10;:19;37380:7;37369:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37261:149;37107:310:::0;;:::o;9229:93::-;9287:5;9312:2;9305:9;;9229:93;:::o;11856:218::-;11944:4;11961:83;11970:12;:10;:12::i;:::-;11984:7;11993:50;12032:10;11993:11;:25;12005:12;:10;:12::i;:::-;11993:25;;;;;;;;;;;;;;;:34;12019:7;11993:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11961:8;:83::i;:::-;12062:4;12055:11;;11856:218;;;;:::o;35788:185::-;22346:12;:10;:12::i;:::-;22336:22;;:6;;;;;;;;;;;:22;;;22328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35890:12:::1;:21;;;35912:13;35927:12;:22;;;35958:4;35927:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35890:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35788:185:::0;;:::o;36596:150::-;22346:12;:10;:12::i;:::-;22336:22;;:6;;;;;;;;;;;:22;;;22328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36734:4:::1;36689:34;:42;36724:6;36689:42;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;36596:150:::0;;:::o;35578:198::-;22346:12;:10;:12::i;:::-;22336:22;;:6;;;;;;;;;;;:22;;;22328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35726:9:::1;;;;;;;;;;;35718:27;;:50;35746:21;35718:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35578:198::o:0;30306:38::-;;;:::o;31219:33::-;;;;:::o;30995:28::-;;;;:::o;30695:31::-;;;;;;;;;;;;;:::o;9560:127::-;9634:7;9661:9;:18;9671:7;9661:18;;;;;;;;;;;;;;;;9654:25;;9560:127;;;:::o;22767:148::-;22346:12;:10;:12::i;:::-;22336:22;;:6;;;;;;;;;;;:22;;;22328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22874:1:::1;22837:40;;22858:6;;;;;;;;;;;22837:40;;;;;;;;;;;;22905:1;22888:6;;:19;;;;;;;;;;;;;;;;;;22767:148::o:0;30473:30::-;;;;;;;;;;;;;:::o;35985:144::-;22346:12;:10;:12::i;:::-;22336:22;;:6;;;;;;;;;;;:22;;;22328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36076:13:::1;:22;;:45;36099:21;36076:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35985:144:::0;:::o;30883:30::-;;;;:::o;35421:148::-;22346:12;:10;:12::i;:::-;22336:22;;:6;;;;;;;;;;;:22;;;22328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35492:4:::1;35476:13;;:20;;;;;;;;;;;;;;;;;;35521:4;35507:11;;:18;;;;;;;;;;;;;;;;;;35549:12;35536:10;:25;;;;35421:148::o:0;22123:79::-;22161:7;22188:6;;;;;;;;;;;22181:13;;22123:79;:::o;30510:24::-;;;;;;;;;;;;;:::o;31068:31::-;;;;:::o;8485:104::-;8541:13;8574:7;8567:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8485:104;:::o;37427:245::-;22346:12;:10;:12::i;:::-;22336:22;;:6;;;;;;;;;;;:22;;;22328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37534:13:::1;37526:21;;:4;:21;;;;37518:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37623:41;37652:4;37658:5;37623:28;:41::i;:::-;37427:245:::0;;:::o;30957:24::-;;;;:::o;31299:27::-;;;;:::o;31144:25::-;;;;:::o;12578:269::-;12671:4;12688:129;12697:12;:10;:12::i;:::-;12711:7;12720:96;12759:15;12720:96;;;;;;;;;;;;;;;;;:11;:25;12732:12;:10;:12::i;:::-;12720:25;;;;;;;;;;;;;;;:34;12746:7;12720:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12688:8;:129::i;:::-;12835:4;12828:11;;12578:269;;;;:::o;9901:175::-;9987:4;10004:42;10014:12;:10;:12::i;:::-;10028:9;10039:6;10004:9;:42::i;:::-;10064:4;10057:11;;9901:175;;;;:::o;36754:152::-;22346:12;:10;:12::i;:::-;22336:22;;:6;;;;;;;;;;;:22;;;22328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36894:4:::1;36848:35;:43;36884:6;36848:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;36754:152:::0;;:::o;31850:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30655:33::-;;;;;;;;;;;;;:::o;36916:182::-;22346:12;:10;:12::i;:::-;22336:22;;:6;;;;;;;;;;;:22;;;22328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37032:8:::1;37001:19;:28;37021:7;37001:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37072:7;37056:34;;;37081:8;37056:34;;;;;;:::i;:::-;;;;;;;;36916:182:::0;;:::o;36201:385::-;36282:4;22346:12;:10;:12::i;:::-;22336:22;;:6;;;;;;;;;;;:22;;;22328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36339:5:::1;36335:1;36319:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:25;;;;:::i;:::-;36306:9;:38;;36298:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;36454:4;36449:2;36433:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;36420:9;:38;;36412:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;36547:9;36526:18;:30;;;;36574:4;36567:11;;36201:385:::0;;;:::o;30812:27::-;;;;:::o;10140:151::-;10229:7;10256:11;:18;10268:5;10256:18;;;;;;;;;;;;;;;:27;10275:7;10256:27;;;;;;;;;;;;;;;;10249:34;;10140:151;;;;:::o;30581:33::-;;;;:::o;30846:30::-;;;;:::o;30920:::-;;;;:::o;23071:244::-;22346:12;:10;:12::i;:::-;22336:22;;:6;;;;;;;;;;;:22;;;22328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23180:1:::1;23160:22;;:8;:22;;;;23152:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23270:8;23241:38;;23262:6;;;;;;;;;;;23241:38;;;;;;;;;;;;23299:8;23290:6;;:17;;;;;;;;;;;;;;;;;;23071:244:::0;:::o;31549:67::-;;;;;;;;;;;;;;;;;;;;;;:::o;31106:31::-;;;;:::o;30621:24::-;;;;:::o;17155:182::-;17213:7;17233:9;17249:1;17245;:5;;;;:::i;:::-;17233:17;;17274:1;17269;:6;;17261:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17328:1;17321:8;;;17155:182;;;;:::o;867:98::-;920:7;947:10;940:17;;867:98;:::o;15774:381::-;15927:1;15910:19;;:5;:19;;;;15902:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16008:1;15989:21;;:7;:21;;;;15981:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16093:6;16063:11;:18;16075:5;16063:18;;;;;;;;;;;;;;;:27;16082:7;16063:27;;;;;;;;;;;;;;;:36;;;;16131:7;16115:32;;16124:5;16115:32;;;16140:6;16115:32;;;;;;:::i;:::-;;;;;;;;15774:381;;;:::o;37930:3470::-;38078:1;38062:18;;:4;:18;;;;38054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38155:1;38141:16;;:2;:16;;;;38133:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38217:10;:14;38228:2;38217:14;;;;;;;;;;;;;;;;;;;;;;;;;38216:15;:36;;;;;38236:10;:16;38247:4;38236:16;;;;;;;;;;;;;;;;;;;;;;;;;38235:17;38216:36;38208:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38331:1;38321:6;:11;38318:92;;;38349:28;38365:4;38371:2;38375:1;38349:15;:28::i;:::-;38392:7;;38318:92;38451:7;:5;:7::i;:::-;38443:15;;:4;:15;;;;:45;;;;;38481:7;:5;:7::i;:::-;38475:13;;:2;:13;;;;38443:45;:78;;;;;38519:1;38505:16;;:2;:16;;;;38443:78;:116;;;;;38552:6;38538:21;;:2;:21;;;;38443:116;:142;;;;;38577:8;;;;;;;;;;;38576:9;38443:142;38425:568;;;38615:13;;;;;;;;;;;38611:140;;38656:19;:25;38676:4;38656:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38685:19;:23;38705:2;38685:23;;;;;;;;;;;;;;;;;;;;;;;;;38656:52;38648:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38611:140;38796:25;:31;38822:4;38796:31;;;;;;;;;;;;;;;;;;;;;;;;;:74;;;;;38832:34;:38;38867:2;38832:38;;;;;;;;;;;;;;;;;;;;;;;;;38831:39;38796:74;38792:190;;;38941:1;38929:9;;:13;;;;:::i;:::-;38912;38922:2;38912:9;:13::i;:::-;38903:6;:22;;;;:::i;:::-;:39;;38895:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38792:190;38425:568;39061:1;39048:10;;:14;;;;:::i;:::-;39031:12;:32;;:73;;;;;39091:13;39085:19;;:2;:19;;;;39031:73;:152;;;;;39140:42;39126:57;;:2;:57;;;;39031:152;39027:256;;;39232:4;39215:10;:14;39226:2;39215:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39268:2;39256:15;;;;;;;;;;;;39027:256;39296:28;39327:24;39345:4;39327:9;:24::i;:::-;39296:55;;39365:12;39404:18;;39380:20;:42;;39365:57;;39454:7;:35;;;;;39478:11;;;;;;;;;;;39454:35;:61;;;;;39507:8;;;;;;;;;;;39506:9;39454:61;:110;;;;;39533:25;:31;39559:4;39533:31;;;;;;;;;;;;;;;;;;;;;;;;;39532:32;39454:110;:153;;;;;39582:19;:25;39602:4;39582:25;;;;;;;;;;;;;;;;;;;;;;;;;39581:26;39454:153;:194;;;;;39625:19;:23;39645:2;39625:23;;;;;;;;;;;;;;;;;;;;;;;;;39624:24;39454:194;39436:328;;;39686:4;39675:8;;:15;;;;;;;;;;;;;;;;;;39708:10;:8;:10::i;:::-;39747:5;39736:8;;:16;;;;;;;;;;;;;;;;;;39436:328;39777:12;39793:8;;;;;;;;;;;39792:9;39777:24;;39814:19;39837:25;:29;39863:2;39837:29;;;;;;;;;;;;;;;;;;;;;;;;;39836:30;:66;;;;;39871:25;:31;39897:4;39871:31;;;;;;;;;;;;;;;;;;;;;;;;;39870:32;39836:66;39814:88;;40001:19;:25;40021:4;40001:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40030:19;:23;40050:2;40030:23;;;;;;;;;;;;;;;;;;;;;;;;;40001:52;:70;;;;40057:14;40001:70;39998:117;;;40098:5;40088:15;;39998:117;40128:12;40232:7;40229:1117;;;40283:25;:29;40309:2;40283:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40332:1;40316:13;;:17;40283:50;40279:914;;;40360:35;40390:4;40360:25;40371:13;;40360:6;:10;;:25;;;;:::i;:::-;:29;;:35;;;;:::i;:::-;40353:42;;40462:13;;40443:16;;40436:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40414:18;;:61;;;;;;;:::i;:::-;;;;;;;;40530:13;;40517:10;;40510:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;40494:12;;:49;;;;;;;:::i;:::-;;;;;;;;40610:13;;40591:16;;40584:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40562:18;;:61;;;;;;;:::i;:::-;;;;;;;;40690:13;;40671:16;;40664:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40642:18;;:61;;;;;;;:::i;:::-;;;;;;;;40279:914;;;40764:25;:31;40790:4;40764:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40814:1;40799:12;;:16;40764:51;40761:432;;;40843:34;40872:4;40843:24;40854:12;;40843:6;:10;;:24;;;;:::i;:::-;:28;;:34;;;;:::i;:::-;40836:41;;40943:12;;40925:15;;40918:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40896:18;;:59;;;;;;;:::i;:::-;;;;;;;;41009:12;;40997:9;;40990:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;40974:12;;:47;;;;;;;:::i;:::-;;;;;;;;41087:12;;41069:15;;41062:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41040:18;;:59;;;;;;;:::i;:::-;;;;;;;;41165:12;;41147:15;;41140:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41118:18;;:59;;;;;;;:::i;:::-;;;;;;;;40761:432;40279:914;41220:1;41213:4;:8;41210:93;;;41245:42;41261:4;41275;41282;41245:15;:42::i;:::-;41210:93;41330:4;41320:14;;;;;:::i;:::-;;;40229:1117;41359:33;41375:4;41381:2;41385:6;41359:15;:33::i;:::-;38043:3357;;;;;37930:3470;;;;:::o;18061:193::-;18147:7;18180:1;18175;:6;;18183:12;18167:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18207:9;18223:1;18219;:5;;;;:::i;:::-;18207:17;;18245:1;18238:8;;;18061:193;;;;;:::o;37681:189::-;37798:5;37764:25;:31;37790:4;37764:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37856:5;37822:40;;37850:4;37822:40;;;;;;;;;;;;37681:189;;:::o;13338:575::-;13496:1;13478:20;;:6;:20;;;;13470:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13580:1;13559:23;;:9;:23;;;;13551:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13636:47;13657:6;13665:9;13676:6;13636:20;:47::i;:::-;13717:71;13739:6;13717:71;;;;;;;;;;;;;;;;;:9;:17;13727:6;13717:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13697:9;:17;13707:6;13697:17;;;;;;;;;;;;;;;:91;;;;13822:32;13847:6;13822:9;:20;13832:9;13822:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13799:9;:20;13809:9;13799:20;;;;;;;;;;;;;;;:55;;;;13887:9;13870:35;;13879:6;13870:35;;;13898:6;13870:35;;;;;;:::i;:::-;;;;;;;;13338:575;;;:::o;42540:1798::-;42579:23;42605:24;42623:4;42605:9;:24::i;:::-;42579:50;;42640:25;42725:18;;42710:12;;42689:18;;42668;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;:75;;;;:::i;:::-;42640:103;;42754:12;42802:1;42783:15;:20;:46;;;;42828:1;42807:17;:22;42783:46;42780:60;;;42832:7;;;;;42780:60;42895:2;42874:18;;:23;;;;:::i;:::-;42856:15;:41;42853:111;;;42950:2;42929:18;;:23;;;;:::i;:::-;42911:41;;42853:111;43025:23;43110:1;43090:17;43069:18;;43051:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43025:86;;43122:26;43151:36;43171:15;43151;:19;;:36;;;;:::i;:::-;43122:65;;43201:25;43229:21;43201:49;;43264:36;43281:18;43264:16;:36::i;:::-;43315:18;43336:44;43362:17;43336:21;:25;;:44;;;;:::i;:::-;43315:65;;43394:23;43420:57;43459:17;43420:34;43435:18;;43420:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;43394:83;;43488:17;43508:51;43541:17;43508:28;43523:12;;43508:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;43488:71;;43570:23;43596:57;43635:17;43596:34;43611:18;;43596:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;43570:83;;43670:23;43739:15;43727:9;43709:15;43696:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;:58;;;;:::i;:::-;43670:84;;43792:1;43771:18;:22;;;;43825:1;43804:18;:22;;;;43852:1;43837:12;:16;;;;43885:1;43864:18;:22;;;;43921:9;;;;;;;;;;;43913:23;;43944:9;43913:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43900:58;;;;;43984:15;;;;;;;;;;;43976:29;;44013:15;43976:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43963:70;;;;;44059:15;;;;;;;;;;;44051:29;;44088:15;44051:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44038:70;;;;;44142:1;44124:15;:19;:42;;;;;44165:1;44147:15;:19;44124:42;44121:210;;;44182:46;44195:15;44212;44182:12;:46::i;:::-;44248:71;44263:18;44283:15;44300:18;;44248:71;;;;;;;;:::i;:::-;;;;;;;;44121:210;42568:1770;;;;;;;;;;;42540:1798;:::o;18514:473::-;18572:7;18822:1;18817;:6;18813:47;;;18847:1;18840:8;;;;18813:47;18873:9;18889:1;18885;:5;;;;:::i;:::-;18873:17;;18918:1;18913;18909;:5;;;;:::i;:::-;:10;18901:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18978:1;18971:8;;;18514:473;;;;;:::o;19464:132::-;19522:7;19549:39;19553:1;19556;19549:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19542:46;;19464:132;;;;:::o;16759:125::-;;;;:::o;17621:136::-;17679:7;17706:43;17710:1;17713;17706:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17699:50;;17621:136;;;;:::o;41409:597::-;41538:21;41576:1;41562:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41538:40;;41607:4;41589;41594:1;41589:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41633:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41623:4;41628:1;41623:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41669:62;41686:4;41701:15;41719:11;41669:8;:62::i;:::-;41771:15;:66;;;41852:11;41878:1;41922:4;41949;41969:15;41771:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41464:542;41409:597;:::o;42015:516::-;42163:62;42180:4;42195:15;42213:11;42163:8;:62::i;:::-;42269:15;:31;;;42308:9;42341:4;42361:11;42387:1;42430;42473:9;;;;;;;;;;;42497:15;42269:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42015:516;;:::o;20093:279::-;20179:7;20211:1;20207;:5;20214:12;20199:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20238:9;20254:1;20250;:5;;;;:::i;:::-;20238:17;;20363:1;20356:8;;;20093:279;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;2064:117::-;2173:1;2170;2163:12;2310:122;2383:24;2401:5;2383:24;:::i;:::-;2376:5;2373:35;2363:63;;2422:1;2419;2412:12;2363:63;2310:122;:::o;2438:139::-;2484:5;2522:6;2509:20;2500:29;;2538:33;2565:5;2538:33;:::i;:::-;2438:139;;;;:::o;2583:329::-;2642:6;2691:2;2679:9;2670:7;2666:23;2662:32;2659:119;;;2697:79;;:::i;:::-;2659:119;2817:1;2842:53;2887:7;2878:6;2867:9;2863:22;2842:53;:::i;:::-;2832:63;;2788:117;2583:329;;;;:::o;2918:90::-;2952:7;2995:5;2988:13;2981:21;2970:32;;2918:90;;;:::o;3014:109::-;3095:21;3110:5;3095:21;:::i;:::-;3090:3;3083:34;3014:109;;:::o;3129:210::-;3216:4;3254:2;3243:9;3239:18;3231:26;;3267:65;3329:1;3318:9;3314:17;3305:6;3267:65;:::i;:::-;3129:210;;;;:::o;3345:77::-;3382:7;3411:5;3400:16;;3345:77;;;:::o;3428:122::-;3501:24;3519:5;3501:24;:::i;:::-;3494:5;3491:35;3481:63;;3540:1;3537;3530:12;3481:63;3428:122;:::o;3556:139::-;3602:5;3640:6;3627:20;3618:29;;3656:33;3683:5;3656:33;:::i;:::-;3556:139;;;;:::o;3701:474::-;3769:6;3777;3826:2;3814:9;3805:7;3801:23;3797:32;3794:119;;;3832:79;;:::i;:::-;3794:119;3952:1;3977:53;4022:7;4013:6;4002:9;3998:22;3977:53;:::i;:::-;3967:63;;3923:117;4079:2;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4050:118;3701:474;;;;;:::o;4181:118::-;4268:24;4286:5;4268:24;:::i;:::-;4263:3;4256:37;4181:118;;:::o;4305:222::-;4398:4;4436:2;4425:9;4421:18;4413:26;;4449:71;4517:1;4506:9;4502:17;4493:6;4449:71;:::i;:::-;4305:222;;;;:::o;4533:60::-;4561:3;4582:5;4575:12;;4533:60;;;:::o;4599:142::-;4649:9;4682:53;4700:34;4709:24;4727:5;4709:24;:::i;:::-;4700:34;:::i;:::-;4682:53;:::i;:::-;4669:66;;4599:142;;;:::o;4747:126::-;4797:9;4830:37;4861:5;4830:37;:::i;:::-;4817:50;;4747:126;;;:::o;4879:153::-;4956:9;4989:37;5020:5;4989:37;:::i;:::-;4976:50;;4879:153;;;:::o;5038:185::-;5152:64;5210:5;5152:64;:::i;:::-;5147:3;5140:77;5038:185;;:::o;5229:276::-;5349:4;5387:2;5376:9;5372:18;5364:26;;5400:98;5495:1;5484:9;5480:17;5471:6;5400:98;:::i;:::-;5229:276;;;;:::o;5511:619::-;5588:6;5596;5604;5653:2;5641:9;5632:7;5628:23;5624:32;5621:119;;;5659:79;;:::i;:::-;5621:119;5779:1;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5750:117;5906:2;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5877:118;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;5511:619;;;;;:::o;6136:116::-;6206:21;6221:5;6206:21;:::i;:::-;6199:5;6196:32;6186:60;;6242:1;6239;6232:12;6186:60;6136:116;:::o;6258:133::-;6301:5;6339:6;6326:20;6317:29;;6355:30;6379:5;6355:30;:::i;:::-;6258:133;;;;:::o;6397:468::-;6462:6;6470;6519:2;6507:9;6498:7;6494:23;6490:32;6487:119;;;6525:79;;:::i;:::-;6487:119;6645:1;6670:53;6715:7;6706:6;6695:9;6691:22;6670:53;:::i;:::-;6660:63;;6616:117;6772:2;6798:50;6840:7;6831:6;6820:9;6816:22;6798:50;:::i;:::-;6788:60;;6743:115;6397:468;;;;;:::o;6871:86::-;6906:7;6946:4;6939:5;6935:16;6924:27;;6871:86;;;:::o;6963:112::-;7046:22;7062:5;7046:22;:::i;:::-;7041:3;7034:35;6963:112;;:::o;7081:214::-;7170:4;7208:2;7197:9;7193:18;7185:26;;7221:67;7285:1;7274:9;7270:17;7261:6;7221:67;:::i;:::-;7081:214;;;;:::o;7301:110::-;7352:7;7381:24;7399:5;7381:24;:::i;:::-;7370:35;;7301:110;;;:::o;7417:150::-;7504:38;7536:5;7504:38;:::i;:::-;7497:5;7494:49;7484:77;;7557:1;7554;7547:12;7484:77;7417:150;:::o;7573:167::-;7633:5;7671:6;7658:20;7649:29;;7687:47;7728:5;7687:47;:::i;:::-;7573:167;;;;:::o;7746:502::-;7828:6;7836;7885:2;7873:9;7864:7;7860:23;7856:32;7853:119;;;7891:79;;:::i;:::-;7853:119;8011:1;8036:67;8095:7;8086:6;8075:9;8071:22;8036:67;:::i;:::-;8026:77;;7982:131;8152:2;8178:53;8223:7;8214:6;8203:9;8199:22;8178:53;:::i;:::-;8168:63;;8123:118;7746:502;;;;;:::o;8254:104::-;8299:7;8328:24;8346:5;8328:24;:::i;:::-;8317:35;;8254:104;;;:::o;8364:138::-;8445:32;8471:5;8445:32;:::i;:::-;8438:5;8435:43;8425:71;;8492:1;8489;8482:12;8425:71;8364:138;:::o;8508:155::-;8562:5;8600:6;8587:20;8578:29;;8616:41;8651:5;8616:41;:::i;:::-;8508:155;;;;:::o;8669:345::-;8736:6;8785:2;8773:9;8764:7;8760:23;8756:32;8753:119;;;8791:79;;:::i;:::-;8753:119;8911:1;8936:61;8989:7;8980:6;8969:9;8965:22;8936:61;:::i;:::-;8926:71;;8882:125;8669:345;;;;:::o;9020:329::-;9079:6;9128:2;9116:9;9107:7;9103:23;9099:32;9096:119;;;9134:79;;:::i;:::-;9096:119;9254:1;9279:53;9324:7;9315:6;9304:9;9300:22;9279:53;:::i;:::-;9269:63;;9225:117;9020:329;;;;:::o;9355:474::-;9423:6;9431;9480:2;9468:9;9459:7;9455:23;9451:32;9448:119;;;9486:79;;:::i;:::-;9448:119;9606:1;9631:53;9676:7;9667:6;9656:9;9652:22;9631:53;:::i;:::-;9621:63;;9577:117;9733:2;9759:53;9804:7;9795:6;9784:9;9780:22;9759:53;:::i;:::-;9749:63;;9704:118;9355:474;;;;;:::o;9835:180::-;9883:77;9880:1;9873:88;9980:4;9977:1;9970:15;10004:4;10001:1;9994:15;10021:320;10065:6;10102:1;10096:4;10092:12;10082:22;;10149:1;10143:4;10139:12;10170:18;10160:81;;10226:4;10218:6;10214:17;10204:27;;10160:81;10288:2;10280:6;10277:14;10257:18;10254:38;10251:84;;;10307:18;;:::i;:::-;10251:84;10072:269;10021:320;;;:::o;10347:182::-;10487:34;10483:1;10475:6;10471:14;10464:58;10347:182;:::o;10535:366::-;10677:3;10698:67;10762:2;10757:3;10698:67;:::i;:::-;10691:74;;10774:93;10863:3;10774:93;:::i;:::-;10892:2;10887:3;10883:12;10876:19;;10535:366;;;:::o;10907:419::-;11073:4;11111:2;11100:9;11096:18;11088:26;;11160:9;11154:4;11150:20;11146:1;11135:9;11131:17;11124:47;11188:131;11314:4;11188:131;:::i;:::-;11180:139;;10907:419;;;:::o;11332:143::-;11389:5;11420:6;11414:13;11405:22;;11436:33;11463:5;11436:33;:::i;:::-;11332:143;;;;:::o;11481:351::-;11551:6;11600:2;11588:9;11579:7;11575:23;11571:32;11568:119;;;11606:79;;:::i;:::-;11568:119;11726:1;11751:64;11807:7;11798:6;11787:9;11783:22;11751:64;:::i;:::-;11741:74;;11697:128;11481:351;;;;:::o;11838:332::-;11959:4;11997:2;11986:9;11982:18;11974:26;;12010:71;12078:1;12067:9;12063:17;12054:6;12010:71;:::i;:::-;12091:72;12159:2;12148:9;12144:18;12135:6;12091:72;:::i;:::-;11838:332;;;;;:::o;12176:137::-;12230:5;12261:6;12255:13;12246:22;;12277:30;12301:5;12277:30;:::i;:::-;12176:137;;;;:::o;12319:345::-;12386:6;12435:2;12423:9;12414:7;12410:23;12406:32;12403:119;;;12441:79;;:::i;:::-;12403:119;12561:1;12586:61;12639:7;12630:6;12619:9;12615:22;12586:61;:::i;:::-;12576:71;;12532:125;12319:345;;;;:::o;12670:244::-;12810:34;12806:1;12798:6;12794:14;12787:58;12879:27;12874:2;12866:6;12862:15;12855:52;12670:244;:::o;12920:366::-;13062:3;13083:67;13147:2;13142:3;13083:67;:::i;:::-;13076:74;;13159:93;13248:3;13159:93;:::i;:::-;13277:2;13272:3;13268:12;13261:19;;12920:366;;;:::o;13292:419::-;13458:4;13496:2;13485:9;13481:18;13473:26;;13545:9;13539:4;13535:20;13531:1;13520:9;13516:17;13509:47;13573:131;13699:4;13573:131;:::i;:::-;13565:139;;13292:419;;;:::o;13717:180::-;13765:77;13762:1;13755:88;13862:4;13859:1;13852:15;13886:4;13883:1;13876:15;13903:348;13943:7;13966:20;13984:1;13966:20;:::i;:::-;13961:25;;14000:20;14018:1;14000:20;:::i;:::-;13995:25;;14188:1;14120:66;14116:74;14113:1;14110:81;14105:1;14098:9;14091:17;14087:105;14084:131;;;14195:18;;:::i;:::-;14084:131;14243:1;14240;14236:9;14225:20;;13903:348;;;;:::o;14257:180::-;14305:77;14302:1;14295:88;14402:4;14399:1;14392:15;14426:4;14423:1;14416:15;14443:185;14483:1;14500:20;14518:1;14500:20;:::i;:::-;14495:25;;14534:20;14552:1;14534:20;:::i;:::-;14529:25;;14573:1;14563:35;;14578:18;;:::i;:::-;14563:35;14620:1;14617;14613:9;14608:14;;14443:185;;;;:::o;14634:239::-;14774:34;14770:1;14762:6;14758:14;14751:58;14843:22;14838:2;14830:6;14826:15;14819:47;14634:239;:::o;14879:366::-;15021:3;15042:67;15106:2;15101:3;15042:67;:::i;:::-;15035:74;;15118:93;15207:3;15118:93;:::i;:::-;15236:2;15231:3;15227:12;15220:19;;14879:366;;;:::o;15251:419::-;15417:4;15455:2;15444:9;15440:18;15432:26;;15504:9;15498:4;15494:20;15490:1;15479:9;15475:17;15468:47;15532:131;15658:4;15532:131;:::i;:::-;15524:139;;15251:419;;;:::o;15676:239::-;15816:34;15812:1;15804:6;15800:14;15793:58;15885:22;15880:2;15872:6;15868:15;15861:47;15676:239;:::o;15921:366::-;16063:3;16084:67;16148:2;16143:3;16084:67;:::i;:::-;16077:74;;16160:93;16249:3;16160:93;:::i;:::-;16278:2;16273:3;16269:12;16262:19;;15921:366;;;:::o;16293:419::-;16459:4;16497:2;16486:9;16482:18;16474:26;;16546:9;16540:4;16536:20;16532:1;16521:9;16517:17;16510:47;16574:131;16700:4;16574:131;:::i;:::-;16566:139;;16293:419;;;:::o;16718:225::-;16858:34;16854:1;16846:6;16842:14;16835:58;16927:8;16922:2;16914:6;16910:15;16903:33;16718:225;:::o;16949:366::-;17091:3;17112:67;17176:2;17171:3;17112:67;:::i;:::-;17105:74;;17188:93;17277:3;17188:93;:::i;:::-;17306:2;17301:3;17297:12;17290:19;;16949:366;;;:::o;17321:419::-;17487:4;17525:2;17514:9;17510:18;17502:26;;17574:9;17568:4;17564:20;17560:1;17549:9;17545:17;17538:47;17602:131;17728:4;17602:131;:::i;:::-;17594:139;;17321:419;;;:::o;17746:305::-;17786:3;17805:20;17823:1;17805:20;:::i;:::-;17800:25;;17839:20;17857:1;17839:20;:::i;:::-;17834:25;;17993:1;17925:66;17921:74;17918:1;17915:81;17912:107;;;17999:18;;:::i;:::-;17912:107;18043:1;18040;18036:9;18029:16;;17746:305;;;;:::o;18057:177::-;18197:29;18193:1;18185:6;18181:14;18174:53;18057:177;:::o;18240:366::-;18382:3;18403:67;18467:2;18462:3;18403:67;:::i;:::-;18396:74;;18479:93;18568:3;18479:93;:::i;:::-;18597:2;18592:3;18588:12;18581:19;;18240:366;;;:::o;18612:419::-;18778:4;18816:2;18805:9;18801:18;18793:26;;18865:9;18859:4;18855:20;18851:1;18840:9;18836:17;18829:47;18893:131;19019:4;18893:131;:::i;:::-;18885:139;;18612:419;;;:::o;19037:223::-;19177:34;19173:1;19165:6;19161:14;19154:58;19246:6;19241:2;19233:6;19229:15;19222:31;19037:223;:::o;19266:366::-;19408:3;19429:67;19493:2;19488:3;19429:67;:::i;:::-;19422:74;;19505:93;19594:3;19505:93;:::i;:::-;19623:2;19618:3;19614:12;19607:19;;19266:366;;;:::o;19638:419::-;19804:4;19842:2;19831:9;19827:18;19819:26;;19891:9;19885:4;19881:20;19877:1;19866:9;19862:17;19855:47;19919:131;20045:4;19919:131;:::i;:::-;19911:139;;19638:419;;;:::o;20063:221::-;20203:34;20199:1;20191:6;20187:14;20180:58;20272:4;20267:2;20259:6;20255:15;20248:29;20063:221;:::o;20290:366::-;20432:3;20453:67;20517:2;20512:3;20453:67;:::i;:::-;20446:74;;20529:93;20618:3;20529:93;:::i;:::-;20647:2;20642:3;20638:12;20631:19;;20290:366;;;:::o;20662:419::-;20828:4;20866:2;20855:9;20851:18;20843:26;;20915:9;20909:4;20905:20;20901:1;20890:9;20886:17;20879:47;20943:131;21069:4;20943:131;:::i;:::-;20935:139;;20662:419;;;:::o;21087:224::-;21227:34;21223:1;21215:6;21211:14;21204:58;21296:7;21291:2;21283:6;21279:15;21272:32;21087:224;:::o;21317:366::-;21459:3;21480:67;21544:2;21539:3;21480:67;:::i;:::-;21473:74;;21556:93;21645:3;21556:93;:::i;:::-;21674:2;21669:3;21665:12;21658:19;;21317:366;;;:::o;21689:419::-;21855:4;21893:2;21882:9;21878:18;21870:26;;21942:9;21936:4;21932:20;21928:1;21917:9;21913:17;21906:47;21970:131;22096:4;21970:131;:::i;:::-;21962:139;;21689:419;;;:::o;22114:222::-;22254:34;22250:1;22242:6;22238:14;22231:58;22323:5;22318:2;22310:6;22306:15;22299:30;22114:222;:::o;22342:366::-;22484:3;22505:67;22569:2;22564:3;22505:67;:::i;:::-;22498:74;;22581:93;22670:3;22581:93;:::i;:::-;22699:2;22694:3;22690:12;22683:19;;22342:366;;;:::o;22714:419::-;22880:4;22918:2;22907:9;22903:18;22895:26;;22967:9;22961:4;22957:20;22953:1;22942:9;22938:17;22931:47;22995:131;23121:4;22995:131;:::i;:::-;22987:139;;22714:419;;;:::o;23139:236::-;23279:34;23275:1;23267:6;23263:14;23256:58;23348:19;23343:2;23335:6;23331:15;23324:44;23139:236;:::o;23381:366::-;23523:3;23544:67;23608:2;23603:3;23544:67;:::i;:::-;23537:74;;23620:93;23709:3;23620:93;:::i;:::-;23738:2;23733:3;23729:12;23722:19;;23381:366;;;:::o;23753:419::-;23919:4;23957:2;23946:9;23942:18;23934:26;;24006:9;24000:4;23996:20;23992:1;23981:9;23977:17;23970:47;24034:131;24160:4;24034:131;:::i;:::-;24026:139;;23753:419;;;:::o;24178:172::-;24318:24;24314:1;24306:6;24302:14;24295:48;24178:172;:::o;24356:366::-;24498:3;24519:67;24583:2;24578:3;24519:67;:::i;:::-;24512:74;;24595:93;24684:3;24595:93;:::i;:::-;24713:2;24708:3;24704:12;24697:19;;24356:366;;;:::o;24728:419::-;24894:4;24932:2;24921:9;24917:18;24909:26;;24981:9;24975:4;24971:20;24967:1;24956:9;24952:17;24945:47;25009:131;25135:4;25009:131;:::i;:::-;25001:139;;24728:419;;;:::o;25153:169::-;25293:21;25289:1;25281:6;25277:14;25270:45;25153:169;:::o;25328:366::-;25470:3;25491:67;25555:2;25550:3;25491:67;:::i;:::-;25484:74;;25567:93;25656:3;25567:93;:::i;:::-;25685:2;25680:3;25676:12;25669:19;;25328:366;;;:::o;25700:419::-;25866:4;25904:2;25893:9;25889:18;25881:26;;25953:9;25947:4;25943:20;25939:1;25928:9;25924:17;25917:47;25981:131;26107:4;25981:131;:::i;:::-;25973:139;;25700:419;;;:::o;26125:191::-;26165:4;26185:20;26203:1;26185:20;:::i;:::-;26180:25;;26219:20;26237:1;26219:20;:::i;:::-;26214:25;;26258:1;26255;26252:8;26249:34;;;26263:18;;:::i;:::-;26249:34;26308:1;26305;26301:9;26293:17;;26125:191;;;;:::o;26322:147::-;26423:11;26460:3;26445:18;;26322:147;;;;:::o;26475:114::-;;:::o;26595:398::-;26754:3;26775:83;26856:1;26851:3;26775:83;:::i;:::-;26768:90;;26867:93;26956:3;26867:93;:::i;:::-;26985:1;26980:3;26976:11;26969:18;;26595:398;;;:::o;26999:379::-;27183:3;27205:147;27348:3;27205:147;:::i;:::-;27198:154;;27369:3;27362:10;;26999:379;;;:::o;27384:442::-;27533:4;27571:2;27560:9;27556:18;27548:26;;27584:71;27652:1;27641:9;27637:17;27628:6;27584:71;:::i;:::-;27665:72;27733:2;27722:9;27718:18;27709:6;27665:72;:::i;:::-;27747;27815:2;27804:9;27800:18;27791:6;27747:72;:::i;:::-;27384:442;;;;;;:::o;27832:220::-;27972:34;27968:1;27960:6;27956:14;27949:58;28041:3;28036:2;28028:6;28024:15;28017:28;27832:220;:::o;28058:366::-;28200:3;28221:67;28285:2;28280:3;28221:67;:::i;:::-;28214:74;;28297:93;28386:3;28297:93;:::i;:::-;28415:2;28410:3;28406:12;28399:19;;28058:366;;;:::o;28430:419::-;28596:4;28634:2;28623:9;28619:18;28611:26;;28683:9;28677:4;28673:20;28669:1;28658:9;28654:17;28647:47;28711:131;28837:4;28711:131;:::i;:::-;28703:139;;28430:419;;;:::o;28855:180::-;28903:77;28900:1;28893:88;29000:4;28997:1;28990:15;29024:4;29021:1;29014:15;29041:180;29089:77;29086:1;29079:88;29186:4;29183:1;29176:15;29210:4;29207:1;29200:15;29227:143;29284:5;29315:6;29309:13;29300:22;;29331:33;29358:5;29331:33;:::i;:::-;29227:143;;;;:::o;29376:351::-;29446:6;29495:2;29483:9;29474:7;29470:23;29466:32;29463:119;;;29501:79;;:::i;:::-;29463:119;29621:1;29646:64;29702:7;29693:6;29682:9;29678:22;29646:64;:::i;:::-;29636:74;;29592:128;29376:351;;;;:::o;29733:85::-;29778:7;29807:5;29796:16;;29733:85;;;:::o;29824:158::-;29882:9;29915:61;29933:42;29942:32;29968:5;29942:32;:::i;:::-;29933:42;:::i;:::-;29915:61;:::i;:::-;29902:74;;29824:158;;;:::o;29988:147::-;30083:45;30122:5;30083:45;:::i;:::-;30078:3;30071:58;29988:147;;:::o;30141:114::-;30208:6;30242:5;30236:12;30226:22;;30141:114;;;:::o;30261:184::-;30360:11;30394:6;30389:3;30382:19;30434:4;30429:3;30425:14;30410:29;;30261:184;;;;:::o;30451:132::-;30518:4;30541:3;30533:11;;30571:4;30566:3;30562:14;30554:22;;30451:132;;;:::o;30589:108::-;30666:24;30684:5;30666:24;:::i;:::-;30661:3;30654:37;30589:108;;:::o;30703:179::-;30772:10;30793:46;30835:3;30827:6;30793:46;:::i;:::-;30871:4;30866:3;30862:14;30848:28;;30703:179;;;;:::o;30888:113::-;30958:4;30990;30985:3;30981:14;30973:22;;30888:113;;;:::o;31037:732::-;31156:3;31185:54;31233:5;31185:54;:::i;:::-;31255:86;31334:6;31329:3;31255:86;:::i;:::-;31248:93;;31365:56;31415:5;31365:56;:::i;:::-;31444:7;31475:1;31460:284;31485:6;31482:1;31479:13;31460:284;;;31561:6;31555:13;31588:63;31647:3;31632:13;31588:63;:::i;:::-;31581:70;;31674:60;31727:6;31674:60;:::i;:::-;31664:70;;31520:224;31507:1;31504;31500:9;31495:14;;31460:284;;;31464:14;31760:3;31753:10;;31161:608;;;31037:732;;;;:::o;31775:831::-;32038:4;32076:3;32065:9;32061:19;32053:27;;32090:71;32158:1;32147:9;32143:17;32134:6;32090:71;:::i;:::-;32171:80;32247:2;32236:9;32232:18;32223:6;32171:80;:::i;:::-;32298:9;32292:4;32288:20;32283:2;32272:9;32268:18;32261:48;32326:108;32429:4;32420:6;32326:108;:::i;:::-;32318:116;;32444:72;32512:2;32501:9;32497:18;32488:6;32444:72;:::i;:::-;32526:73;32594:3;32583:9;32579:19;32570:6;32526:73;:::i;:::-;31775:831;;;;;;;;:::o;32612:807::-;32861:4;32899:3;32888:9;32884:19;32876:27;;32913:71;32981:1;32970:9;32966:17;32957:6;32913:71;:::i;:::-;32994:72;33062:2;33051:9;33047:18;33038:6;32994:72;:::i;:::-;33076:80;33152:2;33141:9;33137:18;33128:6;33076:80;:::i;:::-;33166;33242:2;33231:9;33227:18;33218:6;33166:80;:::i;:::-;33256:73;33324:3;33313:9;33309:19;33300:6;33256:73;:::i;:::-;33339;33407:3;33396:9;33392:19;33383:6;33339:73;:::i;:::-;32612:807;;;;;;;;;:::o;33425:663::-;33513:6;33521;33529;33578:2;33566:9;33557:7;33553:23;33549:32;33546:119;;;33584:79;;:::i;:::-;33546:119;33704:1;33729:64;33785:7;33776:6;33765:9;33761:22;33729:64;:::i;:::-;33719:74;;33675:128;33842:2;33868:64;33924:7;33915:6;33904:9;33900:22;33868:64;:::i;:::-;33858:74;;33813:129;33981:2;34007:64;34063:7;34054:6;34043:9;34039:22;34007:64;:::i;:::-;33997:74;;33952:129;33425:663;;;;;:::o
Swarm Source
ipfs://d88fc0df3ec67f4c79c82e577c290ce2575e83e7f4292c78d85093f94e9d6fb2
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.