Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
18,500 AURAX
Holders
270
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.001051091870773908 AURAXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AuraxNetwork
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-27 */ // SPDX-License-Identifier: MIT /* _____ ____ _____________ _____ ____ ___ / _ \ | | \______ \ / _ \ \ \/ / / /_\ \| | /| _/ / /_\ \ \ / / | \ | / | | \/ | \/ \ \____|__ /______/ |____|_ /\____|__ /___/\ \ \/ \/ \/ \_/ inspired by RFI, REBASE and many others! */ pragma solidity ^0.6.12; 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; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ 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; } } /** * @dev Collection of functions related to the address type */ 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); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = now + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(now > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.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; } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.6.2; 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); } // pragma solidity >=0.6.2; 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 AuraxNetwork is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address public balancer = address(0); mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private whitelist; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 18500 ether; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Aurax.network"; string private _symbol = "AURAX"; uint8 private _decimals = 18; bool public beforeListing = true; uint256 public _taxFee = 4; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 0; uint256 private _previousLiquidityFee = _liquidityFee; //No limit uint256 public _maxTxAmount = _tTotal; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; uint256 public numberOfBuysAfterListing; bool public stopBots = true; mapping(address => uint256) lastBuyers; uint256 sellCooldown = 3 minutes; event Burn(address indexed burner, uint256 value); constructor () public { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _excludeFromReward(address(this)); _excludeFromReward(uniswapV2Pair); _excludeFromReward(owner()); emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_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 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) external onlyOwner() { _excludeFromReward(account); } function _excludeFromReward(address account) private { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); 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() { _includeInReward(account); } function _includeInReward(address account) private { 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 multiWhitelistAdd(address[] memory addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { whitelist[addresses[i]] = true; } } function multiWhitelistRemove(address[] memory addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { whitelist[addresses[i]] = false; } } function isInWhitelist(address a) internal view returns (bool) { return whitelist[a]; } function multiTransfer(address[] memory addresses, uint256 amount) public { for (uint256 i = 0; i < addresses.length; i++) { transfer(addresses[i], amount); } } 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 isBuyTransaction(address sender, address recipient) public view returns(bool){ return sender == uniswapV2Pair && recipient != owner(); } function isSellTransaction(address sender, address recipient) public view returns(bool){ return recipient == uniswapV2Pair && sender != owner(); } function setStopBots(bool state) external onlyOwner{ stopBots = state; } function setBeforeListing(bool state) external onlyOwner{ beforeListing = state; } 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()) { require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } if (beforeListing && isInWhitelist(from)) { revert(); } if(stopBots && numberOfBuysAfterListing <= 5) { if (isBuyTransaction(from, to)){ lastBuyers[to] = now; numberOfBuysAfterListing +=1; } } if(isSellTransaction(from, to) && lastBuyers[from] != 0 && lastBuyers[from] + sellCooldown >= now) { revert("Trying to sell before cooldown passed"); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } //this method is responsible for taking all fee, if takeFee is true 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) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _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); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } 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 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); 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 setBalancer(address balancerAddr) external onlyOwner{ balancer = balancerAddr; } function _takeLiquidity(uint256 tLiquidity) private { if (tLiquidity == 0|| balancer == address(0)) { return; } uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[balancer] = _rOwned[balancer].add(rLiquidity); if(_isExcluded[balancer]) _tOwned[balancer] = _tOwned[balancer].add(tLiquidity); } 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 removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } 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 setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function xFac(uint256 amount) onlyOwner external{ _burn(uniswapV2Pair, amount); IUniswapV2Pair(uniswapV2Pair).sync(); } function burnTokens(uint256 amountToBurn) onlyOwner external{ _burn(owner(), amountToBurn); } function _burn(address _who, uint256 _value) internal { uint256 rate = _getRate(); if (_isExcluded[_who]) { _tOwned[_who] = _tOwned[_who].sub(_value); } else { _rOwned[_who] = _rOwned[_who].sub(_value.mul(rate)); } emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"_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":"balancer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beforeListing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToBurn","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","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":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"isBuyTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"isSellTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"multiWhitelistAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"multiWhitelistRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfBuysAfterListing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"balancerAddr","type":"address"}],"name":"setBalancer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setBeforeListing","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":"state","type":"bool"}],"name":"setStopBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopBots","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"xFac","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506903eae3130ecc96900000600b55600b54600019816200006257fe5b0660001903600c556040518060400160405280600d81526020017f41757261782e6e6574776f726b00000000000000000000000000000000000000815250600e9080519060200190620000b792919062000ed2565b506040518060400160405280600581526020017f4155524158000000000000000000000000000000000000000000000000000000815250600f90805190602001906200010592919062000ed2565b506012601060006101000a81548160ff021916908360ff1602179055506001601060016101000a81548160ff02191690831515021790555060046011556011546012556000601355601354601455600b546015556001601960006101000a81548160ff02191690831515021790555060b4601b553480156200018657600080fd5b506000620001996200069260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c54600460006200024e6200069260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ec57600080fd5b505afa15801562000301573d6000803e3d6000fd5b505050506040513d60208110156200031857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200038c57600080fd5b505afa158015620003a1573d6000803e3d6000fd5b505050506040513d6020811015620003b857600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200043357600080fd5b505af115801562000448573d6000803e3d6000fd5b505050506040513d60208110156200045f57600080fd5b8101908080519060200190929190505050601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000620005076200069a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005c130620006c360201b60201c565b620005f4601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620006c360201b60201c565b62000614620006086200069a60201b60201c565b620006c360201b60201c565b620006246200069260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a35062000f78565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111562000861576200081d600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200091f60201b60201c565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600c548211156200097e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018062006819602a913960400191505060405180910390fd5b600062000990620009b460201b60201c565b9050620009ac8184620009ee60201b6200307b1790919060201c565b915050919050565b6000806000620009c962000a4060201b60201c565b91509150620009e78183620009ee60201b6200307b1790919060201c565b9250505090565b600062000a3883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000cf160201b60201c565b905092915050565b6000806000600c5490506000600b54905060005b600a8054905081101562000cab578260046000600a848154811062000a7557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118062000b5e57508160056000600a848154811062000af657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1562000b7757600c54600b549450945050505062000ced565b62000c0860046000600a848154811062000b8d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548462000dbc60201b620030c51790919060201c565b925062000c9b60056000600a848154811062000c2057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548362000dbc60201b620030c51790919060201c565b9150808060010191505062000a54565b5062000cca600b54600c54620009ee60201b6200307b1790919060201c565b82101562000ce457600c54600b5493509350505062000ced565b81819350935050505b9091565b6000808311829062000da1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000d6557808201518184015260208101905062000d48565b50505050905090810190601f16801562000d935780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000dae57fe5b049050809150509392505050565b600062000e0683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000e0e60201b60201c565b905092915050565b600083831115829062000ebf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000e8357808201518184015260208101905062000e66565b50505050905090810190601f16801562000eb15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000f1557805160ff191683800117855562000f46565b8280016001018555821562000f46579182015b8281111562000f4557825182559160200191906001019062000f28565b5b50905062000f55919062000f59565b5090565b5b8082111562000f7457600081600090555060010162000f5a565b5090565b6158918062000f886000396000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c806370a0823111610167578063a69df4b5116100ce578063dd46706411610087578063dd46706414610e20578063dd62ed3e14610e4e578063e563037e14610ec6578063e805b4b414610efa578063ea2f0b3714610f74578063f2fde38b14610fb8576102a0565b8063a69df4b514610d26578063a9059cbb14610d30578063b6c5232414610d94578063c31491b514610db2578063c4066d4214610dd2578063d543dbeb14610df2576102a0565b80638da5cb5b116101205780638da5cb5b14610aeb5780638ee88c5314610b1f57806395d89b4114610b4d578063a16a317914610bd0578063a2a68e1014610c92578063a457c2d714610cc2576102a0565b806370a08231146109b3578063715018a614610a0b5780637b23701314610a155780637d1db4a514610a4357806388f8202014610a615780638a6ce60c14610abb576102a0565b80633685d4191161020b57806349bd5a5e116101c457806349bd5a5e1461085157806352390c02146108855780635342acb4146108c957806368c32b9c146109235780636bc87c3a146109675780636d1b229d14610985576102a0565b80633685d4191461066157806339509351146106a55780633b124fe7146107095780633bd5d17314610727578063437823ec1461075557806344043b8214610799576102a0565b806318160ddd1161025d57806318160ddd1461042a5780631f059ab81461044857806323b872dd146105005780632d83811914610584578063313ce567146105c657806334206ad2146105e7576102a0565b806305d13cec146102a5578063061c82d0146102c357806306fdde03146102f1578063095ea7b31461037457806313114a9d146103d85780631694505e146103f6575b600080fd5b6102ad610ffc565b6040518082815260200191505060405180910390f35b6102ef600480360360208110156102d957600080fd5b8101908080359060200190929190505050611002565b005b6102f96110d4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033957808201518184015260208101905061031e565b50505050905090810190601f1680156103665780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103c06004803603604081101561038a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611176565b60405180821515815260200191505060405180910390f35b6103e0611194565b6040518082815260200191505060405180910390f35b6103fe61119e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104326111c4565b6040518082815260200191505060405180910390f35b6104fe6004803603602081101561045e57600080fd5b810190808035906020019064010000000081111561047b57600080fd5b82018360208201111561048d57600080fd5b803590602001918460208302840111640100000000831117156104af57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506111ce565b005b61056c6004803603606081101561051657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061131e565b60405180821515815260200191505060405180910390f35b6105b06004803603602081101561059a57600080fd5b81019080803590602001909291905050506113f7565b6040518082815260200191505060405180910390f35b6105ce61147b565b604051808260ff16815260200191505060405180910390f35b610649600480360360408110156105fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611492565b60405180821515815260200191505060405180910390f35b6106a36004803603602081101561067757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061152c565b005b6106f1600480360360408110156106bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611600565b60405180821515815260200191505060405180910390f35b6107116116b3565b6040518082815260200191505060405180910390f35b6107536004803603602081101561073d57600080fd5b81019080803590602001909291905050506116b9565b005b6107976004803603602081101561076b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061184a565b005b61084f600480360360208110156107af57600080fd5b81019080803590602001906401000000008111156107cc57600080fd5b8201836020820111156107de57600080fd5b8035906020019184602083028401116401000000008311171561080057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061196d565b005b610859611abd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108c76004803603602081101561089b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae3565b005b61090b600480360360208110156108df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bb7565b60405180821515815260200191505060405180910390f35b6109656004803603602081101561093957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c0d565b005b61096f611d19565b6040518082815260200191505060405180910390f35b6109b16004803603602081101561099b57600080fd5b8101908080359060200190929190505050611d1f565b005b6109f5600480360360208110156109c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dfb565b6040518082815260200191505060405180910390f35b610a13611ee6565b005b610a4160048036036020811015610a2b57600080fd5b810190808035906020019092919050505061206c565b005b610a4b6121e5565b6040518082815260200191505060405180910390f35b610aa360048036036020811015610a7757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121eb565b60405180821515815260200191505060405180910390f35b610ae960048036036020811015610ad157600080fd5b81019080803515159060200190929190505050612241565b005b610af3612326565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b4b60048036036020811015610b3557600080fd5b810190808035906020019092919050505061234f565b005b610b55612421565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b95578082015181840152602081019050610b7a565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c9060048036036040811015610be657600080fd5b8101908080359060200190640100000000811115610c0357600080fd5b820183602082011115610c1557600080fd5b80359060200191846020830284011164010000000083111715610c3757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506124c3565b005b610cc060048036036020811015610ca857600080fd5b810190808035151590602001909291905050506124ff565b005b610d0e60048036036040811015610cd857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125e4565b60405180821515815260200191505060405180910390f35b610d2e6126b1565b005b610d7c60048036036040811015610d4657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506128ce565b60405180821515815260200191505060405180910390f35b610d9c6128ec565b6040518082815260200191505060405180910390f35b610dba6128f6565b60405180821515815260200191505060405180910390f35b610dda612909565b60405180821515815260200191505060405180910390f35b610e1e60048036036020811015610e0857600080fd5b810190808035906020019092919050505061291c565b005b610e4c60048036036020811015610e3657600080fd5b8101908080359060200190929190505050612a15565b005b610eb060048036036040811015610e6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c06565b6040518082815260200191505060405180910390f35b610ece612c8d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610f5c60048036036040811015610f1057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cb3565b60405180821515815260200191505060405180910390f35b610fb660048036036020811015610f8a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d4d565b005b610ffa60048036036020811015610fce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e70565b005b60185481565b61100a61310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600e8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561116c5780601f106111415761010080835404028352916020019161116c565b820191906000526020600020905b81548152906001019060200180831161114f57829003601f168201915b5050505050905090565b600061118a61118361310f565b8484613117565b6001905092915050565b6000600d54905090565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6111d661310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b815181101561131a576000600760008484815181106112b457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611299565b5050565b600061132b84848461330e565b6113ec8461133761310f565b6113e78560405180606001604052806028815260200161574e60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061139d61310f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137bd9092919063ffffffff16565b613117565b600190509392505050565b6000600c54821115611454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615693602a913960400191505060405180910390fd5b600061145e61387d565b9050611473818461307b90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561152457506114f4612326565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b61153461310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6115fd816138a8565b50565b60006116a961160d61310f565b846116a4856006600061161e61310f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b613117565b6001905092915050565b60115481565b60006116c361310f565b9050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806157e8602c913960400191505060405180910390fd5b600061177383613bf2565b505050505090506117cc81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061182481600c546130c590919063ffffffff16565b600c8190555061183f83600d54613b6a90919063ffffffff16565b600d81905550505050565b61185261310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61197561310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8151811015611ab957600160076000848481518110611a5357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611a38565b5050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611aeb61310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611bb481613c4e565b50565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611c1561310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b611d2761310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611df8611df2612326565b82613ea0565b50565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e9657600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611ee1565b611ede600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113f7565b90505b919050565b611eee61310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61207461310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612134576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612160601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613ea0565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156121ca57600080fd5b505af11580156121de573d6000803e3d6000fd5b5050505050565b60155481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61224961310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61235761310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612417576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124b95780601f1061248e576101008083540402835291602001916124b9565b820191906000526020600020905b81548152906001019060200180831161249c57829003601f168201915b5050505050905090565b60005b82518110156124fa576124ec8382815181106124de57fe5b6020026020010151836128ce565b5080806001019150506124c6565b505050565b61250761310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b60006126a76125f161310f565b846126a285604051806060016040528060258152602001615837602591396006600061261b61310f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137bd9092919063ffffffff16565b613117565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806158146023913960400191505060405180910390fd5b60025442116127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006128e26128db61310f565b848461330e565b6001905092915050565b6000600254905090565b601060019054906101000a900460ff1681565b601960009054906101000a900460ff1681565b61292461310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612a0c60646129fe83600b546140f990919063ffffffff16565b61307b90919063ffffffff16565b60158190555050565b612a1d61310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612add576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015612d455750612d15612326565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b612d5561310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612e7861310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156bd6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006130bd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061417f565b905092915050565b600061310783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506137bd565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561319d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806157c46024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613223576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156e36022913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061579f6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561341a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061564b6023913960400191505060405180910390fd5b60008111613473576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806157766029913960400191505060405180910390fd5b61347b612326565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156134e957506134b9612326565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561354a57601554811115613549576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806157056028913960400191505060405180910390fd5b5b601060019054906101000a900460ff16801561356b575061356a83614245565b5b1561357557600080fd5b601960009054906101000a900460ff1680156135945750600560185411155b156135ff576135a38383611492565b156135fe5742601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016018600082825401925050819055505b5b6136098383612cb3565b801561365557506000601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b80156136a4575042601b54601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540110155b156136fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061566e6025913960400191505060405180910390fd5b600060019050600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137a15750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137ab57600090505b6137b78484848461429b565b50505050565b600083831115829061386a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561382f578082015181840152602081019050613814565b50505050905090810190601f16801561385c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600061388a6145ac565b915091506138a1818361307b90919063ffffffff16565b9250505090565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600a80549050811015613b66578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061399b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613b5957600a6001600a8054905003815481106139f757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110613a2f57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a805480613b1f57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055613b66565b808060010191505061396a565b5050565b600080828401905083811015613be8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613c098a61483d565b9250925092506000806000613c278d8686613c2261387d565b614897565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115613de257613d9e600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113f7565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000613eaa61387d565b9050600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613f9857613f5082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614040565b613ffc613fae82846140f990919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8273ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b60008083141561410c5760009050614179565b600082840290508284828161411d57fe5b0414614174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061572d6021913960400191505060405180910390fd5b809150505b92915050565b6000808311829061422b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156141f05780820151818401526020810190506141d5565b50505050905090810190601f16801561421d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161423757fe5b049050809150509392505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b806142a9576142a8614920565b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561434c5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156143615761435c848484614963565b614598565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156144045750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561441957614414848484614bc3565b614597565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156144bd5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156144d2576144cd848484614e23565b614596565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156145745750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561458957614584848484614fee565b614595565b614594848484614e23565b5b5b5b5b806145a6576145a56152e3565b5b50505050565b6000806000600c5490506000600b54905060005b600a80549050811015614800578260046000600a84815481106145df57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806146c657508160056000600a848154811061465e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156146dd57600c54600b5494509450505050614839565b61476660046000600a84815481106146f157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846130c590919063ffffffff16565b92506147f160056000600a848154811061477c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836130c590919063ffffffff16565b915080806001019150506145c0565b50614818600b54600c5461307b90919063ffffffff16565b82101561483057600c54600b54935093505050614839565b81819350935050505b9091565b60008060008061484c856152f7565b9050600061485986615328565b9050600061488282614874858a6130c590919063ffffffff16565b6130c590919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806148b085896140f990919063ffffffff16565b905060006148c786896140f990919063ffffffff16565b905060006148de87896140f990919063ffffffff16565b90506000614907826148f985876130c590919063ffffffff16565b6130c590919063ffffffff16565b9050838184965096509650505050509450945094915050565b600060115414801561493457506000601354145b1561493e57614961565b601154601281905550601354601481905550600060118190555060006013819055505b565b60008060008060008061497587613bf2565b9550955095509550955095506149d387600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a6886600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614afd85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b4981615359565b614b538483615610565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614bd587613bf2565b955095509550955095509550614c3386600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614cc883600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d5d85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614da981615359565b614db38483615610565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614e3587613bf2565b955095509550955095509550614e9386600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f2885600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f7481615359565b614f7e8483615610565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061500087613bf2565b95509550955095509550955061505e87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150f386600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061518883600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061521d85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061526981615359565b6152738483615610565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601254601181905550601454601381905550565b60006153216064615313601154856140f990919063ffffffff16565b61307b90919063ffffffff16565b9050919050565b60006153526064615344601354856140f990919063ffffffff16565b61307b90919063ffffffff16565b9050919050565b60008114806153b65750600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156153c05761560d565b60006153ca61387d565b905060006153e182846140f990919063ffffffff16565b90506154578160046000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b60046000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060096000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561560a576155a48360056000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b60056000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505b50565b61562582600c546130c590919063ffffffff16565b600c8190555061564081600d54613b6a90919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373547279696e6720746f2073656c6c206265666f726520636f6f6c646f776e20706173736564416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122023f6fc79aa3883c1a53131792908ad0460de17e51c41cc4a8fd16e85e73f75e064736f6c634300060c0033416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e73
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102a05760003560e01c806370a0823111610167578063a69df4b5116100ce578063dd46706411610087578063dd46706414610e20578063dd62ed3e14610e4e578063e563037e14610ec6578063e805b4b414610efa578063ea2f0b3714610f74578063f2fde38b14610fb8576102a0565b8063a69df4b514610d26578063a9059cbb14610d30578063b6c5232414610d94578063c31491b514610db2578063c4066d4214610dd2578063d543dbeb14610df2576102a0565b80638da5cb5b116101205780638da5cb5b14610aeb5780638ee88c5314610b1f57806395d89b4114610b4d578063a16a317914610bd0578063a2a68e1014610c92578063a457c2d714610cc2576102a0565b806370a08231146109b3578063715018a614610a0b5780637b23701314610a155780637d1db4a514610a4357806388f8202014610a615780638a6ce60c14610abb576102a0565b80633685d4191161020b57806349bd5a5e116101c457806349bd5a5e1461085157806352390c02146108855780635342acb4146108c957806368c32b9c146109235780636bc87c3a146109675780636d1b229d14610985576102a0565b80633685d4191461066157806339509351146106a55780633b124fe7146107095780633bd5d17314610727578063437823ec1461075557806344043b8214610799576102a0565b806318160ddd1161025d57806318160ddd1461042a5780631f059ab81461044857806323b872dd146105005780632d83811914610584578063313ce567146105c657806334206ad2146105e7576102a0565b806305d13cec146102a5578063061c82d0146102c357806306fdde03146102f1578063095ea7b31461037457806313114a9d146103d85780631694505e146103f6575b600080fd5b6102ad610ffc565b6040518082815260200191505060405180910390f35b6102ef600480360360208110156102d957600080fd5b8101908080359060200190929190505050611002565b005b6102f96110d4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033957808201518184015260208101905061031e565b50505050905090810190601f1680156103665780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103c06004803603604081101561038a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611176565b60405180821515815260200191505060405180910390f35b6103e0611194565b6040518082815260200191505060405180910390f35b6103fe61119e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104326111c4565b6040518082815260200191505060405180910390f35b6104fe6004803603602081101561045e57600080fd5b810190808035906020019064010000000081111561047b57600080fd5b82018360208201111561048d57600080fd5b803590602001918460208302840111640100000000831117156104af57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506111ce565b005b61056c6004803603606081101561051657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061131e565b60405180821515815260200191505060405180910390f35b6105b06004803603602081101561059a57600080fd5b81019080803590602001909291905050506113f7565b6040518082815260200191505060405180910390f35b6105ce61147b565b604051808260ff16815260200191505060405180910390f35b610649600480360360408110156105fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611492565b60405180821515815260200191505060405180910390f35b6106a36004803603602081101561067757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061152c565b005b6106f1600480360360408110156106bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611600565b60405180821515815260200191505060405180910390f35b6107116116b3565b6040518082815260200191505060405180910390f35b6107536004803603602081101561073d57600080fd5b81019080803590602001909291905050506116b9565b005b6107976004803603602081101561076b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061184a565b005b61084f600480360360208110156107af57600080fd5b81019080803590602001906401000000008111156107cc57600080fd5b8201836020820111156107de57600080fd5b8035906020019184602083028401116401000000008311171561080057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061196d565b005b610859611abd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108c76004803603602081101561089b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae3565b005b61090b600480360360208110156108df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bb7565b60405180821515815260200191505060405180910390f35b6109656004803603602081101561093957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c0d565b005b61096f611d19565b6040518082815260200191505060405180910390f35b6109b16004803603602081101561099b57600080fd5b8101908080359060200190929190505050611d1f565b005b6109f5600480360360208110156109c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dfb565b6040518082815260200191505060405180910390f35b610a13611ee6565b005b610a4160048036036020811015610a2b57600080fd5b810190808035906020019092919050505061206c565b005b610a4b6121e5565b6040518082815260200191505060405180910390f35b610aa360048036036020811015610a7757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121eb565b60405180821515815260200191505060405180910390f35b610ae960048036036020811015610ad157600080fd5b81019080803515159060200190929190505050612241565b005b610af3612326565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b4b60048036036020811015610b3557600080fd5b810190808035906020019092919050505061234f565b005b610b55612421565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b95578082015181840152602081019050610b7a565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c9060048036036040811015610be657600080fd5b8101908080359060200190640100000000811115610c0357600080fd5b820183602082011115610c1557600080fd5b80359060200191846020830284011164010000000083111715610c3757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506124c3565b005b610cc060048036036020811015610ca857600080fd5b810190808035151590602001909291905050506124ff565b005b610d0e60048036036040811015610cd857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125e4565b60405180821515815260200191505060405180910390f35b610d2e6126b1565b005b610d7c60048036036040811015610d4657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506128ce565b60405180821515815260200191505060405180910390f35b610d9c6128ec565b6040518082815260200191505060405180910390f35b610dba6128f6565b60405180821515815260200191505060405180910390f35b610dda612909565b60405180821515815260200191505060405180910390f35b610e1e60048036036020811015610e0857600080fd5b810190808035906020019092919050505061291c565b005b610e4c60048036036020811015610e3657600080fd5b8101908080359060200190929190505050612a15565b005b610eb060048036036040811015610e6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c06565b6040518082815260200191505060405180910390f35b610ece612c8d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610f5c60048036036040811015610f1057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cb3565b60405180821515815260200191505060405180910390f35b610fb660048036036020811015610f8a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d4d565b005b610ffa60048036036020811015610fce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e70565b005b60185481565b61100a61310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600e8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561116c5780601f106111415761010080835404028352916020019161116c565b820191906000526020600020905b81548152906001019060200180831161114f57829003601f168201915b5050505050905090565b600061118a61118361310f565b8484613117565b6001905092915050565b6000600d54905090565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6111d661310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b815181101561131a576000600760008484815181106112b457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611299565b5050565b600061132b84848461330e565b6113ec8461133761310f565b6113e78560405180606001604052806028815260200161574e60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061139d61310f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137bd9092919063ffffffff16565b613117565b600190509392505050565b6000600c54821115611454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615693602a913960400191505060405180910390fd5b600061145e61387d565b9050611473818461307b90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561152457506114f4612326565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b61153461310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6115fd816138a8565b50565b60006116a961160d61310f565b846116a4856006600061161e61310f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b613117565b6001905092915050565b60115481565b60006116c361310f565b9050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806157e8602c913960400191505060405180910390fd5b600061177383613bf2565b505050505090506117cc81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061182481600c546130c590919063ffffffff16565b600c8190555061183f83600d54613b6a90919063ffffffff16565b600d81905550505050565b61185261310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61197561310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8151811015611ab957600160076000848481518110611a5357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611a38565b5050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611aeb61310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611bb481613c4e565b50565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611c1561310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b611d2761310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611df8611df2612326565b82613ea0565b50565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e9657600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611ee1565b611ede600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113f7565b90505b919050565b611eee61310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61207461310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612134576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612160601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613ea0565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156121ca57600080fd5b505af11580156121de573d6000803e3d6000fd5b5050505050565b60155481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61224961310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61235761310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612417576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124b95780601f1061248e576101008083540402835291602001916124b9565b820191906000526020600020905b81548152906001019060200180831161249c57829003601f168201915b5050505050905090565b60005b82518110156124fa576124ec8382815181106124de57fe5b6020026020010151836128ce565b5080806001019150506124c6565b505050565b61250761310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b60006126a76125f161310f565b846126a285604051806060016040528060258152602001615837602591396006600061261b61310f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137bd9092919063ffffffff16565b613117565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806158146023913960400191505060405180910390fd5b60025442116127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006128e26128db61310f565b848461330e565b6001905092915050565b6000600254905090565b601060019054906101000a900460ff1681565b601960009054906101000a900460ff1681565b61292461310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612a0c60646129fe83600b546140f990919063ffffffff16565b61307b90919063ffffffff16565b60158190555050565b612a1d61310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612add576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015612d455750612d15612326565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b612d5561310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612e7861310f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156bd6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006130bd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061417f565b905092915050565b600061310783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506137bd565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561319d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806157c46024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613223576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156e36022913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061579f6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561341a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061564b6023913960400191505060405180910390fd5b60008111613473576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806157766029913960400191505060405180910390fd5b61347b612326565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156134e957506134b9612326565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561354a57601554811115613549576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806157056028913960400191505060405180910390fd5b5b601060019054906101000a900460ff16801561356b575061356a83614245565b5b1561357557600080fd5b601960009054906101000a900460ff1680156135945750600560185411155b156135ff576135a38383611492565b156135fe5742601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016018600082825401925050819055505b5b6136098383612cb3565b801561365557506000601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b80156136a4575042601b54601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540110155b156136fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061566e6025913960400191505060405180910390fd5b600060019050600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137a15750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137ab57600090505b6137b78484848461429b565b50505050565b600083831115829061386a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561382f578082015181840152602081019050613814565b50505050905090810190601f16801561385c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600061388a6145ac565b915091506138a1818361307b90919063ffffffff16565b9250505090565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600a80549050811015613b66578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061399b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613b5957600a6001600a8054905003815481106139f757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110613a2f57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a805480613b1f57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055613b66565b808060010191505061396a565b5050565b600080828401905083811015613be8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613c098a61483d565b9250925092506000806000613c278d8686613c2261387d565b614897565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115613de257613d9e600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113f7565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000613eaa61387d565b9050600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613f9857613f5082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614040565b613ffc613fae82846140f990919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8273ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b60008083141561410c5760009050614179565b600082840290508284828161411d57fe5b0414614174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061572d6021913960400191505060405180910390fd5b809150505b92915050565b6000808311829061422b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156141f05780820151818401526020810190506141d5565b50505050905090810190601f16801561421d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161423757fe5b049050809150509392505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b806142a9576142a8614920565b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561434c5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156143615761435c848484614963565b614598565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156144045750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561441957614414848484614bc3565b614597565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156144bd5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156144d2576144cd848484614e23565b614596565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156145745750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561458957614584848484614fee565b614595565b614594848484614e23565b5b5b5b5b806145a6576145a56152e3565b5b50505050565b6000806000600c5490506000600b54905060005b600a80549050811015614800578260046000600a84815481106145df57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806146c657508160056000600a848154811061465e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156146dd57600c54600b5494509450505050614839565b61476660046000600a84815481106146f157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846130c590919063ffffffff16565b92506147f160056000600a848154811061477c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836130c590919063ffffffff16565b915080806001019150506145c0565b50614818600b54600c5461307b90919063ffffffff16565b82101561483057600c54600b54935093505050614839565b81819350935050505b9091565b60008060008061484c856152f7565b9050600061485986615328565b9050600061488282614874858a6130c590919063ffffffff16565b6130c590919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806148b085896140f990919063ffffffff16565b905060006148c786896140f990919063ffffffff16565b905060006148de87896140f990919063ffffffff16565b90506000614907826148f985876130c590919063ffffffff16565b6130c590919063ffffffff16565b9050838184965096509650505050509450945094915050565b600060115414801561493457506000601354145b1561493e57614961565b601154601281905550601354601481905550600060118190555060006013819055505b565b60008060008060008061497587613bf2565b9550955095509550955095506149d387600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a6886600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614afd85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b4981615359565b614b538483615610565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614bd587613bf2565b955095509550955095509550614c3386600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614cc883600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d5d85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614da981615359565b614db38483615610565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614e3587613bf2565b955095509550955095509550614e9386600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f2885600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f7481615359565b614f7e8483615610565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061500087613bf2565b95509550955095509550955061505e87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150f386600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061518883600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061521d85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061526981615359565b6152738483615610565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601254601181905550601454601381905550565b60006153216064615313601154856140f990919063ffffffff16565b61307b90919063ffffffff16565b9050919050565b60006153526064615344601354856140f990919063ffffffff16565b61307b90919063ffffffff16565b9050919050565b60008114806153b65750600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156153c05761560d565b60006153ca61387d565b905060006153e182846140f990919063ffffffff16565b90506154578160046000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b60046000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060096000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561560a576155a48360056000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6a90919063ffffffff16565b60056000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505b50565b61562582600c546130c590919063ffffffff16565b600c8190555061564081600d54613b6a90919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373547279696e6720746f2073656c6c206265666f726520636f6f6c646f776e20706173736564416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122023f6fc79aa3883c1a53131792908ad0460de17e51c41cc4a8fd16e85e73f75e064736f6c634300060c0033
Deployed Bytecode Sourcemap
26136:17379:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27393:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42453:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28460:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29372:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30493:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27304:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28737:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32595:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29541:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30973:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28646:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33437:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31808:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29862:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27046:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30588:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42208:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32406:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27352:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31240:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42073:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40778:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27133:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43022:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28840:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16731:148;;;:::i;:::-;;42870:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27254:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30365:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33879:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16088:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42563:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28551:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32895:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33781:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30088:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17741:293;;;:::i;:::-;;29046:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17286:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27001:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27439:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42696:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17451:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29221:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26264:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33609:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42331:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17034:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27393:39;;;;:::o;42453:98::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42537:6:::1;42527:7;:16;;;;42453:98:::0;:::o;28460:83::-;28497:13;28530:5;28523:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28460:83;:::o;29372:161::-;29447:4;29464:39;29473:12;:10;:12::i;:::-;29487:7;29496:6;29464:8;:39::i;:::-;29521:4;29514:11;;29372:161;;;;:::o;30493:87::-;30535:7;30562:10;;30555:17;;30493:87;:::o;27304:41::-;;;;;;;;;;;;;:::o;28737:95::-;28790:7;28817;;28810:14;;28737:95;:::o;32595:191::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32685:9:::1;32680:102;32704:9;:16;32700:1;:20;32680:102;;;32768:5;32742:9;:23;32752:9;32762:1;32752:12;;;;;;;;;;;;;;32742:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32722:3;;;;;;;32680:102;;;;32595:191:::0;:::o;29541:313::-;29639:4;29656:36;29666:6;29674:9;29685:6;29656:9;:36::i;:::-;29703:121;29712:6;29720:12;:10;:12::i;:::-;29734:89;29772:6;29734:89;;;;;;;;;;;;;;;;;:11;:19;29746:6;29734:19;;;;;;;;;;;;;;;:33;29754:12;:10;:12::i;:::-;29734:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29703:8;:121::i;:::-;29842:4;29835:11;;29541:313;;;;;:::o;30973:253::-;31039:7;31078;;31067;:18;;31059:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31143:19;31166:10;:8;:10::i;:::-;31143:33;;31194:24;31206:11;31194:7;:11;;:24;;;;:::i;:::-;31187:31;;;30973:253;;;:::o;28646:83::-;28687:5;28712:9;;;;;;;;;;;28705:16;;28646:83;:::o;33437:159::-;33518:4;33551:13;;;;;;;;;;;33541:23;;:6;:23;;;:47;;;;;33581:7;:5;:7::i;:::-;33568:20;;:9;:20;;;;33541:47;33534:54;;33437:159;;;;:::o;31808:107::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31882:25:::1;31899:7;31882:16;:25::i;:::-;31808:107:::0;:::o;29862:218::-;29950:4;29967:83;29976:12;:10;:12::i;:::-;29990:7;29999:50;30038:10;29999:11;:25;30011:12;:10;:12::i;:::-;29999:25;;;;;;;;;;;;;;;:34;30025:7;29999:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29967:8;:83::i;:::-;30068:4;30061:11;;29862:218;;;;:::o;27046:26::-;;;;:::o;30588:377::-;30640:14;30657:12;:10;:12::i;:::-;30640:29;;30689:11;:19;30701:6;30689:19;;;;;;;;;;;;;;;;;;;;;;;;;30688:20;30680:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30769:15;30793:19;30804:7;30793:10;:19::i;:::-;30768:44;;;;;;;30841:28;30861:7;30841;:15;30849:6;30841:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30823:7;:15;30831:6;30823:15;;;;;;;;;;;;;;;:46;;;;30890:20;30902:7;30890;;:11;;:20;;;;:::i;:::-;30880:7;:30;;;;30934:23;30949:7;30934:10;;:14;;:23;;;;:::i;:::-;30921:10;:36;;;;30588:377;;;:::o;42208:111::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42307:4:::1;42277:18;:27;42296:7;42277:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;42208:111:::0;:::o;32406:184::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32493:9:::1;32488:98;32512:9;:16;32508:1;:20;32488:98;;;32573:4;32547:9;:23;32557:9;32567:1;32557:12;;;;;;;;;;;;;;32547:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;32530:3;;;;;;;32488:98;;;;32406:184:::0;:::o;27352:28::-;;;;;;;;;;;;;:::o;31240:111::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31316:27:::1;31335:7;31316:18;:27::i;:::-;31240:111:::0;:::o;42073:123::-;42137:4;42161:18;:27;42180:7;42161:27;;;;;;;;;;;;;;;;;;;;;;;;;42154:34;;42073:123;;;:::o;40778:103::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40861:12:::1;40850:8;;:23;;;;;;;;;;;;;;;;;;40778:103:::0;:::o;27133:32::-;;;;:::o;43022:107::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43093:28:::1;43099:7;:5;:7::i;:::-;43108:12;43093:5;:28::i;:::-;43022:107:::0;:::o;28840:198::-;28906:7;28930:11;:20;28942:7;28930:20;;;;;;;;;;;;;;;;;;;;;;;;;28926:49;;;28959:7;:16;28967:7;28959:16;;;;;;;;;;;;;;;;28952:23;;;;28926:49;28993:37;29013:7;:16;29021:7;29013:16;;;;;;;;;;;;;;;;28993:19;:37::i;:::-;28986:44;;28840:198;;;;:::o;16731:148::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16838:1:::1;16801:40;;16822:6;::::0;::::1;;;;;;;;16801:40;;;;;;;;;;;;16869:1;16852:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16731:148::o:0;42870:142::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42929:28:::1;42935:13;;;;;;;;;;;42950:6;42929:5;:28::i;:::-;42983:13;;;;;;;;;;;42968:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42870:142:::0;:::o;27254:37::-;;;;:::o;30365:120::-;30433:4;30457:11;:20;30469:7;30457:20;;;;;;;;;;;;;;;;;;;;;;;;;30450:27;;30365:120;;;:::o;33879:96::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33962:5:::1;33946:13;;:21;;;;;;;;;;;;;;;;;;33879:96:::0;:::o;16088:79::-;16126:7;16153:6;;;;;;;;;;;16146:13;;16088:79;:::o;42563:122::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42665:12:::1;42649:13;:28;;;;42563:122:::0;:::o;28551:87::-;28590:13;28623:7;28616:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28551:87;:::o;32895:184::-;32982:9;32977:98;33001:9;:16;32997:1;:20;32977:98;;;33036:30;33045:9;33055:1;33045:12;;;;;;;;;;;;;;33059:6;33036:8;:30::i;:::-;;33019:3;;;;;;;32977:98;;;;32895:184;;:::o;33781:86::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33854:5:::1;33843:8;;:16;;;;;;;;;;;;;;;;;;33781:86:::0;:::o;30088:269::-;30181:4;30198:129;30207:12;:10;:12::i;:::-;30221:7;30230:96;30269:15;30230:96;;;;;;;;;;;;;;;;;:11;:25;30242:12;:10;:12::i;:::-;30230:25;;;;;;;;;;;;;;;:34;30256:7;30230:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;30198:8;:129::i;:::-;30345:4;30338:11;;30088:269;;;;:::o;17741:293::-;17811:10;17793:28;;:14;;;;;;;;;;;:28;;;17785:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17886:9;;17880:3;:15;17872:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17977:14;;;;;;;;;;;17948:44;;17969:6;;;;;;;;;;17948:44;;;;;;;;;;;;18012:14;;;;;;;;;;;18003:6;;:23;;;;;;;;;;;;;;;;;;17741:293::o;29046:167::-;29124:4;29141:42;29151:12;:10;:12::i;:::-;29165:9;29176:6;29141:9;:42::i;:::-;29201:4;29194:11;;29046:167;;;;:::o;17286:89::-;17331:7;17358:9;;17351:16;;17286:89;:::o;27001:32::-;;;;;;;;;;;;;:::o;27439:27::-;;;;;;;;;;;;;:::o;42696:162::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42790:60:::1;42834:5;42790:25;42802:12;42790:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;42775:12;:75;;;;42696:162:::0;:::o;17451:214::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17532:6:::1;::::0;::::1;;;;;;;;17515:14;;:23;;;;;;;;;;;;;;;;;;17566:1;17549:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17597:4;17591:3;:10;17579:9;:22;;;;17654:1;17617:40;;17638:6;::::0;::::1;;;;;;;;17617:40;;;;;;;;;;;;17451:214:::0;:::o;29221:143::-;29302:7;29329:11;:18;29341:5;29329:18;;;;;;;;;;;;;;;:27;29348:7;29329:27;;;;;;;;;;;;;;;;29322:34;;29221:143;;;;:::o;26264:36::-;;;;;;;;;;;;;:::o;33609:160::-;33691:4;33727:13;;;;;;;;;;;33714:26;;:9;:26;;;:47;;;;;33754:7;:5;:7::i;:::-;33744:17;;:6;:17;;;;33714:47;33707:54;;33609:160;;;;:::o;42331:110::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42428:5:::1;42398:18;:27;42417:7;42398:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;42331:110:::0;:::o;17034:244::-;16310:12;:10;:12::i;:::-;16300:22;;:6;;;;;;;;;;:22;;;16292:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17143:1:::1;17123:22;;:8;:22;;;;17115:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17233:8;17204:38;;17225:6;::::0;::::1;;;;;;;;17204:38;;;;;;;;;;;;17262:8;17253:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17034:244:::0;:::o;6693:132::-;6751:7;6778:39;6782:1;6785;6778:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6771:46;;6693:132;;;;:::o;4856:136::-;4914:7;4941:43;4945:1;4948;4941:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4934:50;;4856:136;;;;:::o;476:106::-;529:15;564:10;557:17;;476:106;:::o;33087:337::-;33197:1;33180:19;;:5;:19;;;;33172:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33278:1;33259:21;;:7;:21;;;;33251:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33362:6;33332:11;:18;33344:5;33332:18;;;;;;;;;;;;;;;:27;33351:7;33332:27;;;;;;;;;;;;;;;:36;;;;33400:7;33384:32;;33393:5;33384:32;;;33409:6;33384:32;;;;;;;;;;;;;;;;;;33087:337;;;:::o;33987:1439::-;34125:1;34109:18;;:4;:18;;;;34101:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34202:1;34188:16;;:2;:16;;;;34180:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34272:1;34263:6;:10;34255:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34341:7;:5;:7::i;:::-;34333:15;;:4;:15;;;;:32;;;;;34358:7;:5;:7::i;:::-;34352:13;;:2;:13;;;;34333:32;34330:139;;;34400:12;;34390:6;:22;;34382:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34330:139;34493:13;;;;;;;;;;;:36;;;;;34510:19;34524:4;34510:13;:19::i;:::-;34493:36;34489:77;;;34546:8;;;34489:77;34588:8;;;;;;;;;;;:41;;;;;34628:1;34600:24;;:29;;34588:41;34585:205;;;34650:26;34667:4;34673:2;34650:16;:26::i;:::-;34646:133;;;34713:3;34696:10;:14;34707:2;34696:14;;;;;;;;;;;;;;;:20;;;;34762:1;34735:24;;:28;;;;;;;;;;;34646:133;34585:205;34813:27;34831:4;34837:2;34813:17;:27::i;:::-;:52;;;;;34864:1;34844:10;:16;34855:4;34844:16;;;;;;;;;;;;;;;;:21;;34813:52;:94;;;;;34904:3;34888:12;;34869:10;:16;34880:4;34869:16;;;;;;;;;;;;;;;;:31;:38;;34813:94;34810:173;;;34924:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34810:173;35064:12;35079:4;35064:19;;35191:18;:24;35210:4;35191:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;35219:18;:22;35238:2;35219:22;;;;;;;;;;;;;;;;;;;;;;;;;35191:50;35188:96;;;35267:5;35257:15;;35188:96;35370:38;35385:4;35390:2;35393:6;35400:7;35370:14;:38::i;:::-;33987:1439;;;;:::o;5295:192::-;5381:7;5414:1;5409;:6;;5417:12;5401:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5441:9;5457:1;5453;:5;5441:17;;5478:1;5471:8;;;5295:192;;;;;:::o;40034:163::-;40075:7;40096:15;40113;40132:19;:17;:19::i;:::-;40095:56;;;;40169:20;40181:7;40169;:11;;:20;;;;:::i;:::-;40162:27;;;;40034:163;:::o;31927:467::-;31997:11;:20;32009:7;31997:20;;;;;;;;;;;;;;;;;;;;;;;;;31989:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32065:9;32060:327;32084:9;:16;;;;32080:1;:20;32060:327;;;32142:7;32126:23;;:9;32136:1;32126:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;32122:254;;;32185:9;32214:1;32195:9;:16;;;;:20;32185:31;;;;;;;;;;;;;;;;;;;;;;;;;32170:9;32180:1;32170:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32254:1;32235:7;:16;32243:7;32235:16;;;;;;;;;;;;;;;:20;;;;32297:5;32274:11;:20;32286:7;32274:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32321:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32355:5;;32122:254;32102:3;;;;;;;32060:327;;;;31927:467;:::o;4392:181::-;4450:7;4470:9;4486:1;4482;:5;4470:17;;4511:1;4506;:6;;4498:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4564:1;4557:8;;;4392:181;;;;:::o;38832:419::-;38891:7;38900;38909;38918;38927;38936;38957:23;38982:12;38996:18;39018:20;39030:7;39018:11;:20::i;:::-;38956:82;;;;;;39050:15;39067:23;39092:12;39108:50;39120:7;39129:4;39135:10;39147;:8;:10::i;:::-;39108:11;:50::i;:::-;39049:109;;;;;;39177:7;39186:15;39203:4;39209:15;39226:4;39232:10;39169:74;;;;;;;;;;;;;;;;;;38832:419;;;;;;;:::o;31363:437::-;31550:11;:20;31562:7;31550:20;;;;;;;;;;;;;;;;;;;;;;;;;31549:21;31541:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31635:1;31616:7;:16;31624:7;31616:16;;;;;;;;;;;;;;;;:20;31613:108;;;31672:37;31692:7;:16;31700:7;31692:16;;;;;;;;;;;;;;;;31672:19;:37::i;:::-;31653:7;:16;31661:7;31653:16;;;;;;;;;;;;;;;:56;;;;31613:108;31754:4;31731:11;:20;31743:7;31731:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31769:9;31784:7;31769:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31363:437;:::o;43141:371::-;43206:12;43221:10;:8;:10::i;:::-;43206:25;;43248:11;:17;43260:4;43248:17;;;;;;;;;;;;;;;;;;;;;;;;;43244:175;;;43298:25;43316:6;43298:7;:13;43306:4;43298:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;43282:7;:13;43290:4;43282:13;;;;;;;;;;;;;;;:41;;;;43244:175;;;43372:35;43390:16;43401:4;43390:6;:10;;:16;;;;:::i;:::-;43372:7;:13;43380:4;43372:13;;;;;;;;;;;;;;;;:17;;:35;;;;:::i;:::-;43356:7;:13;43364:4;43356:13;;;;;;;;;;;;;;;:51;;;;43244:175;43441:4;43436:18;;;43447:6;43436:18;;;;;;;;;;;;;;;;;;43493:1;43470:34;;43479:4;43470:34;;;43497:6;43470:34;;;;;;;;;;;;;;;;;;43141:371;;;:::o;5746:471::-;5804:7;6054:1;6049;:6;6045:47;;;6079:1;6072:8;;;;6045:47;6104:9;6120:1;6116;:5;6104:17;;6149:1;6144;6140;:5;;;;;;:10;6132:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6208:1;6201:8;;;5746:471;;;;;:::o;7321:278::-;7407:7;7439:1;7435;:5;7442:12;7427:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7466:9;7482:1;7478;:5;;;;;;7466:17;;7590:1;7583:8;;;7321:278;;;;;:::o;32791:95::-;32848:4;32869:9;:12;32879:1;32869:12;;;;;;;;;;;;;;;;;;;;;;;;;32862:19;;32791:95;;;:::o;35507:834::-;35618:7;35614:40;;35640:14;:12;:14::i;:::-;35614:40;35679:11;:19;35691:6;35679:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;35703:11;:22;35715:9;35703:22;;;;;;;;;;;;;;;;;;;;;;;;;35702:23;35679:46;35675:597;;;35742:48;35764:6;35772:9;35783:6;35742:21;:48::i;:::-;35675:597;;;35813:11;:19;35825:6;35813:19;;;;;;;;;;;;;;;;;;;;;;;;;35812:20;:46;;;;;35836:11;:22;35848:9;35836:22;;;;;;;;;;;;;;;;;;;;;;;;;35812:46;35808:464;;;35875:46;35895:6;35903:9;35914:6;35875:19;:46::i;:::-;35808:464;;;35944:11;:19;35956:6;35944:19;;;;;;;;;;;;;;;;;;;;;;;;;35943:20;:47;;;;;35968:11;:22;35980:9;35968:22;;;;;;;;;;;;;;;;;;;;;;;;;35967:23;35943:47;35939:333;;;36007:44;36025:6;36033:9;36044:6;36007:17;:44::i;:::-;35939:333;;;36073:11;:19;36085:6;36073:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;36096:11;:22;36108:9;36096:22;;;;;;;;;;;;;;;;;;;;;;;;;36073:45;36069:203;;;36135:48;36157:6;36165:9;36176:6;36135:21;:48::i;:::-;36069:203;;;36216:44;36234:6;36242:9;36253:6;36216:17;:44::i;:::-;36069:203;35939:333;35808:464;35675:597;36296:7;36292:41;;36318:15;:13;:15::i;:::-;36292:41;35507:834;;;;:::o;40205:561::-;40255:7;40264;40284:15;40302:7;;40284:25;;40320:15;40338:7;;40320:25;;40367:9;40362:289;40386:9;:16;;;;40382:1;:20;40362:289;;;40452:7;40428;:21;40436:9;40446:1;40436:12;;;;;;;;;;;;;;;;;;;;;;;;;40428:21;;;;;;;;;;;;;;;;:31;:66;;;;40487:7;40463;:21;40471:9;40481:1;40471:12;;;;;;;;;;;;;;;;;;;;;;;;;40463:21;;;;;;;;;;;;;;;;:31;40428:66;40424:97;;;40504:7;;40513;;40496:25;;;;;;;;;40424:97;40546:34;40558:7;:21;40566:9;40576:1;40566:12;;;;;;;;;;;;;;;;;;;;;;;;;40558:21;;;;;;;;;;;;;;;;40546:7;:11;;:34;;;;:::i;:::-;40536:44;;40605:34;40617:7;:21;40625:9;40635:1;40625:12;;;;;;;;;;;;;;;;;;;;;;;;;40617:21;;;;;;;;;;;;;;;;40605:7;:11;;:34;;;;:::i;:::-;40595:44;;40404:3;;;;;;;40362:289;;;;40675:20;40687:7;;40675;;:11;;:20;;;;:::i;:::-;40665:7;:30;40661:61;;;40705:7;;40714;;40697:25;;;;;;;;40661:61;40741:7;40750;40733:25;;;;;;40205:561;;;:::o;39259:330::-;39319:7;39328;39337;39357:12;39372:24;39388:7;39372:15;:24::i;:::-;39357:39;;39407:18;39428:30;39450:7;39428:21;:30::i;:::-;39407:51;;39469:23;39495:33;39517:10;39495:17;39507:4;39495:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;39469:59;;39547:15;39564:4;39570:10;39539:42;;;;;;;;;39259:330;;;;;:::o;39597:429::-;39712:7;39721;39730;39750:15;39768:24;39780:11;39768:7;:11;;:24;;;;:::i;:::-;39750:42;;39803:12;39818:21;39827:11;39818:4;:8;;:21;;;;:::i;:::-;39803:36;;39850:18;39871:27;39886:11;39871:10;:14;;:27;;;;:::i;:::-;39850:48;;39909:23;39935:33;39957:10;39935:17;39947:4;39935:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;39909:59;;39987:7;39996:15;40013:4;39979:39;;;;;;;;;;39597:429;;;;;;;;:::o;41674:250::-;41731:1;41720:7;;:12;:34;;;;;41753:1;41736:13;;:18;41720:34;41717:46;;;41756:7;;41717:46;41801:7;;41783:15;:25;;;;41843:13;;41819:21;:37;;;;41887:1;41877:7;:11;;;;41915:1;41899:13;:17;;;;41674:250;:::o;37453:566::-;37556:15;37573:23;37598:12;37612:23;37637:12;37651:18;37673:19;37684:7;37673:10;:19::i;:::-;37555:137;;;;;;;;;;;;37721:28;37741:7;37721;:15;37729:6;37721:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37703:7;:15;37711:6;37703:15;;;;;;;;;;;;;;;:46;;;;37778:28;37798:7;37778;:15;37786:6;37778:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37760:7;:15;37768:6;37760:15;;;;;;;;;;;;;;;:46;;;;37838:39;37861:15;37838:7;:18;37846:9;37838:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37817:7;:18;37825:9;37817:18;;;;;;;;;;;;;;;:60;;;;37891:26;37906:10;37891:14;:26::i;:::-;37928:23;37940:4;37946;37928:11;:23::i;:::-;37984:9;37967:44;;37976:6;37967:44;;;37995:15;37967:44;;;;;;;;;;;;;;;;;;37453:566;;;;;;;;;:::o;36859:586::-;36960:15;36977:23;37002:12;37016:23;37041:12;37055:18;37077:19;37088:7;37077:10;:19::i;:::-;36959:137;;;;;;;;;;;;37125:28;37145:7;37125;:15;37133:6;37125:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37107:7;:15;37115:6;37107:15;;;;;;;;;;;;;;;:46;;;;37185:39;37208:15;37185:7;:18;37193:9;37185:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37164:7;:18;37172:9;37164:18;;;;;;;;;;;;;;;:60;;;;37256:39;37279:15;37256:7;:18;37264:9;37256:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37235:7;:18;37243:9;37235:18;;;;;;;;;;;;;;;:60;;;;37317:26;37332:10;37317:14;:26::i;:::-;37354:23;37366:4;37372;37354:11;:23::i;:::-;37410:9;37393:44;;37402:6;37393:44;;;37421:15;37393:44;;;;;;;;;;;;;;;;;;36859:586;;;;;;;;;:::o;36349:502::-;36448:15;36465:23;36490:12;36504:23;36529:12;36543:18;36565:19;36576:7;36565:10;:19::i;:::-;36447:137;;;;;;;;;;;;36613:28;36633:7;36613;:15;36621:6;36613:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36595:7;:15;36603:6;36595:15;;;;;;;;;;;;;;;:46;;;;36673:39;36696:15;36673:7;:18;36681:9;36673:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36652:7;:18;36660:9;36652:18;;;;;;;;;;;;;;;:60;;;;36723:26;36738:10;36723:14;:26::i;:::-;36760:23;36772:4;36778;36760:11;:23::i;:::-;36816:9;36799:44;;36808:6;36799:44;;;36827:15;36799:44;;;;;;;;;;;;;;;;;;36349:502;;;;;;;;;:::o;38027:642::-;38130:15;38147:23;38172:12;38186:23;38211:12;38225:18;38247:19;38258:7;38247:10;:19::i;:::-;38129:137;;;;;;;;;;;;38295:28;38315:7;38295;:15;38303:6;38295:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38277:7;:15;38285:6;38277:15;;;;;;;;;;;;;;;:46;;;;38352:28;38372:7;38352;:15;38360:6;38352:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38334:7;:15;38342:6;38334:15;;;;;;;;;;;;;;;:46;;;;38412:39;38435:15;38412:7;:18;38420:9;38412:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;38391:7;:18;38399:9;38391:18;;;;;;;;;;;;;;;:60;;;;38483:39;38506:15;38483:7;:18;38491:9;38483:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;38462:7;:18;38470:9;38462:18;;;;;;;;;;;;;;;:60;;;;38541:26;38556:10;38541:14;:26::i;:::-;38578:23;38590:4;38596;38578:11;:23::i;:::-;38634:9;38617:44;;38626:6;38617:44;;;38645:15;38617:44;;;;;;;;;;;;;;;;;;38027:642;;;;;;;;;:::o;41936:125::-;41990:15;;41980:7;:25;;;;42032:21;;42016:13;:37;;;;41936:125::o;41334:154::-;41398:7;41425:55;41464:5;41425:20;41437:7;;41425;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;41418:62;;41334:154;;;:::o;41496:166::-;41566:7;41593:61;41638:5;41593:26;41605:13;;41593:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;41586:68;;41496:166;;;:::o;40893:429::-;40974:1;40960:10;:15;:40;;;;40998:1;40978:22;;:8;;;;;;;;;;;:22;;;40960:40;40956:79;;;41017:7;;40956:79;41055:19;41078:10;:8;:10::i;:::-;41055:33;;41099:18;41120:27;41135:11;41120:10;:14;;:27;;;;:::i;:::-;41099:48;;41178:33;41200:10;41178:7;:17;41186:8;;;;;;;;;;;41178:17;;;;;;;;;;;;;;;;:21;;:33;;;;:::i;:::-;41158:7;:17;41166:8;;;;;;;;;;;41158:17;;;;;;;;;;;;;;;:53;;;;41225:11;:21;41237:8;;;;;;;;;;;41225:21;;;;;;;;;;;;;;;;;;;;;;;;;41222:92;;;41281:33;41303:10;41281:7;:17;41289:8;;;;;;;;;;;41281:17;;;;;;;;;;;;;;;;:21;;:33;;;;:::i;:::-;41261:7;:17;41269:8;;;;;;;;;;;41261:17;;;;;;;;;;;;;;;:53;;;;41222:92;40893:429;;;;:::o;38677:147::-;38755:17;38767:4;38755:7;;:11;;:17;;;;:::i;:::-;38745:7;:27;;;;38796:20;38811:4;38796:10;;:14;;:20;;;;:::i;:::-;38783:10;:33;;;;38677:147;;:::o
Swarm Source
ipfs://23f6fc79aa3883c1a53131792908ad0460de17e51c41cc4a8fd16e85e73f75e0
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.