Polygon Sponsored slots available. Book your slot here!
ERC-20
Overview
Max Total Supply
8,000,000,000 FLINT
Holders
78
Market
Price
$0.00 @ 0.000000 POL
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.100031958657079499 FLINTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Flint
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-11-20 */ // SPDX-License-Identifier: Unlicense pragma solidity ^0.8.16; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Dev(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function dev(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library 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; } } } contract Flint is Context, IERC20, Ownable { using SafeMath for uint256; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _excludedFromFee; mapping (address => bool) private _excludedFromReward; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 8000000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tTotalDistributedToken; string private _name = "Flint Token"; string private _symbol = "FLINT"; uint8 private _decimals = 18; uint256 public _bReward = 10; uint256 public _bDevfee = 20; uint256 public _bRfuel = 20; uint256 public _sReward = 10; uint256 public _sDevfee = 30; uint256 public _sRfuel = 50; uint256 private currentRefectionFee; uint256 private currentDevFee; uint256 private currentLiquidityFee; uint256 private currentLiquidNDevFee = currentDevFee.add(currentLiquidityFee); uint256 public DeFiBoost = 10000; address public _DeFi = payable(0x81723063eaD5c32C64ED419a95dc916D6B71AaDA); address public _DeFiCore = payable(0x6B134741057C1f22bfaf8077932F6C3a0Dc4411D); IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 private numTokensSellToAddToLiquidity = DeFiBoost * 10**18; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _excludedFromFee[owner()] = true; _excludedFromFee[address(this)] = true; _excludedFromFee[_DeFi] = true; _excludedFromFee[_DeFiCore] = true; _rOwned[_msgSender()] = _rTotal; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_excludedFromReward[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _excludedFromReward[account]; } function totalDistributedFees() public view returns (uint256) { return _tTotalDistributedToken; } function tokenFromReflection(uint256 rAmount) private view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_excludedFromReward[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _excludedFromReward[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_excludedFromReward[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _excludedFromReward[account] = false; _excluded.pop(); break; } } } function set_DeFi(address newDeFi) external onlyOwner { require(newDeFi != address(0), "DeFi can not be a zero address"); _DeFi = (newDeFi); } function set_DeFiCore(address newDeFiCore) external onlyOwner { require(newDeFiCore != address(0), "DeFiCore can not be a zero address"); _DeFiCore = (newDeFiCore); } function setDeFiBoost(uint256 Inject_Number) external onlyOwner() { DeFiBoost = Inject_Number; numTokensSellToAddToLiquidity = DeFiBoost * 10**18; } function setBuyFeePercent(uint256 reflect, uint256 dev, uint256 liquid) public onlyOwner { require(reflect.add(dev).add(liquid) <= 130, "Fee limitation is 13%"); _bReward = reflect; _bDevfee = dev; _bRfuel = liquid; } function setSellFeePercent(uint256 reflect, uint256 dev, uint256 liquid) public onlyOwner { require(reflect.add(dev).add(liquid) <= 150, "Fee limitation is 15%"); _sReward = reflect; _sDevfee = dev; _sRfuel = liquid; } function excludeFromFee(address account) public onlyOwner { _excludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _excludedFromFee[account] = false; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tTotalDistributedToken = _tTotalDistributedToken.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidNDevFee) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidNDevFee, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidNDevFee); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateReflectionFee(tAmount); uint256 tLiquidNDevFee = calculateLiquidNDevFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidNDevFee); return (tTransferAmount, tFee, tLiquidNDevFee); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidNDevFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidNDevFee = tLiquidNDevFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidNDevFee); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidNDevFee(uint256 tLiquidNDevFee,address sender) private { if(currentLiquidNDevFee == 0){ return; } uint256 tDev = tLiquidNDevFee.mul(currentDevFee).div(currentLiquidNDevFee); uint256 tLiquid = tLiquidNDevFee.sub(tDev); _sendFee(sender, _DeFi, tDev); _sendFee(sender, address(this), tLiquid); } function _sendFee(address from, address to, uint256 amount) private{ uint256 currentRate = _getRate(); uint256 rAmount = amount.mul(currentRate); _rOwned[to] = _rOwned[to].add(rAmount); if(_excludedFromReward[to]) _tOwned[to] = _tOwned[to].add(amount); emit Transfer(from, to, amount); } function calculateReflectionFee(uint256 _amount) private view returns (uint256) { return _amount.mul(currentRefectionFee).div( 10**3 ); } function calculateLiquidNDevFee(uint256 _amount) private view returns (uint256) { return _amount.mul(currentLiquidNDevFee).div( 10**3 ); } function isExcludedFromFee(address account) public view returns(bool) { return _excludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { 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 _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); bool overMinTokenBalance = balanceOf(address(this)) >= numTokensSellToAddToLiquidity; if ( !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled && overMinTokenBalance ) { swapAndLiquify(balanceOf(address(this))); } bool takeFee = true; if(_excludedFromFee[from] || _excludedFromFee[to]){ takeFee = false; } _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, _DeFiCore, block.timestamp ); } function updateRouter(address newAddress) external onlyOwner { require( newAddress != address(uniswapV2Router), "R: The router already has that address" ); uniswapV2Router = IUniswapV2Router02(newAddress); address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()) .createPair(address(this), uniswapV2Router.WETH()); uniswapV2Pair = _uniswapV2Pair; } function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private { if(!takeFee){ currentRefectionFee = 0; currentDevFee = 0; currentLiquidityFee = 0; }else if( sender == uniswapV2Pair) { currentRefectionFee = _bReward; currentDevFee = _bDevfee; currentLiquidityFee = _bRfuel; }else if (recipient == uniswapV2Pair){ currentRefectionFee = _sReward; currentDevFee = _sDevfee; currentLiquidityFee = _sRfuel; }else { currentRefectionFee = 0; currentDevFee = 0; currentLiquidityFee = 0; } currentLiquidNDevFee = currentDevFee + currentLiquidityFee; if (_excludedFromReward[sender] && !_excludedFromReward[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_excludedFromReward[sender] && _excludedFromReward[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_excludedFromReward[sender] && !_excludedFromReward[recipient]) { _transferStandard(sender, recipient, amount); } else if (_excludedFromReward[sender] && _excludedFromReward[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidNDevFee) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidNDevFee(tLiquidNDevFee, sender); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidNDevFee) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidNDevFee(tLiquidNDevFee, sender); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidNDevFee) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidNDevFee(tLiquidNDevFee, sender); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidNDevFee) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidNDevFee(tLiquidNDevFee, sender); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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"},{"inputs":[],"name":"DeFiBoost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_DeFi","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_DeFiCore","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_bDevfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_bReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_bRfuel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sDevfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sRfuel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"liquid","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Inject_Number","type":"uint256"}],"name":"setDeFiBoost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"liquid","type":"uint256"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDeFi","type":"address"}],"name":"set_DeFi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDeFiCore","type":"address"}],"name":"set_DeFiCore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDistributedFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526b19d971e4fe8401e740000000600755600754600019620000269190620007ce565b60001962000035919062000835565b6008556040518060400160405280600b81526020017f466c696e7420546f6b656e000000000000000000000000000000000000000000815250600a90816200007e919062000ae0565b506040518060400160405280600581526020017f464c494e54000000000000000000000000000000000000000000000000000000815250600b9081620000c5919062000ae0565b506012600c60006101000a81548160ff021916908360ff160217905550600a600d556014600e556014600f55600a601055601e60115560326012556200011e6015546014546200074c60201b6200251e1790919060201c565b6016556127106017557381723063ead5c32c64ed419a95dc916d6b71aada601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736b134741057c1f22bfaf8077932f6c3a0dc4411d601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601b60156101000a81548160ff021916908315150217905550670de0b6b3a764000060175462000204919062000bc7565b601c553480156200021457600080fd5b506000620002276200076460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600073a5e0829caced8ffdd4de3c43696c57f7d7a678ff90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000350919062000c92565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003de919062000c92565b6040518363ffffffff1660e01b8152600401620003fd92919062000cd5565b6020604051808303816000875af11580156200041d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000443919062000c92565b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000620004da6200076c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600854600160006200068e6200076460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620006dc6200076460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040516200073d919062000d13565b60405180910390a35062000d6b565b600081836200075c919062000d30565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620007db8262000795565b9150620007e88362000795565b925082620007fb57620007fa6200079f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008428262000795565b91506200084f8362000795565b92508282039050818111156200086a576200086962000806565b5b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008f257607f821691505b602082108103620009085762000907620008aa565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000933565b6200097e868362000933565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620009c1620009bb620009b58462000795565b62000996565b62000795565b9050919050565b6000819050919050565b620009dd83620009a0565b620009f5620009ec82620009c8565b84845462000940565b825550505050565b600090565b62000a0c620009fd565b62000a19818484620009d2565b505050565b5b8181101562000a415762000a3560008262000a02565b60018101905062000a1f565b5050565b601f82111562000a905762000a5a816200090e565b62000a658462000923565b8101602085101562000a75578190505b62000a8d62000a848562000923565b83018262000a1e565b50505b505050565b600082821c905092915050565b600062000ab56000198460080262000a95565b1980831691505092915050565b600062000ad0838362000aa2565b9150826002028217905092915050565b62000aeb8262000870565b67ffffffffffffffff81111562000b075762000b066200087b565b5b62000b138254620008d9565b62000b2082828562000a45565b600060209050601f83116001811462000b58576000841562000b43578287015190505b62000b4f858262000ac2565b86555062000bbf565b601f19841662000b68866200090e565b60005b8281101562000b925784890151825560018201915060208501945060208101905062000b6b565b8683101562000bb2578489015162000bae601f89168262000aa2565b8355505b6001600288020188555050505b505050505050565b600062000bd48262000795565b915062000be18362000795565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c1d5762000c1c62000806565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c5a8262000c2d565b9050919050565b62000c6c8162000c4d565b811462000c7857600080fd5b50565b60008151905062000c8c8162000c61565b92915050565b60006020828403121562000cab5762000caa62000c28565b5b600062000cbb8482850162000c7b565b91505092915050565b62000ccf8162000c4d565b82525050565b600060408201905062000cec600083018562000cc4565b62000cfb602083018462000cc4565b9392505050565b62000d0d8162000795565b82525050565b600060208201905062000d2a600083018462000d02565b92915050565b600062000d3d8262000795565b915062000d4a8362000795565b925082820190508082111562000d655762000d6462000806565b5b92915050565b61552c8062000d7b6000396000f3fe60806040526004361061023f5760003560e01c8063715018a61161012e578063a5c9ee61116100ab578063dd62ed3e1161006f578063dd62ed3e14610896578063df796963146108d3578063ea2f0b37146108fc578063ecdd021514610925578063f2fde38b1461095057610246565b8063a5c9ee61146107b3578063a9059cbb146107de578063be19674b1461081b578063c49b9a8014610844578063c851cc321461086d57610246565b806395d89b41116100f257806395d89b41146106ca578063964ca90e146106f55780639e03584614610720578063a457c2d71461074b578063a54614a61461078857610246565b8063715018a6146105f55780637643a1cd1461060c5780637bc48cb61461063757806388f82020146106625780638da5cb5b1461069f57610246565b806342cac967116101bc57806352390c021161018057806352390c02146104fe5780635342acb4146105275780635ba70bc1146105645780636ef75d481461058d57806370a08231146105b857610246565b806342cac96714610429578063437823ec1461045457806349bd5a5e1461047d5780634a74bb02146104a85780634cecef6c146104d357610246565b806318160ddd1161020357806318160ddd1461033057806323b872dd1461035b578063313ce567146103985780633685d419146103c357806339509351146103ec57610246565b806304b02a431461024b57806306fdde0314610274578063095ea7b31461029f578063151cd1c2146102dc5780631694505e1461030557610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190614403565b610979565b005b34801561028057600080fd5b50610289610a34565b60405161029691906144c0565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190614540565b610ac6565b6040516102d3919061459b565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906145b6565b610ae4565b005b34801561031157600080fd5b5061031a610bfb565b6040516103279190614668565b60405180910390f35b34801561033c57600080fd5b50610345610c21565b6040516103529190614692565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d91906146ad565b610c2b565b60405161038f919061459b565b60405180910390f35b3480156103a457600080fd5b506103ad610d04565b6040516103ba919061471c565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190614737565b610d1b565b005b3480156103f857600080fd5b50610413600480360381019061040e9190614540565b611069565b604051610420919061459b565b60405180910390f35b34801561043557600080fd5b5061043e61111c565b60405161044b9190614692565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190614737565b611122565b005b34801561048957600080fd5b50610492611212565b60405161049f9190614773565b60405180910390f35b3480156104b457600080fd5b506104bd611238565b6040516104ca919061459b565b60405180910390f35b3480156104df57600080fd5b506104e861124b565b6040516104f59190614773565b60405180910390f35b34801561050a57600080fd5b5061052560048036038101906105209190614737565b611271565b005b34801561053357600080fd5b5061054e60048036038101906105499190614737565b611525565b60405161055b919061459b565b60405180910390f35b34801561057057600080fd5b5061058b60048036038101906105869190614737565b61157b565b005b34801561059957600080fd5b506105a26116c3565b6040516105af9190614692565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190614737565b6116c9565b6040516105ec9190614692565b60405180910390f35b34801561060157600080fd5b5061060a6117b4565b005b34801561061857600080fd5b50610621611907565b60405161062e9190614692565b60405180910390f35b34801561064357600080fd5b5061064c61190d565b6040516106599190614692565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190614737565b611913565b604051610696919061459b565b60405180910390f35b3480156106ab57600080fd5b506106b4611969565b6040516106c19190614773565b60405180910390f35b3480156106d657600080fd5b506106df611992565b6040516106ec91906144c0565b60405180910390f35b34801561070157600080fd5b5061070a611a24565b6040516107179190614692565b60405180910390f35b34801561072c57600080fd5b50610735611a2a565b6040516107429190614692565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190614540565b611a34565b60405161077f919061459b565b60405180910390f35b34801561079457600080fd5b5061079d611b01565b6040516107aa9190614692565b60405180910390f35b3480156107bf57600080fd5b506107c8611b07565b6040516107d59190614692565b60405180910390f35b3480156107ea57600080fd5b5061080560048036038101906108009190614540565b611b0d565b604051610812919061459b565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d91906145b6565b611b2b565b005b34801561085057600080fd5b5061086b600480360381019061086691906147ba565b611c42565b005b34801561087957600080fd5b50610894600480360381019061088f9190614737565b611d2b565b005b3480156108a257600080fd5b506108bd60048036038101906108b891906147e7565b612078565b6040516108ca9190614692565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f59190614737565b6120ff565b005b34801561090857600080fd5b50610923600480360381019061091e9190614737565b612247565b005b34801561093157600080fd5b5061093a612337565b6040516109479190614773565b60405180910390f35b34801561095c57600080fd5b5061097760048036038101906109729190614737565b61235d565b005b610981612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0590614873565b60405180910390fd5b80601781905550670de0b6b3a7640000601754610a2b91906148c2565b601c8190555050565b6060600a8054610a439061494b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6f9061494b565b8015610abc5780601f10610a9157610100808354040283529160200191610abc565b820191906000526020600020905b815481529060010190602001808311610a9f57829003601f168201915b5050505050905090565b6000610ada610ad3612534565b848461253c565b6001905092915050565b610aec612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7090614873565b60405180910390fd5b6096610ba082610b92858761251e90919063ffffffff16565b61251e90919063ffffffff16565b1115610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd8906149c8565b60405180910390fd5b826010819055508160118190555080601281905550505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b6000610c38848484612705565b610cf984610c44612534565b610cf4856040518060600160405280602881526020016154aa60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610caa612534565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299f9092919063ffffffff16565b61253c565b600190509392505050565b6000600c60009054906101000a900460ff16905090565b610d23612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da790614873565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3390614a34565b60405180910390fd5b60005b600680549050811015611065578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610e7757610e76614a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036110525760066001600680549050610ed19190614a83565b81548110610ee257610ee1614a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610f2157610f20614a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061101857611017614ab7565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611065565b808061105d90614ae6565b915050610e3f565b5050565b6000611112611076612534565b8461110d8560036000611087612534565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b61253c565b6001905092915050565b60115481565b61112a612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90614873565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60159054906101000a900460ff1681565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611279612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90614873565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90614a34565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561146757611423600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129f4565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611583612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790614873565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690614b7a565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561176457600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506117af565b6117ac600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129f4565b90505b919050565b6117bc612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184090614873565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f5481565b60175481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b80546119a19061494b565b80601f01602080910402602001604051908101604052809291908181526020018280546119cd9061494b565b8015611a1a5780601f106119ef57610100808354040283529160200191611a1a565b820191906000526020600020905b8154815290600101906020018083116119fd57829003601f168201915b5050505050905090565b600d5481565b6000600954905090565b6000611af7611a41612534565b84611af2856040518060600160405280602581526020016154d26025913960036000611a6b612534565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299f9092919063ffffffff16565b61253c565b6001905092915050565b600e5481565b60125481565b6000611b21611b1a612534565b8484612705565b6001905092915050565b611b33612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790614873565b60405180910390fd5b6082611be782611bd9858761251e90919063ffffffff16565b61251e90919063ffffffff16565b1115611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90614be6565b60405180910390fd5b82600d8190555081600e8190555080600f81905550505050565b611c4a612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90614873565b60405180910390fd5b80601b60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611d20919061459b565b60405180910390a150565b611d33612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db790614873565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4790614c78565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f249190614cad565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd19190614cad565b6040518363ffffffff1660e01b8152600401611fee929190614cda565b6020604051808303816000875af115801561200d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120319190614cad565b905080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612107612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218b90614873565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa90614d75565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61224f612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d390614873565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612365612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e990614873565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890614e07565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000818361252c9190614e27565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a290614ecd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361261a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261190614f5f565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126f89190614692565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b90614ff1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127da90615083565b60405180910390fd5b60008111612826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281d90615115565b60405180910390fd5b6000601c54612834306116c9565b10159050601b60149054906101000a900460ff161580156128a35750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156128bb5750601b60159054906101000a900460ff165b80156128c45750805b156128db576128da6128d5306116c9565b612a62565b5b600060019050600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129825750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561298c57600090505b61299885858584612b38565b5050505050565b60008383111582906129e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129de91906144c0565b60405180910390fd5b5082840390509392505050565b6000600854821115612a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a32906151a7565b60405180910390fd5b6000612a45612f6a565b9050612a5a8184612f9590919063ffffffff16565b915050919050565b6001601b60146101000a81548160ff0219169083151502179055506000612a93600283612f9590919063ffffffff16565b90506000612aaa8284612fab90919063ffffffff16565b90506000479050612aba83612fc1565b6000612acf8247612fab90919063ffffffff16565b9050612adb8382613204565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612b0e939291906151c7565b60405180910390a1505050506000601b60146101000a81548160ff02191690831515021790555050565b80612b5a57600060138190555060006014819055506000601581905550612c5f565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612bcf57600d54601381905550600e54601481905550600f54601581905550612c5e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c4457601054601381905550601154601481905550601254601581905550612c5d565b6000601381905550600060148190555060006015819055505b5b5b601554601454612c6f9190614e27565b601681905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d185750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d2d57612d28848484613304565b612f64565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612dd05750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612de557612de0848484613565565b612f63565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e895750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e9e57612e998484846137c6565b612f62565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f405750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f5557612f50848484613992565b612f61565b612f608484846137c6565b5b5b5b5b50505050565b6000806000612f77613c88565b91509150612f8e8183612f9590919063ffffffff16565b9250505090565b60008183612fa3919061522d565b905092915050565b60008183612fb99190614a83565b905092915050565b6000600267ffffffffffffffff811115612fde57612fdd61525e565b5b60405190808252806020026020018201604052801561300c5781602001602082028036833780820191505090505b509050308160008151811061302457613023614a54565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ef9190614cad565b8160018151811061310357613102614a54565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061316a30601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461253c565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016131ce959493929190615386565b600060405180830381600087803b1580156131e857600080fd5b505af11580156131fc573d6000803e3d6000fd5b505050505050565b61323130601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461253c565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016132ba969594939291906153e0565b60606040518083038185885af11580156132d8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132fd9190615456565b5050505050565b60008060008060008061331687613f3b565b95509550955095509550955061337487600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fab90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061340986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fab90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061349e85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134eb818a613f97565b6134f58483614025565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135529190614692565b60405180910390a3505050505050505050565b60008060008060008061357787613f3b565b9550955095509550955095506135d586600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fab90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061366a83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136ff85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061374c818a613f97565b6137568483614025565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137b39190614692565b60405180910390a3505050505050505050565b6000806000806000806137d887613f3b565b95509550955095509550955061383686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fab90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138cb85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613918818a613f97565b6139228483614025565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161397f9190614692565b60405180910390a3505050505050505050565b6000806000806000806139a487613f3b565b955095509550955095509550613a0287600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fab90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a9786600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fab90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b2c83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bc185600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0e818a613f97565b613c188483614025565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c759190614692565b60405180910390a3505050505050505050565b600080600060085490506000600754905060005b600680549050811015613efe57826001600060068481548110613cc257613cc1614a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613db05750816002600060068481548110613d4857613d47614a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613dc75760085460075494509450505050613f37565b613e576001600060068481548110613de257613de1614a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612fab90919063ffffffff16565b9250613ee96002600060068481548110613e7457613e73614a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612fab90919063ffffffff16565b91508080613ef690614ae6565b915050613c9c565b50613f16600754600854612f9590919063ffffffff16565b821015613f2e57600854600754935093505050613f37565b81819350935050505b9091565b6000806000806000806000806000613f528a61405f565b9250925092506000806000613f708d8686613f6b612f6a565b6140b9565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006016540315614021576000613fcd601654613fbf6014548661414290919063ffffffff16565b612f9590919063ffffffff16565b90506000613fe48285612fab90919063ffffffff16565b905061401383601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684614158565b61401e833083614158565b50505b5050565b61403a82600854612fab90919063ffffffff16565b6008819055506140558160095461251e90919063ffffffff16565b6009819055505050565b60008060008061406e85614364565b9050600061407b86614396565b905060006140a482614096858a612fab90919063ffffffff16565b612fab90919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806140d2858961414290919063ffffffff16565b905060006140e9868961414290919063ffffffff16565b90506000614100878961414290919063ffffffff16565b905060006141298261411b8587612fab90919063ffffffff16565b612fab90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000818361415091906148c2565b905092915050565b6000614162612f6a565b90506000614179828461414290919063ffffffff16565b90506141cd81600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142f8576142b483600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143559190614692565b60405180910390a35050505050565b600061438f6103e86143816013548561414290919063ffffffff16565b612f9590919063ffffffff16565b9050919050565b60006143c16103e86143b36016548561414290919063ffffffff16565b612f9590919063ffffffff16565b9050919050565b600080fd5b6000819050919050565b6143e0816143cd565b81146143eb57600080fd5b50565b6000813590506143fd816143d7565b92915050565b600060208284031215614419576144186143c8565b5b6000614427848285016143ee565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561446a57808201518184015260208101905061444f565b60008484015250505050565b6000601f19601f8301169050919050565b600061449282614430565b61449c818561443b565b93506144ac81856020860161444c565b6144b581614476565b840191505092915050565b600060208201905081810360008301526144da8184614487565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061450d826144e2565b9050919050565b61451d81614502565b811461452857600080fd5b50565b60008135905061453a81614514565b92915050565b60008060408385031215614557576145566143c8565b5b60006145658582860161452b565b9250506020614576858286016143ee565b9150509250929050565b60008115159050919050565b61459581614580565b82525050565b60006020820190506145b0600083018461458c565b92915050565b6000806000606084860312156145cf576145ce6143c8565b5b60006145dd868287016143ee565b93505060206145ee868287016143ee565b92505060406145ff868287016143ee565b9150509250925092565b6000819050919050565b600061462e614629614624846144e2565b614609565b6144e2565b9050919050565b600061464082614613565b9050919050565b600061465282614635565b9050919050565b61466281614647565b82525050565b600060208201905061467d6000830184614659565b92915050565b61468c816143cd565b82525050565b60006020820190506146a76000830184614683565b92915050565b6000806000606084860312156146c6576146c56143c8565b5b60006146d48682870161452b565b93505060206146e58682870161452b565b92505060406146f6868287016143ee565b9150509250925092565b600060ff82169050919050565b61471681614700565b82525050565b6000602082019050614731600083018461470d565b92915050565b60006020828403121561474d5761474c6143c8565b5b600061475b8482850161452b565b91505092915050565b61476d81614502565b82525050565b60006020820190506147886000830184614764565b92915050565b61479781614580565b81146147a257600080fd5b50565b6000813590506147b48161478e565b92915050565b6000602082840312156147d0576147cf6143c8565b5b60006147de848285016147a5565b91505092915050565b600080604083850312156147fe576147fd6143c8565b5b600061480c8582860161452b565b925050602061481d8582860161452b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061485d60208361443b565b915061486882614827565b602082019050919050565b6000602082019050818103600083015261488c81614850565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148cd826143cd565b91506148d8836143cd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561491157614910614893565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061496357607f821691505b6020821081036149765761497561491c565b5b50919050565b7f466565206c696d69746174696f6e206973203135250000000000000000000000600082015250565b60006149b260158361443b565b91506149bd8261497c565b602082019050919050565b600060208201905081810360008301526149e1816149a5565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614a1e601b8361443b565b9150614a29826149e8565b602082019050919050565b60006020820190508181036000830152614a4d81614a11565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a8e826143cd565b9150614a99836143cd565b9250828203905081811115614ab157614ab0614893565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614af1826143cd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b2357614b22614893565b5b600182019050919050565b7f446546692063616e206e6f742062652061207a65726f20616464726573730000600082015250565b6000614b64601e8361443b565b9150614b6f82614b2e565b602082019050919050565b60006020820190508181036000830152614b9381614b57565b9050919050565b7f466565206c696d69746174696f6e206973203133250000000000000000000000600082015250565b6000614bd060158361443b565b9150614bdb82614b9a565b602082019050919050565b60006020820190508181036000830152614bff81614bc3565b9050919050565b7f523a2054686520726f7574657220616c7265616479206861732074686174206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c6260268361443b565b9150614c6d82614c06565b604082019050919050565b60006020820190508181036000830152614c9181614c55565b9050919050565b600081519050614ca781614514565b92915050565b600060208284031215614cc357614cc26143c8565b5b6000614cd184828501614c98565b91505092915050565b6000604082019050614cef6000830185614764565b614cfc6020830184614764565b9392505050565b7f44654669436f72652063616e206e6f742062652061207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d5f60228361443b565b9150614d6a82614d03565b604082019050919050565b60006020820190508181036000830152614d8e81614d52565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614df160268361443b565b9150614dfc82614d95565b604082019050919050565b60006020820190508181036000830152614e2081614de4565b9050919050565b6000614e32826143cd565b9150614e3d836143cd565b9250828201905080821115614e5557614e54614893565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614eb760248361443b565b9150614ec282614e5b565b604082019050919050565b60006020820190508181036000830152614ee681614eaa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f4960228361443b565b9150614f5482614eed565b604082019050919050565b60006020820190508181036000830152614f7881614f3c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614fdb60258361443b565b9150614fe682614f7f565b604082019050919050565b6000602082019050818103600083015261500a81614fce565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061506d60238361443b565b915061507882615011565b604082019050919050565b6000602082019050818103600083015261509c81615060565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006150ff60298361443b565b915061510a826150a3565b604082019050919050565b6000602082019050818103600083015261512e816150f2565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615191602a8361443b565b915061519c82615135565b604082019050919050565b600060208201905081810360008301526151c081615184565b9050919050565b60006060820190506151dc6000830186614683565b6151e96020830185614683565b6151f66040830184614683565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615238826143cd565b9150615243836143cd565b925082615253576152526151fe565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b60006152b26152ad6152a88461528d565b614609565b6143cd565b9050919050565b6152c281615297565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152fd81614502565b82525050565b600061530f83836152f4565b60208301905092915050565b6000602082019050919050565b6000615333826152c8565b61533d81856152d3565b9350615348836152e4565b8060005b838110156153795781516153608882615303565b975061536b8361531b565b92505060018101905061534c565b5085935050505092915050565b600060a08201905061539b6000830188614683565b6153a860208301876152b9565b81810360408301526153ba8186615328565b90506153c96060830185614764565b6153d66080830184614683565b9695505050505050565b600060c0820190506153f56000830189614764565b6154026020830188614683565b61540f60408301876152b9565b61541c60608301866152b9565b6154296080830185614764565b61543660a0830184614683565b979650505050505050565b600081519050615450816143d7565b92915050565b60008060006060848603121561546f5761546e6143c8565b5b600061547d86828701615441565b935050602061548e86828701615441565b925050604061549f86828701615441565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201274566e00e013eaa4b14d9731b7284f8812974057872e7f9d7491373fa85d6b64736f6c63430008100033
Deployed Bytecode
0x60806040526004361061023f5760003560e01c8063715018a61161012e578063a5c9ee61116100ab578063dd62ed3e1161006f578063dd62ed3e14610896578063df796963146108d3578063ea2f0b37146108fc578063ecdd021514610925578063f2fde38b1461095057610246565b8063a5c9ee61146107b3578063a9059cbb146107de578063be19674b1461081b578063c49b9a8014610844578063c851cc321461086d57610246565b806395d89b41116100f257806395d89b41146106ca578063964ca90e146106f55780639e03584614610720578063a457c2d71461074b578063a54614a61461078857610246565b8063715018a6146105f55780637643a1cd1461060c5780637bc48cb61461063757806388f82020146106625780638da5cb5b1461069f57610246565b806342cac967116101bc57806352390c021161018057806352390c02146104fe5780635342acb4146105275780635ba70bc1146105645780636ef75d481461058d57806370a08231146105b857610246565b806342cac96714610429578063437823ec1461045457806349bd5a5e1461047d5780634a74bb02146104a85780634cecef6c146104d357610246565b806318160ddd1161020357806318160ddd1461033057806323b872dd1461035b578063313ce567146103985780633685d419146103c357806339509351146103ec57610246565b806304b02a431461024b57806306fdde0314610274578063095ea7b31461029f578063151cd1c2146102dc5780631694505e1461030557610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190614403565b610979565b005b34801561028057600080fd5b50610289610a34565b60405161029691906144c0565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190614540565b610ac6565b6040516102d3919061459b565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906145b6565b610ae4565b005b34801561031157600080fd5b5061031a610bfb565b6040516103279190614668565b60405180910390f35b34801561033c57600080fd5b50610345610c21565b6040516103529190614692565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d91906146ad565b610c2b565b60405161038f919061459b565b60405180910390f35b3480156103a457600080fd5b506103ad610d04565b6040516103ba919061471c565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190614737565b610d1b565b005b3480156103f857600080fd5b50610413600480360381019061040e9190614540565b611069565b604051610420919061459b565b60405180910390f35b34801561043557600080fd5b5061043e61111c565b60405161044b9190614692565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190614737565b611122565b005b34801561048957600080fd5b50610492611212565b60405161049f9190614773565b60405180910390f35b3480156104b457600080fd5b506104bd611238565b6040516104ca919061459b565b60405180910390f35b3480156104df57600080fd5b506104e861124b565b6040516104f59190614773565b60405180910390f35b34801561050a57600080fd5b5061052560048036038101906105209190614737565b611271565b005b34801561053357600080fd5b5061054e60048036038101906105499190614737565b611525565b60405161055b919061459b565b60405180910390f35b34801561057057600080fd5b5061058b60048036038101906105869190614737565b61157b565b005b34801561059957600080fd5b506105a26116c3565b6040516105af9190614692565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190614737565b6116c9565b6040516105ec9190614692565b60405180910390f35b34801561060157600080fd5b5061060a6117b4565b005b34801561061857600080fd5b50610621611907565b60405161062e9190614692565b60405180910390f35b34801561064357600080fd5b5061064c61190d565b6040516106599190614692565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190614737565b611913565b604051610696919061459b565b60405180910390f35b3480156106ab57600080fd5b506106b4611969565b6040516106c19190614773565b60405180910390f35b3480156106d657600080fd5b506106df611992565b6040516106ec91906144c0565b60405180910390f35b34801561070157600080fd5b5061070a611a24565b6040516107179190614692565b60405180910390f35b34801561072c57600080fd5b50610735611a2a565b6040516107429190614692565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190614540565b611a34565b60405161077f919061459b565b60405180910390f35b34801561079457600080fd5b5061079d611b01565b6040516107aa9190614692565b60405180910390f35b3480156107bf57600080fd5b506107c8611b07565b6040516107d59190614692565b60405180910390f35b3480156107ea57600080fd5b5061080560048036038101906108009190614540565b611b0d565b604051610812919061459b565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d91906145b6565b611b2b565b005b34801561085057600080fd5b5061086b600480360381019061086691906147ba565b611c42565b005b34801561087957600080fd5b50610894600480360381019061088f9190614737565b611d2b565b005b3480156108a257600080fd5b506108bd60048036038101906108b891906147e7565b612078565b6040516108ca9190614692565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f59190614737565b6120ff565b005b34801561090857600080fd5b50610923600480360381019061091e9190614737565b612247565b005b34801561093157600080fd5b5061093a612337565b6040516109479190614773565b60405180910390f35b34801561095c57600080fd5b5061097760048036038101906109729190614737565b61235d565b005b610981612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0590614873565b60405180910390fd5b80601781905550670de0b6b3a7640000601754610a2b91906148c2565b601c8190555050565b6060600a8054610a439061494b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6f9061494b565b8015610abc5780601f10610a9157610100808354040283529160200191610abc565b820191906000526020600020905b815481529060010190602001808311610a9f57829003601f168201915b5050505050905090565b6000610ada610ad3612534565b848461253c565b6001905092915050565b610aec612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7090614873565b60405180910390fd5b6096610ba082610b92858761251e90919063ffffffff16565b61251e90919063ffffffff16565b1115610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd8906149c8565b60405180910390fd5b826010819055508160118190555080601281905550505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b6000610c38848484612705565b610cf984610c44612534565b610cf4856040518060600160405280602881526020016154aa60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610caa612534565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299f9092919063ffffffff16565b61253c565b600190509392505050565b6000600c60009054906101000a900460ff16905090565b610d23612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da790614873565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3390614a34565b60405180910390fd5b60005b600680549050811015611065578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610e7757610e76614a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036110525760066001600680549050610ed19190614a83565b81548110610ee257610ee1614a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610f2157610f20614a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061101857611017614ab7565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611065565b808061105d90614ae6565b915050610e3f565b5050565b6000611112611076612534565b8461110d8560036000611087612534565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b61253c565b6001905092915050565b60115481565b61112a612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90614873565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60159054906101000a900460ff1681565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611279612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90614873565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90614a34565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561146757611423600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129f4565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611583612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790614873565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690614b7a565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561176457600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506117af565b6117ac600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129f4565b90505b919050565b6117bc612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184090614873565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f5481565b60175481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b80546119a19061494b565b80601f01602080910402602001604051908101604052809291908181526020018280546119cd9061494b565b8015611a1a5780601f106119ef57610100808354040283529160200191611a1a565b820191906000526020600020905b8154815290600101906020018083116119fd57829003601f168201915b5050505050905090565b600d5481565b6000600954905090565b6000611af7611a41612534565b84611af2856040518060600160405280602581526020016154d26025913960036000611a6b612534565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299f9092919063ffffffff16565b61253c565b6001905092915050565b600e5481565b60125481565b6000611b21611b1a612534565b8484612705565b6001905092915050565b611b33612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790614873565b60405180910390fd5b6082611be782611bd9858761251e90919063ffffffff16565b61251e90919063ffffffff16565b1115611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90614be6565b60405180910390fd5b82600d8190555081600e8190555080600f81905550505050565b611c4a612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90614873565b60405180910390fd5b80601b60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611d20919061459b565b60405180910390a150565b611d33612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db790614873565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4790614c78565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f249190614cad565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd19190614cad565b6040518363ffffffff1660e01b8152600401611fee929190614cda565b6020604051808303816000875af115801561200d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120319190614cad565b905080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612107612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218b90614873565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa90614d75565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61224f612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d390614873565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612365612534565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e990614873565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890614e07565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000818361252c9190614e27565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a290614ecd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361261a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261190614f5f565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126f89190614692565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b90614ff1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127da90615083565b60405180910390fd5b60008111612826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281d90615115565b60405180910390fd5b6000601c54612834306116c9565b10159050601b60149054906101000a900460ff161580156128a35750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156128bb5750601b60159054906101000a900460ff165b80156128c45750805b156128db576128da6128d5306116c9565b612a62565b5b600060019050600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129825750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561298c57600090505b61299885858584612b38565b5050505050565b60008383111582906129e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129de91906144c0565b60405180910390fd5b5082840390509392505050565b6000600854821115612a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a32906151a7565b60405180910390fd5b6000612a45612f6a565b9050612a5a8184612f9590919063ffffffff16565b915050919050565b6001601b60146101000a81548160ff0219169083151502179055506000612a93600283612f9590919063ffffffff16565b90506000612aaa8284612fab90919063ffffffff16565b90506000479050612aba83612fc1565b6000612acf8247612fab90919063ffffffff16565b9050612adb8382613204565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612b0e939291906151c7565b60405180910390a1505050506000601b60146101000a81548160ff02191690831515021790555050565b80612b5a57600060138190555060006014819055506000601581905550612c5f565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612bcf57600d54601381905550600e54601481905550600f54601581905550612c5e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c4457601054601381905550601154601481905550601254601581905550612c5d565b6000601381905550600060148190555060006015819055505b5b5b601554601454612c6f9190614e27565b601681905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d185750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d2d57612d28848484613304565b612f64565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612dd05750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612de557612de0848484613565565b612f63565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e895750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e9e57612e998484846137c6565b612f62565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f405750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f5557612f50848484613992565b612f61565b612f608484846137c6565b5b5b5b5b50505050565b6000806000612f77613c88565b91509150612f8e8183612f9590919063ffffffff16565b9250505090565b60008183612fa3919061522d565b905092915050565b60008183612fb99190614a83565b905092915050565b6000600267ffffffffffffffff811115612fde57612fdd61525e565b5b60405190808252806020026020018201604052801561300c5781602001602082028036833780820191505090505b509050308160008151811061302457613023614a54565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ef9190614cad565b8160018151811061310357613102614a54565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061316a30601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461253c565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016131ce959493929190615386565b600060405180830381600087803b1580156131e857600080fd5b505af11580156131fc573d6000803e3d6000fd5b505050505050565b61323130601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461253c565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016132ba969594939291906153e0565b60606040518083038185885af11580156132d8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132fd9190615456565b5050505050565b60008060008060008061331687613f3b565b95509550955095509550955061337487600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fab90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061340986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fab90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061349e85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134eb818a613f97565b6134f58483614025565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135529190614692565b60405180910390a3505050505050505050565b60008060008060008061357787613f3b565b9550955095509550955095506135d586600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fab90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061366a83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136ff85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061374c818a613f97565b6137568483614025565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137b39190614692565b60405180910390a3505050505050505050565b6000806000806000806137d887613f3b565b95509550955095509550955061383686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fab90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138cb85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613918818a613f97565b6139228483614025565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161397f9190614692565b60405180910390a3505050505050505050565b6000806000806000806139a487613f3b565b955095509550955095509550613a0287600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fab90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a9786600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fab90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b2c83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bc185600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0e818a613f97565b613c188483614025565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c759190614692565b60405180910390a3505050505050505050565b600080600060085490506000600754905060005b600680549050811015613efe57826001600060068481548110613cc257613cc1614a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613db05750816002600060068481548110613d4857613d47614a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613dc75760085460075494509450505050613f37565b613e576001600060068481548110613de257613de1614a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612fab90919063ffffffff16565b9250613ee96002600060068481548110613e7457613e73614a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612fab90919063ffffffff16565b91508080613ef690614ae6565b915050613c9c565b50613f16600754600854612f9590919063ffffffff16565b821015613f2e57600854600754935093505050613f37565b81819350935050505b9091565b6000806000806000806000806000613f528a61405f565b9250925092506000806000613f708d8686613f6b612f6a565b6140b9565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006016540315614021576000613fcd601654613fbf6014548661414290919063ffffffff16565b612f9590919063ffffffff16565b90506000613fe48285612fab90919063ffffffff16565b905061401383601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684614158565b61401e833083614158565b50505b5050565b61403a82600854612fab90919063ffffffff16565b6008819055506140558160095461251e90919063ffffffff16565b6009819055505050565b60008060008061406e85614364565b9050600061407b86614396565b905060006140a482614096858a612fab90919063ffffffff16565b612fab90919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806140d2858961414290919063ffffffff16565b905060006140e9868961414290919063ffffffff16565b90506000614100878961414290919063ffffffff16565b905060006141298261411b8587612fab90919063ffffffff16565b612fab90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000818361415091906148c2565b905092915050565b6000614162612f6a565b90506000614179828461414290919063ffffffff16565b90506141cd81600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142f8576142b483600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143559190614692565b60405180910390a35050505050565b600061438f6103e86143816013548561414290919063ffffffff16565b612f9590919063ffffffff16565b9050919050565b60006143c16103e86143b36016548561414290919063ffffffff16565b612f9590919063ffffffff16565b9050919050565b600080fd5b6000819050919050565b6143e0816143cd565b81146143eb57600080fd5b50565b6000813590506143fd816143d7565b92915050565b600060208284031215614419576144186143c8565b5b6000614427848285016143ee565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561446a57808201518184015260208101905061444f565b60008484015250505050565b6000601f19601f8301169050919050565b600061449282614430565b61449c818561443b565b93506144ac81856020860161444c565b6144b581614476565b840191505092915050565b600060208201905081810360008301526144da8184614487565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061450d826144e2565b9050919050565b61451d81614502565b811461452857600080fd5b50565b60008135905061453a81614514565b92915050565b60008060408385031215614557576145566143c8565b5b60006145658582860161452b565b9250506020614576858286016143ee565b9150509250929050565b60008115159050919050565b61459581614580565b82525050565b60006020820190506145b0600083018461458c565b92915050565b6000806000606084860312156145cf576145ce6143c8565b5b60006145dd868287016143ee565b93505060206145ee868287016143ee565b92505060406145ff868287016143ee565b9150509250925092565b6000819050919050565b600061462e614629614624846144e2565b614609565b6144e2565b9050919050565b600061464082614613565b9050919050565b600061465282614635565b9050919050565b61466281614647565b82525050565b600060208201905061467d6000830184614659565b92915050565b61468c816143cd565b82525050565b60006020820190506146a76000830184614683565b92915050565b6000806000606084860312156146c6576146c56143c8565b5b60006146d48682870161452b565b93505060206146e58682870161452b565b92505060406146f6868287016143ee565b9150509250925092565b600060ff82169050919050565b61471681614700565b82525050565b6000602082019050614731600083018461470d565b92915050565b60006020828403121561474d5761474c6143c8565b5b600061475b8482850161452b565b91505092915050565b61476d81614502565b82525050565b60006020820190506147886000830184614764565b92915050565b61479781614580565b81146147a257600080fd5b50565b6000813590506147b48161478e565b92915050565b6000602082840312156147d0576147cf6143c8565b5b60006147de848285016147a5565b91505092915050565b600080604083850312156147fe576147fd6143c8565b5b600061480c8582860161452b565b925050602061481d8582860161452b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061485d60208361443b565b915061486882614827565b602082019050919050565b6000602082019050818103600083015261488c81614850565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148cd826143cd565b91506148d8836143cd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561491157614910614893565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061496357607f821691505b6020821081036149765761497561491c565b5b50919050565b7f466565206c696d69746174696f6e206973203135250000000000000000000000600082015250565b60006149b260158361443b565b91506149bd8261497c565b602082019050919050565b600060208201905081810360008301526149e1816149a5565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614a1e601b8361443b565b9150614a29826149e8565b602082019050919050565b60006020820190508181036000830152614a4d81614a11565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a8e826143cd565b9150614a99836143cd565b9250828203905081811115614ab157614ab0614893565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614af1826143cd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b2357614b22614893565b5b600182019050919050565b7f446546692063616e206e6f742062652061207a65726f20616464726573730000600082015250565b6000614b64601e8361443b565b9150614b6f82614b2e565b602082019050919050565b60006020820190508181036000830152614b9381614b57565b9050919050565b7f466565206c696d69746174696f6e206973203133250000000000000000000000600082015250565b6000614bd060158361443b565b9150614bdb82614b9a565b602082019050919050565b60006020820190508181036000830152614bff81614bc3565b9050919050565b7f523a2054686520726f7574657220616c7265616479206861732074686174206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c6260268361443b565b9150614c6d82614c06565b604082019050919050565b60006020820190508181036000830152614c9181614c55565b9050919050565b600081519050614ca781614514565b92915050565b600060208284031215614cc357614cc26143c8565b5b6000614cd184828501614c98565b91505092915050565b6000604082019050614cef6000830185614764565b614cfc6020830184614764565b9392505050565b7f44654669436f72652063616e206e6f742062652061207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d5f60228361443b565b9150614d6a82614d03565b604082019050919050565b60006020820190508181036000830152614d8e81614d52565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614df160268361443b565b9150614dfc82614d95565b604082019050919050565b60006020820190508181036000830152614e2081614de4565b9050919050565b6000614e32826143cd565b9150614e3d836143cd565b9250828201905080821115614e5557614e54614893565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614eb760248361443b565b9150614ec282614e5b565b604082019050919050565b60006020820190508181036000830152614ee681614eaa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f4960228361443b565b9150614f5482614eed565b604082019050919050565b60006020820190508181036000830152614f7881614f3c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614fdb60258361443b565b9150614fe682614f7f565b604082019050919050565b6000602082019050818103600083015261500a81614fce565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061506d60238361443b565b915061507882615011565b604082019050919050565b6000602082019050818103600083015261509c81615060565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006150ff60298361443b565b915061510a826150a3565b604082019050919050565b6000602082019050818103600083015261512e816150f2565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615191602a8361443b565b915061519c82615135565b604082019050919050565b600060208201905081810360008301526151c081615184565b9050919050565b60006060820190506151dc6000830186614683565b6151e96020830185614683565b6151f66040830184614683565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615238826143cd565b9150615243836143cd565b925082615253576152526151fe565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b60006152b26152ad6152a88461528d565b614609565b6143cd565b9050919050565b6152c281615297565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152fd81614502565b82525050565b600061530f83836152f4565b60208301905092915050565b6000602082019050919050565b6000615333826152c8565b61533d81856152d3565b9350615348836152e4565b8060005b838110156153795781516153608882615303565b975061536b8361531b565b92505060018101905061534c565b5085935050505092915050565b600060a08201905061539b6000830188614683565b6153a860208301876152b9565b81810360408301526153ba8186615328565b90506153c96060830185614764565b6153d66080830184614683565b9695505050505050565b600060c0820190506153f56000830189614764565b6154026020830188614683565b61540f60408301876152b9565b61541c60608301866152b9565b6154296080830185614764565b61543660a0830184614683565b979650505050505050565b600081519050615450816143d7565b92915050565b60008060006060848603121561546f5761546e6143c8565b5b600061547d86828701615441565b935050602061548e86828701615441565b925050604061549f86828701615441565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201274566e00e013eaa4b14d9731b7284f8812974057872e7f9d7491373fa85d6b64736f6c63430008100033
Deployed Bytecode Sourcemap
19872:18258:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26096:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22434:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23354:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26542:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21245:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22711:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23523:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22620:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25221:495;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23844:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20756:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26809:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21293:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21362:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21072:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24864:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30565:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25724:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20720:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22814:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12802:148;;;;;;;;;;;;;:::i;:::-;;20686:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21033:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24347:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12160:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22525:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20614:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24483:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24070:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20650:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20792:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23028:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26276:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27046:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33788:450;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23203:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25895:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26930:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21153:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13105:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26096:168;12382:12;:10;:12::i;:::-;12372:22;;:6;;;;;;;;;;:22;;;12364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26184:13:::1;26172:9;:25;;;;26251:6;26239:9;;:18;;;;:::i;:::-;26207:29;:50;;;;26096:168:::0;:::o;22434:83::-;22471:13;22504:5;22497:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22434:83;:::o;23354:161::-;23429:4;23446:39;23455:12;:10;:12::i;:::-;23469:7;23478:6;23446:8;:39::i;:::-;23503:4;23496:11;;23354:161;;;;:::o;26542:259::-;12382:12;:10;:12::i;:::-;12372:22;;:6;;;;;;;;;;:22;;;12364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26683:3:::1;26651:28;26672:6;26651:16;26663:3;26651:7;:11;;:16;;;;:::i;:::-;:20;;:28;;;;:::i;:::-;:35;;26643:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26734:7;26723:8;:18;;;;26763:3;26752:8;:14;;;;26787:6;26777:7;:16;;;;26542:259:::0;;;:::o;21245:41::-;;;;;;;;;;;;;:::o;22711:95::-;22764:7;22791;;22784:14;;22711:95;:::o;23523:313::-;23621:4;23638:36;23648:6;23656:9;23667:6;23638:9;:36::i;:::-;23685:121;23694:6;23702:12;:10;:12::i;:::-;23716:89;23754:6;23716:89;;;;;;;;;;;;;;;;;:11;:19;23728:6;23716:19;;;;;;;;;;;;;;;:33;23736:12;:10;:12::i;:::-;23716:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23685:8;:121::i;:::-;23824:4;23817:11;;23523:313;;;;;:::o;22620:83::-;22661:5;22686:9;;;;;;;;;;;22679:16;;22620:83;:::o;25221:495::-;12382:12;:10;:12::i;:::-;12372:22;;:6;;;;;;;;;;:22;;;12364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25303:19:::1;:28;25323:7;25303:28;;;;;;;;;;;;;;;;;;;;;;;;;25295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25379:9;25374:335;25398:9;:16;;;;25394:1;:20;25374:335;;;25456:7;25440:23;;:9;25450:1;25440:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;25436:262:::1;;25499:9;25528:1;25509:9;:16;;;;:20;;;;:::i;:::-;25499:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25484:9;25494:1;25484:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;25568:1;25549:7;:16;25557:7;25549:16;;;;;;;;;;;;;;;:20;;;;25619:5;25588:19;:28;25608:7;25588:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;25643:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;25677:5;;25436:262;25416:3;;;;;:::i;:::-;;;;25374:335;;;;25221:495:::0;:::o;23844:218::-;23932:4;23949:83;23958:12;:10;:12::i;:::-;23972:7;23981:50;24020:10;23981:11;:25;23993:12;:10;:12::i;:::-;23981:25;;;;;;;;;;;;;;;:34;24007:7;23981:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;23949:8;:83::i;:::-;24050:4;24043:11;;23844:218;;;;:::o;20756:28::-;;;;:::o;26809:109::-;12382:12;:10;:12::i;:::-;12372:22;;:6;;;;;;;;;;:22;;;12364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26906:4:::1;26878:16;:25;26895:7;26878:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;26809:109:::0;:::o;21293:28::-;;;;;;;;;;;;;:::o;21362:40::-;;;;;;;;;;;;;:::o;21072:74::-;;;;;;;;;;;;;:::o;24864:349::-;12382:12;:10;:12::i;:::-;12372:22;;:6;;;;;;;;;;:22;;;12364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24947:19:::1;:28;24967:7;24947:28;;;;;;;;;;;;;;;;;;;;;;;;;24946:29;24938:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;25040:1;25021:7;:16;25029:7;25021:16;;;;;;;;;;;;;;;;:20;25018:108;;;25077:37;25097:7;:16;25105:7;25097:16;;;;;;;;;;;;;;;;25077:19;:37::i;:::-;25058:7;:16;25066:7;25058:16;;;;;;;;;;;;;;;:56;;;;25018:108;25167:4;25136:19;:28;25156:7;25136:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25182:9;25197:7;25182:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24864:349:::0;:::o;30565:121::-;30629:4;30653:16;:25;30670:7;30653:25;;;;;;;;;;;;;;;;;;;;;;;;;30646:32;;30565:121;;;:::o;25724:165::-;12382:12;:10;:12::i;:::-;12372:22;;:6;;;;;;;;;;:22;;;12364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25816:1:::1;25797:21;;:7;:21;;::::0;25789:64:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25873:7;25864:5;;:17;;;;;;;;;;;;;;;;;;25724:165:::0;:::o;20720:28::-;;;;:::o;22814:206::-;22880:7;22904:19;:28;22924:7;22904:28;;;;;;;;;;;;;;;;;;;;;;;;;22900:57;;;22941:7;:16;22949:7;22941:16;;;;;;;;;;;;;;;;22934:23;;;;22900:57;22975:37;22995:7;:16;23003:7;22995:16;;;;;;;;;;;;;;;;22975:19;:37::i;:::-;22968:44;;22814:206;;;;:::o;12802:148::-;12382:12;:10;:12::i;:::-;12372:22;;:6;;;;;;;;;;:22;;;12364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12909:1:::1;12872:40;;12893:6;::::0;::::1;;;;;;;;12872:40;;;;;;;;;;;;12940:1;12923:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;12802:148::o:0;20686:27::-;;;;:::o;21033:32::-;;;;:::o;24347:128::-;24415:4;24439:19;:28;24459:7;24439:28;;;;;;;;;;;;;;;;;;;;;;;;;24432:35;;24347:128;;;:::o;12160:79::-;12198:7;12225:6;;;;;;;;;;;12218:13;;12160:79;:::o;22525:87::-;22564:13;22597:7;22590:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22525:87;:::o;20614:28::-;;;;:::o;24483:111::-;24536:7;24563:23;;24556:30;;24483:111;:::o;24070:269::-;24163:4;24180:129;24189:12;:10;:12::i;:::-;24203:7;24212:96;24251:15;24212:96;;;;;;;;;;;;;;;;;:11;:25;24224:12;:10;:12::i;:::-;24212:25;;;;;;;;;;;;;;;:34;24238:7;24212:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;24180:8;:129::i;:::-;24327:4;24320:11;;24070:269;;;;:::o;20650:28::-;;;;:::o;20792:27::-;;;;:::o;23028:167::-;23106:4;23123:42;23133:12;:10;:12::i;:::-;23147:9;23158:6;23123:9;:42::i;:::-;23183:4;23176:11;;23028:167;;;;:::o;26276:258::-;12382:12;:10;:12::i;:::-;12372:22;;:6;;;;;;;;;;:22;;;12364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26416:3:::1;26384:28;26405:6;26384:16;26396:3;26384:7;:11;;:16;;;;:::i;:::-;:20;;:28;;;;:::i;:::-;:35;;26376:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26467:7;26456:8;:18;;;;26496:3;26485:8;:14;;;;26520:6;26510:7;:16;;;;26276:258:::0;;;:::o;27046:171::-;12382:12;:10;:12::i;:::-;12372:22;;:6;;;;;;;;;;:22;;;12364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27147:8:::1;27123:21;;:32;;;;;;;;;;;;;;;;;;27171:38;27200:8;27171:38;;;;;;:::i;:::-;;;;;;;;27046:171:::0;:::o;33788:450::-;12382:12;:10;:12::i;:::-;12372:22;;:6;;;;;;;;;;:22;;;12364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33904:15:::1;;;;;;;;;;;33882:38;;:10;:38;;::::0;33860:126:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34034:10;33997:15;;:48;;;;;;;;;;;;;;;;;;34056:22;34099:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34081:69;;;34159:4;34166:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34081:108;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34056:133;;34216:14;34200:13;;:30;;;;;;;;;;;;;;;;;;33849:389;33788:450:::0;:::o;23203:143::-;23284:7;23311:11;:18;23323:5;23311:18;;;;;;;;;;;;;;;:27;23330:7;23311:27;;;;;;;;;;;;;;;;23304:34;;23203:143;;;;:::o;25895:189::-;12382:12;:10;:12::i;:::-;12372:22;;:6;;;;;;;;;;:22;;;12364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25999:1:::1;25976:25;;:11;:25;;::::0;25968:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26064:11;26051:9;;:25;;;;;;;;;;;;;;;;;;25895:189:::0;:::o;26930:108::-;12382:12;:10;:12::i;:::-;12372:22;;:6;;;;;;;;;;:22;;;12364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27025:5:::1;26997:16;:25;27014:7;26997:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;26930:108:::0;:::o;21153:78::-;;;;;;;;;;;;;:::o;13105:244::-;12382:12;:10;:12::i;:::-;12372:22;;:6;;;;;;;;;;:22;;;12364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13214:1:::1;13194:22;;:8;:22;;::::0;13186:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13304:8;13275:38;;13296:6;::::0;::::1;;;;;;;;13275:38;;;;;;;;;;;;13333:8;13324:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;13105:244:::0;:::o;15707:98::-;15765:7;15796:1;15792;:5;;;;:::i;:::-;15785:12;;15707:98;;;;:::o;608:::-;661:7;688:10;681:17;;608:98;:::o;30694:337::-;30804:1;30787:19;;:5;:19;;;30779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30885:1;30866:21;;:7;:21;;;30858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30969:6;30939:11;:18;30951:5;30939:18;;;;;;;;;;;;;;;:27;30958:7;30939:27;;;;;;;;;;;;;;;:36;;;;31007:7;30991:32;;31000:5;30991:32;;;31016:6;30991:32;;;;;;:::i;:::-;;;;;;;;30694:337;;;:::o;31039:869::-;31177:1;31161:18;;:4;:18;;;31153:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31254:1;31240:16;;:2;:16;;;31232:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31324:1;31315:6;:10;31307:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31384:24;31439:29;;31411:24;31429:4;31411:9;:24::i;:::-;:57;;31384:84;;31498:16;;;;;;;;;;;31497:17;:55;;;;;31539:13;;;;;;;;;;;31531:21;;:4;:21;;;;31497:55;:93;;;;;31569:21;;;;;;;;;;;31497:93;:129;;;;;31607:19;31497:129;31479:222;;;31649:40;31664:24;31682:4;31664:9;:24::i;:::-;31649:14;:40::i;:::-;31479:222;31725:12;31740:4;31725:19;;31758:16;:22;31775:4;31758:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;31784:16;:20;31801:2;31784:20;;;;;;;;;;;;;;;;;;;;;;;;;31758:46;31755:92;;;31830:5;31820:15;;31755:92;31859:41;31874:4;31880:2;31884:6;31892:7;31859:14;:41::i;:::-;31142:766;;31039:869;;;:::o;17986:240::-;18106:7;18164:1;18159;:6;;18167:12;18151:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18206:1;18202;:5;18195:12;;17986:240;;;;;:::o;24602:254::-;24669:7;24708;;24697;:18;;24689:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24773:19;24796:10;:8;:10::i;:::-;24773:33;;24824:24;24836:11;24824:7;:11;;:24;;;;:::i;:::-;24817:31;;;24602:254;;;:::o;31916:977::-;21746:4;21727:16;;:23;;;;;;;;;;;;;;;;;;32052:12:::1;32067:27;32092:1;32067:20;:24;;:27;;;;:::i;:::-;32052:42;;32105:17;32125:30;32150:4;32125:20;:24;;:30;;;;:::i;:::-;32105:50;;32433:22;32458:21;32433:46;;32524:22;32541:4;32524:16;:22::i;:::-;32677:18;32698:41;32724:14;32698:21;:25;;:41;;;;:::i;:::-;32677:62;;32789:35;32802:9;32813:10;32789:12;:35::i;:::-;32842:43;32857:4;32863:10;32875:9;32842:43;;;;;;;;:::i;:::-;;;;;;;;31990:903;;;;21792:5:::0;21773:16;;:24;;;;;;;;;;;;;;;;;;31916:977;:::o;34246:1473::-;34358:7;34354:616;;34403:1;34381:19;:23;;;;34435:1;34419:13;:17;;;;34473:1;34451:19;:23;;;;34354:616;;;34505:13;;;;;;;;;;;34495:23;;:6;:23;;;34491:479;;34561:8;;34539:19;:30;;;;34600:8;;34584:13;:24;;;;34645:7;;34623:19;:29;;;;34491:479;;;34686:13;;;;;;;;;;;34673:26;;:9;:26;;;34669:301;;34739:8;;34717:19;:30;;;;34778:8;;34762:13;:24;;;;34823:7;;34801:19;:29;;;;34669:301;;;34887:1;34865:19;:23;;;;34919:1;34903:13;:17;;;;34957:1;34935:19;:23;;;;34669:301;34491:479;34354:616;35019:19;;35003:13;;:35;;;;:::i;:::-;34980:20;:58;;;;35055:19;:27;35075:6;35055:27;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;35087:19;:30;35107:9;35087:30;;;;;;;;;;;;;;;;;;;;;;;;;35086:31;35055:62;35051:661;;;35134:48;35156:6;35164:9;35175:6;35134:21;:48::i;:::-;35051:661;;;35205:19;:27;35225:6;35205:27;;;;;;;;;;;;;;;;;;;;;;;;;35204:28;:62;;;;;35236:19;:30;35256:9;35236:30;;;;;;;;;;;;;;;;;;;;;;;;;35204:62;35200:512;;;35283:46;35303:6;35311:9;35322:6;35283:19;:46::i;:::-;35200:512;;;35352:19;:27;35372:6;35352:27;;;;;;;;;;;;;;;;;;;;;;;;;35351:28;:63;;;;;35384:19;:30;35404:9;35384:30;;;;;;;;;;;;;;;;;;;;;;;;;35383:31;35351:63;35347:365;;;35431:44;35449:6;35457:9;35468:6;35431:17;:44::i;:::-;35347:365;;;35497:19;:27;35517:6;35497:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;;35528:19;:30;35548:9;35528:30;;;;;;;;;;;;;;;;;;;;;;;;;35497:61;35493:219;;;35575:48;35597:6;35605:9;35616:6;35575:21;:48::i;:::-;35493:219;;;35656:44;35674:6;35682:9;35693:6;35656:17;:44::i;:::-;35493:219;35347:365;35200:512;35051:661;34246:1473;;;;:::o;28697:163::-;28738:7;28759:15;28776;28795:19;:17;:19::i;:::-;28758:56;;;;28832:20;28844:7;28832;:11;;:20;;;;:::i;:::-;28825:27;;;;28697:163;:::o;16844:98::-;16902:7;16933:1;16929;:5;;;;:::i;:::-;16922:12;;16844:98;;;;:::o;16088:::-;16146:7;16177:1;16173;:5;;;;:::i;:::-;16166:12;;16088:98;;;;:::o;32901:496::-;32977:21;33015:1;33001:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32977:40;;33046:4;33028;33033:1;33028:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33072:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33062:4;33067:1;33062:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33107:62;33124:4;33139:15;;;;;;;;;;;33157:11;33107:8;:62::i;:::-;33182:15;;;;;;;;;;;:66;;;33263:11;33289:1;33306:4;33333;33353:15;33182:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32956:441;32901:496;:::o;33405:376::-;33488:62;33505:4;33520:15;;;;;;;;;;;33538:11;33488:8;:62::i;:::-;33571:15;;;;;;;;;;;:31;;;33610:9;33643:4;33663:11;33689:1;33706;33723:9;;;;;;;;;;;33747:15;33571:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33405:376;;:::o;36871:586::-;36974:15;36991:23;37016:12;37030:23;37055:12;37069:22;37095:19;37106:7;37095:10;:19::i;:::-;36973:141;;;;;;;;;;;;37143:28;37163:7;37143;:15;37151:6;37143:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37125:7;:15;37133:6;37125:15;;;;;;;;;;;;;;;:46;;;;37200:28;37220:7;37200;:15;37208:6;37200:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37182:7;:15;37190:6;37182:15;;;;;;;;;;;;;;;:46;;;;37260:39;37283:15;37260:7;:18;37268:9;37260:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37239:7;:18;37247:9;37239:18;;;;;;;;;;;;;;;:60;;;;37313:42;37332:14;37348:6;37313:18;:42::i;:::-;37366:23;37378:4;37384;37366:11;:23::i;:::-;37422:9;37405:44;;37414:6;37405:44;;;37433:15;37405:44;;;;;;:::i;:::-;;;;;;;;36962:495;;;;;;36871:586;;;:::o;36257:606::-;36358:15;36375:23;36400:12;36414:23;36439:12;36453:22;36479:19;36490:7;36479:10;:19::i;:::-;36357:141;;;;;;;;;;;;36527:28;36547:7;36527;:15;36535:6;36527:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36509:7;:15;36517:6;36509:15;;;;;;;;;;;;;;;:46;;;;36587:39;36610:15;36587:7;:18;36595:9;36587:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36566:7;:18;36574:9;36566:18;;;;;;;;;;;;;;;:60;;;;36658:39;36681:15;36658:7;:18;36666:9;36658:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36637:7;:18;36645:9;36637:18;;;;;;;;;;;;;;;:60;;;;36719:42;36738:14;36754:6;36719:18;:42::i;:::-;36772:23;36784:4;36790;36772:11;:23::i;:::-;36828:9;36811:44;;36820:6;36811:44;;;36839:15;36811:44;;;;;;:::i;:::-;;;;;;;;36346:517;;;;;;36257:606;;;:::o;35727:522::-;35826:15;35843:23;35868:12;35882:23;35907:12;35921:22;35947:19;35958:7;35947:10;:19::i;:::-;35825:141;;;;;;;;;;;;35995:28;36015:7;35995;:15;36003:6;35995:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35977:7;:15;35985:6;35977:15;;;;;;;;;;;;;;;:46;;;;36055:39;36078:15;36055:7;:18;36063:9;36055:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36034:7;:18;36042:9;36034:18;;;;;;;;;;;;;;;:60;;;;36105:42;36124:14;36140:6;36105:18;:42::i;:::-;36158:23;36170:4;36176;36158:11;:23::i;:::-;36214:9;36197:44;;36206:6;36197:44;;;36225:15;36197:44;;;;;;:::i;:::-;;;;;;;;35814:435;;;;;;35727:522;;;:::o;37465:662::-;37568:15;37585:23;37610:12;37624:23;37649:12;37663:22;37689:19;37700:7;37689:10;:19::i;:::-;37567:141;;;;;;;;;;;;37737:28;37757:7;37737;:15;37745:6;37737:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37719:7;:15;37727:6;37719:15;;;;;;;;;;;;;;;:46;;;;37794:28;37814:7;37794;:15;37802:6;37794:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37776:7;:15;37784:6;37776:15;;;;;;;;;;;;;;;:46;;;;37854:39;37877:15;37854:7;:18;37862:9;37854:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37833:7;:18;37841:9;37833:18;;;;;;;;;;;;;;;:60;;;;37925:39;37948:15;37925:7;:18;37933:9;37925:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37904:7;:18;37912:9;37904:18;;;;;;;;;;;;;;;:60;;;;37983:42;38002:14;38018:6;37983:18;:42::i;:::-;38036:23;38048:4;38054;38036:11;:23::i;:::-;38092:9;38075:44;;38084:6;38075:44;;;38103:15;38075:44;;;;;;:::i;:::-;;;;;;;;37556:571;;;;;;37465:662;;;:::o;28868:561::-;28918:7;28927;28947:15;28965:7;;28947:25;;28983:15;29001:7;;28983:25;;29030:9;29025:289;29049:9;:16;;;;29045:1;:20;29025:289;;;29115:7;29091;:21;29099:9;29109:1;29099:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29091:21;;;;;;;;;;;;;;;;:31;:66;;;;29150:7;29126;:21;29134:9;29144:1;29134:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29126:21;;;;;;;;;;;;;;;;:31;29091:66;29087:97;;;29167:7;;29176;;29159:25;;;;;;;;;29087:97;29209:34;29221:7;:21;29229:9;29239:1;29229:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29221:21;;;;;;;;;;;;;;;;29209:7;:11;;:34;;;;:::i;:::-;29199:44;;29268:34;29280:7;:21;29288:9;29298:1;29288:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29280:21;;;;;;;;;;;;;;;;29268:7;:11;;:34;;;;:::i;:::-;29258:44;;29067:3;;;;;:::i;:::-;;;;29025:289;;;;29338:20;29350:7;;29338;;:11;;:20;;;;:::i;:::-;29328:7;:30;29324:61;;;29368:7;;29377;;29360:25;;;;;;;;29324:61;29404:7;29413;29396:25;;;;;;28868:561;;;:::o;27447:431::-;27506:7;27515;27524;27533;27542;27551;27572:23;27597:12;27611:22;27637:20;27649:7;27637:11;:20::i;:::-;27571:86;;;;;;27669:15;27686:23;27711:12;27727:54;27739:7;27748:4;27754:14;27770:10;:8;:10::i;:::-;27727:11;:54::i;:::-;27668:113;;;;;;27800:7;27809:15;27826:4;27832:15;27849:4;27855:14;27792:78;;;;;;;;;;;;;;;;;;27447:431;;;;;;;:::o;29443:386::-;29556:1;29532:20;;:25;29529:62;29573:7;29529:62;29601:12;29616:59;29654:20;;29616:33;29635:13;;29616:14;:18;;:33;;;;:::i;:::-;:37;;:59;;;;:::i;:::-;29601:74;;29686:15;29704:24;29723:4;29704:14;:18;;:24;;;;:::i;:::-;29686:42;;29741:29;29750:6;29758:5;;;;;;;;;;;29765:4;29741:8;:29::i;:::-;29781:40;29790:6;29806:4;29813:7;29781:8;:40::i;:::-;29518:311;;29443:386;;;:::o;27266:173::-;27344:17;27356:4;27344:7;;:11;;:17;;;;:::i;:::-;27334:7;:27;;;;27398:33;27426:4;27398:23;;:27;;:33;;;;:::i;:::-;27372:23;:59;;;;27266:173;;:::o;27886:350::-;27946:7;27955;27964;27984:12;27999:31;28022:7;27999:22;:31::i;:::-;27984:46;;28041:22;28066:31;28089:7;28066:22;:31::i;:::-;28041:56;;28108:23;28134:37;28156:14;28134:17;28146:4;28134:7;:11;;:17;;;;:::i;:::-;:21;;:37;;;;:::i;:::-;28108:63;;28190:15;28207:4;28213:14;28182:46;;;;;;;;;27886:350;;;;;:::o;28244:445::-;28363:7;28372;28381;28401:15;28419:24;28431:11;28419:7;:11;;:24;;;;:::i;:::-;28401:42;;28454:12;28469:21;28478:11;28469:4;:8;;:21;;;;:::i;:::-;28454:36;;28501:22;28526:31;28545:11;28526:14;:18;;:31;;;;:::i;:::-;28501:56;;28568:23;28594:37;28616:14;28594:17;28606:4;28594:7;:11;;:17;;;;:::i;:::-;:21;;:37;;;;:::i;:::-;28568:63;;28650:7;28659:15;28676:4;28642:39;;;;;;;;;;28244:445;;;;;;;;:::o;16445:98::-;16503:7;16534:1;16530;:5;;;;:::i;:::-;16523:12;;16445:98;;;;:::o;29837:353::-;29915:19;29938:10;:8;:10::i;:::-;29915:33;;29959:15;29977:23;29988:11;29977:6;:10;;:23;;;;:::i;:::-;29959:41;;30025:24;30041:7;30025;:11;30033:2;30025:11;;;;;;;;;;;;;;;;:15;;:24;;;;:::i;:::-;30011:7;:11;30019:2;30011:11;;;;;;;;;;;;;;;:38;;;;30063:19;:23;30083:2;30063:23;;;;;;;;;;;;;;;;;;;;;;;;;30060:78;;;30115:23;30131:6;30115:7;:11;30123:2;30115:11;;;;;;;;;;;;;;;;:15;;:23;;;;:::i;:::-;30101:7;:11;30109:2;30101:11;;;;;;;;;;;;;;;:37;;;;30060:78;30171:2;30156:26;;30165:4;30156:26;;;30175:6;30156:26;;;;;;:::i;:::-;;;;;;;;29904:286;;29837:353;;;:::o;30202:173::-;30273:7;30300:67;30351:5;30300:32;30312:19;;30300:7;:11;;:32;;;;:::i;:::-;:36;;:67;;;;:::i;:::-;30293:74;;30202:173;;;:::o;30383:174::-;30454:7;30481:68;30533:5;30481:33;30493:20;;30481:7;:11;;:33;;;;:::i;:::-;:37;;:68;;;;:::i;:::-;30474:75;;30383:174;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:246::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1495:1;1490:3;1486:11;1480:18;1476:1;1471:3;1467:11;1460:39;1432:2;1429:1;1425:10;1420:15;;1396:113;;;1543:1;1534:6;1529:3;1525:16;1518:27;1367:184;1305:246;;;:::o;1557:102::-;1598:6;1649:2;1645:7;1640:2;1633:5;1629:14;1625:28;1615:38;;1557:102;;;:::o;1665:377::-;1753:3;1781:39;1814:5;1781:39;:::i;:::-;1836:71;1900:6;1895:3;1836:71;:::i;:::-;1829:78;;1916:65;1974:6;1969:3;1962:4;1955:5;1951:16;1916:65;:::i;:::-;2006:29;2028:6;2006:29;:::i;:::-;2001:3;1997:39;1990:46;;1757:285;1665:377;;;;:::o;2048:313::-;2161:4;2199:2;2188:9;2184:18;2176:26;;2248:9;2242:4;2238:20;2234:1;2223:9;2219:17;2212:47;2276:78;2349:4;2340:6;2276:78;:::i;:::-;2268:86;;2048:313;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:619::-;3858:6;3866;3874;3923:2;3911:9;3902:7;3898:23;3894:32;3891:119;;;3929:79;;:::i;:::-;3891:119;4049:1;4074:53;4119:7;4110:6;4099:9;4095:22;4074:53;:::i;:::-;4064:63;;4020:117;4176:2;4202:53;4247:7;4238:6;4227:9;4223:22;4202:53;:::i;:::-;4192:63;;4147:118;4304:2;4330:53;4375:7;4366:6;4355:9;4351:22;4330:53;:::i;:::-;4320:63;;4275:118;3781:619;;;;;:::o;4406:60::-;4434:3;4455:5;4448:12;;4406:60;;;:::o;4472:142::-;4522:9;4555:53;4573:34;4582:24;4600:5;4582:24;:::i;:::-;4573:34;:::i;:::-;4555:53;:::i;:::-;4542:66;;4472:142;;;:::o;4620:126::-;4670:9;4703:37;4734:5;4703:37;:::i;:::-;4690:50;;4620:126;;;:::o;4752:152::-;4828:9;4861:37;4892:5;4861:37;:::i;:::-;4848:50;;4752:152;;;:::o;4910:183::-;5023:63;5080:5;5023:63;:::i;:::-;5018:3;5011:76;4910:183;;:::o;5099:274::-;5218:4;5256:2;5245:9;5241:18;5233:26;;5269:97;5363:1;5352:9;5348:17;5339:6;5269:97;:::i;:::-;5099:274;;;;:::o;5379:118::-;5466:24;5484:5;5466:24;:::i;:::-;5461:3;5454:37;5379:118;;:::o;5503:222::-;5596:4;5634:2;5623:9;5619:18;5611:26;;5647:71;5715:1;5704:9;5700:17;5691:6;5647:71;:::i;:::-;5503:222;;;;:::o;5731:619::-;5808:6;5816;5824;5873:2;5861:9;5852:7;5848:23;5844:32;5841:119;;;5879:79;;:::i;:::-;5841:119;5999:1;6024:53;6069:7;6060:6;6049:9;6045:22;6024:53;:::i;:::-;6014:63;;5970:117;6126:2;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6097:118;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5731:619;;;;;:::o;6356:86::-;6391:7;6431:4;6424:5;6420:16;6409:27;;6356:86;;;:::o;6448:112::-;6531:22;6547:5;6531:22;:::i;:::-;6526:3;6519:35;6448:112;;:::o;6566:214::-;6655:4;6693:2;6682:9;6678:18;6670:26;;6706:67;6770:1;6759:9;6755:17;6746:6;6706:67;:::i;:::-;6566:214;;;;:::o;6786:329::-;6845:6;6894:2;6882:9;6873:7;6869:23;6865:32;6862:119;;;6900:79;;:::i;:::-;6862:119;7020:1;7045:53;7090:7;7081:6;7070:9;7066:22;7045:53;:::i;:::-;7035:63;;6991:117;6786:329;;;;:::o;7121:118::-;7208:24;7226:5;7208:24;:::i;:::-;7203:3;7196:37;7121:118;;:::o;7245:222::-;7338:4;7376:2;7365:9;7361:18;7353:26;;7389:71;7457:1;7446:9;7442:17;7433:6;7389:71;:::i;:::-;7245:222;;;;:::o;7473:116::-;7543:21;7558:5;7543:21;:::i;:::-;7536:5;7533:32;7523:60;;7579:1;7576;7569:12;7523:60;7473:116;:::o;7595:133::-;7638:5;7676:6;7663:20;7654:29;;7692:30;7716:5;7692:30;:::i;:::-;7595:133;;;;:::o;7734:323::-;7790:6;7839:2;7827:9;7818:7;7814:23;7810:32;7807:119;;;7845:79;;:::i;:::-;7807:119;7965:1;7990:50;8032:7;8023:6;8012:9;8008:22;7990:50;:::i;:::-;7980:60;;7936:114;7734:323;;;;:::o;8063:474::-;8131:6;8139;8188:2;8176:9;8167:7;8163:23;8159:32;8156:119;;;8194:79;;:::i;:::-;8156:119;8314:1;8339:53;8384:7;8375:6;8364:9;8360:22;8339:53;:::i;:::-;8329:63;;8285:117;8441:2;8467:53;8512:7;8503:6;8492:9;8488:22;8467:53;:::i;:::-;8457:63;;8412:118;8063:474;;;;;:::o;8543:182::-;8683:34;8679:1;8671:6;8667:14;8660:58;8543:182;:::o;8731:366::-;8873:3;8894:67;8958:2;8953:3;8894:67;:::i;:::-;8887:74;;8970:93;9059:3;8970:93;:::i;:::-;9088:2;9083:3;9079:12;9072:19;;8731:366;;;:::o;9103:419::-;9269:4;9307:2;9296:9;9292:18;9284:26;;9356:9;9350:4;9346:20;9342:1;9331:9;9327:17;9320:47;9384:131;9510:4;9384:131;:::i;:::-;9376:139;;9103:419;;;:::o;9528:180::-;9576:77;9573:1;9566:88;9673:4;9670:1;9663:15;9697:4;9694:1;9687:15;9714:348;9754:7;9777:20;9795:1;9777:20;:::i;:::-;9772:25;;9811:20;9829:1;9811:20;:::i;:::-;9806:25;;9999:1;9931:66;9927:74;9924:1;9921:81;9916:1;9909:9;9902:17;9898:105;9895:131;;;10006:18;;:::i;:::-;9895:131;10054:1;10051;10047:9;10036:20;;9714:348;;;;:::o;10068:180::-;10116:77;10113:1;10106:88;10213:4;10210:1;10203:15;10237:4;10234:1;10227:15;10254:320;10298:6;10335:1;10329:4;10325:12;10315:22;;10382:1;10376:4;10372:12;10403:18;10393:81;;10459:4;10451:6;10447:17;10437:27;;10393:81;10521:2;10513:6;10510:14;10490:18;10487:38;10484:84;;10540:18;;:::i;:::-;10484:84;10305:269;10254:320;;;:::o;10580:171::-;10720:23;10716:1;10708:6;10704:14;10697:47;10580:171;:::o;10757:366::-;10899:3;10920:67;10984:2;10979:3;10920:67;:::i;:::-;10913:74;;10996:93;11085:3;10996:93;:::i;:::-;11114:2;11109:3;11105:12;11098:19;;10757:366;;;:::o;11129:419::-;11295:4;11333:2;11322:9;11318:18;11310:26;;11382:9;11376:4;11372:20;11368:1;11357:9;11353:17;11346:47;11410:131;11536:4;11410:131;:::i;:::-;11402:139;;11129:419;;;:::o;11554:177::-;11694:29;11690:1;11682:6;11678:14;11671:53;11554:177;:::o;11737:366::-;11879:3;11900:67;11964:2;11959:3;11900:67;:::i;:::-;11893:74;;11976:93;12065:3;11976:93;:::i;:::-;12094:2;12089:3;12085:12;12078:19;;11737:366;;;:::o;12109:419::-;12275:4;12313:2;12302:9;12298:18;12290:26;;12362:9;12356:4;12352:20;12348:1;12337:9;12333:17;12326:47;12390:131;12516:4;12390:131;:::i;:::-;12382:139;;12109:419;;;:::o;12534:180::-;12582:77;12579:1;12572:88;12679:4;12676:1;12669:15;12703:4;12700:1;12693:15;12720:194;12760:4;12780:20;12798:1;12780:20;:::i;:::-;12775:25;;12814:20;12832:1;12814:20;:::i;:::-;12809:25;;12858:1;12855;12851:9;12843:17;;12882:1;12876:4;12873:11;12870:37;;;12887:18;;:::i;:::-;12870:37;12720:194;;;;:::o;12920:180::-;12968:77;12965:1;12958:88;13065:4;13062:1;13055:15;13089:4;13086:1;13079:15;13106:233;13145:3;13168:24;13186:5;13168:24;:::i;:::-;13159:33;;13214:66;13207:5;13204:77;13201:103;;13284:18;;:::i;:::-;13201:103;13331:1;13324:5;13320:13;13313:20;;13106:233;;;:::o;13345:180::-;13485:32;13481:1;13473:6;13469:14;13462:56;13345:180;:::o;13531:366::-;13673:3;13694:67;13758:2;13753:3;13694:67;:::i;:::-;13687:74;;13770:93;13859:3;13770:93;:::i;:::-;13888:2;13883:3;13879:12;13872:19;;13531:366;;;:::o;13903:419::-;14069:4;14107:2;14096:9;14092:18;14084:26;;14156:9;14150:4;14146:20;14142:1;14131:9;14127:17;14120:47;14184:131;14310:4;14184:131;:::i;:::-;14176:139;;13903:419;;;:::o;14328:171::-;14468:23;14464:1;14456:6;14452:14;14445:47;14328:171;:::o;14505:366::-;14647:3;14668:67;14732:2;14727:3;14668:67;:::i;:::-;14661:74;;14744:93;14833:3;14744:93;:::i;:::-;14862:2;14857:3;14853:12;14846:19;;14505:366;;;:::o;14877:419::-;15043:4;15081:2;15070:9;15066:18;15058:26;;15130:9;15124:4;15120:20;15116:1;15105:9;15101:17;15094:47;15158:131;15284:4;15158:131;:::i;:::-;15150:139;;14877:419;;;:::o;15302:225::-;15442:34;15438:1;15430:6;15426:14;15419:58;15511:8;15506:2;15498:6;15494:15;15487:33;15302:225;:::o;15533:366::-;15675:3;15696:67;15760:2;15755:3;15696:67;:::i;:::-;15689:74;;15772:93;15861:3;15772:93;:::i;:::-;15890:2;15885:3;15881:12;15874:19;;15533:366;;;:::o;15905:419::-;16071:4;16109:2;16098:9;16094:18;16086:26;;16158:9;16152:4;16148:20;16144:1;16133:9;16129:17;16122:47;16186:131;16312:4;16186:131;:::i;:::-;16178:139;;15905:419;;;:::o;16330:143::-;16387:5;16418:6;16412:13;16403:22;;16434:33;16461:5;16434:33;:::i;:::-;16330:143;;;;:::o;16479:351::-;16549:6;16598:2;16586:9;16577:7;16573:23;16569:32;16566:119;;;16604:79;;:::i;:::-;16566:119;16724:1;16749:64;16805:7;16796:6;16785:9;16781:22;16749:64;:::i;:::-;16739:74;;16695:128;16479:351;;;;:::o;16836:332::-;16957:4;16995:2;16984:9;16980:18;16972:26;;17008:71;17076:1;17065:9;17061:17;17052:6;17008:71;:::i;:::-;17089:72;17157:2;17146:9;17142:18;17133:6;17089:72;:::i;:::-;16836:332;;;;;:::o;17174:221::-;17314:34;17310:1;17302:6;17298:14;17291:58;17383:4;17378:2;17370:6;17366:15;17359:29;17174:221;:::o;17401:366::-;17543:3;17564:67;17628:2;17623:3;17564:67;:::i;:::-;17557:74;;17640:93;17729:3;17640:93;:::i;:::-;17758:2;17753:3;17749:12;17742:19;;17401:366;;;:::o;17773:419::-;17939:4;17977:2;17966:9;17962:18;17954:26;;18026:9;18020:4;18016:20;18012:1;18001:9;17997:17;17990:47;18054:131;18180:4;18054:131;:::i;:::-;18046:139;;17773:419;;;:::o;18198:225::-;18338:34;18334:1;18326:6;18322:14;18315:58;18407:8;18402:2;18394:6;18390:15;18383:33;18198:225;:::o;18429:366::-;18571:3;18592:67;18656:2;18651:3;18592:67;:::i;:::-;18585:74;;18668:93;18757:3;18668:93;:::i;:::-;18786:2;18781:3;18777:12;18770:19;;18429:366;;;:::o;18801:419::-;18967:4;19005:2;18994:9;18990:18;18982:26;;19054:9;19048:4;19044:20;19040:1;19029:9;19025:17;19018:47;19082:131;19208:4;19082:131;:::i;:::-;19074:139;;18801:419;;;:::o;19226:191::-;19266:3;19285:20;19303:1;19285:20;:::i;:::-;19280:25;;19319:20;19337:1;19319:20;:::i;:::-;19314:25;;19362:1;19359;19355:9;19348:16;;19383:3;19380:1;19377:10;19374:36;;;19390:18;;:::i;:::-;19374:36;19226:191;;;;:::o;19423:223::-;19563:34;19559:1;19551:6;19547:14;19540:58;19632:6;19627:2;19619:6;19615:15;19608:31;19423:223;:::o;19652:366::-;19794:3;19815:67;19879:2;19874:3;19815:67;:::i;:::-;19808:74;;19891:93;19980:3;19891:93;:::i;:::-;20009:2;20004:3;20000:12;19993:19;;19652:366;;;:::o;20024:419::-;20190:4;20228:2;20217:9;20213:18;20205:26;;20277:9;20271:4;20267:20;20263:1;20252:9;20248:17;20241:47;20305:131;20431:4;20305:131;:::i;:::-;20297:139;;20024:419;;;:::o;20449:221::-;20589:34;20585:1;20577:6;20573:14;20566:58;20658:4;20653:2;20645:6;20641:15;20634:29;20449:221;:::o;20676:366::-;20818:3;20839:67;20903:2;20898:3;20839:67;:::i;:::-;20832:74;;20915:93;21004:3;20915:93;:::i;:::-;21033:2;21028:3;21024:12;21017:19;;20676:366;;;:::o;21048:419::-;21214:4;21252:2;21241:9;21237:18;21229:26;;21301:9;21295:4;21291:20;21287:1;21276:9;21272:17;21265:47;21329:131;21455:4;21329:131;:::i;:::-;21321:139;;21048:419;;;:::o;21473:224::-;21613:34;21609:1;21601:6;21597:14;21590:58;21682:7;21677:2;21669:6;21665:15;21658:32;21473:224;:::o;21703:366::-;21845:3;21866:67;21930:2;21925:3;21866:67;:::i;:::-;21859:74;;21942:93;22031:3;21942:93;:::i;:::-;22060:2;22055:3;22051:12;22044:19;;21703:366;;;:::o;22075:419::-;22241:4;22279:2;22268:9;22264:18;22256:26;;22328:9;22322:4;22318:20;22314:1;22303:9;22299:17;22292:47;22356:131;22482:4;22356:131;:::i;:::-;22348:139;;22075:419;;;:::o;22500:222::-;22640:34;22636:1;22628:6;22624:14;22617:58;22709:5;22704:2;22696:6;22692:15;22685:30;22500:222;:::o;22728:366::-;22870:3;22891:67;22955:2;22950:3;22891:67;:::i;:::-;22884:74;;22967:93;23056:3;22967:93;:::i;:::-;23085:2;23080:3;23076:12;23069:19;;22728:366;;;:::o;23100:419::-;23266:4;23304:2;23293:9;23289:18;23281:26;;23353:9;23347:4;23343:20;23339:1;23328:9;23324:17;23317:47;23381:131;23507:4;23381:131;:::i;:::-;23373:139;;23100:419;;;:::o;23525:228::-;23665:34;23661:1;23653:6;23649:14;23642:58;23734:11;23729:2;23721:6;23717:15;23710:36;23525:228;:::o;23759:366::-;23901:3;23922:67;23986:2;23981:3;23922:67;:::i;:::-;23915:74;;23998:93;24087:3;23998:93;:::i;:::-;24116:2;24111:3;24107:12;24100:19;;23759:366;;;:::o;24131:419::-;24297:4;24335:2;24324:9;24320:18;24312:26;;24384:9;24378:4;24374:20;24370:1;24359:9;24355:17;24348:47;24412:131;24538:4;24412:131;:::i;:::-;24404:139;;24131:419;;;:::o;24556:229::-;24696:34;24692:1;24684:6;24680:14;24673:58;24765:12;24760:2;24752:6;24748:15;24741:37;24556:229;:::o;24791:366::-;24933:3;24954:67;25018:2;25013:3;24954:67;:::i;:::-;24947:74;;25030:93;25119:3;25030:93;:::i;:::-;25148:2;25143:3;25139:12;25132:19;;24791:366;;;:::o;25163:419::-;25329:4;25367:2;25356:9;25352:18;25344:26;;25416:9;25410:4;25406:20;25402:1;25391:9;25387:17;25380:47;25444:131;25570:4;25444:131;:::i;:::-;25436:139;;25163:419;;;:::o;25588:442::-;25737:4;25775:2;25764:9;25760:18;25752:26;;25788:71;25856:1;25845:9;25841:17;25832:6;25788:71;:::i;:::-;25869:72;25937:2;25926:9;25922:18;25913:6;25869:72;:::i;:::-;25951;26019:2;26008:9;26004:18;25995:6;25951:72;:::i;:::-;25588:442;;;;;;:::o;26036:180::-;26084:77;26081:1;26074:88;26181:4;26178:1;26171:15;26205:4;26202:1;26195:15;26222:185;26262:1;26279:20;26297:1;26279:20;:::i;:::-;26274:25;;26313:20;26331:1;26313:20;:::i;:::-;26308:25;;26352:1;26342:35;;26357:18;;:::i;:::-;26342:35;26399:1;26396;26392:9;26387:14;;26222:185;;;;:::o;26413:180::-;26461:77;26458:1;26451:88;26558:4;26555:1;26548:15;26582:4;26579:1;26572:15;26599:85;26644:7;26673:5;26662:16;;26599:85;;;:::o;26690:158::-;26748:9;26781:61;26799:42;26808:32;26834:5;26808:32;:::i;:::-;26799:42;:::i;:::-;26781:61;:::i;:::-;26768:74;;26690:158;;;:::o;26854:147::-;26949:45;26988:5;26949:45;:::i;:::-;26944:3;26937:58;26854:147;;:::o;27007:114::-;27074:6;27108:5;27102:12;27092:22;;27007:114;;;:::o;27127:184::-;27226:11;27260:6;27255:3;27248:19;27300:4;27295:3;27291:14;27276:29;;27127:184;;;;:::o;27317:132::-;27384:4;27407:3;27399:11;;27437:4;27432:3;27428:14;27420:22;;27317:132;;;:::o;27455:108::-;27532:24;27550:5;27532:24;:::i;:::-;27527:3;27520:37;27455:108;;:::o;27569:179::-;27638:10;27659:46;27701:3;27693:6;27659:46;:::i;:::-;27737:4;27732:3;27728:14;27714:28;;27569:179;;;;:::o;27754:113::-;27824:4;27856;27851:3;27847:14;27839:22;;27754:113;;;:::o;27903:732::-;28022:3;28051:54;28099:5;28051:54;:::i;:::-;28121:86;28200:6;28195:3;28121:86;:::i;:::-;28114:93;;28231:56;28281:5;28231:56;:::i;:::-;28310:7;28341:1;28326:284;28351:6;28348:1;28345:13;28326:284;;;28427:6;28421:13;28454:63;28513:3;28498:13;28454:63;:::i;:::-;28447:70;;28540:60;28593:6;28540:60;:::i;:::-;28530:70;;28386:224;28373:1;28370;28366:9;28361:14;;28326:284;;;28330:14;28626:3;28619:10;;28027:608;;;27903:732;;;;:::o;28641:831::-;28904:4;28942:3;28931:9;28927:19;28919:27;;28956:71;29024:1;29013:9;29009:17;29000:6;28956:71;:::i;:::-;29037:80;29113:2;29102:9;29098:18;29089:6;29037:80;:::i;:::-;29164:9;29158:4;29154:20;29149:2;29138:9;29134:18;29127:48;29192:108;29295:4;29286:6;29192:108;:::i;:::-;29184:116;;29310:72;29378:2;29367:9;29363:18;29354:6;29310:72;:::i;:::-;29392:73;29460:3;29449:9;29445:19;29436:6;29392:73;:::i;:::-;28641:831;;;;;;;;:::o;29478:807::-;29727:4;29765:3;29754:9;29750:19;29742:27;;29779:71;29847:1;29836:9;29832:17;29823:6;29779:71;:::i;:::-;29860:72;29928:2;29917:9;29913:18;29904:6;29860:72;:::i;:::-;29942:80;30018:2;30007:9;30003:18;29994:6;29942:80;:::i;:::-;30032;30108:2;30097:9;30093:18;30084:6;30032:80;:::i;:::-;30122:73;30190:3;30179:9;30175:19;30166:6;30122:73;:::i;:::-;30205;30273:3;30262:9;30258:19;30249:6;30205:73;:::i;:::-;29478:807;;;;;;;;;:::o;30291:143::-;30348:5;30379:6;30373:13;30364:22;;30395:33;30422:5;30395:33;:::i;:::-;30291:143;;;;:::o;30440:663::-;30528:6;30536;30544;30593:2;30581:9;30572:7;30568:23;30564:32;30561:119;;;30599:79;;:::i;:::-;30561:119;30719:1;30744:64;30800:7;30791:6;30780:9;30776:22;30744:64;:::i;:::-;30734:74;;30690:128;30857:2;30883:64;30939:7;30930:6;30919:9;30915:22;30883:64;:::i;:::-;30873:74;;30828:129;30996:2;31022:64;31078:7;31069:6;31058:9;31054:22;31022:64;:::i;:::-;31012:74;;30967:129;30440:663;;;;;:::o
Swarm Source
ipfs://1274566e00e013eaa4b14d9731b7284f8812974057872e7f9d7491373fa85d6b
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.