ERC-20
MEME
Overview
Max Total Supply
1,000,000,000,000,000 HONKHONK
Holders
88 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
49,978,234,681.809021161 HONKHONKValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HONKHONK
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-05-02 */ /* ██╗ ██╗ ██████╗ ███╗ ██╗██╗ ██╗██╗ ██╗ ██████╗ ███╗ ██╗██╗ ██╗ ██║ ██║██╔═══██╗████╗ ██║██║ ██╔╝██║ ██║██╔═══██╗████╗ ██║██║ ██╔╝ ███████║██║ ██║██╔██╗ ██║█████╔╝ ███████║██║ ██║██╔██╗ ██║█████╔╝ ██╔══██║██║ ██║██║╚██╗██║██╔═██╗ ██╔══██║██║ ██║██║╚██╗██║██╔═██╗ ██║ ██║╚██████╔╝██║ ╚████║██║ ██╗██║ ██║╚██████╔╝██║ ╚████║██║ ██╗ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝ clown.market / $HONKHONK tokenomics: 5% fee redistributed to holders 4% fee to the liquidity pool 1% fee to the dev total supply: 1,000,000,000,000,000 maximum buy limit, no whales. antibot: trading disabled first few minutes of launch to prevent sniping bots from getting in early and dumping on the real holders. stealth launch: no presale nonsense, no team wallets. first come, first serve. website: https://clown.market telegram: https://t.me/clownmarket (will be private until liquidity pool is funded, which will mark the launch) twitter: https://twitter.com/clown_market github: https://github.com/clownmarket */ // SPDX-License-Identifier: None pragma solidity ^0.6.12; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @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); } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _previousOwner = _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); } } 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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract HONKHONK is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10**15 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "clown.market"; string private _symbol = "HONKHONK"; uint8 private _decimals = 9; uint256 public _taxFee = 5; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 4; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _devFee = 1; uint256 private _previousDevFee = _devFee; uint256 private _startTime = 0; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public tradingEnabled = false; address public devFeeAddress; uint256 public _maxTxAmount = _tTotal / 100; uint256 private numTokensSellToAddToLiquidity = _tTotal / 20; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () public { _rOwned[_msgSender()] = _rTotal; devFeeAddress = _msgSender(); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[_msgSender()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view override returns (string memory) { return _name; } function symbol() public view override returns (string memory) { return _symbol; } function decimals() public view override returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[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 _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public 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(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[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; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _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); _takeLiquidity(tLiquidity); _takeDevFee(tDev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); emit Transfer(sender, devFeeAddress, tDev); emit Transfer(sender, address(this), tLiquidity); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setDevFeePercent(uint256 devFee) external onlyOwner() { _devFee = devFee; } function setDevFeeAddress(address account) external onlyOwner() { devFeeAddress = account; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function enableTrading(bool _tradingEnabled) external onlyOwner() { _startTime = block.number; tradingEnabled = _tradingEnabled; } receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tDev, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tDev); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tDev = calculateDevFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tDev); return (tTransferAmount, tFee, tLiquidity, tDev); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rDev = tDev.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rDev); 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 _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takeDevFee(uint256 tDevFee) private { uint256 currentRate = _getRate(); uint256 rDevFee = tDevFee.mul(currentRate); _rOwned[devFeeAddress] = _rOwned[devFeeAddress].add(rDevFee); if(_isExcluded[devFeeAddress]) _tOwned[devFeeAddress] = _tOwned[devFeeAddress].add(tDevFee); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function calculateDevFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_devFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0 && _devFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _previousDevFee = _devFee; _taxFee = 0; _liquidityFee = 0; _devFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _devFee = _previousDevFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[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"); if(from != owner() && to != owner() && _startTime + 20 > block.number) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); if (from != owner()) { require(tradingEnabled, "Trading is not enabled yet"); require(_startTime != block.number, "Trading is not enabled yet"); } uint256 contractTokenBalance = balanceOf(address(this)); if(_startTime + 20 > block.number && contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; swapAndLiquify(contractTokenBalance); } bool takeFee = true; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); uint256 newBalance = address(this).balance.sub(initialBalance); 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); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, owner(), block.timestamp ); } function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeDevFee(tDev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); emit Transfer(sender, devFeeAddress, tDev); emit Transfer(sender, address(this), tLiquidity); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeDevFee(tDev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); emit Transfer(sender, devFeeAddress, tDev); emit Transfer(sender, address(this), tLiquidity); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeDevFee(tDev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); emit Transfer(sender, devFeeAddress, tDev); emit Transfer(sender, address(this), tLiquidity); } } // what are you doing down here? code's up there. *honk*
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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingEnabled","type":"bool"}],"name":"enableTrading","outputs":[],"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":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setDevFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setDevFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","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":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405269d3c21bcecceda1000000600855600854600019816200002057fe5b06600019036009556040518060400160405280600c81526020017f636c6f776e2e6d61726b65740000000000000000000000000000000000000000815250600b90805190602001906200007592919062000696565b506040518060400160405280600881526020017f484f4e4b484f4e4b000000000000000000000000000000000000000000000000815250600c9080519060200190620000c392919062000696565b506009600d60006101000a81548160ff021916908360ff1602179055506005600e55600e54600f556004601055601054601155600160125560125460135560006014556001601560016101000a81548160ff0219169083151502179055506000601560026101000a81548160ff0219169083151502179055506064600854816200014957fe5b046016556014600854816200015a57fe5b046017553480156200016b57600080fd5b5060006200017e6200068e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060095460026000620002726200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002c06200068e60201b60201c565b601560036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036057600080fd5b505afa15801562000375573d6000803e3d6000fd5b505050506040513d60208110156200038c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040057600080fd5b505afa15801562000415573d6000803e3d6000fd5b505050506040513d60208110156200042c57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620004a757600080fd5b505af1158015620004bc573d6000803e3d6000fd5b505050506040513d6020811015620004d357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160056000620005676200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006206200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040518082815260200191505060405180910390a3506200073c565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006d957805160ff19168380011785556200070a565b828001600101855582156200070a579182015b8281111562000709578251825591602001919060010190620006ec565b5b5090506200071991906200071d565b5090565b5b80821115620007385760008160009055506001016200071e565b5090565b60805160601c60a05160601c6153b862000784600039806119b55280612e86525080610f905280613bce5280613cba5280613ce15280613dec5280613e1352506153b86000f3fe6080604052600436106102345760003560e01c806352390c021161012e578063a457c2d7116100ab578063d543dbeb1161006f578063d543dbeb14610c53578063d687b4d114610c8e578063dd62ed3e14610cdf578063ea2f0b3714610d64578063f275f64b14610db55761023b565b8063a457c2d714610ac8578063a9059cbb14610b39578063aa45026b14610baa578063c090709914610bd5578063c49b9a8014610c165761023b565b80637d1db4a5116100f25780637d1db4a51461092a57806388f82020146109555780638da5cb5b146109bc5780638ee88c53146109fd57806395d89b4114610a385761023b565b806352390c02146107cb5780635342acb41461081c5780636bc87c3a1461088357806370a08231146108ae578063715018a6146109135761023b565b80633685d419116101bc578063437823ec11610180578063437823ec146106845780634549b039146106d557806349bd5a5e146107305780634a74bb02146107715780634ada218b1461079e5761023b565b80633685d41914610521578063379e29191461057257806339509351146105ad5780633b124fe71461061e5780633bd5d173146106495761023b565b80631694505e116102035780631694505e146103a757806318160ddd146103e857806323b872dd146104135780632d838119146104a4578063313ce567146104f35761023b565b8063061c82d01461024057806306fdde031461027b578063095ea7b31461030b57806313114a9d1461037c5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b506102796004803603602081101561026357600080fd5b8101908080359060200190929190505050610df2565b005b34801561028757600080fd5b50610290610ec4565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d05780820151818401526020810190506102b5565b50505050905090810190601f1680156102fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031757600080fd5b506103646004803603604081101561032e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f66565b60405180821515815260200191505060405180910390f35b34801561038857600080fd5b50610391610f84565b6040518082815260200191505060405180910390f35b3480156103b357600080fd5b506103bc610f8e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103f457600080fd5b506103fd610fb2565b6040518082815260200191505060405180910390f35b34801561041f57600080fd5b5061048c6004803603606081101561043657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fbc565b60405180821515815260200191505060405180910390f35b3480156104b057600080fd5b506104dd600480360360208110156104c757600080fd5b8101908080359060200190929190505050611095565b6040518082815260200191505060405180910390f35b3480156104ff57600080fd5b50610508611119565b604051808260ff16815260200191505060405180910390f35b34801561052d57600080fd5b506105706004803603602081101561054457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611130565b005b34801561057e57600080fd5b506105ab6004803603602081101561059557600080fd5b81019080803590602001909291905050506114ba565b005b3480156105b957600080fd5b50610606600480360360408110156105d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061158c565b60405180821515815260200191505060405180910390f35b34801561062a57600080fd5b5061063361163f565b6040518082815260200191505060405180910390f35b34801561065557600080fd5b506106826004803603602081101561066c57600080fd5b8101908080359060200190929190505050611645565b005b34801561069057600080fd5b506106d3600480360360208110156106a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117d7565b005b3480156106e157600080fd5b5061071a600480360360408110156106f857600080fd5b81019080803590602001909291908035151590602001909291905050506118fa565b6040518082815260200191505060405180910390f35b34801561073c57600080fd5b506107456119b3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561077d57600080fd5b506107866119d7565b60405180821515815260200191505060405180910390f35b3480156107aa57600080fd5b506107b36119ea565b60405180821515815260200191505060405180910390f35b3480156107d757600080fd5b5061081a600480360360208110156107ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119fd565b005b34801561082857600080fd5b5061086b6004803603602081101561083f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d17565b60405180821515815260200191505060405180910390f35b34801561088f57600080fd5b50610898611d6d565b6040518082815260200191505060405180910390f35b3480156108ba57600080fd5b506108fd600480360360208110156108d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d73565b6040518082815260200191505060405180910390f35b34801561091f57600080fd5b50610928611e5e565b005b34801561093657600080fd5b5061093f611fe4565b6040518082815260200191505060405180910390f35b34801561096157600080fd5b506109a46004803603602081101561097857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fea565b60405180821515815260200191505060405180910390f35b3480156109c857600080fd5b506109d1612040565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a0957600080fd5b50610a3660048036036020811015610a2057600080fd5b8101908080359060200190929190505050612069565b005b348015610a4457600080fd5b50610a4d61213b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a8d578082015181840152602081019050610a72565b50505050905090810190601f168015610aba5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ad457600080fd5b50610b2160048036036040811015610aeb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121dd565b60405180821515815260200191505060405180910390f35b348015610b4557600080fd5b50610b9260048036036040811015610b5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122aa565b60405180821515815260200191505060405180910390f35b348015610bb657600080fd5b50610bbf6122c8565b6040518082815260200191505060405180910390f35b348015610be157600080fd5b50610bea6122ce565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c2257600080fd5b50610c5160048036036020811015610c3957600080fd5b810190808035151590602001909291905050506122f4565b005b348015610c5f57600080fd5b50610c8c60048036036020811015610c7657600080fd5b8101908080359060200190929190505050612412565b005b348015610c9a57600080fd5b50610cdd60048036036020811015610cb157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061250b565b005b348015610ceb57600080fd5b50610d4e60048036036040811015610d0257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612617565b6040518082815260200191505060405180910390f35b348015610d7057600080fd5b50610db360048036036020811015610d8757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061269e565b005b348015610dc157600080fd5b50610df060048036036020811015610dd857600080fd5b810190808035151590602001909291905050506127c1565b005b610dfa6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e8190555050565b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f5c5780601f10610f3157610100808354040283529160200191610f5c565b820191906000526020600020905b815481529060010190602001808311610f3f57829003601f168201915b5050505050905090565b6000610f7a610f736128ad565b84846128b5565b6001905092915050565b6000600a54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b6000610fc9848484612aac565b61108a84610fd56128ad565b6110858560405180606001604052806028815260200161529860289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061103b6128ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc69092919063ffffffff16565b6128b5565b600190509392505050565b60006009548211156110f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615203602a913960400191505060405180910390fd5b60006110fc613086565b905061111181846130b190919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b6111386128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6007805490508110156114b6578173ffffffffffffffffffffffffffffffffffffffff16600782815481106112eb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114a95760076001600780549050038154811061134757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166007828154811061137f57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600780548061146f57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556114b6565b80806001019150506112ba565b5050565b6114c26128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060128190555050565b60006116356115996128ad565b8461163085600460006115aa6128ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b6128b5565b6001905092915050565b600e5481565b600061164f6128ad565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615332602c913960400191505060405180910390fd5b60006116ff83613183565b505050505050905061175981600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117b1816009546131eb90919063ffffffff16565b6009819055506117cc83600a546130fb90919063ffffffff16565b600a81905550505050565b6117df6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461189f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600854831115611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161199557600061198484613183565b5050505050509050809150506119ad565b60006119a084613183565b5050505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601560019054906101000a900460ff1681565b601560029054906101000a900460ff1681565b611a056128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c5957611c15600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611095565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e0e57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611e59565b611e56600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611095565b90505b919050565b611e666128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6120716128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060108190555050565b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121d35780601f106121a8576101008083540402835291602001916121d3565b820191906000526020600020905b8154815290600101906020018083116121b657829003601f168201915b5050505050905090565b60006122a06121ea6128ad565b8461229b8560405180606001604052806025815260200161535e60259139600460006122146128ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc69092919063ffffffff16565b6128b5565b6001905092915050565b60006122be6122b76128ad565b8484612aac565b6001905092915050565b60125481565b601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122fc6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b61241a6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61250260646124f48360085461323590919063ffffffff16565b6130b190919063ffffffff16565b60168190555050565b6125136128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126a66128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612766576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6127c96128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b4360148190555080601560026101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561293b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061530e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061522d6022913960400191505060405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806152e96025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806151e06023913960400191505060405180910390fd5b60008111612c11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152c06029913960400191505060405180910390fd5b612c19612040565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c875750612c57612040565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c965750436014805401115b15612cf757601654811115612cf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061524f6028913960400191505060405180910390fd5b5b612cff612040565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e2c57601560029054906101000a900460ff16612db3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726164696e67206973206e6f7420656e61626c65642079657400000000000081525060200191505060405180910390fd5b436014541415612e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726164696e67206973206e6f7420656e61626c65642079657400000000000081525060200191505060405180910390fd5b5b6000612e3730611d73565b9050436014805401118015612e4e57506016548110155b15612e595760165490505b60006017548210159050808015612e7d5750601560009054906101000a900460ff16155b8015612ed557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612eed5750601560019054906101000a900460ff165b15612f01576017549150612f00826132bb565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fa85750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fb257600090505b612fbe8686868461339d565b505050505050565b6000838311158290613073576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561303857808201518184015260208101905061301d565b50505050905090810190601f1680156130655780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006130936136ae565b915091506130aa81836130b190919063ffffffff16565b9250505090565b60006130f383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061393f565b905092915050565b600080828401905083811015613179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600080600080600080600080600061319d8c613a05565b935093509350935060008060006131be8f8787876131b9613086565b613a84565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600061322d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fc6565b905092915050565b60008083141561324857600090506132b5565b600082840290508284828161325957fe5b04146132b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806152776021913960400191505060405180910390fd5b809150505b92915050565b6001601560006101000a81548160ff02191690831515021790555060006132ec6002836130b190919063ffffffff16565b9050600061330382846131eb90919063ffffffff16565b9050600047905061331383613b38565b600061332882476131eb90919063ffffffff16565b90506133348382613de6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601560006101000a81548160ff02191690831515021790555050565b806133ab576133aa613f37565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134635761345e848484613f99565b61369a565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135065750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561351b576135168484846142f3565b613699565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135bf5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135d4576135cf84848461464d565b613698565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136765750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561368b57613686848484614912565b613697565b61369684848461464d565b5b5b5b5b806136a8576136a7614d01565b5b50505050565b600080600060095490506000600854905060005b600780549050811015613902578260026000600784815481106136e157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806137c8575081600360006007848154811061376057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156137df576009546008549450945050505061393b565b61386860026000600784815481106137f357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846131eb90919063ffffffff16565b92506138f3600360006007848154811061387e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836131eb90919063ffffffff16565b915080806001019150506136c2565b5061391a6008546009546130b190919063ffffffff16565b8210156139325760095460085493509350505061393b565b81819350935050505b9091565b600080831182906139eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139b0578082015181840152602081019050613995565b50505050905090810190601f1680156139dd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816139f757fe5b049050809150509392505050565b6000806000806000613a1686614d1e565b90506000613a2387614d4f565b90506000613a3088614d80565b90506000613a6b82613a5d85613a4f888e6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613a9d858a61323590919063ffffffff16565b90506000613ab4868a61323590919063ffffffff16565b90506000613acb878a61323590919063ffffffff16565b90506000613ae2888a61323590919063ffffffff16565b90506000613b1d82613b0f85613b01888a6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6060600267ffffffffffffffff81118015613b5257600080fd5b50604051908082528060200260200182016040528015613b815781602001602082028036833780820191505090505b5090503081600081518110613b9257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3257600080fd5b505afa158015613c46573d6000803e3d6000fd5b505050506040513d6020811015613c5c57600080fd5b810190808051906020019092919050505081600181518110613c7a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cdf307f0000000000000000000000000000000000000000000000000000000000000000846128b5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613da1578082015181840152602081019050613d86565b505050509050019650505050505050600060405180830381600087803b158015613dca57600080fd5b505af1158015613dde573d6000803e3d6000fd5b505050505050565b613e11307f0000000000000000000000000000000000000000000000000000000000000000846128b5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e5b612040565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015613ee057600080fd5b505af1158015613ef4573d6000803e3d6000fd5b50505050506040513d6060811015613f0b57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600e54148015613f4b57506000601054145b8015613f5957506000601254145b15613f6357613f97565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b6000806000806000806000613fad88613183565b965096509650965096509650965061400d88600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140a287600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061413786600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418382614db1565b61418c81614f56565b61419685846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061430788613183565b965096509650965096509650965061436787600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143fc84600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449186600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144dd82614db1565b6144e681614f56565b6144f085846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061466188613183565b96509650965096509650965096506146c187600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061475686600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147a282614db1565b6147ab81614f56565b6147b585846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061492688613183565b965096509650965096509650965061498688600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a1b87600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ab084600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b4586600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b9182614db1565b614b9a81614f56565b614ba485846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b6000614d486064614d3a600e548561323590919063ffffffff16565b6130b190919063ffffffff16565b9050919050565b6000614d796064614d6b6010548561323590919063ffffffff16565b6130b190919063ffffffff16565b9050919050565b6000614daa6064614d9c6012548561323590919063ffffffff16565b6130b190919063ffffffff16565b9050919050565b6000614dbb613086565b90506000614dd2828461323590919063ffffffff16565b9050614e2681600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614f5157614f0d83600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000614f60613086565b90506000614f77828461323590919063ffffffff16565b9050614fed8160026000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b60026000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060066000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156151a05761513a8360036000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b60036000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6151ba826009546131eb90919063ffffffff16565b6009819055506151d581600a546130fb90919063ffffffff16565b600a81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122095f1f46fca615191d87b375cd30916e60b1566146d5571fdbfead54a0a78572764736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106102345760003560e01c806352390c021161012e578063a457c2d7116100ab578063d543dbeb1161006f578063d543dbeb14610c53578063d687b4d114610c8e578063dd62ed3e14610cdf578063ea2f0b3714610d64578063f275f64b14610db55761023b565b8063a457c2d714610ac8578063a9059cbb14610b39578063aa45026b14610baa578063c090709914610bd5578063c49b9a8014610c165761023b565b80637d1db4a5116100f25780637d1db4a51461092a57806388f82020146109555780638da5cb5b146109bc5780638ee88c53146109fd57806395d89b4114610a385761023b565b806352390c02146107cb5780635342acb41461081c5780636bc87c3a1461088357806370a08231146108ae578063715018a6146109135761023b565b80633685d419116101bc578063437823ec11610180578063437823ec146106845780634549b039146106d557806349bd5a5e146107305780634a74bb02146107715780634ada218b1461079e5761023b565b80633685d41914610521578063379e29191461057257806339509351146105ad5780633b124fe71461061e5780633bd5d173146106495761023b565b80631694505e116102035780631694505e146103a757806318160ddd146103e857806323b872dd146104135780632d838119146104a4578063313ce567146104f35761023b565b8063061c82d01461024057806306fdde031461027b578063095ea7b31461030b57806313114a9d1461037c5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b506102796004803603602081101561026357600080fd5b8101908080359060200190929190505050610df2565b005b34801561028757600080fd5b50610290610ec4565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d05780820151818401526020810190506102b5565b50505050905090810190601f1680156102fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031757600080fd5b506103646004803603604081101561032e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f66565b60405180821515815260200191505060405180910390f35b34801561038857600080fd5b50610391610f84565b6040518082815260200191505060405180910390f35b3480156103b357600080fd5b506103bc610f8e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103f457600080fd5b506103fd610fb2565b6040518082815260200191505060405180910390f35b34801561041f57600080fd5b5061048c6004803603606081101561043657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fbc565b60405180821515815260200191505060405180910390f35b3480156104b057600080fd5b506104dd600480360360208110156104c757600080fd5b8101908080359060200190929190505050611095565b6040518082815260200191505060405180910390f35b3480156104ff57600080fd5b50610508611119565b604051808260ff16815260200191505060405180910390f35b34801561052d57600080fd5b506105706004803603602081101561054457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611130565b005b34801561057e57600080fd5b506105ab6004803603602081101561059557600080fd5b81019080803590602001909291905050506114ba565b005b3480156105b957600080fd5b50610606600480360360408110156105d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061158c565b60405180821515815260200191505060405180910390f35b34801561062a57600080fd5b5061063361163f565b6040518082815260200191505060405180910390f35b34801561065557600080fd5b506106826004803603602081101561066c57600080fd5b8101908080359060200190929190505050611645565b005b34801561069057600080fd5b506106d3600480360360208110156106a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117d7565b005b3480156106e157600080fd5b5061071a600480360360408110156106f857600080fd5b81019080803590602001909291908035151590602001909291905050506118fa565b6040518082815260200191505060405180910390f35b34801561073c57600080fd5b506107456119b3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561077d57600080fd5b506107866119d7565b60405180821515815260200191505060405180910390f35b3480156107aa57600080fd5b506107b36119ea565b60405180821515815260200191505060405180910390f35b3480156107d757600080fd5b5061081a600480360360208110156107ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119fd565b005b34801561082857600080fd5b5061086b6004803603602081101561083f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d17565b60405180821515815260200191505060405180910390f35b34801561088f57600080fd5b50610898611d6d565b6040518082815260200191505060405180910390f35b3480156108ba57600080fd5b506108fd600480360360208110156108d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d73565b6040518082815260200191505060405180910390f35b34801561091f57600080fd5b50610928611e5e565b005b34801561093657600080fd5b5061093f611fe4565b6040518082815260200191505060405180910390f35b34801561096157600080fd5b506109a46004803603602081101561097857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fea565b60405180821515815260200191505060405180910390f35b3480156109c857600080fd5b506109d1612040565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a0957600080fd5b50610a3660048036036020811015610a2057600080fd5b8101908080359060200190929190505050612069565b005b348015610a4457600080fd5b50610a4d61213b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a8d578082015181840152602081019050610a72565b50505050905090810190601f168015610aba5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ad457600080fd5b50610b2160048036036040811015610aeb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121dd565b60405180821515815260200191505060405180910390f35b348015610b4557600080fd5b50610b9260048036036040811015610b5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122aa565b60405180821515815260200191505060405180910390f35b348015610bb657600080fd5b50610bbf6122c8565b6040518082815260200191505060405180910390f35b348015610be157600080fd5b50610bea6122ce565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c2257600080fd5b50610c5160048036036020811015610c3957600080fd5b810190808035151590602001909291905050506122f4565b005b348015610c5f57600080fd5b50610c8c60048036036020811015610c7657600080fd5b8101908080359060200190929190505050612412565b005b348015610c9a57600080fd5b50610cdd60048036036020811015610cb157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061250b565b005b348015610ceb57600080fd5b50610d4e60048036036040811015610d0257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612617565b6040518082815260200191505060405180910390f35b348015610d7057600080fd5b50610db360048036036020811015610d8757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061269e565b005b348015610dc157600080fd5b50610df060048036036020811015610dd857600080fd5b810190808035151590602001909291905050506127c1565b005b610dfa6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e8190555050565b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f5c5780601f10610f3157610100808354040283529160200191610f5c565b820191906000526020600020905b815481529060010190602001808311610f3f57829003601f168201915b5050505050905090565b6000610f7a610f736128ad565b84846128b5565b6001905092915050565b6000600a54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600854905090565b6000610fc9848484612aac565b61108a84610fd56128ad565b6110858560405180606001604052806028815260200161529860289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061103b6128ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc69092919063ffffffff16565b6128b5565b600190509392505050565b60006009548211156110f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615203602a913960400191505060405180910390fd5b60006110fc613086565b905061111181846130b190919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b6111386128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6007805490508110156114b6578173ffffffffffffffffffffffffffffffffffffffff16600782815481106112eb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114a95760076001600780549050038154811061134757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166007828154811061137f57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600780548061146f57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556114b6565b80806001019150506112ba565b5050565b6114c26128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060128190555050565b60006116356115996128ad565b8461163085600460006115aa6128ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b6128b5565b6001905092915050565b600e5481565b600061164f6128ad565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615332602c913960400191505060405180910390fd5b60006116ff83613183565b505050505050905061175981600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117b1816009546131eb90919063ffffffff16565b6009819055506117cc83600a546130fb90919063ffffffff16565b600a81905550505050565b6117df6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461189f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600854831115611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161199557600061198484613183565b5050505050509050809150506119ad565b60006119a084613183565b5050505050915050809150505b92915050565b7f000000000000000000000000ba67bde734b0f4e8374ce97d37128fee191105d481565b601560019054906101000a900460ff1681565b601560029054906101000a900460ff1681565b611a056128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c5957611c15600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611095565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e0e57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611e59565b611e56600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611095565b90505b919050565b611e666128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6120716128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060108190555050565b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121d35780601f106121a8576101008083540402835291602001916121d3565b820191906000526020600020905b8154815290600101906020018083116121b657829003601f168201915b5050505050905090565b60006122a06121ea6128ad565b8461229b8560405180606001604052806025815260200161535e60259139600460006122146128ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc69092919063ffffffff16565b6128b5565b6001905092915050565b60006122be6122b76128ad565b8484612aac565b6001905092915050565b60125481565b601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122fc6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b61241a6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61250260646124f48360085461323590919063ffffffff16565b6130b190919063ffffffff16565b60168190555050565b6125136128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126a66128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612766576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6127c96128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b4360148190555080601560026101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561293b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061530e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061522d6022913960400191505060405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806152e96025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806151e06023913960400191505060405180910390fd5b60008111612c11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152c06029913960400191505060405180910390fd5b612c19612040565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c875750612c57612040565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c965750436014805401115b15612cf757601654811115612cf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061524f6028913960400191505060405180910390fd5b5b612cff612040565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e2c57601560029054906101000a900460ff16612db3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726164696e67206973206e6f7420656e61626c65642079657400000000000081525060200191505060405180910390fd5b436014541415612e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726164696e67206973206e6f7420656e61626c65642079657400000000000081525060200191505060405180910390fd5b5b6000612e3730611d73565b9050436014805401118015612e4e57506016548110155b15612e595760165490505b60006017548210159050808015612e7d5750601560009054906101000a900460ff16155b8015612ed557507f000000000000000000000000ba67bde734b0f4e8374ce97d37128fee191105d473ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612eed5750601560019054906101000a900460ff165b15612f01576017549150612f00826132bb565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fa85750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fb257600090505b612fbe8686868461339d565b505050505050565b6000838311158290613073576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561303857808201518184015260208101905061301d565b50505050905090810190601f1680156130655780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006130936136ae565b915091506130aa81836130b190919063ffffffff16565b9250505090565b60006130f383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061393f565b905092915050565b600080828401905083811015613179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600080600080600080600080600061319d8c613a05565b935093509350935060008060006131be8f8787876131b9613086565b613a84565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600061322d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fc6565b905092915050565b60008083141561324857600090506132b5565b600082840290508284828161325957fe5b04146132b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806152776021913960400191505060405180910390fd5b809150505b92915050565b6001601560006101000a81548160ff02191690831515021790555060006132ec6002836130b190919063ffffffff16565b9050600061330382846131eb90919063ffffffff16565b9050600047905061331383613b38565b600061332882476131eb90919063ffffffff16565b90506133348382613de6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601560006101000a81548160ff02191690831515021790555050565b806133ab576133aa613f37565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134635761345e848484613f99565b61369a565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135065750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561351b576135168484846142f3565b613699565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135bf5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135d4576135cf84848461464d565b613698565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136765750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561368b57613686848484614912565b613697565b61369684848461464d565b5b5b5b5b806136a8576136a7614d01565b5b50505050565b600080600060095490506000600854905060005b600780549050811015613902578260026000600784815481106136e157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806137c8575081600360006007848154811061376057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156137df576009546008549450945050505061393b565b61386860026000600784815481106137f357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846131eb90919063ffffffff16565b92506138f3600360006007848154811061387e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836131eb90919063ffffffff16565b915080806001019150506136c2565b5061391a6008546009546130b190919063ffffffff16565b8210156139325760095460085493509350505061393b565b81819350935050505b9091565b600080831182906139eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139b0578082015181840152602081019050613995565b50505050905090810190601f1680156139dd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816139f757fe5b049050809150509392505050565b6000806000806000613a1686614d1e565b90506000613a2387614d4f565b90506000613a3088614d80565b90506000613a6b82613a5d85613a4f888e6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613a9d858a61323590919063ffffffff16565b90506000613ab4868a61323590919063ffffffff16565b90506000613acb878a61323590919063ffffffff16565b90506000613ae2888a61323590919063ffffffff16565b90506000613b1d82613b0f85613b01888a6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6060600267ffffffffffffffff81118015613b5257600080fd5b50604051908082528060200260200182016040528015613b815781602001602082028036833780820191505090505b5090503081600081518110613b9257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3257600080fd5b505afa158015613c46573d6000803e3d6000fd5b505050506040513d6020811015613c5c57600080fd5b810190808051906020019092919050505081600181518110613c7a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cdf307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128b5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613da1578082015181840152602081019050613d86565b505050509050019650505050505050600060405180830381600087803b158015613dca57600080fd5b505af1158015613dde573d6000803e3d6000fd5b505050505050565b613e11307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128b5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e5b612040565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015613ee057600080fd5b505af1158015613ef4573d6000803e3d6000fd5b50505050506040513d6060811015613f0b57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600e54148015613f4b57506000601054145b8015613f5957506000601254145b15613f6357613f97565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b6000806000806000806000613fad88613183565b965096509650965096509650965061400d88600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140a287600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061413786600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418382614db1565b61418c81614f56565b61419685846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061430788613183565b965096509650965096509650965061436787600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143fc84600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449186600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144dd82614db1565b6144e681614f56565b6144f085846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061466188613183565b96509650965096509650965096506146c187600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061475686600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147a282614db1565b6147ab81614f56565b6147b585846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061492688613183565b965096509650965096509650965061498688600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a1b87600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ab084600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b4586600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b9182614db1565b614b9a81614f56565b614ba485846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b6000614d486064614d3a600e548561323590919063ffffffff16565b6130b190919063ffffffff16565b9050919050565b6000614d796064614d6b6010548561323590919063ffffffff16565b6130b190919063ffffffff16565b9050919050565b6000614daa6064614d9c6012548561323590919063ffffffff16565b6130b190919063ffffffff16565b9050919050565b6000614dbb613086565b90506000614dd2828461323590919063ffffffff16565b9050614e2681600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614f5157614f0d83600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000614f60613086565b90506000614f77828461323590919063ffffffff16565b9050614fed8160026000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b60026000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060066000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156151a05761513a8360036000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b60036000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6151ba826009546131eb90919063ffffffff16565b6009819055506151d581600a546130fb90919063ffffffff16565b600a81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122095f1f46fca615191d87b375cd30916e60b1566146d5571fdbfead54a0a78572764736f6c634300060c0033
Deployed Bytecode Sourcemap
25320:18769:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32813:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27706:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28645:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29766:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26385:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28010:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28814:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30693:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27910:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31295:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33049:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29135:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26079:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29861:378;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32576:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30247:438;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26443:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26518:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26565:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30954:333;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37777:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26162:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28113:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17242:148;;;;;;;;;;;;;:::i;:::-;;26645:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29638:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16606:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32919:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27806:96;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29361:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28319:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26263:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26608:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33437:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33267:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33153:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28494:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32695:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33616:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32813:98;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32897:6:::1;32887:7;:16;;;;32813:98:::0;:::o;27706:92::-;27752:13;27785:5;27778:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27706:92;:::o;28645:161::-;28720:4;28737:39;28746:12;:10;:12::i;:::-;28760:7;28769:6;28737:8;:39::i;:::-;28794:4;28787:11;;28645:161;;;;:::o;29766:87::-;29808:7;29835:10;;29828:17;;29766:87;:::o;26385:51::-;;;:::o;28010:95::-;28063:7;28090;;28083:14;;28010:95;:::o;28814:313::-;28912:4;28929:36;28939:6;28947:9;28958:6;28929:9;:36::i;:::-;28976:121;28985:6;28993:12;:10;:12::i;:::-;29007:89;29045:6;29007:89;;;;;;;;;;;;;;;;;:11;:19;29019:6;29007:19;;;;;;;;;;;;;;;:33;29027:12;:10;:12::i;:::-;29007:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;28976:8;:121::i;:::-;29115:4;29108:11;;28814:313;;;;;:::o;30693:253::-;30759:7;30798;;30787;:18;;30779:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30863:19;30886:10;:8;:10::i;:::-;30863:33;;30914:24;30926:11;30914:7;:11;;:24;;;;:::i;:::-;30907:31;;;30693:253;;;:::o;27910:92::-;27960:5;27985:9;;;;;;;;;;;27978:16;;27910:92;:::o;31295:479::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31377:11:::1;:20;31389:7;31377:20;;;;;;;;;;;;;;;;;;;;;;;;;31369:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31445:9;31440:327;31464:9;:16;;;;31460:1;:20;31440:327;;;31522:7;31506:23;;:9;31516:1;31506:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;31502:254;;;31565:9;31594:1;31575:9;:16;;;;:20;31565:31;;;;;;;;;;;;;;;;;;;;;;;;;31550:9;31560:1;31550:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31634:1;31615:7;:16;31623:7;31615:16;;;;;;;;;;;;;;;:20;;;;31677:5;31654:11;:20;31666:7;31654:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;31701:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31735:5;;31502:254;31482:3;;;;;;;31440:327;;;;31295:479:::0;:::o;33049:98::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33133:6:::1;33123:7;:16;;;;33049:98:::0;:::o;29135:218::-;29223:4;29240:83;29249:12;:10;:12::i;:::-;29263:7;29272:50;29311:10;29272:11;:25;29284:12;:10;:12::i;:::-;29272:25;;;;;;;;;;;;;;;:34;29298:7;29272:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29240:8;:83::i;:::-;29341:4;29334:11;;29135:218;;;;:::o;26079:26::-;;;;:::o;29861:378::-;29913:14;29930:12;:10;:12::i;:::-;29913:29;;29962:11;:19;29974:6;29962:19;;;;;;;;;;;;;;;;;;;;;;;;;29961:20;29953:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30042:15;30067:19;30078:7;30067:10;:19::i;:::-;30041:45;;;;;;;;30115:28;30135:7;30115;:15;30123:6;30115:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30097:7;:15;30105:6;30097:15;;;;;;;;;;;;;;;:46;;;;30164:20;30176:7;30164;;:11;;:20;;;;:::i;:::-;30154:7;:30;;;;30208:23;30223:7;30208:10;;:14;;:23;;;;:::i;:::-;30195:10;:36;;;;29861:378;;;:::o;32576:111::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32675:4:::1;32645:18;:27;32664:7;32645:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32576:111:::0;:::o;30247:438::-;30337:7;30376;;30365;:18;;30357:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30435:17;30430:248;;30470:15;30495:19;30506:7;30495:10;:19::i;:::-;30469:45;;;;;;;;30536:7;30529:14;;;;;30430:248;30578:23;30610:19;30621:7;30610:10;:19::i;:::-;30576:53;;;;;;;;30651:15;30644:22;;;30247:438;;;;;:::o;26443:38::-;;;:::o;26518:40::-;;;;;;;;;;;;;:::o;26565:34::-;;;;;;;;;;;;;:::o;30954:333::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31037:11:::1;:20;31049:7;31037:20;;;;;;;;;;;;;;;;;;;;;;;;;31036:21;31028:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31122:1;31103:7;:16;31111:7;31103:16;;;;;;;;;;;;;;;;:20;31100:108;;;31159:37;31179:7;:16;31187:7;31179:16;;;;;;;;;;;;;;;;31159:19;:37::i;:::-;31140:7;:16;31148:7;31140:16;;;;;;;;;;;;;;;:56;;;;31100:108;31241:4;31218:11;:20;31230:7;31218:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31256:9;31271:7;31256:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30954:333:::0;:::o;37777:123::-;37841:4;37865:18;:27;37884:7;37865:27;;;;;;;;;;;;;;;;;;;;;;;;;37858:34;;37777:123;;;:::o;26162:32::-;;;;:::o;28113:198::-;28179:7;28203:11;:20;28215:7;28203:20;;;;;;;;;;;;;;;;;;;;;;;;;28199:49;;;28232:7;:16;28240:7;28232:16;;;;;;;;;;;;;;;;28225:23;;;;28199:49;28266:37;28286:7;:16;28294:7;28286:16;;;;;;;;;;;;;;;;28266:19;:37::i;:::-;28259:44;;28113:198;;;;:::o;17242:148::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17349:1:::1;17312:40;;17333:6;::::0;::::1;;;;;;;;17312:40;;;;;;;;;;;;17380:1;17363:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17242:148::o:0;26645:43::-;;;;:::o;29638:120::-;29706:4;29730:11;:20;29742:7;29730:20;;;;;;;;;;;;;;;;;;;;;;;;;29723:27;;29638:120;;;:::o;16606:79::-;16644:7;16671:6;;;;;;;;;;;16664:13;;16606:79;:::o;32919:122::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33021:12:::1;33005:13;:28;;;;32919:122:::0;:::o;27806:96::-;27854:13;27887:7;27880:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27806:96;:::o;29361:269::-;29454:4;29471:129;29480:12;:10;:12::i;:::-;29494:7;29503:96;29542:15;29503:96;;;;;;;;;;;;;;;;;:11;:25;29515:12;:10;:12::i;:::-;29503:25;;;;;;;;;;;;;;;:34;29529:7;29503:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29471:8;:129::i;:::-;29618:4;29611:11;;29361:269;;;;:::o;28319:167::-;28397:4;28414:42;28424:12;:10;:12::i;:::-;28438:9;28449:6;28414:9;:42::i;:::-;28474:4;28467:11;;28319:167;;;;:::o;26263:26::-;;;;:::o;26608:28::-;;;;;;;;;;;;;:::o;33437:171::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33538:8:::1;33514:21;;:32;;;;;;;;;;;;;;;;;;33562:38;33591:8;33562:38;;;;;;;;;;;;;;;;;;;;33437:171:::0;:::o;33267:162::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33361:60:::1;33405:5;33361:25;33373:12;33361:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;33346:12;:75;;;;33267:162:::0;:::o;33153:106::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33244:7:::1;33228:13;;:23;;;;;;;;;;;;;;;;;;33153:106:::0;:::o;28494:143::-;28575:7;28602:11;:18;28614:5;28602:18;;;;;;;;;;;;;;;:27;28621:7;28602:27;;;;;;;;;;;;;;;;28595:34;;28494:143;;;;:::o;32695:110::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32792:5:::1;32762:18;:27;32781:7;32762:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32695:110:::0;:::o;33616:153::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33706:12:::1;33693:10;:25;;;;33746:15;33729:14;;:32;;;;;;;;;;;;;;;;;;33616:153:::0;:::o;9607:106::-;9660:15;9695:10;9688:17;;9607:106;:::o;37908:337::-;38018:1;38001:19;;:5;:19;;;;37993:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38099:1;38080:21;;:7;:21;;;;38072:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38183:6;38153:11;:18;38165:5;38153:18;;;;;;;;;;;;;;;:27;38172:7;38153:27;;;;;;;;;;;;;;;:36;;;;38221:7;38205:32;;38214:5;38205:32;;;38230:6;38205:32;;;;;;;;;;;;;;;;;;37908:337;;;:::o;38253:1516::-;38391:1;38375:18;;:4;:18;;;;38367:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38468:1;38454:16;;:2;:16;;;;38446:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38538:1;38529:6;:10;38521:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38609:7;:5;:7::i;:::-;38601:15;;:4;:15;;;;:32;;;;;38626:7;:5;:7::i;:::-;38620:13;;:2;:13;;;;38601:32;:66;;;;;38655:12;38650:2;38637:10;;:15;:30;38601:66;38598:159;;;38700:12;;38690:6;:22;;38682:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38598:159;38782:7;:5;:7::i;:::-;38774:15;;:4;:15;;;38770:181;;38814:14;;;;;;;;;;;38806:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38896:12;38882:10;;:26;;38874:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38770:181;38963:28;38994:24;39012:4;38994:9;:24::i;:::-;38963:55;;39052:12;39047:2;39034:10;;:15;:30;:70;;;;;39092:12;;39068:20;:36;;39034:70;39031:146;;;39153:12;;39130:35;;39031:146;39189:24;39240:29;;39216:20;:53;;39189:80;;39298:19;:53;;;;;39335:16;;;;;;;;;;;39334:17;39298:53;:91;;;;;39376:13;39368:21;;:4;:21;;;;39298:91;:129;;;;;39406:21;;;;;;;;;;;39298:129;39280:289;;;39477:29;;39454:52;;39521:36;39536:20;39521:14;:36::i;:::-;39280:289;39581:12;39596:4;39581:19;;39616:18;:24;39635:4;39616:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;39644:18;:22;39663:2;39644:22;;;;;;;;;;;;;;;;;;;;;;;;;39616:50;39613:96;;;39692:5;39682:15;;39613:96;39723:38;39738:4;39743:2;39746:6;39753:7;39723:14;:38::i;:::-;38253:1516;;;;;;:::o;6017:192::-;6103:7;6136:1;6131;:6;;6139:12;6123:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6163:9;6179:1;6175;:5;6163:17;;6200:1;6193:8;;;6017:192;;;;;:::o;35352:163::-;35393:7;35414:15;35431;35450:19;:17;:19::i;:::-;35413:56;;;;35487:20;35499:7;35487;:11;;:20;;;;:::i;:::-;35480:27;;;;35352:163;:::o;7415:132::-;7473:7;7500:39;7504:1;7507;7500:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7493:46;;7415:132;;;;:::o;5114:181::-;5172:7;5192:9;5208:1;5204;:5;5192:17;;5233:1;5228;:6;;5220:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5286:1;5279:8;;;5114:181;;;;:::o;33969:454::-;34028:7;34037;34046;34055;34064;34073;34082;34103:23;34128:12;34142:18;34162:12;34178:20;34190:7;34178:11;:20::i;:::-;34102:96;;;;;;;;34210:15;34227:23;34252:12;34268:56;34280:7;34289:4;34295:10;34307:4;34313:10;:8;:10::i;:::-;34268:11;:56::i;:::-;34209:115;;;;;;34343:7;34352:15;34369:4;34375:15;34392:4;34398:10;34410:4;34335:80;;;;;;;;;;;;;;;;;;;;;33969:454;;;;;;;;;:::o;5578:136::-;5636:7;5663:43;5667:1;5670;5663:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5656:50;;5578:136;;;;:::o;6468:471::-;6526:7;6776:1;6771;:6;6767:47;;;6801:1;6794:8;;;;6767:47;6826:9;6842:1;6838;:5;6826:17;;6871:1;6866;6862;:5;;;;;;:10;6854:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6930:1;6923:8;;;6468:471;;;;;:::o;39777:474::-;27073:4;27054:16;;:23;;;;;;;;;;;;;;;;;;39862:12:::1;39877:27;39902:1;39877:20;:24;;:27;;;;:::i;:::-;39862:42;;39915:17;39935:30;39960:4;39935:20;:24;;:30;;;;:::i;:::-;39915:50;;39976:22;40001:21;39976:46;;40037:22;40054:4;40037:16;:22::i;:::-;40072:18;40093:41;40119:14;40093:21;:25;;:41;;;;:::i;:::-;40072:62;;40147:35;40160:9;40171:10;40147:12;:35::i;:::-;40200:43;40215:4;40221:10;40233:9;40200:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27088:1;;;;27119:5:::0;27100:16;;:24;;;;;;;;;;;;;;;;;;39777:474;:::o;41142:818::-;41253:7;41249:40;;41275:14;:12;:14::i;:::-;41249:40;41306:11;:19;41318:6;41306:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41330:11;:22;41342:9;41330:22;;;;;;;;;;;;;;;;;;;;;;;;;41329:23;41306:46;41302:597;;;41369:48;41391:6;41399:9;41410:6;41369:21;:48::i;:::-;41302:597;;;41440:11;:19;41452:6;41440:19;;;;;;;;;;;;;;;;;;;;;;;;;41439:20;:46;;;;;41463:11;:22;41475:9;41463:22;;;;;;;;;;;;;;;;;;;;;;;;;41439:46;41435:464;;;41502:46;41522:6;41530:9;41541:6;41502:19;:46::i;:::-;41435:464;;;41571:11;:19;41583:6;41571:19;;;;;;;;;;;;;;;;;;;;;;;;;41570:20;:47;;;;;41595:11;:22;41607:9;41595:22;;;;;;;;;;;;;;;;;;;;;;;;;41594:23;41570:47;41566:333;;;41634:44;41652:6;41660:9;41671:6;41634:17;:44::i;:::-;41566:333;;;41700:11;:19;41712:6;41700:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;41723:11;:22;41735:9;41723:22;;;;;;;;;;;;;;;;;;;;;;;;;41700:45;41696:203;;;41762:48;41784:6;41792:9;41803:6;41762:21;:48::i;:::-;41696:203;;;41843:44;41861:6;41869:9;41880:6;41843:17;:44::i;:::-;41696:203;41566:333;41435:464;41302:597;41915:7;41911:41;;41937:15;:13;:15::i;:::-;41911:41;41142:818;;;;:::o;35523:555::-;35573:7;35582;35602:15;35620:7;;35602:25;;35638:15;35656:7;;35638:25;;35679:9;35674:289;35698:9;:16;;;;35694:1;:20;35674:289;;;35764:7;35740;:21;35748:9;35758:1;35748:12;;;;;;;;;;;;;;;;;;;;;;;;;35740:21;;;;;;;;;;;;;;;;:31;:66;;;;35799:7;35775;:21;35783:9;35793:1;35783:12;;;;;;;;;;;;;;;;;;;;;;;;;35775:21;;;;;;;;;;;;;;;;:31;35740:66;35736:97;;;35816:7;;35825;;35808:25;;;;;;;;;35736:97;35858:34;35870:7;:21;35878:9;35888:1;35878:12;;;;;;;;;;;;;;;;;;;;;;;;;35870:21;;;;;;;;;;;;;;;;35858:7;:11;;:34;;;;:::i;:::-;35848:44;;35917:34;35929:7;:21;35937:9;35947:1;35937:12;;;;;;;;;;;;;;;;;;;;;;;;;35929:21;;;;;;;;;;;;;;;;35917:7;:11;;:34;;;;:::i;:::-;35907:44;;35716:3;;;;;;;35674:289;;;;35987:20;35999:7;;35987;;:11;;:20;;;;:::i;:::-;35977:7;:30;35973:61;;;36017:7;;36026;;36009:25;;;;;;;;35973:61;36053:7;36062;36045:25;;;;;;35523:555;;;:::o;8043:278::-;8129:7;8161:1;8157;:5;8164:12;8149:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8188:9;8204:1;8200;:5;;;;;;8188:17;;8312:1;8305:8;;;8043:278;;;;;:::o;34431:405::-;34491:7;34500;34509;34518;34538:12;34553:24;34569:7;34553:15;:24::i;:::-;34538:39;;34588:18;34609:30;34631:7;34609:21;:30::i;:::-;34588:51;;34650:12;34665:24;34681:7;34665:15;:24::i;:::-;34650:39;;34700:23;34726:43;34764:4;34726:33;34748:10;34726:17;34738:4;34726:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:43;;;;:::i;:::-;34700:69;;34788:15;34805:4;34811:10;34823:4;34780:48;;;;;;;;;;;;34431:405;;;;;:::o;34844:500::-;34973:7;34982;34991;35011:15;35029:24;35041:11;35029:7;:11;;:24;;;;:::i;:::-;35011:42;;35064:12;35079:21;35088:11;35079:4;:8;;:21;;;;:::i;:::-;35064:36;;35111:18;35132:27;35147:11;35132:10;:14;;:27;;;;:::i;:::-;35111:48;;35170:12;35185:21;35194:11;35185:4;:8;;:21;;;;:::i;:::-;35170:36;;35217:23;35243:43;35281:4;35243:33;35265:10;35243:17;35255:4;35243:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:43;;;;:::i;:::-;35217:69;;35305:7;35314:15;35331:4;35297:39;;;;;;;;;;;34844:500;;;;;;;;;:::o;40259:475::-;40325:21;40363:1;40349:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40325:40;;40394:4;40376;40381:1;40376:7;;;;;;;;;;;;;:23;;;;;;;;;;;40420:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40410:4;40415:1;40410:7;;;;;;;;;;;;;:32;;;;;;;;;;;40455:62;40472:4;40487:15;40505:11;40455:8;:62::i;:::-;40530:15;:66;;;40611:11;40637:1;40653:4;40680;40700:15;40530:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40259:475;;:::o;40742:392::-;40823:62;40840:4;40855:15;40873:11;40823:8;:62::i;:::-;40928:15;:31;;;40967:9;41000:4;41020:11;41046:1;41062;41078:7;:5;:7::i;:::-;41100:15;40928:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40742:392;;:::o;37292:308::-;37349:1;37338:7;;:12;:34;;;;;37371:1;37354:13;;:18;37338:34;:50;;;;;37387:1;37376:7;;:12;37338:50;37335:62;;;37390:7;;37335:62;37427:7;;37409:15;:25;;;;37469:13;;37445:21;:37;;;;37511:7;;37493:15;:25;;;;37541:1;37531:7;:11;;;;37569:1;37553:13;:17;;;;37591:1;37581:7;:11;;;;37292:308;:::o;43369:717::-;43472:15;43489:23;43514:12;43528:23;43553:12;43567:18;43587:12;43603:19;43614:7;43603:10;:19::i;:::-;43471:151;;;;;;;;;;;;;;43651:28;43671:7;43651;:15;43659:6;43651:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43633:7;:15;43641:6;43633:15;;;;;;;;;;;;;;;:46;;;;43708:28;43728:7;43708;:15;43716:6;43708:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43690:7;:15;43698:6;43690:15;;;;;;;;;;;;;;;:46;;;;43768:39;43791:15;43768:7;:18;43776:9;43768:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43747:7;:18;43755:9;43747:18;;;;;;;;;;;;;;;:60;;;;43818:26;43833:10;43818:14;:26::i;:::-;43855:17;43867:4;43855:11;:17::i;:::-;43883:23;43895:4;43901;43883:11;:23::i;:::-;43939:9;43922:44;;43931:6;43922:44;;;43950:15;43922:44;;;;;;;;;;;;;;;;;;43999:13;;;;;;;;;;;43982:37;;43991:6;43982:37;;;44014:4;43982:37;;;;;;;;;;;;;;;;;;44060:4;44035:43;;44044:6;44035:43;;;44067:10;44035:43;;;;;;;;;;;;;;;;;;43369:717;;;;;;;;;;:::o;42632:729::-;42733:15;42750:23;42775:12;42789:23;42814:12;42828:18;42848:12;42864:19;42875:7;42864:10;:19::i;:::-;42732:151;;;;;;;;;;;;;;42912:28;42932:7;42912;:15;42920:6;42912:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42894:7;:15;42902:6;42894:15;;;;;;;;;;;;;;;:46;;;;42972:39;42995:15;42972:7;:18;42980:9;42972:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42951:7;:18;42959:9;42951:18;;;;;;;;;;;;;;;:60;;;;43043:39;43066:15;43043:7;:18;43051:9;43043:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43022:7;:18;43030:9;43022:18;;;;;;;;;;;;;;;:60;;;;43093:26;43108:10;43093:14;:26::i;:::-;43130:17;43142:4;43130:11;:17::i;:::-;43158:23;43170:4;43176;43158:11;:23::i;:::-;43214:9;43197:44;;43206:6;43197:44;;;43225:15;43197:44;;;;;;;;;;;;;;;;;;43274:13;;;;;;;;;;;43257:37;;43266:6;43257:37;;;43289:4;43257:37;;;;;;;;;;;;;;;;;;43335:4;43310:43;;43319:6;43310:43;;;43342:10;43310:43;;;;;;;;;;;;;;;;;;42632:729;;;;;;;;;;:::o;41968:656::-;42067:15;42084:23;42109:12;42123:23;42148:12;42162:18;42182:12;42198:19;42209:7;42198:10;:19::i;:::-;42066:151;;;;;;;;;;;;;;42246:28;42266:7;42246;:15;42254:6;42246:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42228:7;:15;42236:6;42228:15;;;;;;;;;;;;;;;:46;;;;42306:39;42329:15;42306:7;:18;42314:9;42306:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42285:7;:18;42293:9;42285:18;;;;;;;;;;;;;;;:60;;;;42356:26;42371:10;42356:14;:26::i;:::-;42393:17;42405:4;42393:11;:17::i;:::-;42421:23;42433:4;42439;42421:11;:23::i;:::-;42477:9;42460:44;;42469:6;42460:44;;;42488:15;42460:44;;;;;;;;;;;;;;;;;;42537:13;;;;;;;;;;;42520:37;;42529:6;42520:37;;;42552:4;42520:37;;;;;;;;;;;;;;;;;;42598:4;42573:43;;42582:6;42573:43;;;42605:10;42573:43;;;;;;;;;;;;;;;;;;41968:656;;;;;;;;;;:::o;31780:788::-;31883:15;31900:23;31925:12;31939:23;31964:12;31978:18;31998:12;32014:19;32025:7;32014:10;:19::i;:::-;31882:151;;;;;;;;;;;;;;32062:28;32082:7;32062;:15;32070:6;32062:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32044:7;:15;32052:6;32044:15;;;;;;;;;;;;;;;:46;;;;32119:28;32139:7;32119;:15;32127:6;32119:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32101:7;:15;32109:6;32101:15;;;;;;;;;;;;;;;:46;;;;32179:39;32202:15;32179:7;:18;32187:9;32179:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32158:7;:18;32166:9;32158:18;;;;;;;;;;;;;;;:60;;;;32250:39;32273:15;32250:7;:18;32258:9;32250:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32229:7;:18;32237:9;32229:18;;;;;;;;;;;;;;;:60;;;;32300:26;32315:10;32300:14;:26::i;:::-;32337:17;32349:4;32337:11;:17::i;:::-;32365:23;32377:4;32383;32365:11;:23::i;:::-;32421:9;32404:44;;32413:6;32404:44;;;32432:15;32404:44;;;;;;;;;;;;;;;;;;32481:13;;;;;;;;;;;32464:37;;32473:6;32464:37;;;32496:4;32464:37;;;;;;;;;;;;;;;;;;32542:4;32517:43;;32526:6;32517:43;;;32549:10;32517:43;;;;;;;;;;;;;;;;;;31780:788;;;;;;;;;;:::o;37608:161::-;37662:15;;37652:7;:25;;;;37704:21;;37688:13;:37;;;;37746:15;;37736:7;:25;;;;37608:161::o;36794:154::-;36858:7;36885:55;36924:5;36885:20;36897:7;;36885;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;36878:62;;36794:154;;;:::o;36956:166::-;37026:7;37053:61;37098:5;37053:26;37065:13;;37053:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;37046:68;;36956:166;;;:::o;37130:154::-;37194:7;37221:55;37260:5;37221:20;37233:7;;37221;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;37214:62;;37130:154;;;:::o;36086:355::-;36149:19;36172:10;:8;:10::i;:::-;36149:33;;36193:18;36214:27;36229:11;36214:10;:14;;:27;;;;:::i;:::-;36193:48;;36277:38;36304:10;36277:7;:22;36293:4;36277:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;36252:7;:22;36268:4;36252:22;;;;;;;;;;;;;;;:63;;;;36329:11;:26;36349:4;36329:26;;;;;;;;;;;;;;;;;;;;;;;;;36326:107;;;36395:38;36422:10;36395:7;:22;36411:4;36395:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;36370:7;:22;36386:4;36370:22;;;;;;;;;;;;;;;:63;;;;36326:107;36086:355;;;:::o;36449:337::-;36506:19;36529:10;:8;:10::i;:::-;36506:33;;36550:15;36568:24;36580:11;36568:7;:11;;:24;;;;:::i;:::-;36550:42;;36628:35;36655:7;36628;:22;36636:13;;;;;;;;;;;36628:22;;;;;;;;;;;;;;;;:26;;:35;;;;:::i;:::-;36603:7;:22;36611:13;;;;;;;;;;;36603:22;;;;;;;;;;;;;;;:60;;;;36677:11;:26;36689:13;;;;;;;;;;;36677:26;;;;;;;;;;;;;;;;;;;;;;;;;36674:104;;;36743:35;36770:7;36743;:22;36751:13;;;;;;;;;;;36743:22;;;;;;;;;;;;;;;;:26;;:35;;;;:::i;:::-;36718:7;:22;36726:13;;;;;;;;;;;36718:22;;;;;;;;;;;;;;;:60;;;;36674:104;36449:337;;;:::o;33814:147::-;33892:17;33904:4;33892:7;;:11;;:17;;;;:::i;:::-;33882:7;:27;;;;33933:20;33948:4;33933:10;;:14;;:20;;;;:::i;:::-;33920:10;:33;;;;33814:147;;:::o
Swarm Source
ipfs://95f1f46fca615191d87b375cd30916e60b1566146d5571fdbfead54a0a785727
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.