More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 73 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 18537537 | 286 days ago | IN | 0 ETH | 0.00182912 | ||||
Approve | 18537536 | 286 days ago | IN | 0 ETH | 0.00216329 | ||||
Approve | 18537536 | 286 days ago | IN | 0 ETH | 0.00216329 | ||||
Approve | 18537536 | 286 days ago | IN | 0 ETH | 0.00216329 | ||||
Update Sell Fees | 18537521 | 286 days ago | IN | 0 ETH | 0.00151593 | ||||
Update Buy Fees | 18537521 | 286 days ago | IN | 0 ETH | 0.00151698 | ||||
Approve | 18537493 | 286 days ago | IN | 0 ETH | 0.00275693 | ||||
Approve | 18537491 | 286 days ago | IN | 0 ETH | 0.00276672 | ||||
Approve | 18537490 | 286 days ago | IN | 0 ETH | 0.00278087 | ||||
Approve | 18537490 | 286 days ago | IN | 0 ETH | 0.00278087 | ||||
Approve | 18537489 | 286 days ago | IN | 0 ETH | 0.00276503 | ||||
Update Sell Fees | 18537488 | 286 days ago | IN | 0 ETH | 0.00201024 | ||||
Approve | 18537488 | 286 days ago | IN | 0 ETH | 0.00291714 | ||||
Approve | 18537488 | 286 days ago | IN | 0 ETH | 0.00291714 | ||||
Update Buy Fees | 18537487 | 286 days ago | IN | 0 ETH | 0.00200385 | ||||
Approve | 18537485 | 286 days ago | IN | 0 ETH | 0.00277152 | ||||
Approve | 18537484 | 286 days ago | IN | 0 ETH | 0.00277558 | ||||
Approve | 18537484 | 286 days ago | IN | 0 ETH | 0.00277558 | ||||
Approve | 18537477 | 286 days ago | IN | 0 ETH | 0.00281114 | ||||
Update Buy Fees | 18537476 | 286 days ago | IN | 0 ETH | 0.00189844 | ||||
Approve | 18537470 | 286 days ago | IN | 0 ETH | 0.00266551 | ||||
Approve | 18537469 | 286 days ago | IN | 0 ETH | 0.00284684 | ||||
Approve | 18537468 | 286 days ago | IN | 0 ETH | 0.00260041 | ||||
Approve | 18537468 | 286 days ago | IN | 0 ETH | 0.00463564 | ||||
Approve | 18537467 | 286 days ago | IN | 0 ETH | 0.00261917 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18537538 | 286 days ago | 0.03011951 ETH | ||||
18537538 | 286 days ago | 0.03011951 ETH | ||||
18537521 | 286 days ago | 0.00227292 ETH | ||||
18537521 | 286 days ago | 0.00227292 ETH | ||||
18537519 | 286 days ago | 0.00285141 ETH | ||||
18537519 | 286 days ago | 0.00285141 ETH | ||||
18537519 | 286 days ago | 0.00408409 ETH | ||||
18537519 | 286 days ago | 0.00408409 ETH | ||||
18537506 | 286 days ago | 0.00455599 ETH | ||||
18537506 | 286 days ago | 0.00455599 ETH | ||||
18537504 | 286 days ago | 0.00337667 ETH | ||||
18537504 | 286 days ago | 0.00337667 ETH | ||||
18537495 | 286 days ago | 0.02772832 ETH | ||||
18537495 | 286 days ago | 0.02772832 ETH | ||||
18537487 | 286 days ago | 0.00390286 ETH | ||||
18537487 | 286 days ago | 0.00390286 ETH | ||||
18537486 | 286 days ago | 0.01087525 ETH | ||||
18537486 | 286 days ago | 0.01087525 ETH | ||||
18537484 | 286 days ago | 0.0432328 ETH | ||||
18537484 | 286 days ago | 0.0432328 ETH | ||||
18537483 | 286 days ago | 0.05181722 ETH | ||||
18537483 | 286 days ago | 0.05181722 ETH | ||||
18537483 | 286 days ago | 0.05543138 ETH | ||||
18537483 | 286 days ago | 0.05543138 ETH | ||||
18537483 | 286 days ago | 0.05943752 ETH |
Loading...
Loading
Contract Name:
BTCPriceToken
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-09 */ // TG: https://t.me/priceofbtcerc20 // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; pragma experimental ABIEncoderV2; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer( address recipient, uint256 amount ) external returns (bool); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) /* pragma solidity ^0.8.0; */ /* import "../IERC20.sol"; */ /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } 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); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } ////// src/IUniswapV2Pair.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn( address to ) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } ////// src/IUniswapV2Router02.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract BTCPriceToken is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public percentForLPBurn = 25; // 25 = .25% bool public lpBurnEnabled = false; uint256 public lpBurnFrequency = 3600 seconds; uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellDevFee; uint256 public tokensForDev; address private USDC; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); bytes16 private constant HEX_DIGITS = "0123456789abcdef"; constructor( address _usdcAddress, address _routerAddress ) ERC20(unicode"", unicode"") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( _routerAddress ); USDC = _usdcAddress; address weth = _uniswapV2Router.WETH(); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), weth); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyDevFee = 25; uint256 _sellDevFee = 30; uint256 totalSupply = 1_000_000_000 * 1e18; maxTransactionAmount = 20_000_000 * 1e18; maxWallet = 20_000_000 * 1e18; // swapTokensAtAmount = (totalSupply * 5) / 10000; buyDevFee = _buyDevFee; buyTotalFees = buyDevFee; sellDevFee = _sellDevFee; sellTotalFees = sellDevFee; marketingWallet = address(msg.sender); // set as marketing wallet devWallet = address(msg.sender); // set as dev wallet excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _mint(msg.sender, totalSupply); } receive() external payable {} function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } function formatNumberWithCommas( string memory number ) internal pure returns (string memory) { // This function assumes `number` is a valid representation of a positive integer bytes memory numberBytes = bytes(number); uint len = numberBytes.length; // Calculate the length of the new string uint commas = (len - 1) / 3; bytes memory formatted = new bytes(len + commas); uint j = 1; // Counter for the new string for (uint i = 0; i < len; ++i) { // Copy the character from the original number formatted[len + commas - j] = numberBytes[len - i - 1]; // Insert a comma every three characters, except at the end if (i % 3 == 2 && i != len - 1) { j++; // Skip the position for the comma formatted[len + commas - j] = bytes1(","); j++; // Increment for the next number character } else { j++; // Increment for the next number character } } return string(formatted); } function formatNumberWithCommasAndDecimals( string memory number ) internal pure returns (string memory) { bytes memory numberBytes = bytes(number); uint len = numberBytes.length; // Separate the last two digits string memory decimals = new string(2); bytes memory decimalsBytes = bytes(decimals); // Boundary check: Ensure there's enough length for the decimal part if (len > 2) { decimalsBytes[0] = numberBytes[len - 2]; decimalsBytes[1] = numberBytes[len - 1]; // Create a new string for the whole number part without the last two digits string memory wholeNumberPart = new string(len - 2); bytes memory wholeNumberBytes = bytes(wholeNumberPart); for (uint i = 0; i < len - 2; i++) { wholeNumberBytes[i] = numberBytes[i]; } // Format the whole number part with commas wholeNumberPart = formatNumberWithCommas(string(wholeNumberBytes)); // Concatenate the whole number part with the decimal part return string(abi.encodePacked(wholeNumberPart, ".", decimals)); } else { // If the length is less or equal to 2, we don't have a whole number part // We assume the number is already in the format "0.xx" or "x.xx" return string(abi.encodePacked("0.", number)); } } function getBtcPriceInWeth() public view returns (uint256) { address btcAddress = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599; address wethAddress = uniswapV2Router.WETH(); address btcLpPair = IUniswapV2Factory(uniswapV2Router.factory()) .getPair(btcAddress, wethAddress); (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(btcLpPair) .getReserves(); //reserve 0 - btc, reserve 1 - eth uint256 priceBtcInEth = reserve1.div(reserve0); return priceBtcInEth.div(1e8); } function symbol() public view override returns (string memory) { uint256 usdcDecimals = IERC20Metadata(USDC).decimals(); address wethAddress = uniswapV2Router.WETH(); address ethLpPair = IUniswapV2Factory(uniswapV2Router.factory()) .getPair(USDC, wethAddress); (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(ethLpPair) .getReserves(); (uint256 reserveETH, uint256 reserveUSDC) = wethAddress < USDC ? (reserve0, reserve1) : (reserve1, reserve0); uint256 ethPrice = reserveUSDC.div(10 ** (usdcDecimals)).div( reserveETH.div(1e18) ); uint256 btcPrice = getBtcPriceInWeth(); string memory startString = "B: $"; return string.concat( startString, formatNumberWithCommasAndDecimals(toString(ethPrice * btcPrice)) ); } function name() public view override returns (string memory) { return symbol(); } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; lastLpBurnTime = block.timestamp; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount( uint256 newAmount ) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNum * (10 ** 18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * (10 ** 18); } function excludeFromMaxTransaction( address updAds, bool isEx ) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees(uint256 _devFee) external onlyOwner { buyDevFee = _devFee; buyTotalFees = buyDevFee; require(buyTotalFees <= 99, "Must keep fees at 99% or less"); } function updateSellFees(uint256 _devFee) external onlyOwner { sellDevFee = _devFee; sellTotalFees = sellDevFee; require(sellTotalFees <= 99, "Must keep fees at 99% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair( address pair, bool value ) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet( address newMarketingWallet ) external onlyOwner { marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { devWallet = newWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if ( transferDelayEnabled && to != owner() && to != address(uniswapV2Router) && !automatedMarketMakerPairs[to] ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForDev += fees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForDev += fees; } 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 swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForDev; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } uint256 amountToSwapForETH = contractBalance; swapTokensForEth(amountToSwapForETH); tokensForDev = 0; (success, ) = address(devWallet).call{value: address(this).balance}(""); } function manualSwapBack(uint256 amount) external onlyOwner { swapTokensForEth(amount); address(devWallet).call{value: address(this).balance}(""); } function setAutoLPBurnSettings( uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled ) external onlyOwner { require( _frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes" ); require( _percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%" ); lpBurnFrequency = _frequencyInSeconds; percentForLPBurn = _percent; lpBurnEnabled = _Enabled; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_usdcAddress","type":"address"},{"internalType":"address","name":"_routerAddress","type":"address"}],"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":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBtcPriceInWeth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526019600b556000600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b5060405162006f6e38038062006f6e8339818101604052810190620000cf919062000baa565b604051806020016040528060008152506040518060200160405280600081525081600390805190602001906200010792919062000a90565b5080600490805190602001906200012092919062000a90565b50505062000143620001376200055160201b60201c565b6200055960201b60201c565b600081905082601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fd919062000bf1565b9050620002128260016200061f60201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000292573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b8919062000bf1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630836040518363ffffffff1660e01b8152600401620002f492919062000c34565b6020604051808303816000875af115801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a919062000bf1565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200038260a05160016200061f60201b60201c565b6200039760a05160016200070960201b60201c565b6000601990506000601e905060006b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006008819055506a108b2a2c28029094000000600a81905550612710600582620003ea919062000c9a565b620003f6919062000d2a565b600981905550826017819055506017546014819055508160198190555060195460188190555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004c0620004b2620007aa60201b60201c565b6001620007d460201b60201c565b620004d3306001620007d460201b60201c565b620004e861dead6001620007d460201b60201c565b6200050a620004fc620007aa60201b60201c565b60016200061f60201b60201c565b6200051d3060016200061f60201b60201c565b6200053261dead60016200061f60201b60201c565b6200054433826200090e60201b60201c565b5050505050505062000f80565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200062f6200055160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000655620007aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006a59062000dc3565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007e46200055160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200080a620007aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085a9062000dc3565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000902919062000e02565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009779062000e6f565b60405180910390fd5b620009946000838362000a8660201b60201c565b8060026000828254620009a8919062000e91565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009ff919062000e91565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a66919062000eff565b60405180910390a362000a826000838362000a8b60201b60201c565b5050565b505050565b505050565b82805462000a9e9062000f4b565b90600052602060002090601f01602090048101928262000ac2576000855562000b0e565b82601f1062000add57805160ff191683800117855562000b0e565b8280016001018555821562000b0e579182015b8281111562000b0d57825182559160200191906001019062000af0565b5b50905062000b1d919062000b21565b5090565b5b8082111562000b3c57600081600090555060010162000b22565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b728262000b45565b9050919050565b62000b848162000b65565b811462000b9057600080fd5b50565b60008151905062000ba48162000b79565b92915050565b6000806040838503121562000bc45762000bc362000b40565b5b600062000bd48582860162000b93565b925050602062000be78582860162000b93565b9150509250929050565b60006020828403121562000c0a5762000c0962000b40565b5b600062000c1a8482850162000b93565b91505092915050565b62000c2e8162000b65565b82525050565b600060408201905062000c4b600083018562000c23565b62000c5a602083018462000c23565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ca78262000c61565b915062000cb48362000c61565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cf05762000cef62000c6b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d378262000c61565b915062000d448362000c61565b92508262000d575762000d5662000cfb565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000dab60208362000d62565b915062000db88262000d73565b602082019050919050565b6000602082019050818103600083015262000dde8162000d9c565b9050919050565b60008115159050919050565b62000dfc8162000de5565b82525050565b600060208201905062000e19600083018462000df1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e57601f8362000d62565b915062000e648262000e1f565b602082019050919050565b6000602082019050818103600083015262000e8a8162000e48565b9050919050565b600062000e9e8262000c61565b915062000eab8362000c61565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ee35762000ee262000c6b565b5b828201905092915050565b62000ef98162000c61565b82525050565b600060208201905062000f16600083018462000eee565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f6457607f821691505b60208210810362000f7a5762000f7962000f1c565b5b50919050565b60805160a051615f8962000fe56000396000818161122d0152611db6015260008181610e580152818161199b01528181611a2e015281816123e80152818161247b01528181612fe601528181613da101528181613e820152613ea90152615f896000f3fe6080604052600436106103905760003560e01c80638da5cb5b116101dc578063bffda98211610102578063d85ba063116100a0578063eba4c3331161006f578063eba4c33314610d61578063f11a24d314610d8a578063f2fde38b14610db5578063f8b45b0514610dde57610397565b8063d85ba06314610ca3578063dd62ed3e14610cce578063e2f4560514610d0b578063e884f26014610d3657610397565b8063c876d0b9116100dc578063c876d0b914610be5578063c8c8ebe414610c10578063c9f7f7e614610c3b578063d257b34f14610c6657610397565b8063bffda98214610b6a578063c024666814610b93578063c18bc19514610bbc57610397565b80639fccce321161017a578063a9059cbb11610149578063a9059cbb14610a9c578063aacebbe314610ad9578063b62496f514610b02578063bbc0c74214610b3f57610397565b80639fccce32146109de578063a0d82dc514610a09578063a457c2d714610a34578063a4c82a0014610a7157610397565b806395d89b41116101b657806395d89b41146109345780639a7a23d61461095f5780639c3b4fdc146109885780639ec22c0e146109b357610397565b80638da5cb5b146108b55780638ea5220f146108e0578063924de9b71461090b57610397565b806339509351116102c1578063715018a61161025f5780637571336a1161022e5780637571336a1461081f57806375f0a874146108485780637bce5a04146108735780638a8c523c1461089e57610397565b8063715018a61461078b57806371fc4688146107a2578063730c1888146107cb578063751039fc146107f457610397565b80634fbee1931161029b5780634fbee193146106bb5780636a486a8e146106f85780636ddd17131461072357806370a082311461074e57610397565b8063395093511461062857806349bd5a5e146106655780634a62bb651461069057610397565b8063199ffc721161032e57806327c8f8351161030857806327c8f8351461057c5780632c3e486c146105a75780632e82f1a0146105d2578063313ce567146105fd57610397565b8063199ffc72146104eb578063203e727e1461051657806323b872dd1461053f57610397565b80631694505e1161036a5780631694505e1461044157806318160ddd1461046c5780631816467f14610497578063184c16c5146104c057610397565b806306fdde031461039c578063095ea7b3146103c757806310d5de531461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e09565b6040516103be91906146e7565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e991906147a2565b610e18565b6040516103fb91906147fd565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190614818565b610e36565b60405161043891906147fd565b60405180910390f35b34801561044d57600080fd5b50610456610e56565b60405161046391906148a4565b60405180910390f35b34801561047857600080fd5b50610481610e7a565b60405161048e91906148ce565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190614818565b610e84565b005b3480156104cc57600080fd5b506104d5610f44565b6040516104e291906148ce565b60405180910390f35b3480156104f757600080fd5b50610500610f4a565b60405161050d91906148ce565b60405180910390f35b34801561052257600080fd5b5061053d600480360381019061053891906148e9565b610f50565b005b34801561054b57600080fd5b5061056660048036038101906105619190614916565b61105f565b60405161057391906147fd565b60405180910390f35b34801561058857600080fd5b50610591611157565b60405161059e9190614978565b60405180910390f35b3480156105b357600080fd5b506105bc61115d565b6040516105c991906148ce565b60405180910390f35b3480156105de57600080fd5b506105e7611163565b6040516105f491906147fd565b60405180910390f35b34801561060957600080fd5b50610612611176565b60405161061f91906149af565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906147a2565b61117f565b60405161065c91906147fd565b60405180910390f35b34801561067157600080fd5b5061067a61122b565b6040516106879190614978565b60405180910390f35b34801561069c57600080fd5b506106a561124f565b6040516106b291906147fd565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190614818565b611262565b6040516106ef91906147fd565b60405180910390f35b34801561070457600080fd5b5061070d6112b8565b60405161071a91906148ce565b60405180910390f35b34801561072f57600080fd5b506107386112be565b60405161074591906147fd565b60405180910390f35b34801561075a57600080fd5b5061077560048036038101906107709190614818565b6112d1565b60405161078291906148ce565b60405180910390f35b34801561079757600080fd5b506107a0611319565b005b3480156107ae57600080fd5b506107c960048036038101906107c491906148e9565b6113a1565b005b3480156107d757600080fd5b506107f260048036038101906107ed91906149f6565b611476565b005b34801561080057600080fd5b506108096115b6565b60405161081691906147fd565b60405180910390f35b34801561082b57600080fd5b5061084660048036038101906108419190614a49565b611656565b005b34801561085457600080fd5b5061085d61172d565b60405161086a9190614978565b60405180910390f35b34801561087f57600080fd5b50610888611753565b60405161089591906148ce565b60405180910390f35b3480156108aa57600080fd5b506108b3611759565b005b3480156108c157600080fd5b506108ca611814565b6040516108d79190614978565b60405180910390f35b3480156108ec57600080fd5b506108f561183e565b6040516109029190614978565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d9190614a89565b611864565b005b34801561094057600080fd5b506109496118fd565b60405161095691906146e7565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190614a49565b611d38565b005b34801561099457600080fd5b5061099d611e50565b6040516109aa91906148ce565b60405180910390f35b3480156109bf57600080fd5b506109c8611e56565b6040516109d591906148ce565b60405180910390f35b3480156109ea57600080fd5b506109f3611e5c565b604051610a0091906148ce565b60405180910390f35b348015610a1557600080fd5b50610a1e611e62565b604051610a2b91906148ce565b60405180910390f35b348015610a4057600080fd5b50610a5b6004803603810190610a5691906147a2565b611e68565b604051610a6891906147fd565b60405180910390f35b348015610a7d57600080fd5b50610a86611f53565b604051610a9391906148ce565b60405180910390f35b348015610aa857600080fd5b50610ac36004803603810190610abe91906147a2565b611f59565b604051610ad091906147fd565b60405180910390f35b348015610ae557600080fd5b50610b006004803603810190610afb9190614818565b611f77565b005b348015610b0e57600080fd5b50610b296004803603810190610b249190614818565b612037565b604051610b3691906147fd565b60405180910390f35b348015610b4b57600080fd5b50610b54612057565b604051610b6191906147fd565b60405180910390f35b348015610b7657600080fd5b50610b916004803603810190610b8c91906148e9565b61206a565b005b348015610b9f57600080fd5b50610bba6004803603810190610bb59190614a49565b61217d565b005b348015610bc857600080fd5b50610be36004803603810190610bde91906148e9565b6122a2565b005b348015610bf157600080fd5b50610bfa6123b1565b604051610c0791906147fd565b60405180910390f35b348015610c1c57600080fd5b50610c256123c4565b604051610c3291906148ce565b60405180910390f35b348015610c4757600080fd5b50610c506123ca565b604051610c5d91906148ce565b60405180910390f35b348015610c7257600080fd5b50610c8d6004803603810190610c8891906148e9565b612655565b604051610c9a91906147fd565b60405180910390f35b348015610caf57600080fd5b50610cb86127aa565b604051610cc591906148ce565b60405180910390f35b348015610cda57600080fd5b50610cf56004803603810190610cf09190614ab6565b6127b0565b604051610d0291906148ce565b60405180910390f35b348015610d1757600080fd5b50610d20612837565b604051610d2d91906148ce565b60405180910390f35b348015610d4257600080fd5b50610d4b61283d565b604051610d5891906147fd565b60405180910390f35b348015610d6d57600080fd5b50610d886004803603810190610d8391906148e9565b6128dd565b005b348015610d9657600080fd5b50610d9f6129b2565b604051610dac91906148ce565b60405180910390f35b348015610dc157600080fd5b50610ddc6004803603810190610dd79190614818565b6129b8565b005b348015610dea57600080fd5b50610df3612aaf565b604051610e0091906148ce565b60405180910390f35b6060610e136118fd565b905090565b6000610e2c610e25612ab5565b8484612abd565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e8c612ab5565b73ffffffffffffffffffffffffffffffffffffffff16610eaa611814565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790614b42565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b610f58612ab5565b73ffffffffffffffffffffffffffffffffffffffff16610f76611814565b73ffffffffffffffffffffffffffffffffffffffff1614610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc390614b42565b60405180910390fd5b670de0b6b3a76400006103e86001610fe2610e7a565b610fec9190614b91565b610ff69190614c1a565b6110009190614c1a565b811015611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990614cbd565b60405180910390fd5b670de0b6b3a7640000816110569190614b91565b60088190555050565b600061106c848484612c86565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110b7612ab5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90614d4f565b60405180910390fd5b61114b85611143612ab5565b858403612abd565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061122161118c612ab5565b84846001600061119a612ab5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461121c9190614d6f565b612abd565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611321612ab5565b73ffffffffffffffffffffffffffffffffffffffff1661133f611814565b73ffffffffffffffffffffffffffffffffffffffff1614611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c90614b42565b60405180910390fd5b61139f600061381d565b565b6113a9612ab5565b73ffffffffffffffffffffffffffffffffffffffff166113c7611814565b73ffffffffffffffffffffffffffffffffffffffff161461141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490614b42565b60405180910390fd5b8060178190555060175460148190555060636014541115611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a90614e11565b60405180910390fd5b50565b61147e612ab5565b73ffffffffffffffffffffffffffffffffffffffff1661149c611814565b73ffffffffffffffffffffffffffffffffffffffff16146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990614b42565b60405180910390fd5b610258831015611537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152e90614ea3565b60405180910390fd5b6103e8821115801561154a575060008210155b611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090614f35565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006115c0612ab5565b73ffffffffffffffffffffffffffffffffffffffff166115de611814565b73ffffffffffffffffffffffffffffffffffffffff1614611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162b90614b42565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61165e612ab5565b73ffffffffffffffffffffffffffffffffffffffff1661167c611814565b73ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990614b42565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611761612ab5565b73ffffffffffffffffffffffffffffffffffffffff1661177f611814565b73ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90614b42565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61186c612ab5565b73ffffffffffffffffffffffffffffffffffffffff1661188a611814565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790614b42565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60606000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561196e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119929190614f81565b60ff16905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a289190614fc3565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abb9190614fc3565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611b17929190614ff0565b602060405180830381865afa158015611b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b589190614fc3565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcc919061509b565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610611c50578284611c53565b83835b915091506000611ca4611c77670de0b6b3a7640000856138e390919063ffffffff16565b611c968a600a611c879190615221565b856138e390919063ffffffff16565b6138e390919063ffffffff16565b90506000611cb06123ca565b905060006040518060400160405280600481526020017f423a202400000000000000000000000000000000000000000000000000000000815250905080611d09611d048486611cff9190614b91565b6138f9565b6139c7565b604051602001611d1a9291906152a8565b6040516020818303038152906040529a505050505050505050505090565b611d40612ab5565b73ffffffffffffffffffffffffffffffffffffffff16611d5e611814565b73ffffffffffffffffffffffffffffffffffffffff1614611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab90614b42565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e399061533e565b60405180910390fd5b611e4c8282613c61565b5050565b60175481565b60105481565b601a5481565b60195481565b60008060016000611e77612ab5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b906153d0565b60405180910390fd5b611f48611f3f612ab5565b85858403612abd565b600191505092915050565b600e5481565b6000611f6d611f66612ab5565b8484612c86565b6001905092915050565b611f7f612ab5565b73ffffffffffffffffffffffffffffffffffffffff16611f9d611814565b73ffffffffffffffffffffffffffffffffffffffff1614611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea90614b42565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b612072612ab5565b73ffffffffffffffffffffffffffffffffffffffff16612090611814565b73ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90614b42565b60405180910390fd5b6120ef81613d02565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161213590615421565b60006040518083038185875af1925050503d8060008114612172576040519150601f19603f3d011682016040523d82523d6000602084013e612177565b606091505b50505050565b612185612ab5565b73ffffffffffffffffffffffffffffffffffffffff166121a3611814565b73ffffffffffffffffffffffffffffffffffffffff16146121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f090614b42565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161229691906147fd565b60405180910390a25050565b6122aa612ab5565b73ffffffffffffffffffffffffffffffffffffffff166122c8611814565b73ffffffffffffffffffffffffffffffffffffffff161461231e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231590614b42565b60405180910390fd5b670de0b6b3a76400006103e86005612334610e7a565b61233e9190614b91565b6123489190614c1a565b6123529190614c1a565b811015612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b906154a8565b60405180910390fd5b670de0b6b3a7640000816123a89190614b91565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b600080732260fac5e5542a773aa44fbcfedf7c193bc2c599905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124759190614fc3565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125089190614fc3565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390584846040518363ffffffff1660e01b8152600401612542929190614ff0565b602060405180830381865afa15801561255f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125839190614fc3565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156125d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f7919061509b565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600061263183836138e390919063ffffffff16565b905061264a6305f5e100826138e390919063ffffffff16565b965050505050505090565b600061265f612ab5565b73ffffffffffffffffffffffffffffffffffffffff1661267d611814565b73ffffffffffffffffffffffffffffffffffffffff16146126d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ca90614b42565b60405180910390fd5b620186a060016126e1610e7a565b6126eb9190614b91565b6126f59190614c1a565b821015612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272e9061553a565b60405180910390fd5b6103e86005612744610e7a565b61274e9190614b91565b6127589190614c1a565b82111561279a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612791906155cc565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612847612ab5565b73ffffffffffffffffffffffffffffffffffffffff16612865611814565b73ffffffffffffffffffffffffffffffffffffffff16146128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290614b42565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b6128e5612ab5565b73ffffffffffffffffffffffffffffffffffffffff16612903611814565b73ffffffffffffffffffffffffffffffffffffffff1614612959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295090614b42565b60405180910390fd5b80601981905550601954601881905550606360185411156129af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a690614e11565b60405180910390fd5b50565b60165481565b6129c0612ab5565b73ffffffffffffffffffffffffffffffffffffffff166129de611814565b73ffffffffffffffffffffffffffffffffffffffff1614612a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2b90614b42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9a9061565e565b60405180910390fd5b612aac8161381d565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b23906156f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9290615782565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c7991906148ce565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cec90615814565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5b906158a6565b60405180910390fd5b60008103612d7d57612d7883836000613f3f565b613818565b601160009054906101000a900460ff161561344057612d9a611814565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e085750612dd8611814565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e415750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e7b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e945750600560149054906101000a900460ff16155b1561343f57601160019054906101000a900460ff16612f8e57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f4e5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8490615912565b60405180910390fd5b5b601360009054906101000a900460ff168015612fdd5750612fad611814565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561303557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561308b5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131565743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613108906159ca565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131f95750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132a057600854811115613243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323a90615a5c565b60405180910390fd5b600a5461324f836112d1565b8261325a9190614d6f565b111561329b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329290615ac8565b60405180910390fd5b61343e565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133435750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133925760085481111561338d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338490615b5a565b60405180910390fd5b61343d565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661343c57600a546133ef836112d1565b826133fa9190614d6f565b111561343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290615ac8565b60405180910390fd5b5b5b5b5b5b600061344b306112d1565b9050600060095482101590508080156134705750601160029054906101000a900460ff165b80156134895750600560149054906101000a900460ff16155b80156134df5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135355750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561358b5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135cf576001600560146101000a81548160ff0219169083151502179055506135b36141be565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136855750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561368f57600090505b6000811561380857601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136f257506000601854115b1561373f5761371f6064613711601854886142c290919063ffffffff16565b6138e390919063ffffffff16565b905080601a60008282546137339190614d6f565b925050819055506137e4565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561379a57506000601454115b156137e3576137c760646137b9601454886142c290919063ffffffff16565b6138e390919063ffffffff16565b905080601a60008282546137db9190614d6f565b925050819055505b5b60008111156137f9576137f8873083613f3f565b5b80856138059190615b7a565b94505b613813878787613f3f565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836138f19190614c1a565b905092915050565b606060006001613908846142d8565b01905060008167ffffffffffffffff81111561392757613926615bae565b5b6040519080825280601f01601f1916602001820160405280156139595781602001600182028036833780820191505090505b509050600082602001820190505b6001156139bc578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816139b0576139af614beb565b5b04945060008503613967575b819350505050919050565b606060008290506000815190506000600267ffffffffffffffff8111156139f1576139f0615bae565b5b6040519080825280601f01601f191660200182016040528015613a235781602001600182028036833780820191505090505b50905060008190506002831115613c355783600284613a429190615b7a565b81518110613a5357613a52615bdd565b5b602001015160f81c60f81b81600081518110613a7257613a71615bdd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535083600184613aaf9190615b7a565b81518110613ac057613abf615bdd565b5b602001015160f81c60f81b81600181518110613adf57613ade615bdd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600284613b1d9190615b7a565b67ffffffffffffffff811115613b3657613b35615bae565b5b6040519080825280601f01601f191660200182016040528015613b685781602001600182028036833780820191505090505b509050600081905060005b600286613b809190615b7a565b811015613bfa57868181518110613b9a57613b99615bdd565b5b602001015160f81c60f81b828281518110613bb857613bb7615bdd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613bf290615c0c565b915050613b73565b50613c048161442b565b91508184604051602001613c19929190615ca0565b6040516020818303038152906040529650505050505050613c5c565b85604051602001613c469190615d1b565b6040516020818303038152906040529450505050505b919050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115613d1f57613d1e615bae565b5b604051908082528060200260200182016040528015613d4d5781602001602082028036833780820191505090505b5090503081600081518110613d6557613d64615bdd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e2e9190614fc3565b81600181518110613e4257613e41615bdd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ea7307f000000000000000000000000000000000000000000000000000000000000000084612abd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f09959493929190615e36565b600060405180830381600087803b158015613f2357600080fd5b505af1158015613f37573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa590615814565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361401d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614014906158a6565b60405180910390fd5b614028838383614644565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156140ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140a590615f02565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141419190614d6f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141a591906148ce565b60405180910390a36141b8848484614649565b50505050565b60006141c9306112d1565b90506000601a5490506000808314806141e25750600082145b156141ef575050506142c0565b60146009546141fe9190614b91565b8311156142175760146009546142149190614b91565b92505b600083905061422581613d02565b6000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161427390615421565b60006040518083038185875af1925050503d80600081146142b0576040519150601f19603f3d011682016040523d82523d6000602084013e6142b5565b606091505b505080925050505050505b565b600081836142d09190614b91565b905092915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614336577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161432c5761432b614beb565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310614373576d04ee2d6d415b85acef8100000000838161436957614368614beb565b5b0492506020810190505b662386f26fc1000083106143a257662386f26fc10000838161439857614397614beb565b5b0492506010810190505b6305f5e10083106143cb576305f5e10083816143c1576143c0614beb565b5b0492506008810190505b61271083106143f05761271083816143e6576143e5614beb565b5b0492506004810190505b60648310614413576064838161440957614408614beb565b5b0492506002810190505b600a8310614422576001810190505b80915050919050565b60606000829050600081519050600060036001836144499190615b7a565b6144539190614c1a565b9050600081836144639190614d6f565b67ffffffffffffffff81111561447c5761447b615bae565b5b6040519080825280601f01601f1916602001820160405280156144ae5781602001600182028036833780820191505090505b50905060006001905060005b848110156146365785600182876144d19190615b7a565b6144db9190615b7a565b815181106144ec576144eb615bdd565b5b602001015160f81c60f81b838386886145059190614d6f565b61450f9190615b7a565b815181106145205761451f615bdd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600260038261455e9190615f22565b14801561457757506001856145739190615b7a565b8114155b1561461657818061458790615c0c565b9250507f2c00000000000000000000000000000000000000000000000000000000000000838386886145b99190614d6f565b6145c39190615b7a565b815181106145d4576145d3615bdd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350818061460e90615c0c565b925050614625565b818061462190615c0c565b9250505b8061462f90615c0c565b90506144ba565b508195505050505050919050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561468857808201518184015260208101905061466d565b83811115614697576000848401525b50505050565b6000601f19601f8301169050919050565b60006146b98261464e565b6146c38185614659565b93506146d381856020860161466a565b6146dc8161469d565b840191505092915050565b6000602082019050818103600083015261470181846146ae565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147398261470e565b9050919050565b6147498161472e565b811461475457600080fd5b50565b60008135905061476681614740565b92915050565b6000819050919050565b61477f8161476c565b811461478a57600080fd5b50565b60008135905061479c81614776565b92915050565b600080604083850312156147b9576147b8614709565b5b60006147c785828601614757565b92505060206147d88582860161478d565b9150509250929050565b60008115159050919050565b6147f7816147e2565b82525050565b600060208201905061481260008301846147ee565b92915050565b60006020828403121561482e5761482d614709565b5b600061483c84828501614757565b91505092915050565b6000819050919050565b600061486a6148656148608461470e565b614845565b61470e565b9050919050565b600061487c8261484f565b9050919050565b600061488e82614871565b9050919050565b61489e81614883565b82525050565b60006020820190506148b96000830184614895565b92915050565b6148c88161476c565b82525050565b60006020820190506148e360008301846148bf565b92915050565b6000602082840312156148ff576148fe614709565b5b600061490d8482850161478d565b91505092915050565b60008060006060848603121561492f5761492e614709565b5b600061493d86828701614757565b935050602061494e86828701614757565b925050604061495f8682870161478d565b9150509250925092565b6149728161472e565b82525050565b600060208201905061498d6000830184614969565b92915050565b600060ff82169050919050565b6149a981614993565b82525050565b60006020820190506149c460008301846149a0565b92915050565b6149d3816147e2565b81146149de57600080fd5b50565b6000813590506149f0816149ca565b92915050565b600080600060608486031215614a0f57614a0e614709565b5b6000614a1d8682870161478d565b9350506020614a2e8682870161478d565b9250506040614a3f868287016149e1565b9150509250925092565b60008060408385031215614a6057614a5f614709565b5b6000614a6e85828601614757565b9250506020614a7f858286016149e1565b9150509250929050565b600060208284031215614a9f57614a9e614709565b5b6000614aad848285016149e1565b91505092915050565b60008060408385031215614acd57614acc614709565b5b6000614adb85828601614757565b9250506020614aec85828601614757565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b2c602083614659565b9150614b3782614af6565b602082019050919050565b60006020820190508181036000830152614b5b81614b1f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b9c8261476c565b9150614ba78361476c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614be057614bdf614b62565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c258261476c565b9150614c308361476c565b925082614c4057614c3f614beb565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614ca7602f83614659565b9150614cb282614c4b565b604082019050919050565b60006020820190508181036000830152614cd681614c9a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d39602883614659565b9150614d4482614cdd565b604082019050919050565b60006020820190508181036000830152614d6881614d2c565b9050919050565b6000614d7a8261476c565b9150614d858361476c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dba57614db9614b62565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614dfb601d83614659565b9150614e0682614dc5565b602082019050919050565b60006020820190508181036000830152614e2a81614dee565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614e8d603383614659565b9150614e9882614e31565b604082019050919050565b60006020820190508181036000830152614ebc81614e80565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614f1f603083614659565b9150614f2a82614ec3565b604082019050919050565b60006020820190508181036000830152614f4e81614f12565b9050919050565b614f5e81614993565b8114614f6957600080fd5b50565b600081519050614f7b81614f55565b92915050565b600060208284031215614f9757614f96614709565b5b6000614fa584828501614f6c565b91505092915050565b600081519050614fbd81614740565b92915050565b600060208284031215614fd957614fd8614709565b5b6000614fe784828501614fae565b91505092915050565b60006040820190506150056000830185614969565b6150126020830184614969565b9392505050565b60006dffffffffffffffffffffffffffff82169050919050565b61503c81615019565b811461504757600080fd5b50565b60008151905061505981615033565b92915050565b600063ffffffff82169050919050565b6150788161505f565b811461508357600080fd5b50565b6000815190506150958161506f565b92915050565b6000806000606084860312156150b4576150b3614709565b5b60006150c28682870161504a565b93505060206150d38682870161504a565b92505060406150e486828701615086565b9150509250925092565b60008160011c9050919050565b6000808291508390505b60018511156151455780860481111561512157615120614b62565b5b60018516156151305780820291505b808102905061513e856150ee565b9450615105565b94509492505050565b60008261515e576001905061521a565b8161516c576000905061521a565b8160018114615182576002811461518c576151bb565b600191505061521a565b60ff84111561519e5761519d614b62565b5b8360020a9150848211156151b5576151b4614b62565b5b5061521a565b5060208310610133831016604e8410600b84101617156151f05782820a9050838111156151eb576151ea614b62565b5b61521a565b6151fd84848460016150fb565b9250905081840481111561521457615213614b62565b5b81810290505b9392505050565b600061522c8261476c565b91506152378361476c565b92506152647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461514e565b905092915050565b600081905092915050565b60006152828261464e565b61528c818561526c565b935061529c81856020860161466a565b80840191505092915050565b60006152b48285615277565b91506152c08284615277565b91508190509392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000615328603983614659565b9150615333826152cc565b604082019050919050565b600060208201905081810360008301526153578161531b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006153ba602583614659565b91506153c58261535e565b604082019050919050565b600060208201905081810360008301526153e9816153ad565b9050919050565b600081905092915050565b50565b600061540b6000836153f0565b9150615416826153fb565b600082019050919050565b600061542c826153fe565b9150819050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000615492602483614659565b915061549d82615436565b604082019050919050565b600060208201905081810360008301526154c181615485565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615524603583614659565b915061552f826154c8565b604082019050919050565b6000602082019050818103600083015261555381615517565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006155b6603483614659565b91506155c18261555a565b604082019050919050565b600060208201905081810360008301526155e5816155a9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615648602683614659565b9150615653826155ec565b604082019050919050565b600060208201905081810360008301526156778161563b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156da602483614659565b91506156e58261567e565b604082019050919050565b60006020820190508181036000830152615709816156cd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061576c602283614659565b915061577782615710565b604082019050919050565b6000602082019050818103600083015261579b8161575f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157fe602583614659565b9150615809826157a2565b604082019050919050565b6000602082019050818103600083015261582d816157f1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615890602383614659565b915061589b82615834565b604082019050919050565b600060208201905081810360008301526158bf81615883565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006158fc601683614659565b9150615907826158c6565b602082019050919050565b6000602082019050818103600083015261592b816158ef565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006159b4604983614659565b91506159bf82615932565b606082019050919050565b600060208201905081810360008301526159e3816159a7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615a46603583614659565b9150615a51826159ea565b604082019050919050565b60006020820190508181036000830152615a7581615a39565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615ab2601383614659565b9150615abd82615a7c565b602082019050919050565b60006020820190508181036000830152615ae181615aa5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615b44603683614659565b9150615b4f82615ae8565b604082019050919050565b60006020820190508181036000830152615b7381615b37565b9050919050565b6000615b858261476c565b9150615b908361476c565b925082821015615ba357615ba2614b62565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000615c178261476c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615c4957615c48614b62565b5b600182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b6000615c8a60018361526c565b9150615c9582615c54565b600182019050919050565b6000615cac8285615277565b9150615cb782615c7d565b9150615cc38284615277565b91508190509392505050565b7f302e000000000000000000000000000000000000000000000000000000000000600082015250565b6000615d0560028361526c565b9150615d1082615ccf565b600282019050919050565b6000615d2682615cf8565b9150615d328284615277565b915081905092915050565b6000819050919050565b6000615d62615d5d615d5884615d3d565b614845565b61476c565b9050919050565b615d7281615d47565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615dad8161472e565b82525050565b6000615dbf8383615da4565b60208301905092915050565b6000602082019050919050565b6000615de382615d78565b615ded8185615d83565b9350615df883615d94565b8060005b83811015615e29578151615e108882615db3565b9750615e1b83615dcb565b925050600181019050615dfc565b5085935050505092915050565b600060a082019050615e4b60008301886148bf565b615e586020830187615d69565b8181036040830152615e6a8186615dd8565b9050615e796060830185614969565b615e8660808301846148bf565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615eec602683614659565b9150615ef782615e90565b604082019050919050565b60006020820190508181036000830152615f1b81615edf565b9050919050565b6000615f2d8261476c565b9150615f388361476c565b925082615f4857615f47614beb565b5b82820690509291505056fea264697066735822122015d66f998bc95fd9a55c121c7a77f4c959404ed71daf16430fa11dfc1c39dcb364736f6c634300080d0033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode
0x6080604052600436106103905760003560e01c80638da5cb5b116101dc578063bffda98211610102578063d85ba063116100a0578063eba4c3331161006f578063eba4c33314610d61578063f11a24d314610d8a578063f2fde38b14610db5578063f8b45b0514610dde57610397565b8063d85ba06314610ca3578063dd62ed3e14610cce578063e2f4560514610d0b578063e884f26014610d3657610397565b8063c876d0b9116100dc578063c876d0b914610be5578063c8c8ebe414610c10578063c9f7f7e614610c3b578063d257b34f14610c6657610397565b8063bffda98214610b6a578063c024666814610b93578063c18bc19514610bbc57610397565b80639fccce321161017a578063a9059cbb11610149578063a9059cbb14610a9c578063aacebbe314610ad9578063b62496f514610b02578063bbc0c74214610b3f57610397565b80639fccce32146109de578063a0d82dc514610a09578063a457c2d714610a34578063a4c82a0014610a7157610397565b806395d89b41116101b657806395d89b41146109345780639a7a23d61461095f5780639c3b4fdc146109885780639ec22c0e146109b357610397565b80638da5cb5b146108b55780638ea5220f146108e0578063924de9b71461090b57610397565b806339509351116102c1578063715018a61161025f5780637571336a1161022e5780637571336a1461081f57806375f0a874146108485780637bce5a04146108735780638a8c523c1461089e57610397565b8063715018a61461078b57806371fc4688146107a2578063730c1888146107cb578063751039fc146107f457610397565b80634fbee1931161029b5780634fbee193146106bb5780636a486a8e146106f85780636ddd17131461072357806370a082311461074e57610397565b8063395093511461062857806349bd5a5e146106655780634a62bb651461069057610397565b8063199ffc721161032e57806327c8f8351161030857806327c8f8351461057c5780632c3e486c146105a75780632e82f1a0146105d2578063313ce567146105fd57610397565b8063199ffc72146104eb578063203e727e1461051657806323b872dd1461053f57610397565b80631694505e1161036a5780631694505e1461044157806318160ddd1461046c5780631816467f14610497578063184c16c5146104c057610397565b806306fdde031461039c578063095ea7b3146103c757806310d5de531461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e09565b6040516103be91906146e7565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e991906147a2565b610e18565b6040516103fb91906147fd565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190614818565b610e36565b60405161043891906147fd565b60405180910390f35b34801561044d57600080fd5b50610456610e56565b60405161046391906148a4565b60405180910390f35b34801561047857600080fd5b50610481610e7a565b60405161048e91906148ce565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190614818565b610e84565b005b3480156104cc57600080fd5b506104d5610f44565b6040516104e291906148ce565b60405180910390f35b3480156104f757600080fd5b50610500610f4a565b60405161050d91906148ce565b60405180910390f35b34801561052257600080fd5b5061053d600480360381019061053891906148e9565b610f50565b005b34801561054b57600080fd5b5061056660048036038101906105619190614916565b61105f565b60405161057391906147fd565b60405180910390f35b34801561058857600080fd5b50610591611157565b60405161059e9190614978565b60405180910390f35b3480156105b357600080fd5b506105bc61115d565b6040516105c991906148ce565b60405180910390f35b3480156105de57600080fd5b506105e7611163565b6040516105f491906147fd565b60405180910390f35b34801561060957600080fd5b50610612611176565b60405161061f91906149af565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906147a2565b61117f565b60405161065c91906147fd565b60405180910390f35b34801561067157600080fd5b5061067a61122b565b6040516106879190614978565b60405180910390f35b34801561069c57600080fd5b506106a561124f565b6040516106b291906147fd565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190614818565b611262565b6040516106ef91906147fd565b60405180910390f35b34801561070457600080fd5b5061070d6112b8565b60405161071a91906148ce565b60405180910390f35b34801561072f57600080fd5b506107386112be565b60405161074591906147fd565b60405180910390f35b34801561075a57600080fd5b5061077560048036038101906107709190614818565b6112d1565b60405161078291906148ce565b60405180910390f35b34801561079757600080fd5b506107a0611319565b005b3480156107ae57600080fd5b506107c960048036038101906107c491906148e9565b6113a1565b005b3480156107d757600080fd5b506107f260048036038101906107ed91906149f6565b611476565b005b34801561080057600080fd5b506108096115b6565b60405161081691906147fd565b60405180910390f35b34801561082b57600080fd5b5061084660048036038101906108419190614a49565b611656565b005b34801561085457600080fd5b5061085d61172d565b60405161086a9190614978565b60405180910390f35b34801561087f57600080fd5b50610888611753565b60405161089591906148ce565b60405180910390f35b3480156108aa57600080fd5b506108b3611759565b005b3480156108c157600080fd5b506108ca611814565b6040516108d79190614978565b60405180910390f35b3480156108ec57600080fd5b506108f561183e565b6040516109029190614978565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d9190614a89565b611864565b005b34801561094057600080fd5b506109496118fd565b60405161095691906146e7565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190614a49565b611d38565b005b34801561099457600080fd5b5061099d611e50565b6040516109aa91906148ce565b60405180910390f35b3480156109bf57600080fd5b506109c8611e56565b6040516109d591906148ce565b60405180910390f35b3480156109ea57600080fd5b506109f3611e5c565b604051610a0091906148ce565b60405180910390f35b348015610a1557600080fd5b50610a1e611e62565b604051610a2b91906148ce565b60405180910390f35b348015610a4057600080fd5b50610a5b6004803603810190610a5691906147a2565b611e68565b604051610a6891906147fd565b60405180910390f35b348015610a7d57600080fd5b50610a86611f53565b604051610a9391906148ce565b60405180910390f35b348015610aa857600080fd5b50610ac36004803603810190610abe91906147a2565b611f59565b604051610ad091906147fd565b60405180910390f35b348015610ae557600080fd5b50610b006004803603810190610afb9190614818565b611f77565b005b348015610b0e57600080fd5b50610b296004803603810190610b249190614818565b612037565b604051610b3691906147fd565b60405180910390f35b348015610b4b57600080fd5b50610b54612057565b604051610b6191906147fd565b60405180910390f35b348015610b7657600080fd5b50610b916004803603810190610b8c91906148e9565b61206a565b005b348015610b9f57600080fd5b50610bba6004803603810190610bb59190614a49565b61217d565b005b348015610bc857600080fd5b50610be36004803603810190610bde91906148e9565b6122a2565b005b348015610bf157600080fd5b50610bfa6123b1565b604051610c0791906147fd565b60405180910390f35b348015610c1c57600080fd5b50610c256123c4565b604051610c3291906148ce565b60405180910390f35b348015610c4757600080fd5b50610c506123ca565b604051610c5d91906148ce565b60405180910390f35b348015610c7257600080fd5b50610c8d6004803603810190610c8891906148e9565b612655565b604051610c9a91906147fd565b60405180910390f35b348015610caf57600080fd5b50610cb86127aa565b604051610cc591906148ce565b60405180910390f35b348015610cda57600080fd5b50610cf56004803603810190610cf09190614ab6565b6127b0565b604051610d0291906148ce565b60405180910390f35b348015610d1757600080fd5b50610d20612837565b604051610d2d91906148ce565b60405180910390f35b348015610d4257600080fd5b50610d4b61283d565b604051610d5891906147fd565b60405180910390f35b348015610d6d57600080fd5b50610d886004803603810190610d8391906148e9565b6128dd565b005b348015610d9657600080fd5b50610d9f6129b2565b604051610dac91906148ce565b60405180910390f35b348015610dc157600080fd5b50610ddc6004803603810190610dd79190614818565b6129b8565b005b348015610dea57600080fd5b50610df3612aaf565b604051610e0091906148ce565b60405180910390f35b6060610e136118fd565b905090565b6000610e2c610e25612ab5565b8484612abd565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e8c612ab5565b73ffffffffffffffffffffffffffffffffffffffff16610eaa611814565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790614b42565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b610f58612ab5565b73ffffffffffffffffffffffffffffffffffffffff16610f76611814565b73ffffffffffffffffffffffffffffffffffffffff1614610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc390614b42565b60405180910390fd5b670de0b6b3a76400006103e86001610fe2610e7a565b610fec9190614b91565b610ff69190614c1a565b6110009190614c1a565b811015611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990614cbd565b60405180910390fd5b670de0b6b3a7640000816110569190614b91565b60088190555050565b600061106c848484612c86565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110b7612ab5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90614d4f565b60405180910390fd5b61114b85611143612ab5565b858403612abd565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061122161118c612ab5565b84846001600061119a612ab5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461121c9190614d6f565b612abd565b6001905092915050565b7f000000000000000000000000be42d6ebccf183cbcc61b2e900cb664de582cf4981565b601160009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611321612ab5565b73ffffffffffffffffffffffffffffffffffffffff1661133f611814565b73ffffffffffffffffffffffffffffffffffffffff1614611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c90614b42565b60405180910390fd5b61139f600061381d565b565b6113a9612ab5565b73ffffffffffffffffffffffffffffffffffffffff166113c7611814565b73ffffffffffffffffffffffffffffffffffffffff161461141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490614b42565b60405180910390fd5b8060178190555060175460148190555060636014541115611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a90614e11565b60405180910390fd5b50565b61147e612ab5565b73ffffffffffffffffffffffffffffffffffffffff1661149c611814565b73ffffffffffffffffffffffffffffffffffffffff16146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990614b42565b60405180910390fd5b610258831015611537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152e90614ea3565b60405180910390fd5b6103e8821115801561154a575060008210155b611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090614f35565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006115c0612ab5565b73ffffffffffffffffffffffffffffffffffffffff166115de611814565b73ffffffffffffffffffffffffffffffffffffffff1614611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162b90614b42565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61165e612ab5565b73ffffffffffffffffffffffffffffffffffffffff1661167c611814565b73ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990614b42565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611761612ab5565b73ffffffffffffffffffffffffffffffffffffffff1661177f611814565b73ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90614b42565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61186c612ab5565b73ffffffffffffffffffffffffffffffffffffffff1661188a611814565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790614b42565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60606000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561196e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119929190614f81565b60ff16905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a289190614fc3565b905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abb9190614fc3565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611b17929190614ff0565b602060405180830381865afa158015611b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b589190614fc3565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcc919061509b565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610611c50578284611c53565b83835b915091506000611ca4611c77670de0b6b3a7640000856138e390919063ffffffff16565b611c968a600a611c879190615221565b856138e390919063ffffffff16565b6138e390919063ffffffff16565b90506000611cb06123ca565b905060006040518060400160405280600481526020017f423a202400000000000000000000000000000000000000000000000000000000815250905080611d09611d048486611cff9190614b91565b6138f9565b6139c7565b604051602001611d1a9291906152a8565b6040516020818303038152906040529a505050505050505050505090565b611d40612ab5565b73ffffffffffffffffffffffffffffffffffffffff16611d5e611814565b73ffffffffffffffffffffffffffffffffffffffff1614611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab90614b42565b60405180910390fd5b7f000000000000000000000000be42d6ebccf183cbcc61b2e900cb664de582cf4973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e399061533e565b60405180910390fd5b611e4c8282613c61565b5050565b60175481565b60105481565b601a5481565b60195481565b60008060016000611e77612ab5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b906153d0565b60405180910390fd5b611f48611f3f612ab5565b85858403612abd565b600191505092915050565b600e5481565b6000611f6d611f66612ab5565b8484612c86565b6001905092915050565b611f7f612ab5565b73ffffffffffffffffffffffffffffffffffffffff16611f9d611814565b73ffffffffffffffffffffffffffffffffffffffff1614611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea90614b42565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b612072612ab5565b73ffffffffffffffffffffffffffffffffffffffff16612090611814565b73ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90614b42565b60405180910390fd5b6120ef81613d02565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161213590615421565b60006040518083038185875af1925050503d8060008114612172576040519150601f19603f3d011682016040523d82523d6000602084013e612177565b606091505b50505050565b612185612ab5565b73ffffffffffffffffffffffffffffffffffffffff166121a3611814565b73ffffffffffffffffffffffffffffffffffffffff16146121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f090614b42565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161229691906147fd565b60405180910390a25050565b6122aa612ab5565b73ffffffffffffffffffffffffffffffffffffffff166122c8611814565b73ffffffffffffffffffffffffffffffffffffffff161461231e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231590614b42565b60405180910390fd5b670de0b6b3a76400006103e86005612334610e7a565b61233e9190614b91565b6123489190614c1a565b6123529190614c1a565b811015612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b906154a8565b60405180910390fd5b670de0b6b3a7640000816123a89190614b91565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b600080732260fac5e5542a773aa44fbcfedf7c193bc2c599905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124759190614fc3565b905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125089190614fc3565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390584846040518363ffffffff1660e01b8152600401612542929190614ff0565b602060405180830381865afa15801561255f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125839190614fc3565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156125d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f7919061509b565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600061263183836138e390919063ffffffff16565b905061264a6305f5e100826138e390919063ffffffff16565b965050505050505090565b600061265f612ab5565b73ffffffffffffffffffffffffffffffffffffffff1661267d611814565b73ffffffffffffffffffffffffffffffffffffffff16146126d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ca90614b42565b60405180910390fd5b620186a060016126e1610e7a565b6126eb9190614b91565b6126f59190614c1a565b821015612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272e9061553a565b60405180910390fd5b6103e86005612744610e7a565b61274e9190614b91565b6127589190614c1a565b82111561279a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612791906155cc565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612847612ab5565b73ffffffffffffffffffffffffffffffffffffffff16612865611814565b73ffffffffffffffffffffffffffffffffffffffff16146128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290614b42565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b6128e5612ab5565b73ffffffffffffffffffffffffffffffffffffffff16612903611814565b73ffffffffffffffffffffffffffffffffffffffff1614612959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295090614b42565b60405180910390fd5b80601981905550601954601881905550606360185411156129af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a690614e11565b60405180910390fd5b50565b60165481565b6129c0612ab5565b73ffffffffffffffffffffffffffffffffffffffff166129de611814565b73ffffffffffffffffffffffffffffffffffffffff1614612a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2b90614b42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9a9061565e565b60405180910390fd5b612aac8161381d565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b23906156f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9290615782565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c7991906148ce565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cec90615814565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5b906158a6565b60405180910390fd5b60008103612d7d57612d7883836000613f3f565b613818565b601160009054906101000a900460ff161561344057612d9a611814565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e085750612dd8611814565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e415750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e7b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e945750600560149054906101000a900460ff16155b1561343f57601160019054906101000a900460ff16612f8e57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f4e5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8490615912565b60405180910390fd5b5b601360009054906101000a900460ff168015612fdd5750612fad611814565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561303557507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561308b5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131565743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613108906159ca565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131f95750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132a057600854811115613243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323a90615a5c565b60405180910390fd5b600a5461324f836112d1565b8261325a9190614d6f565b111561329b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329290615ac8565b60405180910390fd5b61343e565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133435750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133925760085481111561338d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338490615b5a565b60405180910390fd5b61343d565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661343c57600a546133ef836112d1565b826133fa9190614d6f565b111561343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290615ac8565b60405180910390fd5b5b5b5b5b5b600061344b306112d1565b9050600060095482101590508080156134705750601160029054906101000a900460ff165b80156134895750600560149054906101000a900460ff16155b80156134df5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135355750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561358b5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135cf576001600560146101000a81548160ff0219169083151502179055506135b36141be565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136855750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561368f57600090505b6000811561380857601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136f257506000601854115b1561373f5761371f6064613711601854886142c290919063ffffffff16565b6138e390919063ffffffff16565b905080601a60008282546137339190614d6f565b925050819055506137e4565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561379a57506000601454115b156137e3576137c760646137b9601454886142c290919063ffffffff16565b6138e390919063ffffffff16565b905080601a60008282546137db9190614d6f565b925050819055505b5b60008111156137f9576137f8873083613f3f565b5b80856138059190615b7a565b94505b613813878787613f3f565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836138f19190614c1a565b905092915050565b606060006001613908846142d8565b01905060008167ffffffffffffffff81111561392757613926615bae565b5b6040519080825280601f01601f1916602001820160405280156139595781602001600182028036833780820191505090505b509050600082602001820190505b6001156139bc578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816139b0576139af614beb565b5b04945060008503613967575b819350505050919050565b606060008290506000815190506000600267ffffffffffffffff8111156139f1576139f0615bae565b5b6040519080825280601f01601f191660200182016040528015613a235781602001600182028036833780820191505090505b50905060008190506002831115613c355783600284613a429190615b7a565b81518110613a5357613a52615bdd565b5b602001015160f81c60f81b81600081518110613a7257613a71615bdd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535083600184613aaf9190615b7a565b81518110613ac057613abf615bdd565b5b602001015160f81c60f81b81600181518110613adf57613ade615bdd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600284613b1d9190615b7a565b67ffffffffffffffff811115613b3657613b35615bae565b5b6040519080825280601f01601f191660200182016040528015613b685781602001600182028036833780820191505090505b509050600081905060005b600286613b809190615b7a565b811015613bfa57868181518110613b9a57613b99615bdd565b5b602001015160f81c60f81b828281518110613bb857613bb7615bdd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613bf290615c0c565b915050613b73565b50613c048161442b565b91508184604051602001613c19929190615ca0565b6040516020818303038152906040529650505050505050613c5c565b85604051602001613c469190615d1b565b6040516020818303038152906040529450505050505b919050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115613d1f57613d1e615bae565b5b604051908082528060200260200182016040528015613d4d5781602001602082028036833780820191505090505b5090503081600081518110613d6557613d64615bdd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e2e9190614fc3565b81600181518110613e4257613e41615bdd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ea7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612abd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f09959493929190615e36565b600060405180830381600087803b158015613f2357600080fd5b505af1158015613f37573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa590615814565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361401d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614014906158a6565b60405180910390fd5b614028838383614644565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156140ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140a590615f02565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141419190614d6f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141a591906148ce565b60405180910390a36141b8848484614649565b50505050565b60006141c9306112d1565b90506000601a5490506000808314806141e25750600082145b156141ef575050506142c0565b60146009546141fe9190614b91565b8311156142175760146009546142149190614b91565b92505b600083905061422581613d02565b6000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161427390615421565b60006040518083038185875af1925050503d80600081146142b0576040519150601f19603f3d011682016040523d82523d6000602084013e6142b5565b606091505b505080925050505050505b565b600081836142d09190614b91565b905092915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614336577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161432c5761432b614beb565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310614373576d04ee2d6d415b85acef8100000000838161436957614368614beb565b5b0492506020810190505b662386f26fc1000083106143a257662386f26fc10000838161439857614397614beb565b5b0492506010810190505b6305f5e10083106143cb576305f5e10083816143c1576143c0614beb565b5b0492506008810190505b61271083106143f05761271083816143e6576143e5614beb565b5b0492506004810190505b60648310614413576064838161440957614408614beb565b5b0492506002810190505b600a8310614422576001810190505b80915050919050565b60606000829050600081519050600060036001836144499190615b7a565b6144539190614c1a565b9050600081836144639190614d6f565b67ffffffffffffffff81111561447c5761447b615bae565b5b6040519080825280601f01601f1916602001820160405280156144ae5781602001600182028036833780820191505090505b50905060006001905060005b848110156146365785600182876144d19190615b7a565b6144db9190615b7a565b815181106144ec576144eb615bdd565b5b602001015160f81c60f81b838386886145059190614d6f565b61450f9190615b7a565b815181106145205761451f615bdd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600260038261455e9190615f22565b14801561457757506001856145739190615b7a565b8114155b1561461657818061458790615c0c565b9250507f2c00000000000000000000000000000000000000000000000000000000000000838386886145b99190614d6f565b6145c39190615b7a565b815181106145d4576145d3615bdd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350818061460e90615c0c565b925050614625565b818061462190615c0c565b9250505b8061462f90615c0c565b90506144ba565b508195505050505050919050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561468857808201518184015260208101905061466d565b83811115614697576000848401525b50505050565b6000601f19601f8301169050919050565b60006146b98261464e565b6146c38185614659565b93506146d381856020860161466a565b6146dc8161469d565b840191505092915050565b6000602082019050818103600083015261470181846146ae565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147398261470e565b9050919050565b6147498161472e565b811461475457600080fd5b50565b60008135905061476681614740565b92915050565b6000819050919050565b61477f8161476c565b811461478a57600080fd5b50565b60008135905061479c81614776565b92915050565b600080604083850312156147b9576147b8614709565b5b60006147c785828601614757565b92505060206147d88582860161478d565b9150509250929050565b60008115159050919050565b6147f7816147e2565b82525050565b600060208201905061481260008301846147ee565b92915050565b60006020828403121561482e5761482d614709565b5b600061483c84828501614757565b91505092915050565b6000819050919050565b600061486a6148656148608461470e565b614845565b61470e565b9050919050565b600061487c8261484f565b9050919050565b600061488e82614871565b9050919050565b61489e81614883565b82525050565b60006020820190506148b96000830184614895565b92915050565b6148c88161476c565b82525050565b60006020820190506148e360008301846148bf565b92915050565b6000602082840312156148ff576148fe614709565b5b600061490d8482850161478d565b91505092915050565b60008060006060848603121561492f5761492e614709565b5b600061493d86828701614757565b935050602061494e86828701614757565b925050604061495f8682870161478d565b9150509250925092565b6149728161472e565b82525050565b600060208201905061498d6000830184614969565b92915050565b600060ff82169050919050565b6149a981614993565b82525050565b60006020820190506149c460008301846149a0565b92915050565b6149d3816147e2565b81146149de57600080fd5b50565b6000813590506149f0816149ca565b92915050565b600080600060608486031215614a0f57614a0e614709565b5b6000614a1d8682870161478d565b9350506020614a2e8682870161478d565b9250506040614a3f868287016149e1565b9150509250925092565b60008060408385031215614a6057614a5f614709565b5b6000614a6e85828601614757565b9250506020614a7f858286016149e1565b9150509250929050565b600060208284031215614a9f57614a9e614709565b5b6000614aad848285016149e1565b91505092915050565b60008060408385031215614acd57614acc614709565b5b6000614adb85828601614757565b9250506020614aec85828601614757565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b2c602083614659565b9150614b3782614af6565b602082019050919050565b60006020820190508181036000830152614b5b81614b1f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b9c8261476c565b9150614ba78361476c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614be057614bdf614b62565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c258261476c565b9150614c308361476c565b925082614c4057614c3f614beb565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614ca7602f83614659565b9150614cb282614c4b565b604082019050919050565b60006020820190508181036000830152614cd681614c9a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d39602883614659565b9150614d4482614cdd565b604082019050919050565b60006020820190508181036000830152614d6881614d2c565b9050919050565b6000614d7a8261476c565b9150614d858361476c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dba57614db9614b62565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614dfb601d83614659565b9150614e0682614dc5565b602082019050919050565b60006020820190508181036000830152614e2a81614dee565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614e8d603383614659565b9150614e9882614e31565b604082019050919050565b60006020820190508181036000830152614ebc81614e80565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614f1f603083614659565b9150614f2a82614ec3565b604082019050919050565b60006020820190508181036000830152614f4e81614f12565b9050919050565b614f5e81614993565b8114614f6957600080fd5b50565b600081519050614f7b81614f55565b92915050565b600060208284031215614f9757614f96614709565b5b6000614fa584828501614f6c565b91505092915050565b600081519050614fbd81614740565b92915050565b600060208284031215614fd957614fd8614709565b5b6000614fe784828501614fae565b91505092915050565b60006040820190506150056000830185614969565b6150126020830184614969565b9392505050565b60006dffffffffffffffffffffffffffff82169050919050565b61503c81615019565b811461504757600080fd5b50565b60008151905061505981615033565b92915050565b600063ffffffff82169050919050565b6150788161505f565b811461508357600080fd5b50565b6000815190506150958161506f565b92915050565b6000806000606084860312156150b4576150b3614709565b5b60006150c28682870161504a565b93505060206150d38682870161504a565b92505060406150e486828701615086565b9150509250925092565b60008160011c9050919050565b6000808291508390505b60018511156151455780860481111561512157615120614b62565b5b60018516156151305780820291505b808102905061513e856150ee565b9450615105565b94509492505050565b60008261515e576001905061521a565b8161516c576000905061521a565b8160018114615182576002811461518c576151bb565b600191505061521a565b60ff84111561519e5761519d614b62565b5b8360020a9150848211156151b5576151b4614b62565b5b5061521a565b5060208310610133831016604e8410600b84101617156151f05782820a9050838111156151eb576151ea614b62565b5b61521a565b6151fd84848460016150fb565b9250905081840481111561521457615213614b62565b5b81810290505b9392505050565b600061522c8261476c565b91506152378361476c565b92506152647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461514e565b905092915050565b600081905092915050565b60006152828261464e565b61528c818561526c565b935061529c81856020860161466a565b80840191505092915050565b60006152b48285615277565b91506152c08284615277565b91508190509392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000615328603983614659565b9150615333826152cc565b604082019050919050565b600060208201905081810360008301526153578161531b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006153ba602583614659565b91506153c58261535e565b604082019050919050565b600060208201905081810360008301526153e9816153ad565b9050919050565b600081905092915050565b50565b600061540b6000836153f0565b9150615416826153fb565b600082019050919050565b600061542c826153fe565b9150819050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000615492602483614659565b915061549d82615436565b604082019050919050565b600060208201905081810360008301526154c181615485565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615524603583614659565b915061552f826154c8565b604082019050919050565b6000602082019050818103600083015261555381615517565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006155b6603483614659565b91506155c18261555a565b604082019050919050565b600060208201905081810360008301526155e5816155a9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615648602683614659565b9150615653826155ec565b604082019050919050565b600060208201905081810360008301526156778161563b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156da602483614659565b91506156e58261567e565b604082019050919050565b60006020820190508181036000830152615709816156cd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061576c602283614659565b915061577782615710565b604082019050919050565b6000602082019050818103600083015261579b8161575f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157fe602583614659565b9150615809826157a2565b604082019050919050565b6000602082019050818103600083015261582d816157f1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615890602383614659565b915061589b82615834565b604082019050919050565b600060208201905081810360008301526158bf81615883565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006158fc601683614659565b9150615907826158c6565b602082019050919050565b6000602082019050818103600083015261592b816158ef565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006159b4604983614659565b91506159bf82615932565b606082019050919050565b600060208201905081810360008301526159e3816159a7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615a46603583614659565b9150615a51826159ea565b604082019050919050565b60006020820190508181036000830152615a7581615a39565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615ab2601383614659565b9150615abd82615a7c565b602082019050919050565b60006020820190508181036000830152615ae181615aa5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615b44603683614659565b9150615b4f82615ae8565b604082019050919050565b60006020820190508181036000830152615b7381615b37565b9050919050565b6000615b858261476c565b9150615b908361476c565b925082821015615ba357615ba2614b62565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000615c178261476c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615c4957615c48614b62565b5b600182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b6000615c8a60018361526c565b9150615c9582615c54565b600182019050919050565b6000615cac8285615277565b9150615cb782615c7d565b9150615cc38284615277565b91508190509392505050565b7f302e000000000000000000000000000000000000000000000000000000000000600082015250565b6000615d0560028361526c565b9150615d1082615ccf565b600282019050919050565b6000615d2682615cf8565b9150615d328284615277565b915081905092915050565b6000819050919050565b6000615d62615d5d615d5884615d3d565b614845565b61476c565b9050919050565b615d7281615d47565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615dad8161472e565b82525050565b6000615dbf8383615da4565b60208301905092915050565b6000602082019050919050565b6000615de382615d78565b615ded8185615d83565b9350615df883615d94565b8060005b83811015615e29578151615e108882615db3565b9750615e1b83615dcb565b925050600181019050615dfc565b5085935050505092915050565b600060a082019050615e4b60008301886148bf565b615e586020830187615d69565b8181036040830152615e6a8186615dd8565b9050615e796060830185614969565b615e8660808301846148bf565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615eec602683614659565b9150615ef782615e90565b604082019050919050565b60006020820190508181036000830152615f1b81615edf565b9050919050565b6000615f2d8261476c565b9150615f388361476c565b925082615f4857615f47614beb565b5b82820690509291505056fea264697066735822122015d66f998bc95fd9a55c121c7a77f4c959404ed71daf16430fa11dfc1c39dcb364736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
-----Decoded View---------------
Arg [0] : _usdcAddress (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [1] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode Sourcemap
19464:19685:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29210:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4326:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20972:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19547:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3667:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32650:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20113:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19927:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30442:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4528:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19650:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20023:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19983:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3566:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5065:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19605:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20211:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32761:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20698:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20291:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3783:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;872:103;;;;;;;;;;;;;:::i;:::-;;31366:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38591:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29566:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30993:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19742:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20591;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29359:155;;;;;;;;;;;;;:::i;:::-;;649:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19779:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31258:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28248:954;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31983:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20665:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20167:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20767:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20733:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5363:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20075:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3934:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32493:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21193:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20251:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38411:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31793:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30727:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20509:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19812:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27660:580;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29953:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20557:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4142:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19854:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29748:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31577:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20628:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;983:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19894:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29210:95;29256:13;29289:8;:6;:8::i;:::-;29282:15;;29210:95;:::o;4326:194::-;4434:4;4451:39;4460:12;:10;:12::i;:::-;4474:7;4483:6;4451:8;:39::i;:::-;4508:4;4501:11;;4326:194;;;;:::o;20972:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;19547:51::-;;;:::o;3667:108::-;3728:7;3755:12;;3748:19;;3667:108;:::o;32650:103::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32736:9:::1;32724;;:21;;;;;;;;;;;;;;;;;;32650:103:::0;:::o;20113:47::-;;;;:::o;19927:36::-;;;;:::o;30442:277::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30579:4:::1;30571;30566:1;30550:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30549:26;;;;:::i;:::-;30548:35;;;;:::i;:::-;30538:6;:45;;30516:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30702:8;30692:6;:19;;;;:::i;:::-;30669:20;:42;;;;30442:277:::0;:::o;4528:529::-;4668:4;4685:36;4695:6;4703:9;4714:6;4685:9;:36::i;:::-;4734:24;4761:11;:19;4773:6;4761:19;;;;;;;;;;;;;;;:33;4781:12;:10;:12::i;:::-;4761:33;;;;;;;;;;;;;;;;4734:60;;4847:6;4827:16;:26;;4805:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;4957:57;4966:6;4974:12;:10;:12::i;:::-;5007:6;4988:16;:25;4957:8;:57::i;:::-;5045:4;5038:11;;;4528:529;;;;;:::o;19650:53::-;19696:6;19650:53;:::o;20023:45::-;;;;:::o;19983:33::-;;;;;;;;;;;;;:::o;3566:93::-;3624:5;3649:2;3642:9;;3566:93;:::o;5065:290::-;5178:4;5195:130;5218:12;:10;:12::i;:::-;5245:7;5304:10;5267:11;:25;5279:12;:10;:12::i;:::-;5267:25;;;;;;;;;;;;;;;:34;5293:7;5267:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5195:8;:130::i;:::-;5343:4;5336:11;;5065:290;;;;:::o;19605:38::-;;;:::o;20211:33::-;;;;;;;;;;;;;:::o;32761:126::-;32827:4;32851:19;:28;32871:7;32851:28;;;;;;;;;;;;;;;;;;;;;;;;;32844:35;;32761:126;;;:::o;20698:28::-;;;;:::o;20291:31::-;;;;;;;;;;;;;:::o;3783:143::-;3873:7;3900:9;:18;3910:7;3900:18;;;;;;;;;;;;;;;;3893:25;;3783:143;;;:::o;872:103::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;937:30:::1;964:1;937:18;:30::i;:::-;872:103::o:0;31366:203::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31448:7:::1;31436:9;:19;;;;31481:9;;31466:12;:24;;;;31525:2;31509:12;;:18;;31501:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31366:203:::0;:::o;38591:555::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38793:3:::1;38770:19;:26;;38748:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;38920:4;38908:8;:16;;:33;;;;;38940:1;38928:8;:13;;38908:33;38886:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;39046:19;39028:15;:37;;;;39095:8;39076:16;:27;;;;39130:8;39114:13;;:24;;;;;;;;;;;;;;;;;;38591:555:::0;;;:::o;29566:121::-;29618:4;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29652:5:::1;29635:14;;:22;;;;;;;;;;;;;;;;;;29675:4;29668:11;;29566:121:::0;:::o;30993:169::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31150:4:::1;31108:31;:39;31140:6;31108:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30993:169:::0;;:::o;19742:30::-;;;;;;;;;;;;;:::o;20591:::-;;;;:::o;29359:155::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29430:4:::1;29414:13;;:20;;;;;;;;;;;;;;;;;;29459:4;29445:11;;:18;;;;;;;;;;;;;;;;;;29491:15;29474:14;:32;;;;29359:155::o:0;649:87::-;695:7;722:6;;;;;;;;;;;715:13;;649:87;:::o;19779:24::-;;;;;;;;;;;;;:::o;31258:100::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31343:7:::1;31329:11;;:21;;;;;;;;;;;;;;;;;;31258:100:::0;:::o;28248:954::-;28296:13;28322:20;28360:4;;;;;;;;;;;28345:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28322:54;;;;28389:19;28411:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28389:44;;28444:17;28482:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28464:66;;;28531:4;;;;;;;;;;;28537:11;28464:85;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28444:105;;28563:16;28581;28618:9;28603:51;;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28562:94;;;;;;;;;28670:18;28690:19;28727:4;;;;;;;;;;;28713:18;;:11;:18;;;:90;;28784:8;28794;28713:90;;;28748:8;28758;28713:90;28669:134;;;;28816:16;28835:87;28891:20;28906:4;28891:10;:14;;:20;;;;:::i;:::-;28835:37;28858:12;28851:2;:20;;;;:::i;:::-;28835:11;:15;;:37;;;;:::i;:::-;:41;;:87;;;;:::i;:::-;28816:106;;28935:16;28954:19;:17;:19::i;:::-;28935:38;;28986:25;:34;;;;;;;;;;;;;;;;;;;29085:11;29115:64;29149:29;29169:8;29158;:19;;;;:::i;:::-;29149:8;:29::i;:::-;29115:33;:64::i;:::-;29053:141;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29033:161;;;;;;;;;;;;28248:954;:::o;31983:306::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32129:13:::1;32121:21;;:4;:21;;::::0;32099:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32240:41;32269:4;32275:5;32240:28;:41::i;:::-;31983:306:::0;;:::o;20665:24::-;;;;:::o;20167:35::-;;;;:::o;20767:27::-;;;;:::o;20733:25::-;;;;:::o;5363:475::-;5481:4;5498:24;5525:11;:25;5537:12;:10;:12::i;:::-;5525:25;;;;;;;;;;;;;;;:34;5551:7;5525:34;;;;;;;;;;;;;;;;5498:61;;5612:15;5592:16;:35;;5570:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;5728:67;5737:12;:10;:12::i;:::-;5751:7;5779:15;5760:16;:34;5728:8;:67::i;:::-;5826:4;5819:11;;;5363:475;;;;:::o;20075:29::-;;;;:::o;3934:200::-;4045:4;4062:42;4072:12;:10;:12::i;:::-;4086:9;4097:6;4062:9;:42::i;:::-;4122:4;4115:11;;3934:200;;;;:::o;32493:149::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32616:18:::1;32598:15;;:36;;;;;;;;;;;;;;;;;;32493:149:::0;:::o;21193:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20251:33::-;;;;;;;;;;;;;:::o;38411:172::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38481:24:::1;38498:6;38481:16;:24::i;:::-;38526:9;;;;;;;;;;;38518:23;;38549:21;38518:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38411:172:::0;:::o;31793:182::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31909:8:::1;31878:19;:28;31898:7;31878:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31949:7;31933:34;;;31958:8;31933:34;;;;;;:::i;:::-;;;;;;;;31793:182:::0;;:::o;30727:258::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30867:4:::1;30859;30854:1;30838:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30837:26;;;;:::i;:::-;30836:35;;;;:::i;:::-;30826:6;:45;;30804:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;30968:8;30958:6;:19;;;;:::i;:::-;30946:9;:31;;;;30727:258:::0;:::o;20509:39::-;;;;;;;;;;;;;:::o;19812:35::-;;;;:::o;27660:580::-;27710:7;27730:18;27751:42;27730:63;;27806:19;27828:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27806:44;;27861:17;27899:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27881:66;;;27948:10;27960:11;27881:91;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27861:111;;27994:16;28012;28049:9;28034:51;;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27993:94;;;;;;;;;28144:21;28168:22;28181:8;28168;:12;;:22;;;;:::i;:::-;28144:46;;28210:22;28228:3;28210:13;:17;;:22;;;;:::i;:::-;28203:29;;;;;;;;27660:580;:::o;29953:481::-;30050:4;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30124:6:::1;30119:1;30103:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30102:28;;;;:::i;:::-;30089:9;:41;;30067:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;30279:4;30274:1;30258:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30257:26;;;;:::i;:::-;30244:9;:39;;30222:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;30395:9;30374:18;:30;;;;30422:4;30415:11;;29953:481:::0;;;:::o;20557:27::-;;;;:::o;4142:176::-;4256:7;4283:11;:18;4295:5;4283:18;;;;;;;;;;;;;;;:27;4302:7;4283:27;;;;;;;;;;;;;;;;4276:34;;4142:176;;;;:::o;19854:33::-;;;;:::o;29748:135::-;29808:4;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29848:5:::1;29825:20;;:28;;;;;;;;;;;;;;;;;;29871:4;29864:11;;29748:135:::0;:::o;31577:208::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31661:7:::1;31648:10;:20;;;;31695:10;;31679:13;:26;;;;31741:2;31724:13;;:19;;31716:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31577:208:::0;:::o;20628:30::-;;;;:::o;983:238::-;795:12;:10;:12::i;:::-;784:23;;:7;:5;:7::i;:::-;:23;;;776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1106:1:::1;1086:22;;:8;:22;;::::0;1064:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1185:28;1204:8;1185:18;:28::i;:::-;983:238:::0;:::o;19894:24::-;;;;:::o;170:98::-;223:7;250:10;243:17;;170:98;:::o;7630:380::-;7783:1;7766:19;;:5;:19;;;7758:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7864:1;7845:21;;:7;:21;;;7837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7948:6;7918:11;:18;7930:5;7918:18;;;;;;;;;;;;;;;:27;7937:7;7918:27;;;;;;;;;;;;;;;:36;;;;7986:7;7970:32;;7979:5;7970:32;;;7995:6;7970:32;;;;;;:::i;:::-;;;;;;;;7630:380;;;:::o;32945:4239::-;33093:1;33077:18;;:4;:18;;;33069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33170:1;33156:16;;:2;:16;;;33148:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33239:1;33229:6;:11;33225:93;;33257:28;33273:4;33279:2;33283:1;33257:15;:28::i;:::-;33300:7;;33225:93;33334:14;;;;;;;;;;;33330:2393;;;33395:7;:5;:7::i;:::-;33387:15;;:4;:15;;;;:49;;;;;33429:7;:5;:7::i;:::-;33423:13;;:2;:13;;;;33387:49;:86;;;;;33471:1;33457:16;;:2;:16;;;;33387:86;:128;;;;;33508:6;33494:21;;:2;:21;;;;33387:128;:158;;;;;33537:8;;;;;;;;;;;33536:9;33387:158;33365:2347;;;33585:13;;;;;;;;;;;33580:223;;33657:19;:25;33677:4;33657:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33686:19;:23;33706:2;33686:23;;;;;;;;;;;;;;;;;;;;;;;;;33657:52;33623:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;33580:223;33981:20;;;;;;;;;;;:58;;;;;34032:7;:5;:7::i;:::-;34026:13;;:2;:13;;;;33981:58;:113;;;;;34078:15;34064:30;;:2;:30;;;;33981:113;:168;;;;;34120:25;:29;34146:2;34120:29;;;;;;;;;;;;;;;;;;;;;;;;;34119:30;33981:168;33955:547;;;34268:12;34226:28;:39;34255:9;34226:39;;;;;;;;;;;;;;;;:54;34192:213;;;;;;;;;;;;:::i;:::-;;;;;;;;;34470:12;34428:28;:39;34457:9;34428:39;;;;;;;;;;;;;;;:54;;;;33955:547;34576:25;:31;34602:4;34576:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34633:31;:35;34665:2;34633:35;;;;;;;;;;;;;;;;;;;;;;;;;34632:36;34576:92;34550:1147;;;34755:20;;34745:6;:30;;34711:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;34963:9;;34946:13;34956:2;34946:9;:13::i;:::-;34937:6;:22;;;;:::i;:::-;:35;;34903:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34550:1147;;;35141:25;:29;35167:2;35141:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;35196:31;:37;35228:4;35196:37;;;;;;;;;;;;;;;;;;;;;;;;;35195:38;35141:92;35115:582;;;35320:20;;35310:6;:30;;35276:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;35115:582;;;35477:31;:35;35509:2;35477:35;;;;;;;;;;;;;;;;;;;;;;;;;35472:225;;35597:9;;35580:13;35590:2;35580:9;:13::i;:::-;35571:6;:22;;;;:::i;:::-;:35;;35537:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;35472:225;35115:582;34550:1147;33365:2347;33330:2393;35735:28;35766:24;35784:4;35766:9;:24::i;:::-;35735:55;;35803:12;35842:18;;35818:20;:42;;35803:57;;35891:7;:35;;;;;35915:11;;;;;;;;;;;35891:35;:61;;;;;35944:8;;;;;;;;;;;35943:9;35891:61;:110;;;;;35970:25;:31;35996:4;35970:31;;;;;;;;;;;;;;;;;;;;;;;;;35969:32;35891:110;:153;;;;;36019:19;:25;36039:4;36019:25;;;;;;;;;;;;;;;;;;;;;;;;;36018:26;35891:153;:194;;;;;36062:19;:23;36082:2;36062:23;;;;;;;;;;;;;;;;;;;;;;;;;36061:24;35891:194;35873:326;;;36123:4;36112:8;;:15;;;;;;;;;;;;;;;;;;36144:10;:8;:10::i;:::-;36182:5;36171:8;;:16;;;;;;;;;;;;;;;;;;35873:326;36211:12;36227:8;;;;;;;;;;;36226:9;36211:24;;36337:19;:25;36357:4;36337:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36366:19;:23;36386:2;36366:23;;;;;;;;;;;;;;;;;;;;;;;;;36337:52;36333:100;;;36416:5;36406:15;;36333:100;36445:12;36550:7;36546:585;;;36602:25;:29;36628:2;36602:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;36651:1;36635:13;;:17;36602:50;36598:384;;;36680:34;36710:3;36680:25;36691:13;;36680:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;36673:41;;36749:4;36733:12;;:20;;;;;;;:::i;:::-;;;;;;;;36598:384;;;36815:25;:31;36841:4;36815:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;36865:1;36850:12;;:16;36815:51;36811:171;;;36894:33;36923:3;36894:24;36905:12;;36894:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;36887:40;;36962:4;36946:12;;:20;;;;;;;:::i;:::-;;;;;;;;36811:171;36598:384;37009:1;37002:4;:8;36998:91;;;37031:42;37047:4;37061;37068;37031:15;:42::i;:::-;36998:91;37115:4;37105:14;;;;;:::i;:::-;;;36546:585;37143:33;37159:4;37165:2;37169:6;37143:15;:33::i;:::-;33058:4126;;;;32945:4239;;;;:::o;1229:191::-;1303:16;1322:6;;;;;;;;;;;1303:25;;1348:8;1339:6;;:17;;;;;;;;;;;;;;;;;;1403:8;1372:40;;1393:8;1372:40;;;;;;;;;;;;1292:128;1229:191;:::o;11895:98::-;11953:7;11984:1;11980;:5;;;;:::i;:::-;11973:12;;11895:98;;;;:::o;23370:713::-;23426:13;23477:14;23509:1;23494:12;23500:5;23494;:12::i;:::-;:16;23477:33;;23525:20;23559:6;23548:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23525:41;;23581:11;23710:6;23706:2;23702:15;23694:6;23690:28;23683:35;;23747:290;23754:4;23747:290;;;23779:5;;;;;;;;23921:10;23916:2;23909:5;23905:14;23900:32;23895:3;23887:46;23979:2;23970:11;;;;;;:::i;:::-;;;;;24013:1;24004:5;:10;23747:290;24000:21;23747:290;24058:6;24051:13;;;;;23370:713;;;:::o;26179:1473::-;26283:13;26309:24;26342:6;26309:40;;26360:8;26371:11;:18;26360:29;;26443:22;26479:1;26468:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26443:38;;26492:26;26527:8;26492:44;;26637:1;26631:3;:7;26627:1018;;;26674:11;26692:1;26686:3;:7;;;;:::i;:::-;26674:20;;;;;;;;:::i;:::-;;;;;;;;;;26655:13;26669:1;26655:16;;;;;;;;:::i;:::-;;;;;:39;;;;;;;;;;;26728:11;26746:1;26740:3;:7;;;;:::i;:::-;26728:20;;;;;;;;:::i;:::-;;;;;;;;;;26709:13;26723:1;26709:16;;;;;;;;:::i;:::-;;;;;:39;;;;;;;;;;;26855:29;26904:1;26898:3;:7;;;;:::i;:::-;26887:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26855:51;;26921:29;26959:15;26921:54;;26997:6;26992:106;27019:1;27013:3;:7;;;;:::i;:::-;27009:1;:11;26992:106;;;27068:11;27080:1;27068:14;;;;;;;;:::i;:::-;;;;;;;;;;27046:16;27063:1;27046:19;;;;;;;;:::i;:::-;;;;;:36;;;;;;;;;;;27022:3;;;;;:::i;:::-;;;;26992:106;;;;27189:48;27219:16;27189:22;:48::i;:::-;27171:66;;27357:15;27379:8;27340:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27326:63;;;;;;;;;;26627:1018;27625:6;27602:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;27588:45;;;;;;26179:1473;;;;:::o;32297:188::-;32414:5;32380:25;:31;32406:4;32380:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32471:5;32437:40;;32465:4;32437:40;;;;;;;;;;;;32297:188;;:::o;37192:589::-;37318:21;37356:1;37342:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37318:40;;37387:4;37369;37374:1;37369:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37413:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37403:4;37408:1;37403:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37448:62;37465:4;37480:15;37498:11;37448:8;:62::i;:::-;37549:15;:66;;;37630:11;37656:1;37700:4;37727;37747:15;37549:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37247:534;37192:589;:::o;5846:770::-;6004:1;5986:20;;:6;:20;;;5978:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6088:1;6067:23;;:9;:23;;;6059:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6143:47;6164:6;6172:9;6183:6;6143:20;:47::i;:::-;6203:21;6227:9;:17;6237:6;6227:17;;;;;;;;;;;;;;;;6203:41;;6294:6;6277:13;:23;;6255:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6438:6;6422:13;:22;6402:9;:17;6412:6;6402:17;;;;;;;;;;;;;;;:42;;;;6490:6;6466:9;:20;6476:9;6466:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6531:9;6514:35;;6523:6;6514:35;;;6542:6;6514:35;;;;;;:::i;:::-;;;;;;;;6562:46;6582:6;6590:9;6601:6;6562:19;:46::i;:::-;5967:649;5846:770;;;:::o;37789:614::-;37828:23;37854:24;37872:4;37854:9;:24::i;:::-;37828:50;;37889:25;37917:12;;37889:40;;37940:12;37988:1;37969:15;:20;:46;;;;38014:1;37993:17;:22;37969:46;37965:85;;;38032:7;;;;;37965:85;38105:2;38084:18;;:23;;;;:::i;:::-;38066:15;:41;38062:115;;;38163:2;38142:18;;:23;;;;:::i;:::-;38124:41;;38062:115;38189:26;38218:15;38189:44;;38246:36;38263:18;38246:16;:36::i;:::-;38310:1;38295:12;:16;;;;38346:9;;;;;;;;;;;38338:23;;38369:21;38338:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38324:71;;;;;37817:586;;;;37789:614;:::o;11496:98::-;11554:7;11585:1;11581;:5;;;;:::i;:::-;11574:12;;11496:98;;;;:::o;24091:948::-;24144:7;24164:14;24181:1;24164:18;;24231:8;24222:5;:17;24218:106;;24269:8;24260:17;;;;;;:::i;:::-;;;;;24306:2;24296:12;;;;24218:106;24351:8;24342:5;:17;24338:106;;24389:8;24380:17;;;;;;:::i;:::-;;;;;24426:2;24416:12;;;;24338:106;24471:8;24462:5;:17;24458:106;;24509:8;24500:17;;;;;;:::i;:::-;;;;;24546:2;24536:12;;;;24458:106;24591:7;24582:5;:16;24578:103;;24628:7;24619:16;;;;;;:::i;:::-;;;;;24664:1;24654:11;;;;24578:103;24708:7;24699:5;:16;24695:103;;24745:7;24736:16;;;;;;:::i;:::-;;;;;24781:1;24771:11;;;;24695:103;24825:7;24816:5;:16;24812:103;;24862:7;24853:16;;;;;;:::i;:::-;;;;;24898:1;24888:11;;;;24812:103;24942:7;24933:5;:16;24929:68;;24980:1;24970:11;;;;24929:68;25025:6;25018:13;;;24091:948;;;:::o;25047:1124::-;25140:13;25257:24;25290:6;25257:40;;25308:8;25319:11;:18;25308:29;;25401:11;25427:1;25422;25416:3;:7;;;;:::i;:::-;25415:13;;;;:::i;:::-;25401:27;;25439:22;25480:6;25474:3;:12;;;;:::i;:::-;25464:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25439:48;;25500:6;25509:1;25500:10;;25556:6;25551:576;25572:3;25568:1;:7;25551:576;;;25687:11;25709:1;25705;25699:3;:7;;;;:::i;:::-;:11;;;;:::i;:::-;25687:24;;;;;;;;:::i;:::-;;;;;;;;;;25657:9;25682:1;25673:6;25667:3;:12;;;;:::i;:::-;:16;;;;:::i;:::-;25657:27;;;;;;;;:::i;:::-;;;;;:54;;;;;;;;;;;25812:1;25807;25803;:5;;;;:::i;:::-;:10;:26;;;;;25828:1;25822:3;:7;;;;:::i;:::-;25817:1;:12;;25803:26;25799:317;;;25850:3;;;;;:::i;:::-;;;;25937:11;25907:9;25932:1;25923:6;25917:3;:12;;;;:::i;:::-;:16;;;;:::i;:::-;25907:27;;;;;;;;:::i;:::-;;;;;:41;;;;;;;;;;;25967:3;;;;;:::i;:::-;;;;25799:317;;;26054:3;;;;;:::i;:::-;;;;25799:317;25577:3;;;;:::i;:::-;;;25551:576;;;;26153:9;26139:24;;;;;;;25047:1124;;;:::o;8018:125::-;;;;:::o;8151:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:323::-;8311:6;8360:2;8348:9;8339:7;8335:23;8331:32;8328:119;;;8366:79;;:::i;:::-;8328:119;8486:1;8511:50;8553:7;8544:6;8533:9;8529:22;8511:50;:::i;:::-;8501:60;;8457:114;8255:323;;;;:::o;8584:474::-;8652:6;8660;8709:2;8697:9;8688:7;8684:23;8680:32;8677:119;;;8715:79;;:::i;:::-;8677:119;8835:1;8860:53;8905:7;8896:6;8885:9;8881:22;8860:53;:::i;:::-;8850:63;;8806:117;8962:2;8988:53;9033:7;9024:6;9013:9;9009:22;8988:53;:::i;:::-;8978:63;;8933:118;8584:474;;;;;:::o;9064:182::-;9204:34;9200:1;9192:6;9188:14;9181:58;9064:182;:::o;9252:366::-;9394:3;9415:67;9479:2;9474:3;9415:67;:::i;:::-;9408:74;;9491:93;9580:3;9491:93;:::i;:::-;9609:2;9604:3;9600:12;9593:19;;9252:366;;;:::o;9624:419::-;9790:4;9828:2;9817:9;9813:18;9805:26;;9877:9;9871:4;9867:20;9863:1;9852:9;9848:17;9841:47;9905:131;10031:4;9905:131;:::i;:::-;9897:139;;9624:419;;;:::o;10049:180::-;10097:77;10094:1;10087:88;10194:4;10191:1;10184:15;10218:4;10215:1;10208:15;10235:348;10275:7;10298:20;10316:1;10298:20;:::i;:::-;10293:25;;10332:20;10350:1;10332:20;:::i;:::-;10327:25;;10520:1;10452:66;10448:74;10445:1;10442:81;10437:1;10430:9;10423:17;10419:105;10416:131;;;10527:18;;:::i;:::-;10416:131;10575:1;10572;10568:9;10557:20;;10235:348;;;;:::o;10589:180::-;10637:77;10634:1;10627:88;10734:4;10731:1;10724:15;10758:4;10755:1;10748:15;10775:185;10815:1;10832:20;10850:1;10832:20;:::i;:::-;10827:25;;10866:20;10884:1;10866:20;:::i;:::-;10861:25;;10905:1;10895:35;;10910:18;;:::i;:::-;10895:35;10952:1;10949;10945:9;10940:14;;10775:185;;;;:::o;10966:234::-;11106:34;11102:1;11094:6;11090:14;11083:58;11175:17;11170:2;11162:6;11158:15;11151:42;10966:234;:::o;11206:366::-;11348:3;11369:67;11433:2;11428:3;11369:67;:::i;:::-;11362:74;;11445:93;11534:3;11445:93;:::i;:::-;11563:2;11558:3;11554:12;11547:19;;11206:366;;;:::o;11578:419::-;11744:4;11782:2;11771:9;11767:18;11759:26;;11831:9;11825:4;11821:20;11817:1;11806:9;11802:17;11795:47;11859:131;11985:4;11859:131;:::i;:::-;11851:139;;11578:419;;;:::o;12003:227::-;12143:34;12139:1;12131:6;12127:14;12120:58;12212:10;12207:2;12199:6;12195:15;12188:35;12003:227;:::o;12236:366::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12236:366;;;:::o;12608:419::-;12774:4;12812:2;12801:9;12797:18;12789:26;;12861:9;12855:4;12851:20;12847:1;12836:9;12832:17;12825:47;12889:131;13015:4;12889:131;:::i;:::-;12881:139;;12608:419;;;:::o;13033:305::-;13073:3;13092:20;13110:1;13092:20;:::i;:::-;13087:25;;13126:20;13144:1;13126:20;:::i;:::-;13121:25;;13280:1;13212:66;13208:74;13205:1;13202:81;13199:107;;;13286:18;;:::i;:::-;13199:107;13330:1;13327;13323:9;13316:16;;13033:305;;;;:::o;13344:179::-;13484:31;13480:1;13472:6;13468:14;13461:55;13344:179;:::o;13529:366::-;13671:3;13692:67;13756:2;13751:3;13692:67;:::i;:::-;13685:74;;13768:93;13857:3;13768:93;:::i;:::-;13886:2;13881:3;13877:12;13870:19;;13529:366;;;:::o;13901:419::-;14067:4;14105:2;14094:9;14090:18;14082:26;;14154:9;14148:4;14144:20;14140:1;14129:9;14125:17;14118:47;14182:131;14308:4;14182:131;:::i;:::-;14174:139;;13901:419;;;:::o;14326:238::-;14466:34;14462:1;14454:6;14450:14;14443:58;14535:21;14530:2;14522:6;14518:15;14511:46;14326:238;:::o;14570:366::-;14712:3;14733:67;14797:2;14792:3;14733:67;:::i;:::-;14726:74;;14809:93;14898:3;14809:93;:::i;:::-;14927:2;14922:3;14918:12;14911:19;;14570:366;;;:::o;14942:419::-;15108:4;15146:2;15135:9;15131:18;15123:26;;15195:9;15189:4;15185:20;15181:1;15170:9;15166:17;15159:47;15223:131;15349:4;15223:131;:::i;:::-;15215:139;;14942:419;;;:::o;15367:235::-;15507:34;15503:1;15495:6;15491:14;15484:58;15576:18;15571:2;15563:6;15559:15;15552:43;15367:235;:::o;15608:366::-;15750:3;15771:67;15835:2;15830:3;15771:67;:::i;:::-;15764:74;;15847:93;15936:3;15847:93;:::i;:::-;15965:2;15960:3;15956:12;15949:19;;15608:366;;;:::o;15980:419::-;16146:4;16184:2;16173:9;16169:18;16161:26;;16233:9;16227:4;16223:20;16219:1;16208:9;16204:17;16197:47;16261:131;16387:4;16261:131;:::i;:::-;16253:139;;15980:419;;;:::o;16405:118::-;16476:22;16492:5;16476:22;:::i;:::-;16469:5;16466:33;16456:61;;16513:1;16510;16503:12;16456:61;16405:118;:::o;16529:139::-;16584:5;16615:6;16609:13;16600:22;;16631:31;16656:5;16631:31;:::i;:::-;16529:139;;;;:::o;16674:347::-;16742:6;16791:2;16779:9;16770:7;16766:23;16762:32;16759:119;;;16797:79;;:::i;:::-;16759:119;16917:1;16942:62;16996:7;16987:6;16976:9;16972:22;16942:62;:::i;:::-;16932:72;;16888:126;16674:347;;;;:::o;17027:143::-;17084:5;17115:6;17109:13;17100:22;;17131:33;17158:5;17131:33;:::i;:::-;17027:143;;;;:::o;17176:351::-;17246:6;17295:2;17283:9;17274:7;17270:23;17266:32;17263:119;;;17301:79;;:::i;:::-;17263:119;17421:1;17446:64;17502:7;17493:6;17482:9;17478:22;17446:64;:::i;:::-;17436:74;;17392:128;17176:351;;;;:::o;17533:332::-;17654:4;17692:2;17681:9;17677:18;17669:26;;17705:71;17773:1;17762:9;17758:17;17749:6;17705:71;:::i;:::-;17786:72;17854:2;17843:9;17839:18;17830:6;17786:72;:::i;:::-;17533:332;;;;;:::o;17871:114::-;17908:7;17948:30;17941:5;17937:42;17926:53;;17871:114;;;:::o;17991:122::-;18064:24;18082:5;18064:24;:::i;:::-;18057:5;18054:35;18044:63;;18103:1;18100;18093:12;18044:63;17991:122;:::o;18119:143::-;18176:5;18207:6;18201:13;18192:22;;18223:33;18250:5;18223:33;:::i;:::-;18119:143;;;;:::o;18268:93::-;18304:7;18344:10;18337:5;18333:22;18322:33;;18268:93;;;:::o;18367:120::-;18439:23;18456:5;18439:23;:::i;:::-;18432:5;18429:34;18419:62;;18477:1;18474;18467:12;18419:62;18367:120;:::o;18493:141::-;18549:5;18580:6;18574:13;18565:22;;18596:32;18622:5;18596:32;:::i;:::-;18493:141;;;;:::o;18640:661::-;18727:6;18735;18743;18792:2;18780:9;18771:7;18767:23;18763:32;18760:119;;;18798:79;;:::i;:::-;18760:119;18918:1;18943:64;18999:7;18990:6;18979:9;18975:22;18943:64;:::i;:::-;18933:74;;18889:128;19056:2;19082:64;19138:7;19129:6;19118:9;19114:22;19082:64;:::i;:::-;19072:74;;19027:129;19195:2;19221:63;19276:7;19267:6;19256:9;19252:22;19221:63;:::i;:::-;19211:73;;19166:128;18640:661;;;;;:::o;19307:102::-;19349:8;19396:5;19393:1;19389:13;19368:34;;19307:102;;;:::o;19415:848::-;19476:5;19483:4;19507:6;19498:15;;19531:5;19522:14;;19545:712;19566:1;19556:8;19553:15;19545:712;;;19661:4;19656:3;19652:14;19646:4;19643:24;19640:50;;;19670:18;;:::i;:::-;19640:50;19720:1;19710:8;19706:16;19703:451;;;20135:4;20128:5;20124:16;20115:25;;19703:451;20185:4;20179;20175:15;20167:23;;20215:32;20238:8;20215:32;:::i;:::-;20203:44;;19545:712;;;19415:848;;;;;;;:::o;20269:1073::-;20323:5;20514:8;20504:40;;20535:1;20526:10;;20537:5;;20504:40;20563:4;20553:36;;20580:1;20571:10;;20582:5;;20553:36;20649:4;20697:1;20692:27;;;;20733:1;20728:191;;;;20642:277;;20692:27;20710:1;20701:10;;20712:5;;;20728:191;20773:3;20763:8;20760:17;20757:43;;;20780:18;;:::i;:::-;20757:43;20829:8;20826:1;20822:16;20813:25;;20864:3;20857:5;20854:14;20851:40;;;20871:18;;:::i;:::-;20851:40;20904:5;;;20642:277;;21028:2;21018:8;21015:16;21009:3;21003:4;21000:13;20996:36;20978:2;20968:8;20965:16;20960:2;20954:4;20951:12;20947:35;20931:111;20928:246;;;21084:8;21078:4;21074:19;21065:28;;21119:3;21112:5;21109:14;21106:40;;;21126:18;;:::i;:::-;21106:40;21159:5;;20928:246;21199:42;21237:3;21227:8;21221:4;21218:1;21199:42;:::i;:::-;21184:57;;;;21273:4;21268:3;21264:14;21257:5;21254:25;21251:51;;;21282:18;;:::i;:::-;21251:51;21331:4;21324:5;21320:16;21311:25;;20269:1073;;;;;;:::o;21348:285::-;21408:5;21432:23;21450:4;21432:23;:::i;:::-;21424:31;;21476:27;21494:8;21476:27;:::i;:::-;21464:39;;21522:104;21559:66;21549:8;21543:4;21522:104;:::i;:::-;21513:113;;21348:285;;;;:::o;21639:148::-;21741:11;21778:3;21763:18;;21639:148;;;;:::o;21793:377::-;21899:3;21927:39;21960:5;21927:39;:::i;:::-;21982:89;22064:6;22059:3;21982:89;:::i;:::-;21975:96;;22080:52;22125:6;22120:3;22113:4;22106:5;22102:16;22080:52;:::i;:::-;22157:6;22152:3;22148:16;22141:23;;21903:267;21793:377;;;;:::o;22176:435::-;22356:3;22378:95;22469:3;22460:6;22378:95;:::i;:::-;22371:102;;22490:95;22581:3;22572:6;22490:95;:::i;:::-;22483:102;;22602:3;22595:10;;22176:435;;;;;:::o;22617:244::-;22757:34;22753:1;22745:6;22741:14;22734:58;22826:27;22821:2;22813:6;22809:15;22802:52;22617:244;:::o;22867:366::-;23009:3;23030:67;23094:2;23089:3;23030:67;:::i;:::-;23023:74;;23106:93;23195:3;23106:93;:::i;:::-;23224:2;23219:3;23215:12;23208:19;;22867:366;;;:::o;23239:419::-;23405:4;23443:2;23432:9;23428:18;23420:26;;23492:9;23486:4;23482:20;23478:1;23467:9;23463:17;23456:47;23520:131;23646:4;23520:131;:::i;:::-;23512:139;;23239:419;;;:::o;23664:224::-;23804:34;23800:1;23792:6;23788:14;23781:58;23873:7;23868:2;23860:6;23856:15;23849:32;23664:224;:::o;23894:366::-;24036:3;24057:67;24121:2;24116:3;24057:67;:::i;:::-;24050:74;;24133:93;24222:3;24133:93;:::i;:::-;24251:2;24246:3;24242:12;24235:19;;23894:366;;;:::o;24266:419::-;24432:4;24470:2;24459:9;24455:18;24447:26;;24519:9;24513:4;24509:20;24505:1;24494:9;24490:17;24483:47;24547:131;24673:4;24547:131;:::i;:::-;24539:139;;24266:419;;;:::o;24691:147::-;24792:11;24829:3;24814:18;;24691:147;;;;:::o;24844:114::-;;:::o;24964:398::-;25123:3;25144:83;25225:1;25220:3;25144:83;:::i;:::-;25137:90;;25236:93;25325:3;25236:93;:::i;:::-;25354:1;25349:3;25345:11;25338:18;;24964:398;;;:::o;25368:379::-;25552:3;25574:147;25717:3;25574:147;:::i;:::-;25567:154;;25738:3;25731:10;;25368:379;;;:::o;25753:223::-;25893:34;25889:1;25881:6;25877:14;25870:58;25962:6;25957:2;25949:6;25945:15;25938:31;25753:223;:::o;25982:366::-;26124:3;26145:67;26209:2;26204:3;26145:67;:::i;:::-;26138:74;;26221:93;26310:3;26221:93;:::i;:::-;26339:2;26334:3;26330:12;26323:19;;25982:366;;;:::o;26354:419::-;26520:4;26558:2;26547:9;26543:18;26535:26;;26607:9;26601:4;26597:20;26593:1;26582:9;26578:17;26571:47;26635:131;26761:4;26635:131;:::i;:::-;26627:139;;26354:419;;;:::o;26779:240::-;26919:34;26915:1;26907:6;26903:14;26896:58;26988:23;26983:2;26975:6;26971:15;26964:48;26779:240;:::o;27025:366::-;27167:3;27188:67;27252:2;27247:3;27188:67;:::i;:::-;27181:74;;27264:93;27353:3;27264:93;:::i;:::-;27382:2;27377:3;27373:12;27366:19;;27025:366;;;:::o;27397:419::-;27563:4;27601:2;27590:9;27586:18;27578:26;;27650:9;27644:4;27640:20;27636:1;27625:9;27621:17;27614:47;27678:131;27804:4;27678:131;:::i;:::-;27670:139;;27397:419;;;:::o;27822:239::-;27962:34;27958:1;27950:6;27946:14;27939:58;28031:22;28026:2;28018:6;28014:15;28007:47;27822:239;:::o;28067:366::-;28209:3;28230:67;28294:2;28289:3;28230:67;:::i;:::-;28223:74;;28306:93;28395:3;28306:93;:::i;:::-;28424:2;28419:3;28415:12;28408:19;;28067:366;;;:::o;28439:419::-;28605:4;28643:2;28632:9;28628:18;28620:26;;28692:9;28686:4;28682:20;28678:1;28667:9;28663:17;28656:47;28720:131;28846:4;28720:131;:::i;:::-;28712:139;;28439:419;;;:::o;28864:225::-;29004:34;29000:1;28992:6;28988:14;28981:58;29073:8;29068:2;29060:6;29056:15;29049:33;28864:225;:::o;29095:366::-;29237:3;29258:67;29322:2;29317:3;29258:67;:::i;:::-;29251:74;;29334:93;29423:3;29334:93;:::i;:::-;29452:2;29447:3;29443:12;29436:19;;29095:366;;;:::o;29467:419::-;29633:4;29671:2;29660:9;29656:18;29648:26;;29720:9;29714:4;29710:20;29706:1;29695:9;29691:17;29684:47;29748:131;29874:4;29748:131;:::i;:::-;29740:139;;29467:419;;;:::o;29892:223::-;30032:34;30028:1;30020:6;30016:14;30009:58;30101:6;30096:2;30088:6;30084:15;30077:31;29892:223;:::o;30121:366::-;30263:3;30284:67;30348:2;30343:3;30284:67;:::i;:::-;30277:74;;30360:93;30449:3;30360:93;:::i;:::-;30478:2;30473:3;30469:12;30462:19;;30121:366;;;:::o;30493:419::-;30659:4;30697:2;30686:9;30682:18;30674:26;;30746:9;30740:4;30736:20;30732:1;30721:9;30717:17;30710:47;30774:131;30900:4;30774:131;:::i;:::-;30766:139;;30493:419;;;:::o;30918:221::-;31058:34;31054:1;31046:6;31042:14;31035:58;31127:4;31122:2;31114:6;31110:15;31103:29;30918:221;:::o;31145:366::-;31287:3;31308:67;31372:2;31367:3;31308:67;:::i;:::-;31301:74;;31384:93;31473:3;31384:93;:::i;:::-;31502:2;31497:3;31493:12;31486:19;;31145:366;;;:::o;31517:419::-;31683:4;31721:2;31710:9;31706:18;31698:26;;31770:9;31764:4;31760:20;31756:1;31745:9;31741:17;31734:47;31798:131;31924:4;31798:131;:::i;:::-;31790:139;;31517:419;;;:::o;31942:224::-;32082:34;32078:1;32070:6;32066:14;32059:58;32151:7;32146:2;32138:6;32134:15;32127:32;31942:224;:::o;32172:366::-;32314:3;32335:67;32399:2;32394:3;32335:67;:::i;:::-;32328:74;;32411:93;32500:3;32411:93;:::i;:::-;32529:2;32524:3;32520:12;32513:19;;32172:366;;;:::o;32544:419::-;32710:4;32748:2;32737:9;32733:18;32725:26;;32797:9;32791:4;32787:20;32783:1;32772:9;32768:17;32761:47;32825:131;32951:4;32825:131;:::i;:::-;32817:139;;32544:419;;;:::o;32969:222::-;33109:34;33105:1;33097:6;33093:14;33086:58;33178:5;33173:2;33165:6;33161:15;33154:30;32969:222;:::o;33197:366::-;33339:3;33360:67;33424:2;33419:3;33360:67;:::i;:::-;33353:74;;33436:93;33525:3;33436:93;:::i;:::-;33554:2;33549:3;33545:12;33538:19;;33197:366;;;:::o;33569:419::-;33735:4;33773:2;33762:9;33758:18;33750:26;;33822:9;33816:4;33812:20;33808:1;33797:9;33793:17;33786:47;33850:131;33976:4;33850:131;:::i;:::-;33842:139;;33569:419;;;:::o;33994:172::-;34134:24;34130:1;34122:6;34118:14;34111:48;33994:172;:::o;34172:366::-;34314:3;34335:67;34399:2;34394:3;34335:67;:::i;:::-;34328:74;;34411:93;34500:3;34411:93;:::i;:::-;34529:2;34524:3;34520:12;34513:19;;34172:366;;;:::o;34544:419::-;34710:4;34748:2;34737:9;34733:18;34725:26;;34797:9;34791:4;34787:20;34783:1;34772:9;34768:17;34761:47;34825:131;34951:4;34825:131;:::i;:::-;34817:139;;34544:419;;;:::o;34969:297::-;35109:34;35105:1;35097:6;35093:14;35086:58;35178:34;35173:2;35165:6;35161:15;35154:59;35247:11;35242:2;35234:6;35230:15;35223:36;34969:297;:::o;35272:366::-;35414:3;35435:67;35499:2;35494:3;35435:67;:::i;:::-;35428:74;;35511:93;35600:3;35511:93;:::i;:::-;35629:2;35624:3;35620:12;35613:19;;35272:366;;;:::o;35644:419::-;35810:4;35848:2;35837:9;35833:18;35825:26;;35897:9;35891:4;35887:20;35883:1;35872:9;35868:17;35861:47;35925:131;36051:4;35925:131;:::i;:::-;35917:139;;35644:419;;;:::o;36069:240::-;36209:34;36205:1;36197:6;36193:14;36186:58;36278:23;36273:2;36265:6;36261:15;36254:48;36069:240;:::o;36315:366::-;36457:3;36478:67;36542:2;36537:3;36478:67;:::i;:::-;36471:74;;36554:93;36643:3;36554:93;:::i;:::-;36672:2;36667:3;36663:12;36656:19;;36315:366;;;:::o;36687:419::-;36853:4;36891:2;36880:9;36876:18;36868:26;;36940:9;36934:4;36930:20;36926:1;36915:9;36911:17;36904:47;36968:131;37094:4;36968:131;:::i;:::-;36960:139;;36687:419;;;:::o;37112:169::-;37252:21;37248:1;37240:6;37236:14;37229:45;37112:169;:::o;37287:366::-;37429:3;37450:67;37514:2;37509:3;37450:67;:::i;:::-;37443:74;;37526:93;37615:3;37526:93;:::i;:::-;37644:2;37639:3;37635:12;37628:19;;37287:366;;;:::o;37659:419::-;37825:4;37863:2;37852:9;37848:18;37840:26;;37912:9;37906:4;37902:20;37898:1;37887:9;37883:17;37876:47;37940:131;38066:4;37940:131;:::i;:::-;37932:139;;37659:419;;;:::o;38084:241::-;38224:34;38220:1;38212:6;38208:14;38201:58;38293:24;38288:2;38280:6;38276:15;38269:49;38084:241;:::o;38331:366::-;38473:3;38494:67;38558:2;38553:3;38494:67;:::i;:::-;38487:74;;38570:93;38659:3;38570:93;:::i;:::-;38688:2;38683:3;38679:12;38672:19;;38331:366;;;:::o;38703:419::-;38869:4;38907:2;38896:9;38892:18;38884:26;;38956:9;38950:4;38946:20;38942:1;38931:9;38927:17;38920:47;38984:131;39110:4;38984:131;:::i;:::-;38976:139;;38703:419;;;:::o;39128:191::-;39168:4;39188:20;39206:1;39188:20;:::i;:::-;39183:25;;39222:20;39240:1;39222:20;:::i;:::-;39217:25;;39261:1;39258;39255:8;39252:34;;;39266:18;;:::i;:::-;39252:34;39311:1;39308;39304:9;39296:17;;39128:191;;;;:::o;39325:180::-;39373:77;39370:1;39363:88;39470:4;39467:1;39460:15;39494:4;39491:1;39484:15;39511:180;39559:77;39556:1;39549:88;39656:4;39653:1;39646:15;39680:4;39677:1;39670:15;39697:233;39736:3;39759:24;39777:5;39759:24;:::i;:::-;39750:33;;39805:66;39798:5;39795:77;39792:103;;39875:18;;:::i;:::-;39792:103;39922:1;39915:5;39911:13;39904:20;;39697:233;;;:::o;39936:151::-;40076:3;40072:1;40064:6;40060:14;40053:27;39936:151;:::o;40093:400::-;40253:3;40274:84;40356:1;40351:3;40274:84;:::i;:::-;40267:91;;40367:93;40456:3;40367:93;:::i;:::-;40485:1;40480:3;40476:11;40469:18;;40093:400;;;:::o;40499:701::-;40780:3;40802:95;40893:3;40884:6;40802:95;:::i;:::-;40795:102;;40914:148;41058:3;40914:148;:::i;:::-;40907:155;;41079:95;41170:3;41161:6;41079:95;:::i;:::-;41072:102;;41191:3;41184:10;;40499:701;;;;;:::o;41206:152::-;41346:4;41342:1;41334:6;41330:14;41323:28;41206:152;:::o;41364:400::-;41524:3;41545:84;41627:1;41622:3;41545:84;:::i;:::-;41538:91;;41638:93;41727:3;41638:93;:::i;:::-;41756:1;41751:3;41747:11;41740:18;;41364:400;;;:::o;41770:541::-;42003:3;42025:148;42169:3;42025:148;:::i;:::-;42018:155;;42190:95;42281:3;42272:6;42190:95;:::i;:::-;42183:102;;42302:3;42295:10;;41770:541;;;;:::o;42317:85::-;42362:7;42391:5;42380:16;;42317:85;;;:::o;42408:158::-;42466:9;42499:61;42517:42;42526:32;42552:5;42526:32;:::i;:::-;42517:42;:::i;:::-;42499:61;:::i;:::-;42486:74;;42408:158;;;:::o;42572:147::-;42667:45;42706:5;42667:45;:::i;:::-;42662:3;42655:58;42572:147;;:::o;42725:114::-;42792:6;42826:5;42820:12;42810:22;;42725:114;;;:::o;42845:184::-;42944:11;42978:6;42973:3;42966:19;43018:4;43013:3;43009:14;42994:29;;42845:184;;;;:::o;43035:132::-;43102:4;43125:3;43117:11;;43155:4;43150:3;43146:14;43138:22;;43035:132;;;:::o;43173:108::-;43250:24;43268:5;43250:24;:::i;:::-;43245:3;43238:37;43173:108;;:::o;43287:179::-;43356:10;43377:46;43419:3;43411:6;43377:46;:::i;:::-;43455:4;43450:3;43446:14;43432:28;;43287:179;;;;:::o;43472:113::-;43542:4;43574;43569:3;43565:14;43557:22;;43472:113;;;:::o;43621:732::-;43740:3;43769:54;43817:5;43769:54;:::i;:::-;43839:86;43918:6;43913:3;43839:86;:::i;:::-;43832:93;;43949:56;43999:5;43949:56;:::i;:::-;44028:7;44059:1;44044:284;44069:6;44066:1;44063:13;44044:284;;;44145:6;44139:13;44172:63;44231:3;44216:13;44172:63;:::i;:::-;44165:70;;44258:60;44311:6;44258:60;:::i;:::-;44248:70;;44104:224;44091:1;44088;44084:9;44079:14;;44044:284;;;44048:14;44344:3;44337:10;;43745:608;;;43621:732;;;;:::o;44359:831::-;44622:4;44660:3;44649:9;44645:19;44637:27;;44674:71;44742:1;44731:9;44727:17;44718:6;44674:71;:::i;:::-;44755:80;44831:2;44820:9;44816:18;44807:6;44755:80;:::i;:::-;44882:9;44876:4;44872:20;44867:2;44856:9;44852:18;44845:48;44910:108;45013:4;45004:6;44910:108;:::i;:::-;44902:116;;45028:72;45096:2;45085:9;45081:18;45072:6;45028:72;:::i;:::-;45110:73;45178:3;45167:9;45163:19;45154:6;45110:73;:::i;:::-;44359:831;;;;;;;;:::o;45196:225::-;45336:34;45332:1;45324:6;45320:14;45313:58;45405:8;45400:2;45392:6;45388:15;45381:33;45196:225;:::o;45427:366::-;45569:3;45590:67;45654:2;45649:3;45590:67;:::i;:::-;45583:74;;45666:93;45755:3;45666:93;:::i;:::-;45784:2;45779:3;45775:12;45768:19;;45427:366;;;:::o;45799:419::-;45965:4;46003:2;45992:9;45988:18;45980:26;;46052:9;46046:4;46042:20;46038:1;46027:9;46023:17;46016:47;46080:131;46206:4;46080:131;:::i;:::-;46072:139;;45799:419;;;:::o;46224:176::-;46256:1;46273:20;46291:1;46273:20;:::i;:::-;46268:25;;46307:20;46325:1;46307:20;:::i;:::-;46302:25;;46346:1;46336:35;;46351:18;;:::i;:::-;46336:35;46392:1;46389;46385:9;46380:14;;46224:176;;;;:::o
Swarm Source
ipfs://15d66f998bc95fd9a55c121c7a77f4c959404ed71daf16430fa11dfc1c39dcb3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.