Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000,000 HOPE
Holders
17
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
929,999,999.070000027 HOPEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Hope
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-21 */ /** Some people want things to happen, some people expect things to happen, others make them happen. Be the one who makes things happen,don't just want and hope */ pragma solidity ^0.8.3; // SPDX-License-Identifier: Unlicensed /** * @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); } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev 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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { 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. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { _owner = _msgSender(); emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // contract implementation contract Hope is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; uint8 private _decimals = 9; string private _name = "Hope"; string private _symbol = "HOPE"; uint256 private _tTotal = 100 * 10**9 * 10**uint256(_decimals); uint256 public defaultTaxFee = 0; uint256 public _taxFee = defaultTaxFee; uint256 private _previousTaxFee = _taxFee; uint256 public defaultMarketingFee = 7; uint256 public _marketingFee = defaultMarketingFee; uint256 private _previousMarketingFee = _marketingFee; uint256 public _marketingFee4Sellers = 7; bool public feesOnSellersAndBuyers = true; uint256 public _maxTxAmount = _tTotal.div(1).div(100); uint256 public numTokensToExchangeForMarketing = _tTotal.div(100).div(100); address payable public marketingWallet = payable(0x5b4F09Df66c57ec4C06D1E01bE294CCCD9Fd9bdC); mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tFeeTotal; uint256 private _rTotal = (MAX - (MAX % _tTotal)); IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndSend; bool public SwapAndSendEnabled = true; event SwapAndSendEnabledUpdated(bool enabled); modifier lockTheSwap { inSwapAndSend = true; _; inSwapAndSend = false; } constructor () { _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; 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 reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(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() { 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 excludeFromFee(address account) public onlyOwner() { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner() { _isExcludedFromFee[account] = false; } function removeAllFee() private { if(_taxFee == 0 && _marketingFee == 0) return; _previousTaxFee = _taxFee; _previousMarketingFee = _marketingFee; _taxFee = 0; _marketingFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _marketingFee = _previousMarketingFee; } //to recieve ETH receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tMarketing, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketing); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing); return (tTransferAmount, tFee, tMarketing); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rMarketing = tMarketing.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rMarketing); 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 _takeMarketing(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div( 10**2 ); } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + send lock? // also, don't get caught in a circular sending event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensToExchangeForMarketing; if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } if ( overMinTokenBalance && !inSwapAndSend && from != uniswapV2Pair && SwapAndSendEnabled ) { SwapAndSend(contractTokenBalance); } if(feesOnSellersAndBuyers) { setFees(to); } //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; } _tokenTransfer(from,to,amount,takeFee); } function setFees(address recipient) private { _taxFee = defaultTaxFee; _marketingFee = defaultMarketingFee; if (recipient == uniswapV2Pair) { // sell _marketingFee = _marketingFee4Sellers; } } function SwapAndSend(uint256 contractTokenBalance) private lockTheSwap { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), contractTokenBalance); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( contractTokenBalance, 0, // accept any amount of ETH path, address(this), block.timestamp ); uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { marketingWallet.transfer(contractETHBalance); } } //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 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _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 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _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 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _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 tMarketing) = _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); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function setDefaultMarketingFee(uint256 marketingFee) external onlyOwner() { defaultMarketingFee = marketingFee; } function setMarketingFee4Sellers(uint256 marketingFee4Sellers) external onlyOwner() { _marketingFee4Sellers = marketingFee4Sellers; } function setFeesOnSellersAndBuyers(bool _enabled) public onlyOwner() { feesOnSellersAndBuyers = _enabled; } function setSwapAndSendEnabled(bool _enabled) public onlyOwner() { SwapAndSendEnabled = _enabled; emit SwapAndSendEnabledUpdated(_enabled); } function setnumTokensToExchangeForMarketing(uint256 _numTokensToExchangeForMarketing) public onlyOwner() { numTokensToExchangeForMarketing = _numTokensToExchangeForMarketing; } function _setMarketingWallet(address payable wallet) external onlyOwner() { marketingWallet = wallet; } function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndSendEnabledUpdated","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":"SwapAndSendEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee4Sellers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"_setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"feesOnSellersAndBuyers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensToExchangeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setDefaultMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnSellersAndBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee4Sellers","type":"uint256"}],"name":"setMarketingFee4Sellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensToExchangeForMarketing","type":"uint256"}],"name":"setnumTokensToExchangeForMarketing","outputs":[],"stateMutability":"nonpayable","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526009600060146101000a81548160ff021916908360ff1602179055506040518060400160405280600481526020017f486f7065000000000000000000000000000000000000000000000000000000008152506001908162000066919062000941565b506040518060400160405280600481526020017f484f50450000000000000000000000000000000000000000000000000000000081525060029081620000ad919062000941565b50600060149054906101000a900460ff1660ff16600a620000cf919062000bab565b64174876e800620000e1919062000bfc565b6003556000600455600454600555600554600655600780556007546008556008546009556007600a556001600b60006101000a81548160ff0219169083151502179055506200015c60646200014860016003546200067e60201b620020841790919060201c565b6200067e60201b620020841790919060201c565b600c556200019660646200018260646003546200067e60201b620020841790919060201c565b6200067e60201b620020841790919060201c565b600d55735b4f09df66c57ec4c06d1e01be294cccd9fd9bdc600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035460001962000200919062000c8c565b6000196200020f919062000cc4565b6016556001601760016101000a81548160ff0219169083151502179055503480156200023a57600080fd5b506200024b6200069660201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3601654600f60006200031c6200069660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e5919062000d69565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200044d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000473919062000d69565b6040518363ffffffff1660e01b81526004016200049292919062000dac565b6020604051808303816000875af1158015620004b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d8919062000d69565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160126000620005556200069e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200060e6200069660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6003546040516200066f919062000dea565b60405180910390a35062000e3f565b600081836200068e919062000e07565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200074957607f821691505b6020821081036200075f576200075e62000701565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007c97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200078a565b620007d586836200078a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620008226200081c6200081684620007ed565b620007f7565b620007ed565b9050919050565b6000819050919050565b6200083e8362000801565b620008566200084d8262000829565b84845462000797565b825550505050565b600090565b6200086d6200085e565b6200087a81848462000833565b505050565b5b81811015620008a2576200089660008262000863565b60018101905062000880565b5050565b601f821115620008f157620008bb8162000765565b620008c6846200077a565b81016020851015620008d6578190505b620008ee620008e5856200077a565b8301826200087f565b50505b505050565b600082821c905092915050565b60006200091660001984600802620008f6565b1980831691505092915050565b600062000931838362000903565b9150826002028217905092915050565b6200094c82620006c7565b67ffffffffffffffff811115620009685762000967620006d2565b5b62000974825462000730565b62000981828285620008a6565b600060209050601f831160018114620009b95760008415620009a4578287015190505b620009b0858262000923565b86555062000a20565b601f198416620009c98662000765565b60005b82811015620009f357848901518255600182019150602085019450602081019050620009cc565b8683101562000a13578489015162000a0f601f89168262000903565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000ab65780860481111562000a8e5762000a8d62000a28565b5b600185161562000a9e5780820291505b808102905062000aae8562000a57565b945062000a6e565b94509492505050565b60008262000ad1576001905062000ba4565b8162000ae1576000905062000ba4565b816001811462000afa576002811462000b055762000b3b565b600191505062000ba4565b60ff84111562000b1a5762000b1962000a28565b5b8360020a91508482111562000b345762000b3362000a28565b5b5062000ba4565b5060208310610133831016604e8410600b841016171562000b755782820a90508381111562000b6f5762000b6e62000a28565b5b62000ba4565b62000b84848484600162000a64565b9250905081840481111562000b9e5762000b9d62000a28565b5b81810290505b9392505050565b600062000bb882620007ed565b915062000bc583620007ed565b925062000bf47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000abf565b905092915050565b600062000c0982620007ed565b915062000c1683620007ed565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c525762000c5162000a28565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c9982620007ed565b915062000ca683620007ed565b92508262000cb95762000cb862000c5d565b5b828206905092915050565b600062000cd182620007ed565b915062000cde83620007ed565b925082820390508181111562000cf95762000cf862000a28565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d318262000d04565b9050919050565b62000d438162000d24565b811462000d4f57600080fd5b50565b60008151905062000d638162000d38565b92915050565b60006020828403121562000d825762000d8162000cff565b5b600062000d928482850162000d52565b91505092915050565b62000da68162000d24565b82525050565b600060408201905062000dc3600083018562000d9b565b62000dd2602083018462000d9b565b9392505050565b62000de481620007ed565b82525050565b600060208201905062000e01600083018462000dd9565b92915050565b600062000e1482620007ed565b915062000e2183620007ed565b92508262000e345762000e3362000c5d565b5b828204905092915050565b60805160a051614c7862000e88600039600081816113b50152818161249601526129e2015260008181610ac50152818161279c0152818161287d01526128a40152614c786000f3fe6080604052600436106102555760003560e01c806370a0823111610139578063a3864430116100b6578063cba851b31161007a578063cba851b3146108fd578063d54994db14610928578063dab522a814610951578063dd62ed3e1461097a578063ea2f0b37146109b7578063f2fde38b146109e05761025c565b8063a386443014610802578063a457c2d71461082d578063a9059cbb1461086a578063bc951f98146108a7578063c537bd8f146108d25761025c565b80638da5cb5b116100fd5780638da5cb5b1461072d57806395d89b41146107585780639f64621414610783578063a062e3ba146107ae578063a08f6760146107d95761025c565b806370a0823114610646578063715018a61461068357806375f0a8741461069a5780637d1db4a5146106c557806388f82020146106f05761025c565b80632d838119116101d2578063437823ec11610196578063437823ec146105265780634549b0391461054f57806349bd5a5e1461058c57806352390c02146105b75780635342acb4146105e057806357e0a1d01461061d5761025c565b80632d8381191461042d578063313ce5671461046a5780633685d4191461049557806339509351146104be5780633b124fe7146104fb5761025c565b80631bbae6e0116102195780631bbae6e01461034a5780631ff53b601461037357806322976e0d1461039c57806323b872dd146103c75780632663236f146104045761025c565b806306fdde0314610261578063095ea7b31461028c57806313114a9d146102c95780631694505e146102f457806318160ddd1461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a09565b6040516102839190613db5565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613e70565b610a9b565b6040516102c09190613ecb565b60405180910390f35b3480156102d557600080fd5b506102de610ab9565b6040516102eb9190613ef5565b60405180910390f35b34801561030057600080fd5b50610309610ac3565b6040516103169190613f6f565b60405180910390f35b34801561032b57600080fd5b50610334610ae7565b6040516103419190613ef5565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190613f8a565b610af1565b005b34801561037f57600080fd5b5061039a60048036038101906103959190613ff5565b610b77565b005b3480156103a857600080fd5b506103b1610c37565b6040516103be9190613ef5565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190614022565b610c3d565b6040516103fb9190613ecb565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906140a1565b610d16565b005b34801561043957600080fd5b50610454600480360381019061044f9190613f8a565b610de6565b6040516104619190613ef5565b60405180910390f35b34801561047657600080fd5b5061047f610e54565b60405161048c91906140ea565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190614105565b610e6a565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190613e70565b61119f565b6040516104f29190613ecb565b60405180910390f35b34801561050757600080fd5b50610510611252565b60405161051d9190613ef5565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190614105565b611258565b005b34801561055b57600080fd5b5061057660048036038101906105719190614132565b61132f565b6040516105839190613ef5565b60405180910390f35b34801561059857600080fd5b506105a16113b3565b6040516105ae9190614181565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190614105565b6113d7565b005b3480156105ec57600080fd5b5061060760048036038101906106029190614105565b611672565b6040516106149190613ecb565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f91906140a1565b6116c8565b005b34801561065257600080fd5b5061066d60048036038101906106689190614105565b611761565b60405161067a9190613ef5565b60405180910390f35b34801561068f57600080fd5b5061069861184c565b005b3480156106a657600080fd5b506106af611986565b6040516106bc91906141ab565b60405180910390f35b3480156106d157600080fd5b506106da6119ac565b6040516106e79190613ef5565b60405180910390f35b3480156106fc57600080fd5b5061071760048036038101906107129190614105565b6119b2565b6040516107249190613ecb565b60405180910390f35b34801561073957600080fd5b50610742611a08565b60405161074f9190614181565b60405180910390f35b34801561076457600080fd5b5061076d611a31565b60405161077a9190613db5565b60405180910390f35b34801561078f57600080fd5b50610798611ac3565b6040516107a59190613ef5565b60405180910390f35b3480156107ba57600080fd5b506107c3611ac9565b6040516107d09190613ecb565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb9190613f8a565b611adc565b005b34801561080e57600080fd5b50610817611b62565b6040516108249190613ef5565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f9190613e70565b611b68565b6040516108619190613ecb565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c9190613e70565b611c35565b60405161089e9190613ecb565b60405180910390f35b3480156108b357600080fd5b506108bc611c53565b6040516108c99190613ef5565b60405180910390f35b3480156108de57600080fd5b506108e7611c59565b6040516108f49190613ecb565b60405180910390f35b34801561090957600080fd5b50610912611c6c565b60405161091f9190613ef5565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190613f8a565b611c72565b005b34801561095d57600080fd5b5061097860048036038101906109739190613f8a565b611cf8565b005b34801561098657600080fd5b506109a1600480360381019061099c91906141c6565b611d7e565b6040516109ae9190613ef5565b60405180910390f35b3480156109c357600080fd5b506109de60048036038101906109d99190614105565b611e05565b005b3480156109ec57600080fd5b50610a076004803603810190610a029190614105565b611edc565b005b606060018054610a1890614235565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4490614235565b8015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b5050505050905090565b6000610aaf610aa861209a565b84846120a2565b6001905092915050565b6000601554905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600354905090565b610af961209a565b73ffffffffffffffffffffffffffffffffffffffff16610b17611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b64906142b2565b60405180910390fd5b80600c8190555050565b610b7f61209a565b73ffffffffffffffffffffffffffffffffffffffff16610b9d611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea906142b2565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000610c4a84848461226b565b610d0b84610c5661209a565b610d0685604051806060016040528060288152602001614bf660289139601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cbc61209a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f09092919063ffffffff16565b6120a2565b600190509392505050565b610d1e61209a565b73ffffffffffffffffffffffffffffffffffffffff16610d3c611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d89906142b2565b60405180910390fd5b80601760016101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610ddb9190613ecb565b60405180910390a150565b6000601654821115610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490614344565b60405180910390fd5b6000610e37612645565b9050610e4c818461208490919063ffffffff16565b915050919050565b60008060149054906101000a900460ff16905090565b610e7261209a565b73ffffffffffffffffffffffffffffffffffffffff16610e90611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd906142b2565b60405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f69906143b0565b60405180910390fd5b60005b60148054905081101561119b578173ffffffffffffffffffffffffffffffffffffffff1660148281548110610fad57610fac6143d0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036111885760146001601480549050611007919061442e565b81548110611018576110176143d0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660148281548110611057576110566143d0565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601480548061114e5761114d614462565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561119b565b808061119390614491565b915050610f75565b5050565b60006112486111ac61209a565b8461124385601160006111bd61209a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b6120a2565b6001905092915050565b60055481565b61126061209a565b73ffffffffffffffffffffffffffffffffffffffff1661127e611a08565b73ffffffffffffffffffffffffffffffffffffffff16146112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb906142b2565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600354831115611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136d90614525565b60405180910390fd5b8161139657600061138684612686565b50505050509050809150506113ad565b60006113a184612686565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6113df61209a565b73ffffffffffffffffffffffffffffffffffffffff166113fd611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a906142b2565b60405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d7906143b0565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115b457611570600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de6565b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506014819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6116d061209a565b73ffffffffffffffffffffffffffffffffffffffff166116ee611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b906142b2565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117fc57601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611847565b611844600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de6565b90505b919050565b61185461209a565b73ffffffffffffffffffffffffffffffffffffffff16611872611a08565b73ffffffffffffffffffffffffffffffffffffffff16146118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf906142b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611a4090614235565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6c90614235565b8015611ab95780601f10611a8e57610100808354040283529160200191611ab9565b820191906000526020600020905b815481529060010190602001808311611a9c57829003601f168201915b5050505050905090565b60075481565b601760019054906101000a900460ff1681565b611ae461209a565b73ffffffffffffffffffffffffffffffffffffffff16611b02611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f906142b2565b60405180910390fd5b80600a8190555050565b600d5481565b6000611c2b611b7561209a565b84611c2685604051806060016040528060258152602001614c1e6025913960116000611b9f61209a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f09092919063ffffffff16565b6120a2565b6001905092915050565b6000611c49611c4261209a565b848461226b565b6001905092915050565b600a5481565b600b60009054906101000a900460ff1681565b60045481565b611c7a61209a565b73ffffffffffffffffffffffffffffffffffffffff16611c98611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce5906142b2565b60405180910390fd5b8060078190555050565b611d0061209a565b73ffffffffffffffffffffffffffffffffffffffff16611d1e611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b906142b2565b60405180910390fd5b80600d8190555050565b6000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e0d61209a565b73ffffffffffffffffffffffffffffffffffffffff16611e2b611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e78906142b2565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ee461209a565b73ffffffffffffffffffffffffffffffffffffffff16611f02611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f906142b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe906145b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081836120929190614606565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612108906146a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121779061473b565b60405180910390fd5b80601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161225e9190613ef5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d1906147cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612349576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123409061485f565b60405180910390fd5b6000811161238c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612383906148f1565b60405180910390fd5b612394611a08565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561240257506123d2611a08565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561244d57600c5481111561244c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244390614983565b60405180910390fd5b5b600061245830611761565b90506000600d548210159050600c54821061247357600c5491505b80801561248d5750601760009054906101000a900460ff16155b80156124e557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156124fd5750601760019054906101000a900460ff165b1561250c5761250b826126e2565b5b600b60009054906101000a900460ff161561252b5761252a846129ce565b5b600060019050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125d25750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125dc57600090505b6125e886868684612a40565b505050505050565b6000838311158290612638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262f9190613db5565b60405180910390fd5b5082840390509392505050565b6000806000612652612d51565b91509150612669818361208490919063ffffffff16565b9250505090565b6000818361267e91906149a3565b905092915050565b600080600080600080600080600061269d8a613004565b92509250925060008060006126bb8d86866126b6612645565b61305e565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601760006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561271a576127196149d7565b5b6040519080825280602002602001820160405280156127485781602001602082028036833780820191505090505b50905030816000815181106127605761275f6143d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128299190614a1b565b8160018151811061283d5761283c6143d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128a2307f0000000000000000000000000000000000000000000000000000000000000000846120a2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612904959493929190614b41565b600060405180830381600087803b15801561291e57600080fd5b505af1158015612932573d6000803e3d6000fd5b50505050600047905060008111156129ae57600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156129ac573d6000803e3d6000fd5b505b50506000601760006101000a81548160ff02191690831515021790555050565b6004546005819055506007546008819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a3d57600a546008819055505b50565b80612a4e57612a4d6130e7565b5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612af15750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0657612b01848484613124565b612d3d565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ba95750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612bbe57612bb9848484613384565b612d3c565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c625750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7757612c728484846135e4565b612d3b565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d195750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d2e57612d298484846137af565b612d3a565b612d398484846135e4565b5b5b5b5b80612d4b57612d4a613aa4565b5b50505050565b600080600060165490506000600354905060005b601480549050811015612fc75782600f600060148481548110612d8b57612d8a6143d0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e795750816010600060148481548110612e1157612e106143d0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e905760165460035494509450505050613000565b612f20600f600060148481548110612eab57612eaa6143d0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613ab890919063ffffffff16565b9250612fb26010600060148481548110612f3d57612f3c6143d0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613ab890919063ffffffff16565b91508080612fbf90614491565b915050612d65565b50612fdf60035460165461208490919063ffffffff16565b821015612ff757601654600354935093505050613000565b81819350935050505b9091565b60008060008061301385613ace565b9050600061302086613aff565b905060006130498261303b858a613ab890919063ffffffff16565b613ab890919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806130778589613b3090919063ffffffff16565b9050600061308e8689613b3090919063ffffffff16565b905060006130a58789613b3090919063ffffffff16565b905060006130ce826130c08587613ab890919063ffffffff16565b613ab890919063ffffffff16565b9050838184965096509650505050509450945094915050565b60006005541480156130fb57506000600854145b61312257600554600681905550600854600981905550600060058190555060006008819055505b565b60008060008060008061313687612686565b95509550955095509550955061319487601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061322986600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132be85600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330a81613b46565b6133148483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516133719190613ef5565b60405180910390a3505050505050505050565b60008060008060008061339687612686565b9550955095509550955095506133f486600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061348983601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061351e85600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061356a81613b46565b6135748483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135d19190613ef5565b60405180910390a3505050505050505050565b6000806000806000806135f687612686565b95509550955095509550955061365486600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136e985600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061373581613b46565b61373f8483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161379c9190613ef5565b60405180910390a3505050505050505050565b6000806000806000806137c187612686565b95509550955095509550955061381f87601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138b486600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061394983601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139de85600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2a81613b46565b613a348483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613a919190613ef5565b60405180910390a3505050505050505050565b600654600581905550600954600881905550565b60008183613ac6919061442e565b905092915050565b6000613af86064613aea60055485613b3090919063ffffffff16565b61208490919063ffffffff16565b9050919050565b6000613b296064613b1b60085485613b3090919063ffffffff16565b61208490919063ffffffff16565b9050919050565b60008183613b3e9190614b9b565b905092915050565b6000613b50612645565b90506000613b678284613b3090919063ffffffff16565b9050613bbb81600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ce657613ca283601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613d0082601654613ab890919063ffffffff16565b601681905550613d1b8160155461267090919063ffffffff16565b6015819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d5f578082015181840152602081019050613d44565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d8782613d25565b613d918185613d30565b9350613da1818560208601613d41565b613daa81613d6b565b840191505092915050565b60006020820190508181036000830152613dcf8184613d7c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e0782613ddc565b9050919050565b613e1781613dfc565b8114613e2257600080fd5b50565b600081359050613e3481613e0e565b92915050565b6000819050919050565b613e4d81613e3a565b8114613e5857600080fd5b50565b600081359050613e6a81613e44565b92915050565b60008060408385031215613e8757613e86613dd7565b5b6000613e9585828601613e25565b9250506020613ea685828601613e5b565b9150509250929050565b60008115159050919050565b613ec581613eb0565b82525050565b6000602082019050613ee06000830184613ebc565b92915050565b613eef81613e3a565b82525050565b6000602082019050613f0a6000830184613ee6565b92915050565b6000819050919050565b6000613f35613f30613f2b84613ddc565b613f10565b613ddc565b9050919050565b6000613f4782613f1a565b9050919050565b6000613f5982613f3c565b9050919050565b613f6981613f4e565b82525050565b6000602082019050613f846000830184613f60565b92915050565b600060208284031215613fa057613f9f613dd7565b5b6000613fae84828501613e5b565b91505092915050565b6000613fc282613ddc565b9050919050565b613fd281613fb7565b8114613fdd57600080fd5b50565b600081359050613fef81613fc9565b92915050565b60006020828403121561400b5761400a613dd7565b5b600061401984828501613fe0565b91505092915050565b60008060006060848603121561403b5761403a613dd7565b5b600061404986828701613e25565b935050602061405a86828701613e25565b925050604061406b86828701613e5b565b9150509250925092565b61407e81613eb0565b811461408957600080fd5b50565b60008135905061409b81614075565b92915050565b6000602082840312156140b7576140b6613dd7565b5b60006140c58482850161408c565b91505092915050565b600060ff82169050919050565b6140e4816140ce565b82525050565b60006020820190506140ff60008301846140db565b92915050565b60006020828403121561411b5761411a613dd7565b5b600061412984828501613e25565b91505092915050565b6000806040838503121561414957614148613dd7565b5b600061415785828601613e5b565b92505060206141688582860161408c565b9150509250929050565b61417b81613dfc565b82525050565b60006020820190506141966000830184614172565b92915050565b6141a581613fb7565b82525050565b60006020820190506141c0600083018461419c565b92915050565b600080604083850312156141dd576141dc613dd7565b5b60006141eb85828601613e25565b92505060206141fc85828601613e25565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061424d57607f821691505b6020821081036142605761425f614206565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061429c602083613d30565b91506142a782614266565b602082019050919050565b600060208201905081810360008301526142cb8161428f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b600061432e602a83613d30565b9150614339826142d2565b604082019050919050565b6000602082019050818103600083015261435d81614321565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061439a601b83613d30565b91506143a582614364565b602082019050919050565b600060208201905081810360008301526143c98161438d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061443982613e3a565b915061444483613e3a565b925082820390508181111561445c5761445b6143ff565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061449c82613e3a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144ce576144cd6143ff565b5b600182019050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b600061450f601f83613d30565b915061451a826144d9565b602082019050919050565b6000602082019050818103600083015261453e81614502565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145a1602683613d30565b91506145ac82614545565b604082019050919050565b600060208201905081810360008301526145d081614594565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061461182613e3a565b915061461c83613e3a565b92508261462c5761462b6145d7565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614693602483613d30565b915061469e82614637565b604082019050919050565b600060208201905081810360008301526146c281614686565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614725602283613d30565b9150614730826146c9565b604082019050919050565b6000602082019050818103600083015261475481614718565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147b7602583613d30565b91506147c28261475b565b604082019050919050565b600060208201905081810360008301526147e6816147aa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614849602383613d30565b9150614854826147ed565b604082019050919050565b600060208201905081810360008301526148788161483c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006148db602983613d30565b91506148e68261487f565b604082019050919050565b6000602082019050818103600083015261490a816148ce565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061496d602883613d30565b915061497882614911565b604082019050919050565b6000602082019050818103600083015261499c81614960565b9050919050565b60006149ae82613e3a565b91506149b983613e3a565b92508282019050808211156149d1576149d06143ff565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614a1581613e0e565b92915050565b600060208284031215614a3157614a30613dd7565b5b6000614a3f84828501614a06565b91505092915050565b6000819050919050565b6000614a6d614a68614a6384614a48565b613f10565b613e3a565b9050919050565b614a7d81614a52565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ab881613dfc565b82525050565b6000614aca8383614aaf565b60208301905092915050565b6000602082019050919050565b6000614aee82614a83565b614af88185614a8e565b9350614b0383614a9f565b8060005b83811015614b34578151614b1b8882614abe565b9750614b2683614ad6565b925050600181019050614b07565b5085935050505092915050565b600060a082019050614b566000830188613ee6565b614b636020830187614a74565b8181036040830152614b758186614ae3565b9050614b846060830185614172565b614b916080830184613ee6565b9695505050505050565b6000614ba682613e3a565b9150614bb183613e3a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bea57614be96143ff565b5b82820290509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ac978c2752053a4b594f7f96f98667b8d36756cca039929a97acd978dfe4289f64736f6c63430008100033
Deployed Bytecode
0x6080604052600436106102555760003560e01c806370a0823111610139578063a3864430116100b6578063cba851b31161007a578063cba851b3146108fd578063d54994db14610928578063dab522a814610951578063dd62ed3e1461097a578063ea2f0b37146109b7578063f2fde38b146109e05761025c565b8063a386443014610802578063a457c2d71461082d578063a9059cbb1461086a578063bc951f98146108a7578063c537bd8f146108d25761025c565b80638da5cb5b116100fd5780638da5cb5b1461072d57806395d89b41146107585780639f64621414610783578063a062e3ba146107ae578063a08f6760146107d95761025c565b806370a0823114610646578063715018a61461068357806375f0a8741461069a5780637d1db4a5146106c557806388f82020146106f05761025c565b80632d838119116101d2578063437823ec11610196578063437823ec146105265780634549b0391461054f57806349bd5a5e1461058c57806352390c02146105b75780635342acb4146105e057806357e0a1d01461061d5761025c565b80632d8381191461042d578063313ce5671461046a5780633685d4191461049557806339509351146104be5780633b124fe7146104fb5761025c565b80631bbae6e0116102195780631bbae6e01461034a5780631ff53b601461037357806322976e0d1461039c57806323b872dd146103c75780632663236f146104045761025c565b806306fdde0314610261578063095ea7b31461028c57806313114a9d146102c95780631694505e146102f457806318160ddd1461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a09565b6040516102839190613db5565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613e70565b610a9b565b6040516102c09190613ecb565b60405180910390f35b3480156102d557600080fd5b506102de610ab9565b6040516102eb9190613ef5565b60405180910390f35b34801561030057600080fd5b50610309610ac3565b6040516103169190613f6f565b60405180910390f35b34801561032b57600080fd5b50610334610ae7565b6040516103419190613ef5565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190613f8a565b610af1565b005b34801561037f57600080fd5b5061039a60048036038101906103959190613ff5565b610b77565b005b3480156103a857600080fd5b506103b1610c37565b6040516103be9190613ef5565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190614022565b610c3d565b6040516103fb9190613ecb565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906140a1565b610d16565b005b34801561043957600080fd5b50610454600480360381019061044f9190613f8a565b610de6565b6040516104619190613ef5565b60405180910390f35b34801561047657600080fd5b5061047f610e54565b60405161048c91906140ea565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190614105565b610e6a565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190613e70565b61119f565b6040516104f29190613ecb565b60405180910390f35b34801561050757600080fd5b50610510611252565b60405161051d9190613ef5565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190614105565b611258565b005b34801561055b57600080fd5b5061057660048036038101906105719190614132565b61132f565b6040516105839190613ef5565b60405180910390f35b34801561059857600080fd5b506105a16113b3565b6040516105ae9190614181565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190614105565b6113d7565b005b3480156105ec57600080fd5b5061060760048036038101906106029190614105565b611672565b6040516106149190613ecb565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f91906140a1565b6116c8565b005b34801561065257600080fd5b5061066d60048036038101906106689190614105565b611761565b60405161067a9190613ef5565b60405180910390f35b34801561068f57600080fd5b5061069861184c565b005b3480156106a657600080fd5b506106af611986565b6040516106bc91906141ab565b60405180910390f35b3480156106d157600080fd5b506106da6119ac565b6040516106e79190613ef5565b60405180910390f35b3480156106fc57600080fd5b5061071760048036038101906107129190614105565b6119b2565b6040516107249190613ecb565b60405180910390f35b34801561073957600080fd5b50610742611a08565b60405161074f9190614181565b60405180910390f35b34801561076457600080fd5b5061076d611a31565b60405161077a9190613db5565b60405180910390f35b34801561078f57600080fd5b50610798611ac3565b6040516107a59190613ef5565b60405180910390f35b3480156107ba57600080fd5b506107c3611ac9565b6040516107d09190613ecb565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb9190613f8a565b611adc565b005b34801561080e57600080fd5b50610817611b62565b6040516108249190613ef5565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f9190613e70565b611b68565b6040516108619190613ecb565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c9190613e70565b611c35565b60405161089e9190613ecb565b60405180910390f35b3480156108b357600080fd5b506108bc611c53565b6040516108c99190613ef5565b60405180910390f35b3480156108de57600080fd5b506108e7611c59565b6040516108f49190613ecb565b60405180910390f35b34801561090957600080fd5b50610912611c6c565b60405161091f9190613ef5565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190613f8a565b611c72565b005b34801561095d57600080fd5b5061097860048036038101906109739190613f8a565b611cf8565b005b34801561098657600080fd5b506109a1600480360381019061099c91906141c6565b611d7e565b6040516109ae9190613ef5565b60405180910390f35b3480156109c357600080fd5b506109de60048036038101906109d99190614105565b611e05565b005b3480156109ec57600080fd5b50610a076004803603810190610a029190614105565b611edc565b005b606060018054610a1890614235565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4490614235565b8015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b5050505050905090565b6000610aaf610aa861209a565b84846120a2565b6001905092915050565b6000601554905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600354905090565b610af961209a565b73ffffffffffffffffffffffffffffffffffffffff16610b17611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b64906142b2565b60405180910390fd5b80600c8190555050565b610b7f61209a565b73ffffffffffffffffffffffffffffffffffffffff16610b9d611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea906142b2565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000610c4a84848461226b565b610d0b84610c5661209a565b610d0685604051806060016040528060288152602001614bf660289139601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cbc61209a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f09092919063ffffffff16565b6120a2565b600190509392505050565b610d1e61209a565b73ffffffffffffffffffffffffffffffffffffffff16610d3c611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d89906142b2565b60405180910390fd5b80601760016101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610ddb9190613ecb565b60405180910390a150565b6000601654821115610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490614344565b60405180910390fd5b6000610e37612645565b9050610e4c818461208490919063ffffffff16565b915050919050565b60008060149054906101000a900460ff16905090565b610e7261209a565b73ffffffffffffffffffffffffffffffffffffffff16610e90611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd906142b2565b60405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f69906143b0565b60405180910390fd5b60005b60148054905081101561119b578173ffffffffffffffffffffffffffffffffffffffff1660148281548110610fad57610fac6143d0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036111885760146001601480549050611007919061442e565b81548110611018576110176143d0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660148281548110611057576110566143d0565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601480548061114e5761114d614462565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561119b565b808061119390614491565b915050610f75565b5050565b60006112486111ac61209a565b8461124385601160006111bd61209a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b6120a2565b6001905092915050565b60055481565b61126061209a565b73ffffffffffffffffffffffffffffffffffffffff1661127e611a08565b73ffffffffffffffffffffffffffffffffffffffff16146112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb906142b2565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600354831115611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136d90614525565b60405180910390fd5b8161139657600061138684612686565b50505050509050809150506113ad565b60006113a184612686565b50505050915050809150505b92915050565b7f000000000000000000000000c8ff5297742ec1dc9c7efb3bfe9e9754b531a07e81565b6113df61209a565b73ffffffffffffffffffffffffffffffffffffffff166113fd611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a906142b2565b60405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d7906143b0565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115b457611570600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de6565b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506014819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6116d061209a565b73ffffffffffffffffffffffffffffffffffffffff166116ee611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b906142b2565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117fc57601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611847565b611844600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de6565b90505b919050565b61185461209a565b73ffffffffffffffffffffffffffffffffffffffff16611872611a08565b73ffffffffffffffffffffffffffffffffffffffff16146118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf906142b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611a4090614235565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6c90614235565b8015611ab95780601f10611a8e57610100808354040283529160200191611ab9565b820191906000526020600020905b815481529060010190602001808311611a9c57829003601f168201915b5050505050905090565b60075481565b601760019054906101000a900460ff1681565b611ae461209a565b73ffffffffffffffffffffffffffffffffffffffff16611b02611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f906142b2565b60405180910390fd5b80600a8190555050565b600d5481565b6000611c2b611b7561209a565b84611c2685604051806060016040528060258152602001614c1e6025913960116000611b9f61209a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f09092919063ffffffff16565b6120a2565b6001905092915050565b6000611c49611c4261209a565b848461226b565b6001905092915050565b600a5481565b600b60009054906101000a900460ff1681565b60045481565b611c7a61209a565b73ffffffffffffffffffffffffffffffffffffffff16611c98611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce5906142b2565b60405180910390fd5b8060078190555050565b611d0061209a565b73ffffffffffffffffffffffffffffffffffffffff16611d1e611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b906142b2565b60405180910390fd5b80600d8190555050565b6000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e0d61209a565b73ffffffffffffffffffffffffffffffffffffffff16611e2b611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e78906142b2565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ee461209a565b73ffffffffffffffffffffffffffffffffffffffff16611f02611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f906142b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe906145b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081836120929190614606565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612108906146a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121779061473b565b60405180910390fd5b80601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161225e9190613ef5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d1906147cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612349576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123409061485f565b60405180910390fd5b6000811161238c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612383906148f1565b60405180910390fd5b612394611a08565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561240257506123d2611a08565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561244d57600c5481111561244c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244390614983565b60405180910390fd5b5b600061245830611761565b90506000600d548210159050600c54821061247357600c5491505b80801561248d5750601760009054906101000a900460ff16155b80156124e557507f000000000000000000000000c8ff5297742ec1dc9c7efb3bfe9e9754b531a07e73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156124fd5750601760019054906101000a900460ff165b1561250c5761250b826126e2565b5b600b60009054906101000a900460ff161561252b5761252a846129ce565b5b600060019050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125d25750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125dc57600090505b6125e886868684612a40565b505050505050565b6000838311158290612638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262f9190613db5565b60405180910390fd5b5082840390509392505050565b6000806000612652612d51565b91509150612669818361208490919063ffffffff16565b9250505090565b6000818361267e91906149a3565b905092915050565b600080600080600080600080600061269d8a613004565b92509250925060008060006126bb8d86866126b6612645565b61305e565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601760006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561271a576127196149d7565b5b6040519080825280602002602001820160405280156127485781602001602082028036833780820191505090505b50905030816000815181106127605761275f6143d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128299190614a1b565b8160018151811061283d5761283c6143d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128a2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120a2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612904959493929190614b41565b600060405180830381600087803b15801561291e57600080fd5b505af1158015612932573d6000803e3d6000fd5b50505050600047905060008111156129ae57600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156129ac573d6000803e3d6000fd5b505b50506000601760006101000a81548160ff02191690831515021790555050565b6004546005819055506007546008819055507f000000000000000000000000c8ff5297742ec1dc9c7efb3bfe9e9754b531a07e73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a3d57600a546008819055505b50565b80612a4e57612a4d6130e7565b5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612af15750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0657612b01848484613124565b612d3d565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ba95750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612bbe57612bb9848484613384565b612d3c565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c625750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7757612c728484846135e4565b612d3b565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d195750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d2e57612d298484846137af565b612d3a565b612d398484846135e4565b5b5b5b5b80612d4b57612d4a613aa4565b5b50505050565b600080600060165490506000600354905060005b601480549050811015612fc75782600f600060148481548110612d8b57612d8a6143d0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e795750816010600060148481548110612e1157612e106143d0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e905760165460035494509450505050613000565b612f20600f600060148481548110612eab57612eaa6143d0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613ab890919063ffffffff16565b9250612fb26010600060148481548110612f3d57612f3c6143d0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613ab890919063ffffffff16565b91508080612fbf90614491565b915050612d65565b50612fdf60035460165461208490919063ffffffff16565b821015612ff757601654600354935093505050613000565b81819350935050505b9091565b60008060008061301385613ace565b9050600061302086613aff565b905060006130498261303b858a613ab890919063ffffffff16565b613ab890919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806130778589613b3090919063ffffffff16565b9050600061308e8689613b3090919063ffffffff16565b905060006130a58789613b3090919063ffffffff16565b905060006130ce826130c08587613ab890919063ffffffff16565b613ab890919063ffffffff16565b9050838184965096509650505050509450945094915050565b60006005541480156130fb57506000600854145b61312257600554600681905550600854600981905550600060058190555060006008819055505b565b60008060008060008061313687612686565b95509550955095509550955061319487601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061322986600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132be85600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330a81613b46565b6133148483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516133719190613ef5565b60405180910390a3505050505050505050565b60008060008060008061339687612686565b9550955095509550955095506133f486600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061348983601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061351e85600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061356a81613b46565b6135748483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135d19190613ef5565b60405180910390a3505050505050505050565b6000806000806000806135f687612686565b95509550955095509550955061365486600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136e985600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061373581613b46565b61373f8483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161379c9190613ef5565b60405180910390a3505050505050505050565b6000806000806000806137c187612686565b95509550955095509550955061381f87601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138b486600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061394983601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139de85600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2a81613b46565b613a348483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613a919190613ef5565b60405180910390a3505050505050505050565b600654600581905550600954600881905550565b60008183613ac6919061442e565b905092915050565b6000613af86064613aea60055485613b3090919063ffffffff16565b61208490919063ffffffff16565b9050919050565b6000613b296064613b1b60085485613b3090919063ffffffff16565b61208490919063ffffffff16565b9050919050565b60008183613b3e9190614b9b565b905092915050565b6000613b50612645565b90506000613b678284613b3090919063ffffffff16565b9050613bbb81600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ce657613ca283601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613d0082601654613ab890919063ffffffff16565b601681905550613d1b8160155461267090919063ffffffff16565b6015819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d5f578082015181840152602081019050613d44565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d8782613d25565b613d918185613d30565b9350613da1818560208601613d41565b613daa81613d6b565b840191505092915050565b60006020820190508181036000830152613dcf8184613d7c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e0782613ddc565b9050919050565b613e1781613dfc565b8114613e2257600080fd5b50565b600081359050613e3481613e0e565b92915050565b6000819050919050565b613e4d81613e3a565b8114613e5857600080fd5b50565b600081359050613e6a81613e44565b92915050565b60008060408385031215613e8757613e86613dd7565b5b6000613e9585828601613e25565b9250506020613ea685828601613e5b565b9150509250929050565b60008115159050919050565b613ec581613eb0565b82525050565b6000602082019050613ee06000830184613ebc565b92915050565b613eef81613e3a565b82525050565b6000602082019050613f0a6000830184613ee6565b92915050565b6000819050919050565b6000613f35613f30613f2b84613ddc565b613f10565b613ddc565b9050919050565b6000613f4782613f1a565b9050919050565b6000613f5982613f3c565b9050919050565b613f6981613f4e565b82525050565b6000602082019050613f846000830184613f60565b92915050565b600060208284031215613fa057613f9f613dd7565b5b6000613fae84828501613e5b565b91505092915050565b6000613fc282613ddc565b9050919050565b613fd281613fb7565b8114613fdd57600080fd5b50565b600081359050613fef81613fc9565b92915050565b60006020828403121561400b5761400a613dd7565b5b600061401984828501613fe0565b91505092915050565b60008060006060848603121561403b5761403a613dd7565b5b600061404986828701613e25565b935050602061405a86828701613e25565b925050604061406b86828701613e5b565b9150509250925092565b61407e81613eb0565b811461408957600080fd5b50565b60008135905061409b81614075565b92915050565b6000602082840312156140b7576140b6613dd7565b5b60006140c58482850161408c565b91505092915050565b600060ff82169050919050565b6140e4816140ce565b82525050565b60006020820190506140ff60008301846140db565b92915050565b60006020828403121561411b5761411a613dd7565b5b600061412984828501613e25565b91505092915050565b6000806040838503121561414957614148613dd7565b5b600061415785828601613e5b565b92505060206141688582860161408c565b9150509250929050565b61417b81613dfc565b82525050565b60006020820190506141966000830184614172565b92915050565b6141a581613fb7565b82525050565b60006020820190506141c0600083018461419c565b92915050565b600080604083850312156141dd576141dc613dd7565b5b60006141eb85828601613e25565b92505060206141fc85828601613e25565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061424d57607f821691505b6020821081036142605761425f614206565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061429c602083613d30565b91506142a782614266565b602082019050919050565b600060208201905081810360008301526142cb8161428f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b600061432e602a83613d30565b9150614339826142d2565b604082019050919050565b6000602082019050818103600083015261435d81614321565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061439a601b83613d30565b91506143a582614364565b602082019050919050565b600060208201905081810360008301526143c98161438d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061443982613e3a565b915061444483613e3a565b925082820390508181111561445c5761445b6143ff565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061449c82613e3a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144ce576144cd6143ff565b5b600182019050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b600061450f601f83613d30565b915061451a826144d9565b602082019050919050565b6000602082019050818103600083015261453e81614502565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145a1602683613d30565b91506145ac82614545565b604082019050919050565b600060208201905081810360008301526145d081614594565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061461182613e3a565b915061461c83613e3a565b92508261462c5761462b6145d7565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614693602483613d30565b915061469e82614637565b604082019050919050565b600060208201905081810360008301526146c281614686565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614725602283613d30565b9150614730826146c9565b604082019050919050565b6000602082019050818103600083015261475481614718565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147b7602583613d30565b91506147c28261475b565b604082019050919050565b600060208201905081810360008301526147e6816147aa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614849602383613d30565b9150614854826147ed565b604082019050919050565b600060208201905081810360008301526148788161483c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006148db602983613d30565b91506148e68261487f565b604082019050919050565b6000602082019050818103600083015261490a816148ce565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061496d602883613d30565b915061497882614911565b604082019050919050565b6000602082019050818103600083015261499c81614960565b9050919050565b60006149ae82613e3a565b91506149b983613e3a565b92508282019050808211156149d1576149d06143ff565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614a1581613e0e565b92915050565b600060208284031215614a3157614a30613dd7565b5b6000614a3f84828501614a06565b91505092915050565b6000819050919050565b6000614a6d614a68614a6384614a48565b613f10565b613e3a565b9050919050565b614a7d81614a52565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ab881613dfc565b82525050565b6000614aca8383614aaf565b60208301905092915050565b6000602082019050919050565b6000614aee82614a83565b614af88185614a8e565b9350614b0383614a9f565b8060005b83811015614b34578151614b1b8882614abe565b9750614b2683614ad6565b925050600181019050614b07565b5085935050505092915050565b600060a082019050614b566000830188613ee6565b614b636020830187614a74565b8181036040830152614b758186614ae3565b9050614b846060830185614172565b614b916080830184613ee6565b9695505050505050565b6000614ba682613e3a565b9150614bb183613e3a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bea57614be96143ff565b5b82820290509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ac978c2752053a4b594f7f96f98667b8d36756cca039929a97acd978dfe4289f64736f6c63430008100033
Deployed Bytecode Sourcemap
28679:17152:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31139:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32051:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33172:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30111:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31416:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45716:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45591:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29172:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32220:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45221:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33711:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31325:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34427:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32541:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29026:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34914:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33267:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30169:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33972:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38379:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45092:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31519:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20137:148;;;;;;;;;;;;;:::i;:::-;;29531:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29390:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33044:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19494:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31230;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29127:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30241:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44937:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29450:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32767:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31725:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29291:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29340:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28987:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44801:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45393:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31900:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35035:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20437:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31139:83;31176:13;31209:5;31202:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31139:83;:::o;32051:161::-;32126:4;32143:39;32152:12;:10;:12::i;:::-;32166:7;32175:6;32143:8;:39::i;:::-;32200:4;32193:11;;32051:161;;;;:::o;33172:87::-;33214:7;33241:10;;33234:17;;33172:87;:::o;30111:51::-;;;:::o;31416:95::-;31469:7;31496;;31489:14;;31416:95;:::o;45716:112::-;19723:12;:10;:12::i;:::-;19712:23;;:7;:5;:7::i;:::-;:23;;;19704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45809:11:::1;45794:12;:26;;;;45716:112:::0;:::o;45591:117::-;19723:12;:10;:12::i;:::-;19712:23;;:7;:5;:7::i;:::-;:23;;;19704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45694:6:::1;45676:15;;:24;;;;;;;;;;;;;;;;;;45591:117:::0;:::o;29172:50::-;;;;:::o;32220:313::-;32318:4;32335:36;32345:6;32353:9;32364:6;32335:9;:36::i;:::-;32382:121;32391:6;32399:12;:10;:12::i;:::-;32413:89;32451:6;32413:89;;;;;;;;;;;;;;;;;:11;:19;32425:6;32413:19;;;;;;;;;;;;;;;:33;32433:12;:10;:12::i;:::-;32413:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;32382:8;:121::i;:::-;32521:4;32514:11;;32220:313;;;;;:::o;45221:164::-;19723:12;:10;:12::i;:::-;19712:23;;:7;:5;:7::i;:::-;:23;;;19704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45318:8:::1;45297:18;;:29;;;;;;;;;;;;;;;;;;45342:35;45368:8;45342:35;;;;;;:::i;:::-;;;;;;;;45221:164:::0;:::o;33711:253::-;33777:7;33816;;33805;:18;;33797:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33881:19;33904:10;:8;:10::i;:::-;33881:33;;33932:24;33944:11;33932:7;:11;;:24;;;;:::i;:::-;33925:31;;;33711:253;;;:::o;31325:83::-;31366:5;31391:9;;;;;;;;;;;31384:16;;31325:83;:::o;34427:479::-;19723:12;:10;:12::i;:::-;19712:23;;:7;:5;:7::i;:::-;:23;;;19704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34509:11:::1;:20;34521:7;34509:20;;;;;;;;;;;;;;;;;;;;;;;;;34501:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34577:9;34572:327;34596:9;:16;;;;34592:1;:20;34572:327;;;34654:7;34638:23;;:9;34648:1;34638:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;34634:254:::1;;34697:9;34726:1;34707:9;:16;;;;:20;;;;:::i;:::-;34697:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34682:9;34692:1;34682:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34766:1;34747:7;:16;34755:7;34747:16;;;;;;;;;;;;;;;:20;;;;34809:5;34786:11;:20;34798:7;34786:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34833:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;34867:5;;34634:254;34614:3;;;;;:::i;:::-;;;;34572:327;;;;34427:479:::0;:::o;32541:218::-;32629:4;32646:83;32655:12;:10;:12::i;:::-;32669:7;32678:50;32717:10;32678:11;:25;32690:12;:10;:12::i;:::-;32678:25;;;;;;;;;;;;;;;:34;32704:7;32678:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32646:8;:83::i;:::-;32747:4;32740:11;;32541:218;;;;:::o;29026:38::-;;;;:::o;34914:113::-;19723:12;:10;:12::i;:::-;19712:23;;:7;:5;:7::i;:::-;:23;;;19704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35015:4:::1;34985:18;:27;35004:7;34985:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34914:113:::0;:::o;33267:436::-;33357:7;33396;;33385;:18;;33377:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33455:17;33450:246;;33490:15;33514:19;33525:7;33514:10;:19::i;:::-;33489:44;;;;;;;33555:7;33548:14;;;;;33450:246;33597:23;33628:19;33639:7;33628:10;:19::i;:::-;33595:52;;;;;;;33669:15;33662:22;;;33267:436;;;;;:::o;30169:38::-;;;:::o;33972:447::-;19723:12;:10;:12::i;:::-;19712:23;;:7;:5;:7::i;:::-;:23;;;19704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34169:11:::1;:20;34181:7;34169:20;;;;;;;;;;;;;;;;;;;;;;;;;34168:21;34160:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34254:1;34235:7;:16;34243:7;34235:16;;;;;;;;;;;;;;;;:20;34232:108;;;34291:37;34311:7;:16;34319:7;34311:16;;;;;;;;;;;;;;;;34291:19;:37::i;:::-;34272:7;:16;34280:7;34272:16;;;;;;;;;;;;;;;:56;;;;34232:108;34373:4;34350:11;:20;34362:7;34350:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34388:9;34403:7;34388:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33972:447:::0;:::o;38379:123::-;38443:4;38467:18;:27;38486:7;38467:27;;;;;;;;;;;;;;;;;;;;;;;;;38460:34;;38379:123;;;:::o;45092:121::-;19723:12;:10;:12::i;:::-;19712:23;;:7;:5;:7::i;:::-;:23;;;19704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45197:8:::1;45172:22;;:33;;;;;;;;;;;;;;;;;;45092:121:::0;:::o;31519:198::-;31585:7;31609:11;:20;31621:7;31609:20;;;;;;;;;;;;;;;;;;;;;;;;;31605:49;;;31638:7;:16;31646:7;31638:16;;;;;;;;;;;;;;;;31631:23;;;;31605:49;31672:37;31692:7;:16;31700:7;31692:16;;;;;;;;;;;;;;;;31672:19;:37::i;:::-;31665:44;;31519:198;;;;:::o;20137:148::-;19723:12;:10;:12::i;:::-;19712:23;;:7;:5;:7::i;:::-;:23;;;19704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20244:1:::1;20207:40;;20228:6;::::0;::::1;;;;;;;;20207:40;;;;;;;;;;;;20275:1;20258:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;20137:148::o:0;29531:92::-;;;;;;;;;;;;;:::o;29390:53::-;;;;:::o;33044:120::-;33112:4;33136:11;:20;33148:7;33136:20;;;;;;;;;;;;;;;;;;;;;;;;;33129:27;;33044:120;;;:::o;19494:87::-;19540:7;19567:6;;;;;;;;;;;19560:13;;19494:87;:::o;31230:::-;31269:13;31302:7;31295:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31230:87;:::o;29127:38::-;;;;:::o;30241:37::-;;;;;;;;;;;;;:::o;44937:147::-;19723:12;:10;:12::i;:::-;19712:23;;:7;:5;:7::i;:::-;:23;;;19704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45056:20:::1;45032:21;:44;;;;44937:147:::0;:::o;29450:74::-;;;;:::o;32767:269::-;32860:4;32877:129;32886:12;:10;:12::i;:::-;32900:7;32909:96;32948:15;32909:96;;;;;;;;;;;;;;;;;:11;:25;32921:12;:10;:12::i;:::-;32909:25;;;;;;;;;;;;;;;:34;32935:7;32909:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;32877:8;:129::i;:::-;33024:4;33017:11;;32767:269;;;;:::o;31725:167::-;31803:4;31820:42;31830:12;:10;:12::i;:::-;31844:9;31855:6;31820:9;:42::i;:::-;31880:4;31873:11;;31725:167;;;;:::o;29291:40::-;;;;:::o;29340:41::-;;;;;;;;;;;;;:::o;28987:32::-;;;;:::o;44801:128::-;19723:12;:10;:12::i;:::-;19712:23;;:7;:5;:7::i;:::-;:23;;;19704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44909:12:::1;44887:19;:34;;;;44801:128:::0;:::o;45393:190::-;19723:12;:10;:12::i;:::-;19712:23;;:7;:5;:7::i;:::-;:23;;;19704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45543:32:::1;45509:31;:66;;;;45393:190:::0;:::o;31900:143::-;31981:7;32008:11;:18;32020:5;32008:18;;;;;;;;;;;;;;;:27;32027:7;32008:27;;;;;;;;;;;;;;;;32001:34;;31900:143;;;;:::o;35035:112::-;19723:12;:10;:12::i;:::-;19712:23;;:7;:5;:7::i;:::-;:23;;;19704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35134:5:::1;35104:18;:27;35123:7;35104:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35035:112:::0;:::o;20437:244::-;19723:12;:10;:12::i;:::-;19712:23;;:7;:5;:7::i;:::-;:23;;;19704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20546:1:::1;20526:22;;:8;:22;;::::0;20518:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20636:8;20607:38;;20628:6;::::0;::::1;;;;;;;;20607:38;;;;;;;;;;;;20665:8;20656:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20437:244:::0;:::o;6693:98::-;6751:7;6782:1;6778;:5;;;;:::i;:::-;6771:12;;6693:98;;;;:::o;10333:::-;10386:7;10413:10;10406:17;;10333:98;:::o;38510:337::-;38620:1;38603:19;;:5;:19;;;38595:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38701:1;38682:21;;:7;:21;;;38674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38785:6;38755:11;:18;38767:5;38755:18;;;;;;;;;;;;;;;:27;38774:7;38755:27;;;;;;;;;;;;;;;:36;;;;38823:7;38807:32;;38816:5;38807:32;;;38832:6;38807:32;;;;;;:::i;:::-;;;;;;;;38510:337;;;:::o;38855:1677::-;38993:1;38977:18;;:4;:18;;;38969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39070:1;39056:16;;:2;:16;;;39048:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39140:1;39131:6;:10;39123:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39211:7;:5;:7::i;:::-;39203:15;;:4;:15;;;;:32;;;;;39228:7;:5;:7::i;:::-;39222:13;;:2;:13;;;;39203:32;39200:125;;;39268:12;;39258:6;:22;;39250:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39200:125;39613:28;39644:24;39662:4;39644:9;:24::i;:::-;39613:55;;39679:24;39730:31;;39706:20;:55;;39679:82;;39801:12;;39777:20;:36;39774:112;;39862:12;;39839:35;;39774:112;39916:19;:50;;;;;39953:13;;;;;;;;;;;39952:14;39916:50;:88;;;;;39991:13;39983:21;;:4;:21;;;;39916:88;:123;;;;;40021:18;;;;;;;;;;;39916:123;39898:213;;;40066:33;40078:20;40066:11;:33::i;:::-;39898:213;40126:22;;;;;;;;;;;40123:65;;;40165:11;40173:2;40165:7;:11::i;:::-;40123:65;40261:12;40276:4;40261:19;;40380:18;:24;40399:4;40380:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;40408:18;:22;40427:2;40408:22;;;;;;;;;;;;;;;;;;;;;;;;;40380:50;40377:97;;;40457:5;40447:15;;40377:97;40486:38;40501:4;40506:2;40509:6;40516:7;40486:14;:38::i;:::-;38958:1574;;;38855:1677;;;:::o;7812:206::-;7898:7;7956:1;7951;:6;;7959:12;7943:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7998:1;7994;:5;7987:12;;7812:206;;;;;:::o;36946:163::-;36987:7;37008:15;37025;37044:19;:17;:19::i;:::-;37007:56;;;;37081:20;37093:7;37081;:11;;:20;;;;:::i;:::-;37074:27;;;;36946:163;:::o;5583:98::-;5641:7;5672:1;5668;:5;;;;:::i;:::-;5661:12;;5583:98;;;;:::o;35744:419::-;35803:7;35812;35821;35830;35839;35848;35869:23;35894:12;35908:18;35930:20;35942:7;35930:11;:20::i;:::-;35868:82;;;;;;35962:15;35979:23;36004:12;36020:50;36032:7;36041:4;36047:10;36059;:8;:10::i;:::-;36020:11;:50::i;:::-;35961:109;;;;;;36089:7;36098:15;36115:4;36121:15;36138:4;36144:10;36081:74;;;;;;;;;;;;;;;;;;35744:419;;;;;;;:::o;40794:794::-;30389:4;30373:13;;:20;;;;;;;;;;;;;;;;;;40936:21:::1;40974:1;40960:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40936:40;;41005:4;40987;40992:1;40987:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;41031:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41021:4;41026:1;41021:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;41066:71;41083:4;41098:15;41116:20;41066:8;:71::i;:::-;41176:15;:66;;;41257:20;41292:1;41336:4;41363;41383:15;41176:233;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41422:26;41451:21;41422:50;;41507:1;41486:18;:22;41483:98;;;41525:15;;;;;;;;;;;:24;;:44;41550:18;41525:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41483:98;40865:723;;30432:5:::0;30416:13;;:21;;;;;;;;;;;;;;;;;;40794:794;:::o;40540:246::-;40605:13;;40595:7;:23;;;;40645:19;;40629:13;:35;;;;40692:13;40679:26;;:9;:26;;;40675:104;;40746:21;;40730:13;:37;;;;40675:104;40540:246;:::o;41669:818::-;41780:7;41776:40;;41802:14;:12;:14::i;:::-;41776:40;41833:11;:19;41845:6;41833:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41857:11;:22;41869:9;41857:22;;;;;;;;;;;;;;;;;;;;;;;;;41856:23;41833:46;41829:597;;;41896:48;41918:6;41926:9;41937:6;41896:21;:48::i;:::-;41829:597;;;41967:11;:19;41979:6;41967:19;;;;;;;;;;;;;;;;;;;;;;;;;41966:20;:46;;;;;41990:11;:22;42002:9;41990:22;;;;;;;;;;;;;;;;;;;;;;;;;41966:46;41962:464;;;42029:46;42049:6;42057:9;42068:6;42029:19;:46::i;:::-;41962:464;;;42098:11;:19;42110:6;42098:19;;;;;;;;;;;;;;;;;;;;;;;;;42097:20;:47;;;;;42122:11;:22;42134:9;42122:22;;;;;;;;;;;;;;;;;;;;;;;;;42121:23;42097:47;42093:333;;;42161:44;42179:6;42187:9;42198:6;42161:17;:44::i;:::-;42093:333;;;42227:11;:19;42239:6;42227:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;42250:11;:22;42262:9;42250:22;;;;;;;;;;;;;;;;;;;;;;;;;42227:45;42223:203;;;42289:48;42311:6;42319:9;42330:6;42289:21;:48::i;:::-;42223:203;;;42370:44;42388:6;42396:9;42407:6;42370:17;:44::i;:::-;42223:203;42093:333;41962:464;41829:597;42442:7;42438:41;;42464:15;:13;:15::i;:::-;42438:41;41669:818;;;;:::o;37117:555::-;37167:7;37176;37196:15;37214:7;;37196:25;;37232:15;37250:7;;37232:25;;37273:9;37268:289;37292:9;:16;;;;37288:1;:20;37268:289;;;37358:7;37334;:21;37342:9;37352:1;37342:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37334:21;;;;;;;;;;;;;;;;:31;:66;;;;37393:7;37369;:21;37377:9;37387:1;37377:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37369:21;;;;;;;;;;;;;;;;:31;37334:66;37330:97;;;37410:7;;37419;;37402:25;;;;;;;;;37330:97;37452:34;37464:7;:21;37472:9;37482:1;37472:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37464:21;;;;;;;;;;;;;;;;37452:7;:11;;:34;;;;:::i;:::-;37442:44;;37511:34;37523:7;:21;37531:9;37541:1;37531:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37523:21;;;;;;;;;;;;;;;;37511:7;:11;;:34;;;;:::i;:::-;37501:44;;37310:3;;;;;:::i;:::-;;;;37268:289;;;;37581:20;37593:7;;37581;;:11;;:20;;;;:::i;:::-;37571:7;:30;37567:61;;;37611:7;;37620;;37603:25;;;;;;;;37567:61;37647:7;37656;37639:25;;;;;;37117:555;;;:::o;36171:330::-;36231:7;36240;36249;36269:12;36284:24;36300:7;36284:15;:24::i;:::-;36269:39;;36319:18;36340:30;36362:7;36340:21;:30::i;:::-;36319:51;;36381:23;36407:33;36429:10;36407:17;36419:4;36407:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36381:59;;36459:15;36476:4;36482:10;36451:42;;;;;;;;;36171:330;;;;;:::o;36509:429::-;36624:7;36633;36642;36662:15;36680:24;36692:11;36680:7;:11;;:24;;;;:::i;:::-;36662:42;;36715:12;36730:21;36739:11;36730:4;:8;;:21;;;;:::i;:::-;36715:36;;36762:18;36783:27;36798:11;36783:10;:14;;:27;;;;:::i;:::-;36762:48;;36821:23;36847:33;36869:10;36847:17;36859:4;36847:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36821:59;;36899:7;36908:15;36925:4;36891:39;;;;;;;;;;36509:429;;;;;;;;:::o;35155:234::-;35212:1;35201:7;;:12;:34;;;;;35234:1;35217:13;;:18;35201:34;35237:7;35198:46;35274:7;;35256:15;:25;;;;35316:13;;35292:21;:37;;;;35352:1;35342:7;:11;;;;35380:1;35364:13;:17;;;;35155:234;:::o;43588:563::-;43691:15;43708:23;43733:12;43747:23;43772:12;43786:18;43808:19;43819:7;43808:10;:19::i;:::-;43690:137;;;;;;;;;;;;43856:28;43876:7;43856;:15;43864:6;43856:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43838:7;:15;43846:6;43838:15;;;;;;;;;;;;;;;:46;;;;43913:28;43933:7;43913;:15;43921:6;43913:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43895:7;:15;43903:6;43895:15;;;;;;;;;;;;;;;:46;;;;43973:39;43996:15;43973:7;:18;43981:9;43973:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43952:7;:18;43960:9;43952:18;;;;;;;;;;;;;;;:60;;;;44023:26;44038:10;44023:14;:26::i;:::-;44060:23;44072:4;44078;44060:11;:23::i;:::-;44116:9;44099:44;;44108:6;44099:44;;;44127:15;44099:44;;;;;;:::i;:::-;;;;;;;;43679:472;;;;;;43588:563;;;:::o;43005:575::-;43106:15;43123:23;43148:12;43162:23;43187:12;43201:18;43223:19;43234:7;43223:10;:19::i;:::-;43105:137;;;;;;;;;;;;43271:28;43291:7;43271;:15;43279:6;43271:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43253:7;:15;43261:6;43253:15;;;;;;;;;;;;;;;:46;;;;43331:39;43354:15;43331:7;:18;43339:9;43331:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43310:7;:18;43318:9;43310:18;;;;;;;;;;;;;;;:60;;;;43402:39;43425:15;43402:7;:18;43410:9;43402:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43381:7;:18;43389:9;43381:18;;;;;;;;;;;;;;;:60;;;;43452:26;43467:10;43452:14;:26::i;:::-;43489:23;43501:4;43507;43489:11;:23::i;:::-;43545:9;43528:44;;43537:6;43528:44;;;43556:15;43528:44;;;;;;:::i;:::-;;;;;;;;43094:486;;;;;;43005:575;;;:::o;42495:502::-;42594:15;42611:23;42636:12;42650:23;42675:12;42689:18;42711:19;42722:7;42711:10;:19::i;:::-;42593:137;;;;;;;;;;;;42759:28;42779:7;42759;:15;42767:6;42759:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42741:7;:15;42749:6;42741:15;;;;;;;;;;;;;;;:46;;;;42819:39;42842:15;42819:7;:18;42827:9;42819:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42798:7;:18;42806:9;42798:18;;;;;;;;;;;;;;;:60;;;;42869:26;42884:10;42869:14;:26::i;:::-;42906:23;42918:4;42924;42906:11;:23::i;:::-;42962:9;42945:44;;42954:6;42945:44;;;42973:15;42945:44;;;;;;:::i;:::-;;;;;;;;42582:415;;;;;;42495:502;;;:::o;44159:634::-;44262:15;44279:23;44304:12;44318:23;44343:12;44357:18;44379:19;44390:7;44379:10;:19::i;:::-;44261:137;;;;;;;;;;;;44427:28;44447:7;44427;:15;44435:6;44427:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44409:7;:15;44417:6;44409:15;;;;;;;;;;;;;;;:46;;;;44484:28;44504:7;44484;:15;44492:6;44484:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44466:7;:15;44474:6;44466:15;;;;;;;;;;;;;;;:46;;;;44544:39;44567:15;44544:7;:18;44552:9;44544:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44523:7;:18;44531:9;44523:18;;;;;;;;;;;;;;;:60;;;;44615:39;44638:15;44615:7;:18;44623:9;44615:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44594:7;:18;44602:9;44594:18;;;;;;;;;;;;;;;:60;;;;44665:26;44680:10;44665:14;:26::i;:::-;44702:23;44714:4;44720;44702:11;:23::i;:::-;44758:9;44741:44;;44750:6;44741:44;;;44769:15;44741:44;;;;;;:::i;:::-;;;;;;;;44250:543;;;;;;44159:634;;;:::o;35397:125::-;35451:15;;35441:7;:25;;;;35493:21;;35477:13;:37;;;;35397:125::o;5955:98::-;6013:7;6044:1;6040;:5;;;;:::i;:::-;6033:12;;5955:98;;;;:::o;38043:154::-;38107:7;38134:55;38173:5;38134:20;38146:7;;38134;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;38127:62;;38043:154;;;:::o;38205:166::-;38275:7;38302:61;38347:5;38302:26;38314:13;;38302:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;38295:68;;38205:166;;;:::o;6303:98::-;6361:7;6392:1;6388;:5;;;;:::i;:::-;6381:12;;6303:98;;;;:::o;37680:355::-;37743:19;37766:10;:8;:10::i;:::-;37743:33;;37787:18;37808:27;37823:11;37808:10;:14;;:27;;;;:::i;:::-;37787:48;;37871:38;37898:10;37871:7;:22;37887:4;37871:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37846:7;:22;37862:4;37846:22;;;;;;;;;;;;;;;:63;;;;37923:11;:26;37943:4;37923:26;;;;;;;;;;;;;;;;;;;;;;;;;37920:107;;;37989:38;38016:10;37989:7;:22;38005:4;37989:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37964:7;:22;37980:4;37964:22;;;;;;;;;;;;;;;:63;;;;37920:107;37732:303;;37680:355;:::o;35589:147::-;35667:17;35679:4;35667:7;;:11;;:17;;;;:::i;:::-;35657:7;:27;;;;35708:20;35723:4;35708:10;;:14;;:20;;;;:::i;:::-;35695:10;:33;;;;35589:147;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:153::-;4221:9;4254:37;4285:5;4254:37;:::i;:::-;4241:50;;4144:153;;;:::o;4303:185::-;4417:64;4475:5;4417:64;:::i;:::-;4412:3;4405:77;4303:185;;:::o;4494:276::-;4614:4;4652:2;4641:9;4637:18;4629:26;;4665:98;4760:1;4749:9;4745:17;4736:6;4665:98;:::i;:::-;4494:276;;;;:::o;4776:329::-;4835:6;4884:2;4872:9;4863:7;4859:23;4855:32;4852:119;;;4890:79;;:::i;:::-;4852:119;5010:1;5035:53;5080:7;5071:6;5060:9;5056:22;5035:53;:::i;:::-;5025:63;;4981:117;4776:329;;;;:::o;5111:104::-;5156:7;5185:24;5203:5;5185:24;:::i;:::-;5174:35;;5111:104;;;:::o;5221:138::-;5302:32;5328:5;5302:32;:::i;:::-;5295:5;5292:43;5282:71;;5349:1;5346;5339:12;5282:71;5221:138;:::o;5365:155::-;5419:5;5457:6;5444:20;5435:29;;5473:41;5508:5;5473:41;:::i;:::-;5365:155;;;;:::o;5526:345::-;5593:6;5642:2;5630:9;5621:7;5617:23;5613:32;5610:119;;;5648:79;;:::i;:::-;5610:119;5768:1;5793:61;5846:7;5837:6;5826:9;5822:22;5793:61;:::i;:::-;5783:71;;5739:125;5526:345;;;;:::o;5877:619::-;5954:6;5962;5970;6019:2;6007:9;5998:7;5994:23;5990:32;5987:119;;;6025:79;;:::i;:::-;5987:119;6145:1;6170:53;6215:7;6206:6;6195:9;6191:22;6170:53;:::i;:::-;6160:63;;6116:117;6272:2;6298:53;6343:7;6334:6;6323:9;6319:22;6298:53;:::i;:::-;6288:63;;6243:118;6400:2;6426:53;6471:7;6462:6;6451:9;6447:22;6426:53;:::i;:::-;6416:63;;6371:118;5877:619;;;;;:::o;6502:116::-;6572:21;6587:5;6572:21;:::i;:::-;6565:5;6562:32;6552:60;;6608:1;6605;6598:12;6552:60;6502:116;:::o;6624:133::-;6667:5;6705:6;6692:20;6683:29;;6721:30;6745:5;6721:30;:::i;:::-;6624:133;;;;:::o;6763:323::-;6819:6;6868:2;6856:9;6847:7;6843:23;6839:32;6836:119;;;6874:79;;:::i;:::-;6836:119;6994:1;7019:50;7061:7;7052:6;7041:9;7037:22;7019:50;:::i;:::-;7009:60;;6965:114;6763:323;;;;:::o;7092:86::-;7127:7;7167:4;7160:5;7156:16;7145:27;;7092:86;;;:::o;7184:112::-;7267:22;7283:5;7267:22;:::i;:::-;7262:3;7255:35;7184:112;;:::o;7302:214::-;7391:4;7429:2;7418:9;7414:18;7406:26;;7442:67;7506:1;7495:9;7491:17;7482:6;7442:67;:::i;:::-;7302:214;;;;:::o;7522:329::-;7581:6;7630:2;7618:9;7609:7;7605:23;7601:32;7598:119;;;7636:79;;:::i;:::-;7598:119;7756:1;7781:53;7826:7;7817:6;7806:9;7802:22;7781:53;:::i;:::-;7771:63;;7727:117;7522:329;;;;:::o;7857:468::-;7922:6;7930;7979:2;7967:9;7958:7;7954:23;7950:32;7947:119;;;7985:79;;:::i;:::-;7947:119;8105:1;8130:53;8175:7;8166:6;8155:9;8151:22;8130:53;:::i;:::-;8120:63;;8076:117;8232:2;8258:50;8300:7;8291:6;8280:9;8276:22;8258:50;:::i;:::-;8248:60;;8203:115;7857:468;;;;;:::o;8331:118::-;8418:24;8436:5;8418:24;:::i;:::-;8413:3;8406:37;8331:118;;:::o;8455:222::-;8548:4;8586:2;8575:9;8571:18;8563:26;;8599:71;8667:1;8656:9;8652:17;8643:6;8599:71;:::i;:::-;8455:222;;;;:::o;8683:142::-;8786:32;8812:5;8786:32;:::i;:::-;8781:3;8774:45;8683:142;;:::o;8831:254::-;8940:4;8978:2;8967:9;8963:18;8955:26;;8991:87;9075:1;9064:9;9060:17;9051:6;8991:87;:::i;:::-;8831:254;;;;:::o;9091:474::-;9159:6;9167;9216:2;9204:9;9195:7;9191:23;9187:32;9184:119;;;9222:79;;:::i;:::-;9184:119;9342:1;9367:53;9412:7;9403:6;9392:9;9388:22;9367:53;:::i;:::-;9357:63;;9313:117;9469:2;9495:53;9540:7;9531:6;9520:9;9516:22;9495:53;:::i;:::-;9485:63;;9440:118;9091:474;;;;;:::o;9571:180::-;9619:77;9616:1;9609:88;9716:4;9713:1;9706:15;9740:4;9737:1;9730:15;9757:320;9801:6;9838:1;9832:4;9828:12;9818:22;;9885:1;9879:4;9875:12;9906:18;9896:81;;9962:4;9954:6;9950:17;9940:27;;9896:81;10024:2;10016:6;10013:14;9993:18;9990:38;9987:84;;10043:18;;:::i;:::-;9987:84;9808:269;9757:320;;;:::o;10083:182::-;10223:34;10219:1;10211:6;10207:14;10200:58;10083:182;:::o;10271:366::-;10413:3;10434:67;10498:2;10493:3;10434:67;:::i;:::-;10427:74;;10510:93;10599:3;10510:93;:::i;:::-;10628:2;10623:3;10619:12;10612:19;;10271:366;;;:::o;10643:419::-;10809:4;10847:2;10836:9;10832:18;10824:26;;10896:9;10890:4;10886:20;10882:1;10871:9;10867:17;10860:47;10924:131;11050:4;10924:131;:::i;:::-;10916:139;;10643:419;;;:::o;11068:229::-;11208:34;11204:1;11196:6;11192:14;11185:58;11277:12;11272:2;11264:6;11260:15;11253:37;11068:229;:::o;11303:366::-;11445:3;11466:67;11530:2;11525:3;11466:67;:::i;:::-;11459:74;;11542:93;11631:3;11542:93;:::i;:::-;11660:2;11655:3;11651:12;11644:19;;11303:366;;;:::o;11675:419::-;11841:4;11879:2;11868:9;11864:18;11856:26;;11928:9;11922:4;11918:20;11914:1;11903:9;11899:17;11892:47;11956:131;12082:4;11956:131;:::i;:::-;11948:139;;11675:419;;;:::o;12100:177::-;12240:29;12236:1;12228:6;12224:14;12217:53;12100:177;:::o;12283:366::-;12425:3;12446:67;12510:2;12505:3;12446:67;:::i;:::-;12439:74;;12522:93;12611:3;12522:93;:::i;:::-;12640:2;12635:3;12631:12;12624:19;;12283:366;;;:::o;12655:419::-;12821:4;12859:2;12848:9;12844:18;12836:26;;12908:9;12902:4;12898:20;12894:1;12883:9;12879:17;12872:47;12936:131;13062:4;12936:131;:::i;:::-;12928:139;;12655:419;;;:::o;13080:180::-;13128:77;13125:1;13118:88;13225:4;13222:1;13215:15;13249:4;13246:1;13239:15;13266:180;13314:77;13311:1;13304:88;13411:4;13408:1;13401:15;13435:4;13432:1;13425:15;13452:194;13492:4;13512:20;13530:1;13512:20;:::i;:::-;13507:25;;13546:20;13564:1;13546:20;:::i;:::-;13541:25;;13590:1;13587;13583:9;13575:17;;13614:1;13608:4;13605:11;13602:37;;;13619:18;;:::i;:::-;13602:37;13452:194;;;;:::o;13652:180::-;13700:77;13697:1;13690:88;13797:4;13794:1;13787:15;13821:4;13818:1;13811:15;13838:233;13877:3;13900:24;13918:5;13900:24;:::i;:::-;13891:33;;13946:66;13939:5;13936:77;13933:103;;14016:18;;:::i;:::-;13933:103;14063:1;14056:5;14052:13;14045:20;;13838:233;;;:::o;14077:181::-;14217:33;14213:1;14205:6;14201:14;14194:57;14077:181;:::o;14264:366::-;14406:3;14427:67;14491:2;14486:3;14427:67;:::i;:::-;14420:74;;14503:93;14592:3;14503:93;:::i;:::-;14621:2;14616:3;14612:12;14605:19;;14264:366;;;:::o;14636:419::-;14802:4;14840:2;14829:9;14825:18;14817:26;;14889:9;14883:4;14879:20;14875:1;14864:9;14860:17;14853:47;14917:131;15043:4;14917:131;:::i;:::-;14909:139;;14636:419;;;:::o;15061:225::-;15201:34;15197:1;15189:6;15185:14;15178:58;15270:8;15265:2;15257:6;15253:15;15246:33;15061:225;:::o;15292:366::-;15434:3;15455:67;15519:2;15514:3;15455:67;:::i;:::-;15448:74;;15531:93;15620:3;15531:93;:::i;:::-;15649:2;15644:3;15640:12;15633:19;;15292:366;;;:::o;15664:419::-;15830:4;15868:2;15857:9;15853:18;15845:26;;15917:9;15911:4;15907:20;15903:1;15892:9;15888:17;15881:47;15945:131;16071:4;15945:131;:::i;:::-;15937:139;;15664:419;;;:::o;16089:180::-;16137:77;16134:1;16127:88;16234:4;16231:1;16224:15;16258:4;16255:1;16248:15;16275:185;16315:1;16332:20;16350:1;16332:20;:::i;:::-;16327:25;;16366:20;16384:1;16366:20;:::i;:::-;16361:25;;16405:1;16395:35;;16410:18;;:::i;:::-;16395:35;16452:1;16449;16445:9;16440:14;;16275:185;;;;:::o;16466:223::-;16606:34;16602:1;16594:6;16590:14;16583:58;16675:6;16670:2;16662:6;16658:15;16651:31;16466:223;:::o;16695:366::-;16837:3;16858:67;16922:2;16917:3;16858:67;:::i;:::-;16851:74;;16934:93;17023:3;16934:93;:::i;:::-;17052:2;17047:3;17043:12;17036:19;;16695:366;;;:::o;17067:419::-;17233:4;17271:2;17260:9;17256:18;17248:26;;17320:9;17314:4;17310:20;17306:1;17295:9;17291:17;17284:47;17348:131;17474:4;17348:131;:::i;:::-;17340:139;;17067:419;;;:::o;17492:221::-;17632:34;17628:1;17620:6;17616:14;17609:58;17701:4;17696:2;17688:6;17684:15;17677:29;17492:221;:::o;17719:366::-;17861:3;17882:67;17946:2;17941:3;17882:67;:::i;:::-;17875:74;;17958:93;18047:3;17958:93;:::i;:::-;18076:2;18071:3;18067:12;18060:19;;17719:366;;;:::o;18091:419::-;18257:4;18295:2;18284:9;18280:18;18272:26;;18344:9;18338:4;18334:20;18330:1;18319:9;18315:17;18308:47;18372:131;18498:4;18372:131;:::i;:::-;18364:139;;18091:419;;;:::o;18516:224::-;18656:34;18652:1;18644:6;18640:14;18633:58;18725:7;18720:2;18712:6;18708:15;18701:32;18516:224;:::o;18746:366::-;18888:3;18909:67;18973:2;18968:3;18909:67;:::i;:::-;18902:74;;18985:93;19074:3;18985:93;:::i;:::-;19103:2;19098:3;19094:12;19087:19;;18746:366;;;:::o;19118:419::-;19284:4;19322:2;19311:9;19307:18;19299:26;;19371:9;19365:4;19361:20;19357:1;19346:9;19342:17;19335:47;19399:131;19525:4;19399:131;:::i;:::-;19391:139;;19118:419;;;:::o;19543:222::-;19683:34;19679:1;19671:6;19667:14;19660:58;19752:5;19747:2;19739:6;19735:15;19728:30;19543:222;:::o;19771:366::-;19913:3;19934:67;19998:2;19993:3;19934:67;:::i;:::-;19927:74;;20010:93;20099:3;20010:93;:::i;:::-;20128:2;20123:3;20119:12;20112:19;;19771:366;;;:::o;20143:419::-;20309:4;20347:2;20336:9;20332:18;20324:26;;20396:9;20390:4;20386:20;20382:1;20371:9;20367:17;20360:47;20424:131;20550:4;20424:131;:::i;:::-;20416:139;;20143:419;;;:::o;20568:228::-;20708:34;20704:1;20696:6;20692:14;20685:58;20777:11;20772:2;20764:6;20760:15;20753:36;20568:228;:::o;20802:366::-;20944:3;20965:67;21029:2;21024:3;20965:67;:::i;:::-;20958:74;;21041:93;21130:3;21041:93;:::i;:::-;21159:2;21154:3;21150:12;21143:19;;20802:366;;;:::o;21174:419::-;21340:4;21378:2;21367:9;21363:18;21355:26;;21427:9;21421:4;21417:20;21413:1;21402:9;21398:17;21391:47;21455:131;21581:4;21455:131;:::i;:::-;21447:139;;21174:419;;;:::o;21599:227::-;21739:34;21735:1;21727:6;21723:14;21716:58;21808:10;21803:2;21795:6;21791:15;21784:35;21599:227;:::o;21832:366::-;21974:3;21995:67;22059:2;22054:3;21995:67;:::i;:::-;21988:74;;22071:93;22160:3;22071:93;:::i;:::-;22189:2;22184:3;22180:12;22173:19;;21832:366;;;:::o;22204:419::-;22370:4;22408:2;22397:9;22393:18;22385:26;;22457:9;22451:4;22447:20;22443:1;22432:9;22428:17;22421:47;22485:131;22611:4;22485:131;:::i;:::-;22477:139;;22204:419;;;:::o;22629:191::-;22669:3;22688:20;22706:1;22688:20;:::i;:::-;22683:25;;22722:20;22740:1;22722:20;:::i;:::-;22717:25;;22765:1;22762;22758:9;22751:16;;22786:3;22783:1;22780:10;22777:36;;;22793:18;;:::i;:::-;22777:36;22629:191;;;;:::o;22826:180::-;22874:77;22871:1;22864:88;22971:4;22968:1;22961:15;22995:4;22992:1;22985:15;23012:143;23069:5;23100:6;23094:13;23085:22;;23116:33;23143:5;23116:33;:::i;:::-;23012:143;;;;:::o;23161:351::-;23231:6;23280:2;23268:9;23259:7;23255:23;23251:32;23248:119;;;23286:79;;:::i;:::-;23248:119;23406:1;23431:64;23487:7;23478:6;23467:9;23463:22;23431:64;:::i;:::-;23421:74;;23377:128;23161:351;;;;:::o;23518:85::-;23563:7;23592:5;23581:16;;23518:85;;;:::o;23609:158::-;23667:9;23700:61;23718:42;23727:32;23753:5;23727:32;:::i;:::-;23718:42;:::i;:::-;23700:61;:::i;:::-;23687:74;;23609:158;;;:::o;23773:147::-;23868:45;23907:5;23868:45;:::i;:::-;23863:3;23856:58;23773:147;;:::o;23926:114::-;23993:6;24027:5;24021:12;24011:22;;23926:114;;;:::o;24046:184::-;24145:11;24179:6;24174:3;24167:19;24219:4;24214:3;24210:14;24195:29;;24046:184;;;;:::o;24236:132::-;24303:4;24326:3;24318:11;;24356:4;24351:3;24347:14;24339:22;;24236:132;;;:::o;24374:108::-;24451:24;24469:5;24451:24;:::i;:::-;24446:3;24439:37;24374:108;;:::o;24488:179::-;24557:10;24578:46;24620:3;24612:6;24578:46;:::i;:::-;24656:4;24651:3;24647:14;24633:28;;24488:179;;;;:::o;24673:113::-;24743:4;24775;24770:3;24766:14;24758:22;;24673:113;;;:::o;24822:732::-;24941:3;24970:54;25018:5;24970:54;:::i;:::-;25040:86;25119:6;25114:3;25040:86;:::i;:::-;25033:93;;25150:56;25200:5;25150:56;:::i;:::-;25229:7;25260:1;25245:284;25270:6;25267:1;25264:13;25245:284;;;25346:6;25340:13;25373:63;25432:3;25417:13;25373:63;:::i;:::-;25366:70;;25459:60;25512:6;25459:60;:::i;:::-;25449:70;;25305:224;25292:1;25289;25285:9;25280:14;;25245:284;;;25249:14;25545:3;25538:10;;24946:608;;;24822:732;;;;:::o;25560:831::-;25823:4;25861:3;25850:9;25846:19;25838:27;;25875:71;25943:1;25932:9;25928:17;25919:6;25875:71;:::i;:::-;25956:80;26032:2;26021:9;26017:18;26008:6;25956:80;:::i;:::-;26083:9;26077:4;26073:20;26068:2;26057:9;26053:18;26046:48;26111:108;26214:4;26205:6;26111:108;:::i;:::-;26103:116;;26229:72;26297:2;26286:9;26282:18;26273:6;26229:72;:::i;:::-;26311:73;26379:3;26368:9;26364:19;26355:6;26311:73;:::i;:::-;25560:831;;;;;;;;:::o;26397:348::-;26437:7;26460:20;26478:1;26460:20;:::i;:::-;26455:25;;26494:20;26512:1;26494:20;:::i;:::-;26489:25;;26682:1;26614:66;26610:74;26607:1;26604:81;26599:1;26592:9;26585:17;26581:105;26578:131;;;26689:18;;:::i;:::-;26578:131;26737:1;26734;26730:9;26719:20;;26397:348;;;;:::o
Swarm Source
ipfs://ac978c2752053a4b594f7f96f98667b8d36756cca039929a97acd978dfe4289f
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.