Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
98,496,353,738.057505317 NexF
Holders
373
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
8,622.758461811 NexFValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
NexF
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-05-29 */ pragma solidity ^0.8.14; // SPDX-License-Identifier: Unlicensed interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract NexF is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; struct RValuesStruct { uint256 rAmount; uint256 rTransferAmount; uint256 rReflectionFee; uint256 rBurnFee; uint256 rinvestmentTokenFee; uint256 rInvestmentETHFee; } struct TValuesStruct { uint256 tTransferAmount; uint256 tReflectionFee; uint256 tBurnFee; uint256 tinvestmentTokenFee; uint256 tInvestmentETHFee; } struct ValuesStruct { uint256 rAmount; uint256 rTransferAmount; uint256 rReflectionFee; uint256 rBurnFee; uint256 rinvestmentTokenFee; uint256 rInvestmentETHFee; uint256 tTransferAmount; uint256 tReflectionFee; uint256 tBurnFee; uint256 tinvestmentTokenFee; uint256 tInvestmentETHFee; } mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100 * 10**9 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tReflectionFeeTotal; uint256 private _tBurnFeeTotal; string private _name = "NexF"; string private _symbol = "NexF"; uint8 private _decimals = 9; uint256 public _reflectionFee = 1; uint256 public _burnFee = 1; uint256 public _investmentTokenFee = 1; uint256 public _investmentETHFee = 0; address public investmentTokenFeeWallet = 0xf18DB3ff2595332E293CbbAeC8cF380194d3dbF6; address public investmentETHFeeWallet = 0xf18DB3ff2595332E293CbbAeC8cF380194d3dbF6; address public burnAddress = 0x000000000000000000000000000000000000dEaD; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inInvestmentEthSwap = false; bool public _investmentConverttoETH = true; bool public _tradingEnabled = false; uint256 public _maxTxAmount = 100 * 10**6 * 10**9; uint256 private _numTokensSwapToETHForInvestment = 40 * 10**6 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); modifier lockTheSwap { inInvestmentEthSwap = true; _; inInvestmentEthSwap = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Uniswap V2 // 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 totalReflectionFees() public view returns (uint256) { return _tReflectionFeeTotal; } function totalBurnFees() public view returns (uint256) { return _tBurnFeeTotal; } /** * @dev Returns the Number of tokens in contract that are needed to be reached before swapping to ETH and sending to Investment Wallet. . */ function numTokensSwapToETHForInvestment() public view returns (uint256) { return _numTokensSwapToETHForInvestment; } 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).rAmount; return rAmount; } else { uint256 rTransferAmount = _getValues(tAmount).rTransferAmount; 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 already excluded"); require(_excluded.length < 100, "Excluded list is too long"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _distributeFee(uint256 rReflectionFee, uint256 rBurnFee, uint256 rinvestmentTokenFee, uint256 tReflectionFee, uint256 tBurnFee, uint256 tinvestmentTokenFee) private { _rTotal = _rTotal.sub(rReflectionFee).sub(rBurnFee); _tReflectionFeeTotal = _tReflectionFeeTotal.add(tReflectionFee); _tTotal = _tTotal.sub(tBurnFee); _tBurnFeeTotal = _tBurnFeeTotal.add(tBurnFee); _rOwned[investmentTokenFeeWallet] = _rOwned[investmentTokenFeeWallet].add(rinvestmentTokenFee); if (_isExcluded[investmentTokenFeeWallet]) { _tOwned[investmentTokenFeeWallet] = _tOwned[investmentTokenFeeWallet].add(tinvestmentTokenFee); } _rOwned[burnAddress] = _rOwned[burnAddress].add(rBurnFee); if (_isExcluded[burnAddress]) { _tOwned[burnAddress] = _tOwned[burnAddress].add(tBurnFee); } } function _getValues(uint256 tAmount) private view returns (ValuesStruct memory) { TValuesStruct memory tvs = _getTValues(tAmount); RValuesStruct memory rvs = _getRValues(tAmount, tvs.tReflectionFee, tvs.tBurnFee, tvs.tinvestmentTokenFee, tvs.tInvestmentETHFee, _getRate()); return ValuesStruct( rvs.rAmount, rvs.rTransferAmount, rvs.rReflectionFee, rvs.rBurnFee, rvs.rinvestmentTokenFee, rvs.rInvestmentETHFee, tvs.tTransferAmount, tvs.tReflectionFee, tvs.tBurnFee, tvs.tinvestmentTokenFee, tvs.tInvestmentETHFee ); } function _getTValues(uint256 tAmount) private view returns (TValuesStruct memory) { uint256 tReflectionFee = calculateReflectionFee(tAmount); uint256 tBurnFee = calculateBurnFee(tAmount); uint256 tinvestmentTokenFee = calculateinvestmentTokenFee(tAmount); uint256 tInvestmentETHFee = calculateInvestmentETHFee(tAmount); uint256 tTransferAmount = tAmount.sub(tReflectionFee).sub(tBurnFee).sub(tinvestmentTokenFee).sub(tInvestmentETHFee); return TValuesStruct(tTransferAmount, tReflectionFee, tBurnFee, tinvestmentTokenFee, tInvestmentETHFee); } function _getRValues(uint256 tAmount, uint256 tReflectionFee, uint256 tBurnFee, uint256 tinvestmentTokenFee, uint256 tInvestmentETHFee, uint256 currentRate) private pure returns (RValuesStruct memory) { uint256 rAmount = tAmount.mul(currentRate); uint256 rReflectionFee = tReflectionFee.mul(currentRate); uint256 rBurnFee = tBurnFee.mul(currentRate); uint256 rinvestmentTokenFee = tinvestmentTokenFee.mul(currentRate); uint256 rInvestmentETHFee = tInvestmentETHFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rReflectionFee).sub(rInvestmentETHFee).sub(rBurnFee).sub(rinvestmentTokenFee); return RValuesStruct(rAmount, rTransferAmount, rReflectionFee, rBurnFee, rinvestmentTokenFee, rInvestmentETHFee); } 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 _takeInvestmentETHFee(uint256 rInvestmentETHFee, uint256 tInvestmentETHFee) private { _rOwned[address(this)] = _rOwned[address(this)].add(rInvestmentETHFee); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tInvestmentETHFee); } function calculateReflectionFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_reflectionFee).div( 10**2 ); } function calculateBurnFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_burnFee).div( 10**2 ); } function calculateinvestmentTokenFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_investmentTokenFee).div( 10**2 ); } function calculateInvestmentETHFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_investmentETHFee).div( 10**2 ); } function removeAllFee() private { _reflectionFee = 0; _investmentETHFee = 0; _burnFee = 0; _investmentTokenFee = 0; } function restoreAllFee() private { _reflectionFee = 1; _investmentETHFee = 0; _investmentTokenFee = 1; _burnFee = 1; } 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"); // block trading until owner has added liquidity and enabled trading if(!_tradingEnabled && from != owner()) { revert("Trading is not enabled!"); } // is the token balance of this contract address over the min number of // tokens that we need to initiate a swaptoEth lock? // also, don't get caught in a circular liquidity event. // also, don't SwapInvestmentAndSendETH if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= _numTokensSwapToETHForInvestment; if ( overMinTokenBalance && !inInvestmentEthSwap && from != uniswapV2Pair && _investmentConverttoETH ) { contractTokenBalance = _numTokensSwapToETHForInvestment; //Perform a Swap of Token for ETH Portion of Investment Fees swapInvestmentAndSendEth(contractTokenBalance); } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount); } function swapInvestmentAndSendEth(uint256 tokenAmount) 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), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, investmentETHFeeWallet, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ removeAllFee(); } else{ require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } ValuesStruct memory vs = _getValues(amount); _takeInvestmentETHFee(vs.rInvestmentETHFee, vs.tInvestmentETHFee); _distributeFee(vs.rReflectionFee, vs.rBurnFee, vs.rinvestmentTokenFee, vs.tReflectionFee, vs.tBurnFee, vs.tinvestmentTokenFee); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount, vs); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, vs); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, vs); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount, vs); } if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) restoreAllFee(); } function _transferStandard(address sender, address recipient, ValuesStruct memory vs) private { _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function _transferToExcluded(address sender, address recipient, ValuesStruct memory vs) private { _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _tOwned[recipient] = _tOwned[recipient].add(vs.tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount, ValuesStruct memory vs) private { _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount, ValuesStruct memory vs) private { _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _tOwned[recipient] = _tOwned[recipient].add(vs.tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function enableAllFees() external onlyOwner() { _reflectionFee = 1; _burnFee = 1; _investmentTokenFee = 1; _investmentETHFee = 0; _investmentConverttoETH = true; } function disableAllFees() external onlyOwner() { _reflectionFee = 0; _burnFee = 0; _investmentTokenFee = 0; _investmentETHFee = 0; _investmentConverttoETH = false; } function setReflectionFee(uint256 FeeAmount) external onlyOwner() { _reflectionFee = FeeAmount; } function setBurnFee(uint256 FeeAmount) external onlyOwner() { _burnFee = FeeAmount; } function setInvestmenTokenFee(uint256 FeeAmount) external onlyOwner() { _investmentTokenFee = FeeAmount; } function setInvestmenETHFee(uint256 FeeAmount) external onlyOwner() { _investmentETHFee = FeeAmount; } function setInvestmentETHWallet(address newWallet) external onlyOwner() { investmentETHFeeWallet = newWallet; } function setInvestmentTokenWallet(address newWallet) external onlyOwner() { investmentTokenFeeWallet = newWallet; } function setMaxTxAmount(uint256 maxAmountInTokensWithDecimals) external onlyOwner() { require(maxAmountInTokensWithDecimals > 100 * 10**6 * 10**9, "Cannot set transaction amount less than 0.1 percent of initial Total Supply!"); _maxTxAmount = maxAmountInTokensWithDecimals; } function enableTrading() public onlyOwner { require(!_tradingEnabled, "Trading already enabled!"); _tradingEnabled = true; } function disableTrading() public onlyOwner { require(_tradingEnabled, "Trading already disabled!"); _tradingEnabled = false; } function setinvestmentConverttoETH(bool _enabled) public onlyOwner { _investmentConverttoETH = _enabled; } // Number of Tokens to Accrue before Selling To Add to Investment function setnumTokensSwapToETHForInvestment(uint256 tokenAmount) external onlyOwner() { _numTokensSwapToETHForInvestment = tokenAmount; } /** * @dev Function to recover any ETH sent to Contract by Mistake. */ function recoverETHFromContract(uint256 weiAmount) external onlyOwner{ require(address(this).balance >= weiAmount, "insufficient ETH balance"); payable(owner()).transfer(weiAmount); } /** * @dev Function to recover any ERC20 Tokens sent to Contract by Mistake. */ function recoverAnyERC20TokensFromContract(address _tokenAddr, address _to, uint _amount) public onlyOwner { IERC20(_tokenAddr).transfer(_to, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_investmentConverttoETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_investmentETHFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_investmentTokenFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"investmentETHFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investmentTokenFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSwapToETHForInvestment","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":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverAnyERC20TokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"recoverETHFromContract","outputs":[],"stateMutability":"nonpayable","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":"FeeAmount","type":"uint256"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"FeeAmount","type":"uint256"}],"name":"setInvestmenETHFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"FeeAmount","type":"uint256"}],"name":"setInvestmenTokenFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setInvestmentETHWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setInvestmentTokenWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxAmountInTokensWithDecimals","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"FeeAmount","type":"uint256"}],"name":"setReflectionFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setinvestmentConverttoETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"setnumTokensSwapToETHForInvestment","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":"totalBurnFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionFees","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
60c060405268056bc75e2d631000006009556009545f19620000229190620006c4565b5f1962000030919062000728565b600a556040518060400160405280600481526020017f4e65784600000000000000000000000000000000000000000000000000000000815250600d9081620000799190620009bd565b506040518060400160405280600481526020017f4e65784600000000000000000000000000000000000000000000000000000000815250600e9081620000c09190620009bd565b506009600f5f6101000a81548160ff021916908360ff1602179055506001601055600160115560016012555f60135573f18db3ff2595332e293cbbaec8cf380194d3dbf660145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f18db3ff2595332e293cbbaec8cf380194d3dbf660155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead60165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f601660146101000a81548160ff0219169083151502179055506001601660156101000a81548160ff0219169083151502179055505f6016806101000a81548160ff02191690831515021790555067016345785d8a0000601755668e1bc9bf0400006018553480156200024a575f80fd5b505f6200025c6200066060201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a5460035f6200030e6200066060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003d3919062000b06565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000439573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200045f919062000b06565b6040518363ffffffff1660e01b81526004016200047e92919062000b47565b6020604051808303815f875af11580156200049b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004c1919062000b06565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160065f6200053d6200066760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620005f16200066060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60095460405162000651919062000b83565b60405180910390a35062000b9e565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620006d0826200068e565b9150620006dd836200068e565b925082620006f057620006ef62000697565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000734826200068e565b915062000741836200068e565b92508282039050818111156200075c576200075b620006fb565b5b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620007de57607f821691505b602082108103620007f457620007f362000799565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620008587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200081b565b6200086486836200081b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620008a56200089f62000899846200068e565b6200087c565b6200068e565b9050919050565b5f819050919050565b620008c08362000885565b620008d8620008cf82620008ac565b84845462000827565b825550505050565b5f90565b620008ee620008e0565b620008fb818484620008b5565b505050565b5b818110156200092257620009165f82620008e4565b60018101905062000901565b5050565b601f82111562000971576200093b81620007fa565b62000946846200080c565b8101602085101562000956578190505b6200096e62000965856200080c565b83018262000900565b50505b505050565b5f82821c905092915050565b5f620009935f198460080262000976565b1980831691505092915050565b5f620009ad838362000982565b9150826002028217905092915050565b620009c88262000762565b67ffffffffffffffff811115620009e457620009e36200076c565b5b620009f08254620007c6565b620009fd82828562000926565b5f60209050601f83116001811462000a33575f841562000a1e578287015190505b62000a2a8582620009a0565b86555062000a99565b601f19841662000a4386620007fa565b5f5b8281101562000a6c5784890151825560018201915060208501945060208101905062000a45565b8683101562000a8c578489015162000a88601f89168262000982565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000ad08262000aa5565b9050919050565b62000ae28162000ac4565b811462000aed575f80fd5b50565b5f8151905062000b008162000ad7565b92915050565b5f6020828403121562000b1e5762000b1d62000aa1565b5b5f62000b2d8482850162000af0565b91505092915050565b62000b418162000ac4565b82525050565b5f60408201905062000b5c5f83018562000b36565b62000b6b602083018462000b36565b9392505050565b62000b7d816200068e565b82525050565b5f60208201905062000b985f83018462000b72565b92915050565b60805160a051615da762000bdc5f395f81816111c70152612bae01525f8181610c6801528181612edf01528181612fbe0152612fe50152615da75ff3fe6080604052600436106102e7575f3560e01c8063715018a61161018f578063b8d36b50116100db578063e547be6911610094578063ec28438a1161006e578063ec28438a14610b04578063f2fde38b14610b2c578063f709594514610b54578063ffc7863514610b7e576102ee565b8063e547be6914610a8a578063ea2f0b3714610ab2578063ec09e10614610ada576102ee565b8063b8d36b5014610984578063c0b0fda2146109ac578063c9e9ed8b146109d6578063caf8ce3a146109fe578063da0257ba14610a26578063dd62ed3e14610a4e576102ee565b80638c8f8c0411610148578063a457c2d711610122578063a457c2d7146108b8578063a9059cbb146108f4578063adbede7214610930578063b7dd16ea1461095a576102ee565b80638c8f8c041461083c5780638da5cb5b1461086457806395d89b411461088e576102ee565b8063715018a61461076a578063741af87f14610780578063761ebaac146107965780637d1db4a5146107c057806388f82020146107ea5780638a8c523c14610826576102ee565b8063395093511161024e578063517a7950116102075780636953c15a116101e15780636953c15a146106b25780637099ba4d146106dc57806370a082311461070457806370d5ae0514610740576102ee565b8063517a79501461062657806352390c021461064e5780635342acb414610676576102ee565b8063395093511461050a5780633cfbf55614610546578063437823ec146105705780634549b0391461059857806349bd5a5e146105d45780634bf2c7c9146105fe576102ee565b80631e826530116102a05780631e826530146103ec57806323b872dd146104145780632d83811914610450578063313ce5671461048c578063317653e0146104b65780633206b4aa146104e0576102ee565b806306fdde03146102f2578063095ea7b31461031c5780630fba1814146103585780631694505e1461038257806317700f01146103ac57806318160ddd146103c2576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610b94565b6040516103139190614bd6565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190614c87565b610c24565b60405161034f9190614cdf565b60405180910390f35b348015610363575f80fd5b5061036c610c41565b6040516103799190614d07565b60405180910390f35b34801561038d575f80fd5b50610396610c66565b6040516103a39190614d7b565b60405180910390f35b3480156103b7575f80fd5b506103c0610c8a565b005b3480156103cd575f80fd5b506103d6610d86565b6040516103e39190614da3565b60405180910390f35b3480156103f7575f80fd5b50610412600480360381019061040d9190614de6565b610d8f565b005b34801561041f575f80fd5b5061043a60048036038101906104359190614e11565b610e40565b6040516104479190614cdf565b60405180910390f35b34801561045b575f80fd5b5061047660048036038101906104719190614e61565b610f14565b6040516104839190614da3565b60405180910390f35b348015610497575f80fd5b506104a0610f80565b6040516104ad9190614ea7565b60405180910390f35b3480156104c1575f80fd5b506104ca610f95565b6040516104d79190614da3565b60405180910390f35b3480156104eb575f80fd5b506104f4610f9e565b6040516105019190614da3565b60405180910390f35b348015610515575f80fd5b50610530600480360381019061052b9190614c87565b610fa4565b60405161053d9190614cdf565b60405180910390f35b348015610551575f80fd5b5061055a611052565b6040516105679190614da3565b60405180910390f35b34801561057b575f80fd5b5061059660048036038101906105919190614ec0565b61105b565b005b3480156105a3575f80fd5b506105be60048036038101906105b99190614eeb565b611147565b6040516105cb9190614da3565b60405180910390f35b3480156105df575f80fd5b506105e86111c5565b6040516105f59190614d07565b60405180910390f35b348015610609575f80fd5b50610624600480360381019061061f9190614e61565b6111e9565b005b348015610631575f80fd5b5061064c60048036038101906106479190614ec0565b611287565b005b348015610659575f80fd5b50610674600480360381019061066f9190614ec0565b61135e565b005b348015610681575f80fd5b5061069c60048036038101906106979190614ec0565b6116cb565b6040516106a99190614cdf565b60405180910390f35b3480156106bd575f80fd5b506106c661171d565b6040516106d39190614da3565b60405180910390f35b3480156106e7575f80fd5b5061070260048036038101906106fd9190614e61565b611723565b005b34801561070f575f80fd5b5061072a60048036038101906107259190614ec0565b6117c1565b6040516107379190614da3565b60405180910390f35b34801561074b575f80fd5b506107546118a4565b6040516107619190614d07565b60405180910390f35b348015610775575f80fd5b5061077e6118c9565b005b34801561078b575f80fd5b50610794611a17565b005b3480156107a1575f80fd5b506107aa611ae3565b6040516107b79190614d07565b60405180910390f35b3480156107cb575f80fd5b506107d4611b08565b6040516107e19190614da3565b60405180910390f35b3480156107f5575f80fd5b50610810600480360381019061080b9190614ec0565b611b0e565b60405161081d9190614cdf565b60405180910390f35b348015610831575f80fd5b5061083a611b60565b005b348015610847575f80fd5b50610862600480360381019061085d9190614e11565b611c5e565b005b34801561086f575f80fd5b50610878611d73565b6040516108859190614d07565b60405180910390f35b348015610899575f80fd5b506108a2611d9a565b6040516108af9190614bd6565b60405180910390f35b3480156108c3575f80fd5b506108de60048036038101906108d99190614c87565b611e2a565b6040516108eb9190614cdf565b60405180910390f35b3480156108ff575f80fd5b5061091a60048036038101906109159190614c87565b611ef2565b6040516109279190614cdf565b60405180910390f35b34801561093b575f80fd5b50610944611f0f565b6040516109519190614da3565b60405180910390f35b348015610965575f80fd5b5061096e611f18565b60405161097b9190614cdf565b60405180910390f35b34801561098f575f80fd5b506109aa60048036038101906109a59190614e61565b611f2b565b005b3480156109b7575f80fd5b506109c0612050565b6040516109cd9190614da3565b60405180910390f35b3480156109e1575f80fd5b506109fc60048036038101906109f79190614e61565b612056565b005b348015610a09575f80fd5b50610a246004803603810190610a1f9190614ec0565b6120f4565b005b348015610a31575f80fd5b50610a4c6004803603810190610a479190614e61565b6121cb565b005b348015610a59575f80fd5b50610a746004803603810190610a6f9190614f29565b612269565b604051610a819190614da3565b60405180910390f35b348015610a95575f80fd5b50610ab06004803603810190610aab9190614e61565b6122eb565b005b348015610abd575f80fd5b50610ad86004803603810190610ad39190614ec0565b612389565b005b348015610ae5575f80fd5b50610aee612474565b604051610afb9190614da3565b60405180910390f35b348015610b0f575f80fd5b50610b2a6004803603810190610b259190614e61565b61247a565b005b348015610b37575f80fd5b50610b526004803603810190610b4d9190614ec0565b612562565b005b348015610b5f575f80fd5b50610b6861271f565b604051610b759190614cdf565b60405180910390f35b348015610b89575f80fd5b50610b92612730565b005b6060600d8054610ba390614f94565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcf90614f94565b8015610c1a5780601f10610bf157610100808354040283529160200191610c1a565b820191905f5260205f20905b815481529060010190602001808311610bfd57829003601f168201915b5050505050905090565b5f610c37610c30612800565b8484612807565b6001905092915050565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b610c92612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d159061500e565b60405180910390fd5b60168054906101000a900460ff16610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290615076565b60405180910390fd5b5f6016806101000a81548160ff021916908315150217905550565b5f600954905090565b610d97612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a9061500e565b60405180910390fd5b80601660156101000a81548160ff02191690831515021790555050565b5f610e4c8484846129ca565b610f0984610e58612800565b610f0485604051806060016040528060288152602001615d256028913960055f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610ebb612800565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c3b9092919063ffffffff16565b612807565b600190509392505050565b5f600a54821115610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190615104565b60405180910390fd5b5f610f63612c9d565b9050610f788184612cc690919063ffffffff16565b915050919050565b5f600f5f9054906101000a900460ff16905090565b5f600c54905090565b60105481565b5f611048610fb0612800565b846110438560055f610fc0612800565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b612807565b6001905092915050565b5f601854905090565b611063612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e69061500e565b60405180910390fd5b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f60095483111561118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111849061516c565b60405180910390fd5b816111aa575f61119c84612d6c565b5f01519050809150506111bf565b5f6111b484612d6c565b602001519050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6111f1612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112749061500e565b60405180910390fd5b8060118190555050565b61128f612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113129061500e565b60405180910390fd5b8060145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611366612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e99061500e565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146b906151fa565b60405180910390fd5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f590615262565b60405180910390fd5b606460088054905010611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d906152ca565b60405180910390fd5b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115611613576115d160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f14565b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600881908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60125481565b61172b612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae9061500e565b60405180910390fd5b8060138190555050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156118565760045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905061189f565b61189c60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f14565b90505b919050565b60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118d1612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119549061500e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611a1f612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa29061500e565b60405180910390fd5b5f6010819055505f6011819055505f6012819055505f6013819055505f601660156101000a81548160ff021916908315150217905550565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611b68612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb9061500e565b60405180910390fd5b60168054906101000a900460ff1615611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990615332565b60405180910390fd5b60016016806101000a81548160ff021916908315150217905550565b611c66612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce99061500e565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611d2d929190615350565b6020604051808303815f875af1158015611d49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6d919061538b565b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054611da990614f94565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd590614f94565b8015611e205780601f10611df757610100808354040283529160200191611e20565b820191905f5260205f20905b815481529060010190602001808311611e0357829003601f168201915b5050505050905090565b5f611ee8611e36612800565b84611ee385604051806060016040528060258152602001615d4d6025913960055f611e5f612800565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c3b9092919063ffffffff16565b612807565b6001905092915050565b5f611f05611efe612800565b84846129ca565b6001905092915050565b5f600b54905090565b601660159054906101000a900460ff1681565b611f33612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb69061500e565b60405180910390fd5b80471015612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990615400565b60405180910390fd5b61200a611d73565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561204c573d5f803e3d5ffd5b5050565b60115481565b61205e612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e19061500e565b60405180910390fd5b8060128190555050565b6120fc612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f9061500e565b60405180910390fd5b8060155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121d3612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122569061500e565b60405180910390fd5b8060188190555050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6122f3612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123769061500e565b60405180910390fd5b8060108190555050565b612391612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461241d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124149061500e565b60405180910390fd5b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60135481565b612482612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125059061500e565b60405180910390fd5b67016345785d8a00008111612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f906154b4565b60405180910390fd5b8060178190555050565b61256a612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ed9061500e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265b90615542565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60168054906101000a900460ff1681565b612738612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bb9061500e565b60405180910390fd5b6001601081905550600160118190555060016012819055505f6013819055506001601660156101000a81548160ff021916908315150217905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286c906155d0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da9061565e565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129bd9190614da3565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2f906156ec565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d9061577a565b60405180910390fd5b5f8111612ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adf90615808565b60405180910390fd5b60168054906101000a900460ff16158015612b365750612b06611d73565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6d90615870565b60405180910390fd5b5f612b80306117c1565b90505f6018548210159050808015612ba55750601660149054906101000a900460ff16155b8015612bfd57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c155750601660159054906101000a900460ff165b15612c29576018549150612c2882612e27565b5b612c348585856130b0565b5050505050565b5f838311158290612c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c799190614bd6565b60405180910390fd5b505f8385612c9091906158bb565b9050809150509392505050565b5f805f612ca8613562565b91509150612cbf8183612cc690919063ffffffff16565b9250505090565b5f612d0783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137f7565b905092915050565b5f808284612d1d91906158ee565b905083811015612d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d599061596b565b60405180910390fd5b8091505092915050565b612d74614aa3565b5f612d7e83613858565b90505f612da6848360200151846040015185606001518660800151612da1612c9d565b61390f565b9050604051806101600160405280825f01518152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a001518152602001835f01518152602001836020015181526020018360400151815260200183606001518152602001836080015181525092505050919050565b6001601660146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115612e5e57612e5d615989565b5b604051908082528060200260200182016040528015612e8c5781602001602082028036833780820191505090505b50905030815f81518110612ea357612ea26159b6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f6a91906159f7565b81600181518110612f7e57612f7d6159b6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fe3307f000000000000000000000000000000000000000000000000000000000000000084612807565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8460155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613065959493929190615b12565b5f604051808303815f87803b15801561307c575f80fd5b505af115801561308e573d5f803e3d5ffd5b50505050505f601660146101000a81548160ff02191690831515021790555050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061314b575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561315d57613158613a10565b6131a3565b6017548111156131a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319990615bda565b60405180910390fd5b5b5f6131ad82612d6c565b90506131c28160a00151826101400151613a2e565b6131ea8160400151826060015183608001518460e00151856101000151866101200151613ba4565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613287575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561329d5761329884848484614058565b6134b3565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561333a575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561334f5761334a848483614281565b6134b2565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156133ed575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613402576133fd8484836144ad565b6134b1565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561349e575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156134b0576134af84848484614644565b5b5b5b5b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061354e575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561355c5761355b614902565b5b50505050565b5f805f600a5490505f60095490505f5b6008805490508110156137ba578260035f60088481548110613597576135966159b6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054118061367c57508160045f60088481548110613618576136176159b6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b1561369357600a54600954945094505050506137f3565b61371e60035f600884815481106136ad576136ac6159b6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548461492390919063ffffffff16565b92506137ab60045f6008848154811061373a576137396159b6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548361492390919063ffffffff16565b91508080600101915050613572565b506137d2600954600a54612cc690919063ffffffff16565b8210156137ea57600a546009549350935050506137f3565b81819350935050505b9091565b5f808311829061383d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138349190614bd6565b60405180910390fd5b505f838561384b9190615c25565b9050809150509392505050565b613860614af2565b5f61386a8361496c565b90505f6138768461499c565b90505f613882856149cc565b90505f61388e866149fc565b90505f6138da826138cc856138be886138b08b8e61492390919063ffffffff16565b61492390919063ffffffff16565b61492390919063ffffffff16565b61492390919063ffffffff16565b90506040518060a001604052808281526020018681526020018581526020018481526020018381525095505050505050919050565b613917614b1c565b5f61392b8389614a2c90919063ffffffff16565b90505f6139418489614a2c90919063ffffffff16565b90505f6139578589614a2c90919063ffffffff16565b90505f61396d8689614a2c90919063ffffffff16565b90505f6139838789614a2c90919063ffffffff16565b90505f6139cf836139c1866139b3866139a58b8d61492390919063ffffffff16565b61492390919063ffffffff16565b61492390919063ffffffff16565b61492390919063ffffffff16565b90506040518060c001604052808781526020018281526020018681526020018581526020018481526020018381525096505050505050509695505050505050565b5f6010819055505f6013819055505f6011819055505f601281905550565b613a7e8260035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613ba057613b5e8160045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5050565b613bcb85613bbd88600a5461492390919063ffffffff16565b61492390919063ffffffff16565b600a81905550613be683600b54612d0f90919063ffffffff16565b600b81905550613c018260095461492390919063ffffffff16565b600981905550613c1c82600c54612d0f90919063ffffffff16565b600c81905550613c938460035f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060075f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613e3957613dd68160045f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60045f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b613eaa8560035f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060075f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561405057613fed8260045f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60045f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b505050505050565b6140a88260045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461492390919063ffffffff16565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061413c815f015160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461492390919063ffffffff16565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506141d1816020015160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516142739190614da3565b60405180910390a350505050565b6142d4815f015160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461492390919063ffffffff16565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506143698160c0015160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506143fe816020015160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516144a09190614da3565b60405180910390a3505050565b614500815f015160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461492390919063ffffffff16565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550614595816020015160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516146379190614da3565b60405180910390a3505050565b6146948260045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461492390919063ffffffff16565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550614728815f015160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461492390919063ffffffff16565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506147bd8160c0015160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550614852816020015160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516148f49190614da3565b60405180910390a350505050565b60016010819055505f60138190555060016012819055506001601181905550565b5f61496483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c3b565b905092915050565b5f614995606461498760105485614a2c90919063ffffffff16565b612cc690919063ffffffff16565b9050919050565b5f6149c560646149b760115485614a2c90919063ffffffff16565b612cc690919063ffffffff16565b9050919050565b5f6149f560646149e760125485614a2c90919063ffffffff16565b612cc690919063ffffffff16565b9050919050565b5f614a256064614a1760135485614a2c90919063ffffffff16565b612cc690919063ffffffff16565b9050919050565b5f808303614a3c575f9050614a9d565b5f8284614a499190615c55565b9050828482614a589190615c25565b14614a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a8f90615d06565b60405180910390fd5b809150505b92915050565b6040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6040518060a001604052805f81526020015f81526020015f81526020015f81526020015f81525090565b6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614b83578082015181840152602081019050614b68565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614ba882614b4c565b614bb28185614b56565b9350614bc2818560208601614b66565b614bcb81614b8e565b840191505092915050565b5f6020820190508181035f830152614bee8184614b9e565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614c2382614bfa565b9050919050565b614c3381614c19565b8114614c3d575f80fd5b50565b5f81359050614c4e81614c2a565b92915050565b5f819050919050565b614c6681614c54565b8114614c70575f80fd5b50565b5f81359050614c8181614c5d565b92915050565b5f8060408385031215614c9d57614c9c614bf6565b5b5f614caa85828601614c40565b9250506020614cbb85828601614c73565b9150509250929050565b5f8115159050919050565b614cd981614cc5565b82525050565b5f602082019050614cf25f830184614cd0565b92915050565b614d0181614c19565b82525050565b5f602082019050614d1a5f830184614cf8565b92915050565b5f819050919050565b5f614d43614d3e614d3984614bfa565b614d20565b614bfa565b9050919050565b5f614d5482614d29565b9050919050565b5f614d6582614d4a565b9050919050565b614d7581614d5b565b82525050565b5f602082019050614d8e5f830184614d6c565b92915050565b614d9d81614c54565b82525050565b5f602082019050614db65f830184614d94565b92915050565b614dc581614cc5565b8114614dcf575f80fd5b50565b5f81359050614de081614dbc565b92915050565b5f60208284031215614dfb57614dfa614bf6565b5b5f614e0884828501614dd2565b91505092915050565b5f805f60608486031215614e2857614e27614bf6565b5b5f614e3586828701614c40565b9350506020614e4686828701614c40565b9250506040614e5786828701614c73565b9150509250925092565b5f60208284031215614e7657614e75614bf6565b5b5f614e8384828501614c73565b91505092915050565b5f60ff82169050919050565b614ea181614e8c565b82525050565b5f602082019050614eba5f830184614e98565b92915050565b5f60208284031215614ed557614ed4614bf6565b5b5f614ee284828501614c40565b91505092915050565b5f8060408385031215614f0157614f00614bf6565b5b5f614f0e85828601614c73565b9250506020614f1f85828601614dd2565b9150509250929050565b5f8060408385031215614f3f57614f3e614bf6565b5b5f614f4c85828601614c40565b9250506020614f5d85828601614c40565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614fab57607f821691505b602082108103614fbe57614fbd614f67565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614ff8602083614b56565b915061500382614fc4565b602082019050919050565b5f6020820190508181035f83015261502581614fec565b9050919050565b7f54726164696e6720616c72656164792064697361626c656421000000000000005f82015250565b5f615060601983614b56565b915061506b8261502c565b602082019050919050565b5f6020820190508181035f83015261508d81615054565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f6150ee602a83614b56565b91506150f982615094565b604082019050919050565b5f6020820190508181035f83015261511b816150e2565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f615156601f83614b56565b915061516182615122565b602082019050919050565b5f6020820190508181035f8301526151838161514a565b9050919050565b7f57652063616e206e6f74206578636c75646520556e697377617020726f7574655f8201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b5f6151e4602283614b56565b91506151ef8261518a565b604082019050919050565b5f6020820190508181035f830152615211816151d8565b9050919050565b7f4163636f756e7420616c7265616479206578636c7564656400000000000000005f82015250565b5f61524c601883614b56565b915061525782615218565b602082019050919050565b5f6020820190508181035f83015261527981615240565b9050919050565b7f4578636c75646564206c69737420697320746f6f206c6f6e67000000000000005f82015250565b5f6152b4601983614b56565b91506152bf82615280565b602082019050919050565b5f6020820190508181035f8301526152e1816152a8565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642100000000000000005f82015250565b5f61531c601883614b56565b9150615327826152e8565b602082019050919050565b5f6020820190508181035f83015261534981615310565b9050919050565b5f6040820190506153635f830185614cf8565b6153706020830184614d94565b9392505050565b5f8151905061538581614dbc565b92915050565b5f602082840312156153a05761539f614bf6565b5b5f6153ad84828501615377565b91505092915050565b7f696e73756666696369656e74204554482062616c616e636500000000000000005f82015250565b5f6153ea601883614b56565b91506153f5826153b6565b602082019050919050565b5f6020820190508181035f830152615417816153de565b9050919050565b7f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c655f8201527f7373207468616e20302e312070657263656e74206f6620696e697469616c205460208201527f6f74616c20537570706c79210000000000000000000000000000000000000000604082015250565b5f61549e604c83614b56565b91506154a98261541e565b606082019050919050565b5f6020820190508181035f8301526154cb81615492565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61552c602683614b56565b9150615537826154d2565b604082019050919050565b5f6020820190508181035f83015261555981615520565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6155ba602483614b56565b91506155c582615560565b604082019050919050565b5f6020820190508181035f8301526155e7816155ae565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f615648602283614b56565b9150615653826155ee565b604082019050919050565b5f6020820190508181035f8301526156758161563c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6156d6602583614b56565b91506156e18261567c565b604082019050919050565b5f6020820190508181035f830152615703816156ca565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f615764602383614b56565b915061576f8261570a565b604082019050919050565b5f6020820190508181035f83015261579181615758565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6157f2602983614b56565b91506157fd82615798565b604082019050919050565b5f6020820190508181035f83015261581f816157e6565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564210000000000000000005f82015250565b5f61585a601783614b56565b915061586582615826565b602082019050919050565b5f6020820190508181035f8301526158878161584e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6158c582614c54565b91506158d083614c54565b92508282039050818111156158e8576158e761588e565b5b92915050565b5f6158f882614c54565b915061590383614c54565b925082820190508082111561591b5761591a61588e565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f615955601b83614b56565b915061596082615921565b602082019050919050565b5f6020820190508181035f83015261598281615949565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506159f181614c2a565b92915050565b5f60208284031215615a0c57615a0b614bf6565b5b5f615a19848285016159e3565b91505092915050565b5f819050919050565b5f615a45615a40615a3b84615a22565b614d20565b614c54565b9050919050565b615a5581615a2b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b615a8d81614c19565b82525050565b5f615a9e8383615a84565b60208301905092915050565b5f602082019050919050565b5f615ac082615a5b565b615aca8185615a65565b9350615ad583615a75565b805f5b83811015615b05578151615aec8882615a93565b9750615af783615aaa565b925050600181019050615ad8565b5085935050505092915050565b5f60a082019050615b255f830188614d94565b615b326020830187615a4c565b8181036040830152615b448186615ab6565b9050615b536060830185614cf8565b615b606080830184614d94565b9695505050505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f615bc4602883614b56565b9150615bcf82615b6a565b604082019050919050565b5f6020820190508181035f830152615bf181615bb8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f615c2f82614c54565b9150615c3a83614c54565b925082615c4a57615c49615bf8565b5b828204905092915050565b5f615c5f82614c54565b9150615c6a83614c54565b9250828202615c7881614c54565b91508282048414831517615c8f57615c8e61588e565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f615cf0602183614b56565b9150615cfb82615c96565b604082019050919050565b5f6020820190508181035f830152615d1d81615ce4565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f68d9c80cae0f8029547d880e6fbc115d3887952ac3bc8b71f6ca24d04ba2d3b64736f6c63430008170033
Deployed Bytecode
0x6080604052600436106102e7575f3560e01c8063715018a61161018f578063b8d36b50116100db578063e547be6911610094578063ec28438a1161006e578063ec28438a14610b04578063f2fde38b14610b2c578063f709594514610b54578063ffc7863514610b7e576102ee565b8063e547be6914610a8a578063ea2f0b3714610ab2578063ec09e10614610ada576102ee565b8063b8d36b5014610984578063c0b0fda2146109ac578063c9e9ed8b146109d6578063caf8ce3a146109fe578063da0257ba14610a26578063dd62ed3e14610a4e576102ee565b80638c8f8c0411610148578063a457c2d711610122578063a457c2d7146108b8578063a9059cbb146108f4578063adbede7214610930578063b7dd16ea1461095a576102ee565b80638c8f8c041461083c5780638da5cb5b1461086457806395d89b411461088e576102ee565b8063715018a61461076a578063741af87f14610780578063761ebaac146107965780637d1db4a5146107c057806388f82020146107ea5780638a8c523c14610826576102ee565b8063395093511161024e578063517a7950116102075780636953c15a116101e15780636953c15a146106b25780637099ba4d146106dc57806370a082311461070457806370d5ae0514610740576102ee565b8063517a79501461062657806352390c021461064e5780635342acb414610676576102ee565b8063395093511461050a5780633cfbf55614610546578063437823ec146105705780634549b0391461059857806349bd5a5e146105d45780634bf2c7c9146105fe576102ee565b80631e826530116102a05780631e826530146103ec57806323b872dd146104145780632d83811914610450578063313ce5671461048c578063317653e0146104b65780633206b4aa146104e0576102ee565b806306fdde03146102f2578063095ea7b31461031c5780630fba1814146103585780631694505e1461038257806317700f01146103ac57806318160ddd146103c2576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610b94565b6040516103139190614bd6565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190614c87565b610c24565b60405161034f9190614cdf565b60405180910390f35b348015610363575f80fd5b5061036c610c41565b6040516103799190614d07565b60405180910390f35b34801561038d575f80fd5b50610396610c66565b6040516103a39190614d7b565b60405180910390f35b3480156103b7575f80fd5b506103c0610c8a565b005b3480156103cd575f80fd5b506103d6610d86565b6040516103e39190614da3565b60405180910390f35b3480156103f7575f80fd5b50610412600480360381019061040d9190614de6565b610d8f565b005b34801561041f575f80fd5b5061043a60048036038101906104359190614e11565b610e40565b6040516104479190614cdf565b60405180910390f35b34801561045b575f80fd5b5061047660048036038101906104719190614e61565b610f14565b6040516104839190614da3565b60405180910390f35b348015610497575f80fd5b506104a0610f80565b6040516104ad9190614ea7565b60405180910390f35b3480156104c1575f80fd5b506104ca610f95565b6040516104d79190614da3565b60405180910390f35b3480156104eb575f80fd5b506104f4610f9e565b6040516105019190614da3565b60405180910390f35b348015610515575f80fd5b50610530600480360381019061052b9190614c87565b610fa4565b60405161053d9190614cdf565b60405180910390f35b348015610551575f80fd5b5061055a611052565b6040516105679190614da3565b60405180910390f35b34801561057b575f80fd5b5061059660048036038101906105919190614ec0565b61105b565b005b3480156105a3575f80fd5b506105be60048036038101906105b99190614eeb565b611147565b6040516105cb9190614da3565b60405180910390f35b3480156105df575f80fd5b506105e86111c5565b6040516105f59190614d07565b60405180910390f35b348015610609575f80fd5b50610624600480360381019061061f9190614e61565b6111e9565b005b348015610631575f80fd5b5061064c60048036038101906106479190614ec0565b611287565b005b348015610659575f80fd5b50610674600480360381019061066f9190614ec0565b61135e565b005b348015610681575f80fd5b5061069c60048036038101906106979190614ec0565b6116cb565b6040516106a99190614cdf565b60405180910390f35b3480156106bd575f80fd5b506106c661171d565b6040516106d39190614da3565b60405180910390f35b3480156106e7575f80fd5b5061070260048036038101906106fd9190614e61565b611723565b005b34801561070f575f80fd5b5061072a60048036038101906107259190614ec0565b6117c1565b6040516107379190614da3565b60405180910390f35b34801561074b575f80fd5b506107546118a4565b6040516107619190614d07565b60405180910390f35b348015610775575f80fd5b5061077e6118c9565b005b34801561078b575f80fd5b50610794611a17565b005b3480156107a1575f80fd5b506107aa611ae3565b6040516107b79190614d07565b60405180910390f35b3480156107cb575f80fd5b506107d4611b08565b6040516107e19190614da3565b60405180910390f35b3480156107f5575f80fd5b50610810600480360381019061080b9190614ec0565b611b0e565b60405161081d9190614cdf565b60405180910390f35b348015610831575f80fd5b5061083a611b60565b005b348015610847575f80fd5b50610862600480360381019061085d9190614e11565b611c5e565b005b34801561086f575f80fd5b50610878611d73565b6040516108859190614d07565b60405180910390f35b348015610899575f80fd5b506108a2611d9a565b6040516108af9190614bd6565b60405180910390f35b3480156108c3575f80fd5b506108de60048036038101906108d99190614c87565b611e2a565b6040516108eb9190614cdf565b60405180910390f35b3480156108ff575f80fd5b5061091a60048036038101906109159190614c87565b611ef2565b6040516109279190614cdf565b60405180910390f35b34801561093b575f80fd5b50610944611f0f565b6040516109519190614da3565b60405180910390f35b348015610965575f80fd5b5061096e611f18565b60405161097b9190614cdf565b60405180910390f35b34801561098f575f80fd5b506109aa60048036038101906109a59190614e61565b611f2b565b005b3480156109b7575f80fd5b506109c0612050565b6040516109cd9190614da3565b60405180910390f35b3480156109e1575f80fd5b506109fc60048036038101906109f79190614e61565b612056565b005b348015610a09575f80fd5b50610a246004803603810190610a1f9190614ec0565b6120f4565b005b348015610a31575f80fd5b50610a4c6004803603810190610a479190614e61565b6121cb565b005b348015610a59575f80fd5b50610a746004803603810190610a6f9190614f29565b612269565b604051610a819190614da3565b60405180910390f35b348015610a95575f80fd5b50610ab06004803603810190610aab9190614e61565b6122eb565b005b348015610abd575f80fd5b50610ad86004803603810190610ad39190614ec0565b612389565b005b348015610ae5575f80fd5b50610aee612474565b604051610afb9190614da3565b60405180910390f35b348015610b0f575f80fd5b50610b2a6004803603810190610b259190614e61565b61247a565b005b348015610b37575f80fd5b50610b526004803603810190610b4d9190614ec0565b612562565b005b348015610b5f575f80fd5b50610b6861271f565b604051610b759190614cdf565b60405180910390f35b348015610b89575f80fd5b50610b92612730565b005b6060600d8054610ba390614f94565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcf90614f94565b8015610c1a5780601f10610bf157610100808354040283529160200191610c1a565b820191905f5260205f20905b815481529060010190602001808311610bfd57829003601f168201915b5050505050905090565b5f610c37610c30612800565b8484612807565b6001905092915050565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b610c92612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d159061500e565b60405180910390fd5b60168054906101000a900460ff16610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290615076565b60405180910390fd5b5f6016806101000a81548160ff021916908315150217905550565b5f600954905090565b610d97612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a9061500e565b60405180910390fd5b80601660156101000a81548160ff02191690831515021790555050565b5f610e4c8484846129ca565b610f0984610e58612800565b610f0485604051806060016040528060288152602001615d256028913960055f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610ebb612800565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c3b9092919063ffffffff16565b612807565b600190509392505050565b5f600a54821115610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190615104565b60405180910390fd5b5f610f63612c9d565b9050610f788184612cc690919063ffffffff16565b915050919050565b5f600f5f9054906101000a900460ff16905090565b5f600c54905090565b60105481565b5f611048610fb0612800565b846110438560055f610fc0612800565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b612807565b6001905092915050565b5f601854905090565b611063612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e69061500e565b60405180910390fd5b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f60095483111561118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111849061516c565b60405180910390fd5b816111aa575f61119c84612d6c565b5f01519050809150506111bf565b5f6111b484612d6c565b602001519050809150505b92915050565b7f00000000000000000000000019e7fe8cc2e813589ce70cf48207e0d50a911d7a81565b6111f1612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112749061500e565b60405180910390fd5b8060118190555050565b61128f612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113129061500e565b60405180910390fd5b8060145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611366612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e99061500e565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146b906151fa565b60405180910390fd5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f590615262565b60405180910390fd5b606460088054905010611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d906152ca565b60405180910390fd5b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115611613576115d160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f14565b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600881908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60125481565b61172b612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae9061500e565b60405180910390fd5b8060138190555050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156118565760045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905061189f565b61189c60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f14565b90505b919050565b60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118d1612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119549061500e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611a1f612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa29061500e565b60405180910390fd5b5f6010819055505f6011819055505f6012819055505f6013819055505f601660156101000a81548160ff021916908315150217905550565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611b68612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb9061500e565b60405180910390fd5b60168054906101000a900460ff1615611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990615332565b60405180910390fd5b60016016806101000a81548160ff021916908315150217905550565b611c66612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce99061500e565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611d2d929190615350565b6020604051808303815f875af1158015611d49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6d919061538b565b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054611da990614f94565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd590614f94565b8015611e205780601f10611df757610100808354040283529160200191611e20565b820191905f5260205f20905b815481529060010190602001808311611e0357829003601f168201915b5050505050905090565b5f611ee8611e36612800565b84611ee385604051806060016040528060258152602001615d4d6025913960055f611e5f612800565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c3b9092919063ffffffff16565b612807565b6001905092915050565b5f611f05611efe612800565b84846129ca565b6001905092915050565b5f600b54905090565b601660159054906101000a900460ff1681565b611f33612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb69061500e565b60405180910390fd5b80471015612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990615400565b60405180910390fd5b61200a611d73565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561204c573d5f803e3d5ffd5b5050565b60115481565b61205e612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e19061500e565b60405180910390fd5b8060128190555050565b6120fc612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f9061500e565b60405180910390fd5b8060155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121d3612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122569061500e565b60405180910390fd5b8060188190555050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6122f3612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123769061500e565b60405180910390fd5b8060108190555050565b612391612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461241d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124149061500e565b60405180910390fd5b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60135481565b612482612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125059061500e565b60405180910390fd5b67016345785d8a00008111612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f906154b4565b60405180910390fd5b8060178190555050565b61256a612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ed9061500e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265b90615542565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60168054906101000a900460ff1681565b612738612800565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bb9061500e565b60405180910390fd5b6001601081905550600160118190555060016012819055505f6013819055506001601660156101000a81548160ff021916908315150217905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286c906155d0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da9061565e565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129bd9190614da3565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2f906156ec565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d9061577a565b60405180910390fd5b5f8111612ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adf90615808565b60405180910390fd5b60168054906101000a900460ff16158015612b365750612b06611d73565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6d90615870565b60405180910390fd5b5f612b80306117c1565b90505f6018548210159050808015612ba55750601660149054906101000a900460ff16155b8015612bfd57507f00000000000000000000000019e7fe8cc2e813589ce70cf48207e0d50a911d7a73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c155750601660159054906101000a900460ff165b15612c29576018549150612c2882612e27565b5b612c348585856130b0565b5050505050565b5f838311158290612c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c799190614bd6565b60405180910390fd5b505f8385612c9091906158bb565b9050809150509392505050565b5f805f612ca8613562565b91509150612cbf8183612cc690919063ffffffff16565b9250505090565b5f612d0783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137f7565b905092915050565b5f808284612d1d91906158ee565b905083811015612d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d599061596b565b60405180910390fd5b8091505092915050565b612d74614aa3565b5f612d7e83613858565b90505f612da6848360200151846040015185606001518660800151612da1612c9d565b61390f565b9050604051806101600160405280825f01518152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a001518152602001835f01518152602001836020015181526020018360400151815260200183606001518152602001836080015181525092505050919050565b6001601660146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115612e5e57612e5d615989565b5b604051908082528060200260200182016040528015612e8c5781602001602082028036833780820191505090505b50905030815f81518110612ea357612ea26159b6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f6a91906159f7565b81600181518110612f7e57612f7d6159b6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fe3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612807565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8460155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613065959493929190615b12565b5f604051808303815f87803b15801561307c575f80fd5b505af115801561308e573d5f803e3d5ffd5b50505050505f601660146101000a81548160ff02191690831515021790555050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061314b575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561315d57613158613a10565b6131a3565b6017548111156131a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319990615bda565b60405180910390fd5b5b5f6131ad82612d6c565b90506131c28160a00151826101400151613a2e565b6131ea8160400151826060015183608001518460e00151856101000151866101200151613ba4565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613287575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561329d5761329884848484614058565b6134b3565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561333a575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561334f5761334a848483614281565b6134b2565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156133ed575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613402576133fd8484836144ad565b6134b1565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561349e575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156134b0576134af84848484614644565b5b5b5b5b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061354e575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561355c5761355b614902565b5b50505050565b5f805f600a5490505f60095490505f5b6008805490508110156137ba578260035f60088481548110613597576135966159b6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054118061367c57508160045f60088481548110613618576136176159b6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b1561369357600a54600954945094505050506137f3565b61371e60035f600884815481106136ad576136ac6159b6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548461492390919063ffffffff16565b92506137ab60045f6008848154811061373a576137396159b6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548361492390919063ffffffff16565b91508080600101915050613572565b506137d2600954600a54612cc690919063ffffffff16565b8210156137ea57600a546009549350935050506137f3565b81819350935050505b9091565b5f808311829061383d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138349190614bd6565b60405180910390fd5b505f838561384b9190615c25565b9050809150509392505050565b613860614af2565b5f61386a8361496c565b90505f6138768461499c565b90505f613882856149cc565b90505f61388e866149fc565b90505f6138da826138cc856138be886138b08b8e61492390919063ffffffff16565b61492390919063ffffffff16565b61492390919063ffffffff16565b61492390919063ffffffff16565b90506040518060a001604052808281526020018681526020018581526020018481526020018381525095505050505050919050565b613917614b1c565b5f61392b8389614a2c90919063ffffffff16565b90505f6139418489614a2c90919063ffffffff16565b90505f6139578589614a2c90919063ffffffff16565b90505f61396d8689614a2c90919063ffffffff16565b90505f6139838789614a2c90919063ffffffff16565b90505f6139cf836139c1866139b3866139a58b8d61492390919063ffffffff16565b61492390919063ffffffff16565b61492390919063ffffffff16565b61492390919063ffffffff16565b90506040518060c001604052808781526020018281526020018681526020018581526020018481526020018381525096505050505050509695505050505050565b5f6010819055505f6013819055505f6011819055505f601281905550565b613a7e8260035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613ba057613b5e8160045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5050565b613bcb85613bbd88600a5461492390919063ffffffff16565b61492390919063ffffffff16565b600a81905550613be683600b54612d0f90919063ffffffff16565b600b81905550613c018260095461492390919063ffffffff16565b600981905550613c1c82600c54612d0f90919063ffffffff16565b600c81905550613c938460035f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060075f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613e3957613dd68160045f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60045f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b613eaa8560035f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060075f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561405057613fed8260045f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60045f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b505050505050565b6140a88260045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461492390919063ffffffff16565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061413c815f015160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461492390919063ffffffff16565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506141d1816020015160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516142739190614da3565b60405180910390a350505050565b6142d4815f015160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461492390919063ffffffff16565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506143698160c0015160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506143fe816020015160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516144a09190614da3565b60405180910390a3505050565b614500815f015160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461492390919063ffffffff16565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550614595816020015160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516146379190614da3565b60405180910390a3505050565b6146948260045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461492390919063ffffffff16565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550614728815f015160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461492390919063ffffffff16565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506147bd8160c0015160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550614852816020015160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d0f90919063ffffffff16565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516148f49190614da3565b60405180910390a350505050565b60016010819055505f60138190555060016012819055506001601181905550565b5f61496483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c3b565b905092915050565b5f614995606461498760105485614a2c90919063ffffffff16565b612cc690919063ffffffff16565b9050919050565b5f6149c560646149b760115485614a2c90919063ffffffff16565b612cc690919063ffffffff16565b9050919050565b5f6149f560646149e760125485614a2c90919063ffffffff16565b612cc690919063ffffffff16565b9050919050565b5f614a256064614a1760135485614a2c90919063ffffffff16565b612cc690919063ffffffff16565b9050919050565b5f808303614a3c575f9050614a9d565b5f8284614a499190615c55565b9050828482614a589190615c25565b14614a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a8f90615d06565b60405180910390fd5b809150505b92915050565b6040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6040518060a001604052805f81526020015f81526020015f81526020015f81526020015f81525090565b6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614b83578082015181840152602081019050614b68565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614ba882614b4c565b614bb28185614b56565b9350614bc2818560208601614b66565b614bcb81614b8e565b840191505092915050565b5f6020820190508181035f830152614bee8184614b9e565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614c2382614bfa565b9050919050565b614c3381614c19565b8114614c3d575f80fd5b50565b5f81359050614c4e81614c2a565b92915050565b5f819050919050565b614c6681614c54565b8114614c70575f80fd5b50565b5f81359050614c8181614c5d565b92915050565b5f8060408385031215614c9d57614c9c614bf6565b5b5f614caa85828601614c40565b9250506020614cbb85828601614c73565b9150509250929050565b5f8115159050919050565b614cd981614cc5565b82525050565b5f602082019050614cf25f830184614cd0565b92915050565b614d0181614c19565b82525050565b5f602082019050614d1a5f830184614cf8565b92915050565b5f819050919050565b5f614d43614d3e614d3984614bfa565b614d20565b614bfa565b9050919050565b5f614d5482614d29565b9050919050565b5f614d6582614d4a565b9050919050565b614d7581614d5b565b82525050565b5f602082019050614d8e5f830184614d6c565b92915050565b614d9d81614c54565b82525050565b5f602082019050614db65f830184614d94565b92915050565b614dc581614cc5565b8114614dcf575f80fd5b50565b5f81359050614de081614dbc565b92915050565b5f60208284031215614dfb57614dfa614bf6565b5b5f614e0884828501614dd2565b91505092915050565b5f805f60608486031215614e2857614e27614bf6565b5b5f614e3586828701614c40565b9350506020614e4686828701614c40565b9250506040614e5786828701614c73565b9150509250925092565b5f60208284031215614e7657614e75614bf6565b5b5f614e8384828501614c73565b91505092915050565b5f60ff82169050919050565b614ea181614e8c565b82525050565b5f602082019050614eba5f830184614e98565b92915050565b5f60208284031215614ed557614ed4614bf6565b5b5f614ee284828501614c40565b91505092915050565b5f8060408385031215614f0157614f00614bf6565b5b5f614f0e85828601614c73565b9250506020614f1f85828601614dd2565b9150509250929050565b5f8060408385031215614f3f57614f3e614bf6565b5b5f614f4c85828601614c40565b9250506020614f5d85828601614c40565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614fab57607f821691505b602082108103614fbe57614fbd614f67565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614ff8602083614b56565b915061500382614fc4565b602082019050919050565b5f6020820190508181035f83015261502581614fec565b9050919050565b7f54726164696e6720616c72656164792064697361626c656421000000000000005f82015250565b5f615060601983614b56565b915061506b8261502c565b602082019050919050565b5f6020820190508181035f83015261508d81615054565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f6150ee602a83614b56565b91506150f982615094565b604082019050919050565b5f6020820190508181035f83015261511b816150e2565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f615156601f83614b56565b915061516182615122565b602082019050919050565b5f6020820190508181035f8301526151838161514a565b9050919050565b7f57652063616e206e6f74206578636c75646520556e697377617020726f7574655f8201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b5f6151e4602283614b56565b91506151ef8261518a565b604082019050919050565b5f6020820190508181035f830152615211816151d8565b9050919050565b7f4163636f756e7420616c7265616479206578636c7564656400000000000000005f82015250565b5f61524c601883614b56565b915061525782615218565b602082019050919050565b5f6020820190508181035f83015261527981615240565b9050919050565b7f4578636c75646564206c69737420697320746f6f206c6f6e67000000000000005f82015250565b5f6152b4601983614b56565b91506152bf82615280565b602082019050919050565b5f6020820190508181035f8301526152e1816152a8565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642100000000000000005f82015250565b5f61531c601883614b56565b9150615327826152e8565b602082019050919050565b5f6020820190508181035f83015261534981615310565b9050919050565b5f6040820190506153635f830185614cf8565b6153706020830184614d94565b9392505050565b5f8151905061538581614dbc565b92915050565b5f602082840312156153a05761539f614bf6565b5b5f6153ad84828501615377565b91505092915050565b7f696e73756666696369656e74204554482062616c616e636500000000000000005f82015250565b5f6153ea601883614b56565b91506153f5826153b6565b602082019050919050565b5f6020820190508181035f830152615417816153de565b9050919050565b7f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c655f8201527f7373207468616e20302e312070657263656e74206f6620696e697469616c205460208201527f6f74616c20537570706c79210000000000000000000000000000000000000000604082015250565b5f61549e604c83614b56565b91506154a98261541e565b606082019050919050565b5f6020820190508181035f8301526154cb81615492565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61552c602683614b56565b9150615537826154d2565b604082019050919050565b5f6020820190508181035f83015261555981615520565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6155ba602483614b56565b91506155c582615560565b604082019050919050565b5f6020820190508181035f8301526155e7816155ae565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f615648602283614b56565b9150615653826155ee565b604082019050919050565b5f6020820190508181035f8301526156758161563c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6156d6602583614b56565b91506156e18261567c565b604082019050919050565b5f6020820190508181035f830152615703816156ca565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f615764602383614b56565b915061576f8261570a565b604082019050919050565b5f6020820190508181035f83015261579181615758565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6157f2602983614b56565b91506157fd82615798565b604082019050919050565b5f6020820190508181035f83015261581f816157e6565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564210000000000000000005f82015250565b5f61585a601783614b56565b915061586582615826565b602082019050919050565b5f6020820190508181035f8301526158878161584e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6158c582614c54565b91506158d083614c54565b92508282039050818111156158e8576158e761588e565b5b92915050565b5f6158f882614c54565b915061590383614c54565b925082820190508082111561591b5761591a61588e565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f615955601b83614b56565b915061596082615921565b602082019050919050565b5f6020820190508181035f83015261598281615949565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506159f181614c2a565b92915050565b5f60208284031215615a0c57615a0b614bf6565b5b5f615a19848285016159e3565b91505092915050565b5f819050919050565b5f615a45615a40615a3b84615a22565b614d20565b614c54565b9050919050565b615a5581615a2b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b615a8d81614c19565b82525050565b5f615a9e8383615a84565b60208301905092915050565b5f602082019050919050565b5f615ac082615a5b565b615aca8185615a65565b9350615ad583615a75565b805f5b83811015615b05578151615aec8882615a93565b9750615af783615aaa565b925050600181019050615ad8565b5085935050505092915050565b5f60a082019050615b255f830188614d94565b615b326020830187615a4c565b8181036040830152615b448186615ab6565b9050615b536060830185614cf8565b615b606080830184614d94565b9695505050505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f615bc4602883614b56565b9150615bcf82615b6a565b604082019050919050565b5f6020820190508181035f830152615bf181615bb8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f615c2f82614c54565b9150615c3a83614c54565b925082615c4a57615c49615bf8565b5b828204905092915050565b5f615c5f82614c54565b9150615c6a83614c54565b9250828202615c7881614c54565b91508282048414831517615c8f57615c8e61588e565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f615cf0602183614b56565b9150615cfb82615c96565b604082019050919050565b5f6020820190508181035f830152615d1d81615ce4565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f68d9c80cae0f8029547d880e6fbc115d3887952ac3bc8b71f6ca24d04ba2d3b64736f6c63430008170033
Deployed Bytecode Sourcemap
24813:20737:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28142:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29054:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26704:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26875:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44458:149;;;;;;;;;;;;;:::i;:::-;;28419:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44615:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29223:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31147:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28328:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30290:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26443:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29544:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30554:131;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42568:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30693:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26933:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43368:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43860:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31408:512;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37122:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26521:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43603:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28522:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26793:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16206:148;;;;;;;;;;;;;:::i;:::-;;43026:215;;;;;;;;;;;;;:::i;:::-;;26613:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27116:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30047:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44303:147;;;;;;;;;;;;;:::i;:::-;;45378:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15570:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28233:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29770:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28728:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30175:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27019:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45061:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26485:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43475:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43727:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44814:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28903:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43249:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42687:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26568:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43997:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16509:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27068:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42805:213;;;;;;;;;;;;;:::i;:::-;;28142:83;28179:13;28212:5;28205:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28142:83;:::o;29054:161::-;29129:4;29146:39;29155:12;:10;:12::i;:::-;29169:7;29178:6;29146:8;:39::i;:::-;29203:4;29196:11;;29054:161;;;;:::o;26704:82::-;;;;;;;;;;;;;:::o;26875:51::-;;;:::o;44458:149::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44520:15:::1;::::0;::::1;;;;;;;;44512:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44594:5;44576:15;::::0;:23:::1;;;;;;;;;;;;;;;;;;44458:149::o:0;28419:95::-;28472:7;28499;;28492:14;;28419:95;:::o;44615:120::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44719:8:::1;44693:23;;:34;;;;;;;;;;;;;;;;;;44615:120:::0;:::o;29223:313::-;29321:4;29338:36;29348:6;29356:9;29367:6;29338:9;:36::i;:::-;29385:121;29394:6;29402:12;:10;:12::i;:::-;29416:89;29454:6;29416:89;;;;;;;;;;;;;;;;;:11;:19;29428:6;29416:19;;;;;;;;;;;;;;;:33;29436:12;:10;:12::i;:::-;29416:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29385:8;:121::i;:::-;29524:4;29517:11;;29223:313;;;;;:::o;31147:253::-;31213:7;31252;;31241;:18;;31233:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31317:19;31340:10;:8;:10::i;:::-;31317:33;;31368:24;31380:11;31368:7;:11;;:24;;;;:::i;:::-;31361:31;;;31147:253;;;:::o;28328:83::-;28369:5;28394:9;;;;;;;;;;;28387:16;;28328:83;:::o;30290:95::-;30336:7;30363:14;;30356:21;;30290:95;:::o;26443:33::-;;;;:::o;29544:218::-;29632:4;29649:83;29658:12;:10;:12::i;:::-;29672:7;29681:50;29720:10;29681:11;:25;29693:12;:10;:12::i;:::-;29681:25;;;;;;;;;;;;;;;:34;29707:7;29681:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29649:8;:83::i;:::-;29750:4;29743:11;;29544:218;;;;:::o;30554:131::-;30618:7;30645:32;;30638:39;;30554:131;:::o;42568:111::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42667:4:::1;42637:18;:27;42656:7;42637:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;42568:111:::0;:::o;30693:446::-;30783:7;30822;;30811;:18;;30803:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30881:17;30876:256;;30915:15;30933:19;30944:7;30933:10;:19::i;:::-;:27;;;30915:45;;30982:7;30975:14;;;;;30876:256;31022:23;31048:19;31059:7;31048:10;:19::i;:::-;:35;;;31022:61;;31105:15;31098:22;;;30693:446;;;;;:::o;26933:38::-;;;:::o;43368:99::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43450:9:::1;43439:8;:20;;;;43368:99:::0;:::o;43860:129::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43972:9:::1;43945:24;;:36;;;;;;;;;;;;;;;;;;43860:129:::0;:::o;31408:512::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31501:42:::1;31490:53;;:7;:53;;::::0;31482:100:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31602:11;:20;31614:7;31602:20;;;;;;;;;;;;;;;;;;;;;;;;;31601:21;31593:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31689:3;31670:9;:16;;;;:22;31662:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31755:1;31736:7;:16;31744:7;31736:16;;;;;;;;;;;;;;;;:20;31733:108;;;31792:37;31812:7;:16;31820:7;31812:16;;;;;;;;;;;;;;;;31792:19;:37::i;:::-;31773:7;:16;31781:7;31773:16;;;;;;;;;;;;;;;:56;;;;31733:108;31874:4;31851:11;:20;31863:7;31851:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31889:9;31904:7;31889:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31408:512:::0;:::o;37122:123::-;37186:4;37210:18;:27;37229:7;37210:27;;;;;;;;;;;;;;;;;;;;;;;;;37203:34;;37122:123;;;:::o;26521:38::-;;;;:::o;43603:116::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43702:9:::1;43682:17;:29;;;;43603:116:::0;:::o;28522:198::-;28588:7;28612:11;:20;28624:7;28612:20;;;;;;;;;;;;;;;;;;;;;;;;;28608:49;;;28641:7;:16;28649:7;28641:16;;;;;;;;;;;;;;;;28634:23;;;;28608:49;28675:37;28695:7;:16;28703:7;28695:16;;;;;;;;;;;;;;;;28675:19;:37::i;:::-;28668:44;;28522:198;;;;:::o;26793:71::-;;;;;;;;;;;;;:::o;16206:148::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16313:1:::1;16276:40;;16297:6;::::0;::::1;;;;;;;;16276:40;;;;;;;;;;;;16344:1;16327:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16206:148::o:0;43026:215::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43101:1:::1;43084:14;:18;;;;43124:1;43113:8;:12;;;;43158:1;43136:19;:23;;;;43190:1;43170:17;:21;;;;43228:5;43202:23;;:31;;;;;;;;;;;;;;;;;;43026:215::o:0;26613:84::-;;;;;;;;;;;;;:::o;27116:49::-;;;;:::o;30047:120::-;30115:4;30139:11;:20;30151:7;30139:20;;;;;;;;;;;;;;;;;;;;;;;;;30132:27;;30047:120;;;:::o;44303:147::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44365:15:::1;::::0;::::1;;;;;;;;44364:16;44356:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44438:4;44420:15;::::0;:22:::1;;;;;;;;;;;;;;;;;;44303:147::o:0;45378:167::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45503:10:::1;45496:27;;;45524:3;45529:7;45496:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45378:167:::0;;;:::o;15570:79::-;15608:7;15635:6;;;;;;;;;;;15628:13;;15570:79;:::o;28233:87::-;28272:13;28305:7;28298:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28233:87;:::o;29770:269::-;29863:4;29880:129;29889:12;:10;:12::i;:::-;29903:7;29912:96;29951:15;29912:96;;;;;;;;;;;;;;;;;:11;:25;29924:12;:10;:12::i;:::-;29912:25;;;;;;;;;;;;;;;:34;29938:7;29912:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29880:8;:129::i;:::-;30027:4;30020:11;;29770:269;;;;:::o;28728:167::-;28806:4;28823:42;28833:12;:10;:12::i;:::-;28847:9;28858:6;28823:9;:42::i;:::-;28883:4;28876:11;;28728:167;;;;:::o;30175:107::-;30227:7;30254:20;;30247:27;;30175:107;:::o;27019:42::-;;;;;;;;;;;;;:::o;45061:206::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45174:9:::1;45149:21;:34;;45141:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;45231:7;:5;:7::i;:::-;45223:25;;:36;45249:9;45223:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45061:206:::0;:::o;26485:27::-;;;;:::o;43475:120::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43578:9:::1;43556:19;:31;;;;43475:120:::0;:::o;43727:125::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43835:9:::1;43810:22;;:34;;;;;;;;;;;;;;;;;;43727:125:::0;:::o;44814:150::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44945:11:::1;44910:32;:46;;;;44814:150:::0;:::o;28903:143::-;28984:7;29011:11;:18;29023:5;29011:18;;;;;;;;;;;;;;;:27;29030:7;29011:27;;;;;;;;;;;;;;;;29004:34;;28903:143;;;;:::o;43249:111::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43343:9:::1;43326:14;:26;;;;43249:111:::0;:::o;42687:110::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42784:5:::1;42754:18;:27;42773:7;42754:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;42687:110:::0;:::o;26568:36::-;;;;:::o;43997:298::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44132:19:::1;44100:29;:51;44092:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44258:29;44243:12;:44;;;;43997:298:::0;:::o;16509:244::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16618:1:::1;16598:22;;:8;:22;;::::0;16590:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16708:8;16679:38;;16700:6;::::0;::::1;;;;;;;;16679:38;;;;;;;;;;;;16737:8;16728:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16509:244:::0;:::o;27068:35::-;;;;;;;;;;;;:::o;42805:213::-;15792:12;:10;:12::i;:::-;15782:22;;:6;;;;;;;;;;:22;;;15774:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42879:1:::1;42862:14;:18;;;;42902:1;42891:8;:12;;;;42936:1;42914:19;:23;;;;42968:1;42948:17;:21;;;;43006:4;42980:23;;:30;;;;;;;;;;;;;;;;;;42805:213::o:0;7976:115::-;8029:15;8072:10;8057:26;;7976:115;:::o;37253:335::-;37363:1;37346:19;;:5;:19;;;37338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37444:1;37425:21;;:7;:21;;;37417:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37526:6;37496:11;:18;37508:5;37496:18;;;;;;;;;;;;;;;:27;37515:7;37496:27;;;;;;;;;;;;;;;:36;;;;37564:7;37548:32;;37557:5;37548:32;;;37573:6;37548:32;;;;;;:::i;:::-;;;;;;;;37253:335;;;:::o;37596:1495::-;37734:1;37718:18;;:4;:18;;;37710:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37811:1;37797:16;;:2;:16;;;37789:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37881:1;37872:6;:10;37864:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38031:15;;;;;;;;;;38030:16;:35;;;;;38058:7;:5;:7::i;:::-;38050:15;;:4;:15;;;;38030:35;38027:100;;;38082:33;;;;;;;;;;:::i;:::-;;;;;;;;38027:100;38432:28;38463:24;38481:4;38463:9;:24::i;:::-;38432:55;;38498:24;38549:32;;38525:20;:56;;38498:83;;38610:19;:56;;;;;38647:19;;;;;;;;;;;38646:20;38610:56;:94;;;;;38691:13;38683:21;;:4;:21;;;;38610:94;:134;;;;;38721:23;;;;;;;;;;;38610:134;38592:381;;;38794:32;;38771:55;;38915:46;38940:20;38915:24;:46::i;:::-;38592:381;39051:30;39066:4;39071:2;39074:6;39051:14;:30::i;:::-;37699:1392;;37596:1495;;;:::o;4386:192::-;4472:7;4505:1;4500;:6;;4508:12;4492:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4532:9;4548:1;4544;:5;;;;:::i;:::-;4532:17;;4569:1;4562:8;;;4386:192;;;;;:::o;35032:163::-;35073:7;35094:15;35111;35130:19;:17;:19::i;:::-;35093:56;;;;35167:20;35179:7;35167;:11;;:20;;;;:::i;:::-;35160:27;;;;35032:163;:::o;5784:132::-;5842:7;5869:39;5873:1;5876;5869:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5862:46;;5784:132;;;;:::o;3483:181::-;3541:7;3561:9;3577:1;3573;:5;;;;:::i;:::-;3561:17;;3602:1;3597;:6;;3589:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3655:1;3648:8;;;3483:181;;;;:::o;32920:703::-;32979:19;;:::i;:::-;33011:24;33038:20;33050:7;33038:11;:20::i;:::-;33011:47;;33069:24;33096:114;33108:7;33117:3;:18;;;33137:3;:12;;;33151:3;:23;;;33176:3;:21;;;33199:10;:8;:10::i;:::-;33096:11;:114::i;:::-;33069:141;;33230:385;;;;;;;;33257:3;:11;;;33230:385;;;;33283:3;:19;;;33230:385;;;;33317:3;:18;;;33230:385;;;;33350:3;:12;;;33230:385;;;;33377:3;:23;;;33230:385;;;;33415:3;:21;;;33230:385;;;;33451:3;:19;;;33230:385;;;;33485:3;:18;;;33230:385;;;;33518:3;:12;;;33230:385;;;;33545:3;:23;;;33230:385;;;;33583:3;:21;;;33230:385;;;33223:392;;;;32920:703;;;:::o;39100:618::-;27375:4;27353:19;;:26;;;;;;;;;;;;;;;;;;39246:21:::1;39284:1;39270:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39246:40;;39315:4;39297;39302:1;39297:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;39341:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39331:4;39336:1;39331:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;39376:62;39393:4;39408:15;39426:11;39376:8;:62::i;:::-;39477:15;:66;;;39558:11;39584:1;39628:4;39647:22;;;;;;;;;;;39684:15;39477:233;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39175:543;27424:5:::0;27402:19;;:27;;;;;;;;;;;;;;;;;;39100:618;:::o;39799:1227::-;39896:18;:26;39915:6;39896:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;39926:18;:29;39945:9;39926:29;;;;;;;;;;;;;;;;;;;;;;;;;39896:59;39893:220;;;39971:14;:12;:14::i;:::-;39893:220;;;40044:12;;40034:6;:22;;40026:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39893:220;40125:22;40150:18;40161:6;40150:10;:18::i;:::-;40125:43;;40179:65;40201:2;:20;;;40223:2;:20;;;40179:21;:65::i;:::-;40255:126;40270:2;:17;;;40289:2;:11;;;40302:2;:22;;;40326:2;:17;;;40345:2;:11;;;40358:2;:22;;;40255:14;:126::i;:::-;40398:11;:19;40410:6;40398:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;40422:11;:22;40434:9;40422:22;;;;;;;;;;;;;;;;;;;;;;;;;40421:23;40398:46;40394:520;;;40461:52;40483:6;40491:9;40502:6;40510:2;40461:21;:52::i;:::-;40394:520;;;40536:11;:19;40548:6;40536:19;;;;;;;;;;;;;;;;;;;;;;;;;40535:20;:46;;;;;40559:11;:22;40571:9;40559:22;;;;;;;;;;;;;;;;;;;;;;;;;40535:46;40531:383;;;40598:42;40618:6;40626:9;40637:2;40598:19;:42::i;:::-;40531:383;;;40663:11;:19;40675:6;40663:19;;;;;;;;;;;;;;;;;;;;;;;;;40662:20;:47;;;;;40687:11;:22;40699:9;40687:22;;;;;;;;;;;;;;;;;;;;;;;;;40686:23;40662:47;40658:256;;;40726:40;40744:6;40752:9;40763:2;40726:17;:40::i;:::-;40658:256;;;40788:11;:19;40800:6;40788:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;40811:11;:22;40823:9;40811:22;;;;;;;;;;;;;;;;;;;;;;;;;40788:45;40784:130;;;40850:52;40872:6;40880:9;40891:6;40899:2;40850:21;:52::i;:::-;40784:130;40658:256;40531:383;40394:520;40929:18;:26;40948:6;40929:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;40959:18;:29;40978:9;40959:29;;;;;;;;;;;;;;;;;;;;;;;;;40929:59;40926:92;;;41003:15;:13;:15::i;:::-;40926:92;39882:1144;39799:1227;;;:::o;35203:555::-;35253:7;35262;35282:15;35300:7;;35282:25;;35318:15;35336:7;;35318:25;;35359:9;35354:289;35378:9;:16;;;;35374:1;:20;35354:289;;;35444:7;35420;:21;35428:9;35438:1;35428:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35420:21;;;;;;;;;;;;;;;;:31;:66;;;;35479:7;35455;:21;35463:9;35473:1;35463:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35455:21;;;;;;;;;;;;;;;;:31;35420:66;35416:97;;;35496:7;;35505;;35488:25;;;;;;;;;35416:97;35538:34;35550:7;:21;35558:9;35568:1;35558:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35550:21;;;;;;;;;;;;;;;;35538:7;:11;;:34;;;;:::i;:::-;35528:44;;35597:34;35609:7;:21;35617:9;35627:1;35617:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35609:21;;;;;;;;;;;;;;;;35597:7;:11;;:34;;;;:::i;:::-;35587:44;;35396:3;;;;;;;35354:289;;;;35667:20;35679:7;;35667;;:11;;:20;;;;:::i;:::-;35657:7;:30;35653:61;;;35697:7;;35706;;35689:25;;;;;;;;35653:61;35733:7;35742;35725:25;;;;;;35203:555;;;:::o;6412:278::-;6498:7;6530:1;6526;:5;6533:12;6518:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6557:9;6573:1;6569;:5;;;;:::i;:::-;6557:17;;6681:1;6674:8;;;6412:278;;;;;:::o;33631:602::-;33691:20;;:::i;:::-;33724:22;33749:31;33772:7;33749:22;:31::i;:::-;33724:56;;33791:16;33810:25;33827:7;33810:16;:25::i;:::-;33791:44;;33846:27;33876:36;33904:7;33876:27;:36::i;:::-;33846:66;;33923:25;33951:34;33977:7;33951:25;:34::i;:::-;33923:62;;33996:23;34022:89;34093:17;34022:66;34068:19;34022:41;34054:8;34022:27;34034:14;34022:7;:11;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;:45;;:66;;;;:::i;:::-;:70;;:89;;;;:::i;:::-;33996:115;;34129:96;;;;;;;;34143:15;34129:96;;;;34160:14;34129:96;;;;34176:8;34129:96;;;;34186:19;34129:96;;;;34207:17;34129:96;;;34122:103;;;;;;;33631:602;;;:::o;34241:783::-;34420:20;;:::i;:::-;34453:15;34471:24;34483:11;34471:7;:11;;:24;;;;:::i;:::-;34453:42;;34506:22;34531:31;34550:11;34531:14;:18;;:31;;;;:::i;:::-;34506:56;;34573:16;34592:25;34605:11;34592:8;:12;;:25;;;;:::i;:::-;34573:44;;34628:27;34658:36;34682:11;34658:19;:23;;:36;;;;:::i;:::-;34628:66;;34705:25;34733:34;34755:11;34733:17;:21;;:34;;;;:::i;:::-;34705:62;;34778:23;34804:89;34873:19;34804:64;34859:8;34804:50;34836:17;34804:27;34816:14;34804:7;:11;;:27;;;;:::i;:::-;:31;;:50;;;;:::i;:::-;:54;;:64;;;;:::i;:::-;:68;;:89;;;;:::i;:::-;34778:115;;34911:105;;;;;;;;34925:7;34911:105;;;;34934:15;34911:105;;;;34951:14;34911:105;;;;34967:8;34911:105;;;;34977:19;34911:105;;;;34998:17;34911:105;;;34904:112;;;;;;;;34241:783;;;;;;;;:::o;36789:158::-;36849:1;36832:14;:18;;;;36881:1;36861:17;:21;;;;36904:1;36893:8;:12;;;;36938:1;36916:19;:23;;;;36789:158::o;35766:307::-;35895:45;35922:17;35895:7;:22;35911:4;35895:22;;;;;;;;;;;;;;;;:26;;:45;;;;:::i;:::-;35870:7;:22;35886:4;35870:22;;;;;;;;;;;;;;;:70;;;;35954:11;:26;35974:4;35954:26;;;;;;;;;;;;;;;;;;;;;;;;;35951:114;;;36020:45;36047:17;36020:7;:22;36036:4;36020:22;;;;;;;;;;;;;;;;:26;;:45;;;;:::i;:::-;35995:7;:22;36011:4;35995:22;;;;;;;;;;;;;;;:70;;;;35951:114;35766:307;;:::o;32021:891::-;32216:41;32248:8;32216:27;32228:14;32216:7;;:11;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;32206:7;:51;;;;32291:40;32316:14;32291:20;;:24;;:40;;;;:::i;:::-;32268:20;:63;;;;32352:21;32364:8;32352:7;;:11;;:21;;;;:::i;:::-;32342:7;:31;;;;32401:28;32420:8;32401:14;;:18;;:28;;;;:::i;:::-;32384:14;:45;;;;32478:58;32516:19;32478:7;:33;32486:24;;;;;;;;;;;32478:33;;;;;;;;;;;;;;;;:37;;:58;;;;:::i;:::-;32442:7;:33;32450:24;;;;;;;;;;;32442:33;;;;;;;;;;;;;;;:94;;;;32551:11;:37;32563:24;;;;;;;;;;;32551:37;;;;;;;;;;;;;;;;;;;;;;;;;32547:164;;;32641:58;32679:19;32641:7;:33;32649:24;;;;;;;;;;;32641:33;;;;;;;;;;;;;;;;:37;;:58;;;;:::i;:::-;32605:7;:33;32613:24;;;;;;;;;;;32605:33;;;;;;;;;;;;;;;:94;;;;32547:164;32746:34;32771:8;32746:7;:20;32754:11;;;;;;;;;;;32746:20;;;;;;;;;;;;;;;;:24;;:34;;;;:::i;:::-;32723:7;:20;32731:11;;;;;;;;;;;32723:20;;;;;;;;;;;;;;;:57;;;;32795:11;:24;32807:11;;;;;;;;;;;32795:24;;;;;;;;;;;;;;;;;;;;;;;;;32791:114;;;32859:34;32884:8;32859:7;:20;32867:11;;;;;;;;;;;32859:20;;;;;;;;;;;;;;;;:24;;:34;;;;:::i;:::-;32836:7;:20;32844:11;;;;;;;;;;;32836:20;;;;;;;;;;;;;;;:57;;;;32791:114;32021:891;;;;;;:::o;41724:377::-;41868:28;41888:7;41868;:15;41876:6;41868:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41850:7;:15;41858:6;41850:15;;;;;;;;;;;;;;;:46;;;;41925:31;41945:2;:10;;;41925:7;:15;41933:6;41925:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;41907:7;:15;41915:6;41907:15;;;;;;;;;;;;;;;:49;;;;41988:42;42011:2;:18;;;41988:7;:18;41996:9;41988:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;41967:7;:18;41975:9;41967:18;;;;;;;;;;;;;;;:63;;;;42063:9;42046:47;;42055:6;42046:47;;;42074:2;:18;;;42046:47;;;;;;:::i;:::-;;;;;;;;41724:377;;;;:::o;41341:375::-;41466:31;41486:2;:10;;;41466:7;:15;41474:6;41466:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;41448:7;:15;41456:6;41448:15;;;;;;;;;;;;;;;:49;;;;41529:42;41552:2;:18;;;41529:7;:18;41537:9;41529:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;41508:7;:18;41516:9;41508:18;;;;;;;;;;;;;;;:63;;;;41603:42;41626:2;:18;;;41603:7;:18;41611:9;41603:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;41582:7;:18;41590:9;41582:18;;;;;;;;;;;;;;;:63;;;;41678:9;41661:47;;41670:6;41661:47;;;41689:2;:18;;;41661:47;;;;;;:::i;:::-;;;;;;;;41341:375;;;:::o;41034:299::-;41157:31;41177:2;:10;;;41157:7;:15;41165:6;41157:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;41139:7;:15;41147:6;41139:15;;;;;;;;;;;;;;;:49;;;;41220:42;41243:2;:18;;;41220:7;:18;41228:9;41220:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;41199:7;:18;41207:9;41199:18;;;;;;;;;;;;;;;:63;;;;41295:9;41278:47;;41287:6;41278:47;;;41306:2;:18;;;41278:47;;;;;;:::i;:::-;;;;;;;;41034:299;;;:::o;42109:451::-;42253:28;42273:7;42253;:15;42261:6;42253:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42235:7;:15;42243:6;42235:15;;;;;;;;;;;;;;;:46;;;;42310:31;42330:2;:10;;;42310:7;:15;42318:6;42310:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;42292:7;:15;42300:6;42292:15;;;;;;;;;;;;;;;:49;;;;42373:42;42396:2;:18;;;42373:7;:18;42381:9;42373:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;42352:7;:18;42360:9;42352:18;;;;;;;;;;;;;;;:63;;;;42447:42;42470:2;:18;;;42447:7;:18;42455:9;42447:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;42426:7;:18;42434:9;42426:18;;;;;;;;;;;;;;;:63;;;;42522:9;42505:47;;42514:6;42505:47;;;42533:2;:18;;;42505:47;;;;;;:::i;:::-;;;;;;;;42109:451;;;;:::o;36955:159::-;37016:1;36999:14;:18;;;;37048:1;37028:17;:21;;;;37082:1;37060:19;:23;;;;37105:1;37094:8;:12;;;;36955:159::o;3947:136::-;4005:7;4032:43;4036:1;4039;4032:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4025:50;;3947:136;;;;:::o;36081:168::-;36152:7;36179:62;36225:5;36179:27;36191:14;;36179:7;:11;;:27;;;;:::i;:::-;:31;;:62;;;;:::i;:::-;36172:69;;36081:168;;;:::o;36257:156::-;36322:7;36349:56;36389:5;36349:21;36361:8;;36349:7;:11;;:21;;;;:::i;:::-;:25;;:56;;;;:::i;:::-;36342:63;;36257:156;;;:::o;36421:178::-;36497:7;36524:67;36575:5;36524:32;36536:19;;36524:7;:11;;:32;;;;:::i;:::-;:36;;:67;;;;:::i;:::-;36517:74;;36421:178;;;:::o;36607:174::-;36681:7;36708:65;36757:5;36708:30;36720:17;;36708:7;:11;;:30;;;;:::i;:::-;:34;;:65;;;;:::i;:::-;36701:72;;36607:174;;;:::o;4837:471::-;4895:7;5145:1;5140;:6;5136:47;;5170:1;5163:8;;;;5136:47;5195:9;5211:1;5207;:5;;;;:::i;:::-;5195:17;;5240:1;5235;5231;:5;;;;:::i;:::-;:10;5223:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5299:1;5292:8;;;4837:471;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:118::-;4863:24;4881:5;4863:24;:::i;:::-;4858:3;4851:37;4776:118;;:::o;4900:222::-;4993:4;5031:2;5020:9;5016:18;5008:26;;5044:71;5112:1;5101:9;5097:17;5088:6;5044:71;:::i;:::-;4900:222;;;;:::o;5128:116::-;5198:21;5213:5;5198:21;:::i;:::-;5191:5;5188:32;5178:60;;5234:1;5231;5224:12;5178:60;5128:116;:::o;5250:133::-;5293:5;5331:6;5318:20;5309:29;;5347:30;5371:5;5347:30;:::i;:::-;5250:133;;;;:::o;5389:323::-;5445:6;5494:2;5482:9;5473:7;5469:23;5465:32;5462:119;;;5500:79;;:::i;:::-;5462:119;5620:1;5645:50;5687:7;5678:6;5667:9;5663:22;5645:50;:::i;:::-;5635:60;;5591:114;5389:323;;;;:::o;5718:619::-;5795:6;5803;5811;5860:2;5848:9;5839:7;5835:23;5831:32;5828:119;;;5866:79;;:::i;:::-;5828:119;5986:1;6011:53;6056:7;6047:6;6036:9;6032:22;6011:53;:::i;:::-;6001:63;;5957:117;6113:2;6139:53;6184:7;6175:6;6164:9;6160:22;6139:53;:::i;:::-;6129:63;;6084:118;6241:2;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6212:118;5718:619;;;;;:::o;6343:329::-;6402:6;6451:2;6439:9;6430:7;6426:23;6422:32;6419:119;;;6457:79;;:::i;:::-;6419:119;6577:1;6602:53;6647:7;6638:6;6627:9;6623:22;6602:53;:::i;:::-;6592:63;;6548:117;6343:329;;;;:::o;6678:86::-;6713:7;6753:4;6746:5;6742:16;6731:27;;6678:86;;;:::o;6770:112::-;6853:22;6869:5;6853:22;:::i;:::-;6848:3;6841:35;6770:112;;:::o;6888:214::-;6977:4;7015:2;7004:9;7000:18;6992:26;;7028:67;7092:1;7081:9;7077:17;7068:6;7028:67;:::i;:::-;6888:214;;;;:::o;7108:329::-;7167:6;7216:2;7204:9;7195:7;7191:23;7187:32;7184:119;;;7222:79;;:::i;:::-;7184:119;7342:1;7367:53;7412:7;7403:6;7392:9;7388:22;7367:53;:::i;:::-;7357:63;;7313:117;7108:329;;;;:::o;7443:468::-;7508:6;7516;7565:2;7553:9;7544:7;7540:23;7536:32;7533:119;;;7571:79;;:::i;:::-;7533:119;7691:1;7716:53;7761:7;7752:6;7741:9;7737:22;7716:53;:::i;:::-;7706:63;;7662:117;7818:2;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7789:115;7443:468;;;;;:::o;7917:474::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:180::-;8445:77;8442:1;8435:88;8542:4;8539:1;8532:15;8566:4;8563:1;8556:15;8583:320;8627:6;8664:1;8658:4;8654:12;8644:22;;8711:1;8705:4;8701:12;8732:18;8722:81;;8788:4;8780:6;8776:17;8766:27;;8722:81;8850:2;8842:6;8839:14;8819:18;8816:38;8813:84;;8869:18;;:::i;:::-;8813:84;8634:269;8583:320;;;:::o;8909:182::-;9049:34;9045:1;9037:6;9033:14;9026:58;8909:182;:::o;9097:366::-;9239:3;9260:67;9324:2;9319:3;9260:67;:::i;:::-;9253:74;;9336:93;9425:3;9336:93;:::i;:::-;9454:2;9449:3;9445:12;9438:19;;9097:366;;;:::o;9469:419::-;9635:4;9673:2;9662:9;9658:18;9650:26;;9722:9;9716:4;9712:20;9708:1;9697:9;9693:17;9686:47;9750:131;9876:4;9750:131;:::i;:::-;9742:139;;9469:419;;;:::o;9894:175::-;10034:27;10030:1;10022:6;10018:14;10011:51;9894:175;:::o;10075:366::-;10217:3;10238:67;10302:2;10297:3;10238:67;:::i;:::-;10231:74;;10314:93;10403:3;10314:93;:::i;:::-;10432:2;10427:3;10423:12;10416:19;;10075:366;;;:::o;10447:419::-;10613:4;10651:2;10640:9;10636:18;10628:26;;10700:9;10694:4;10690:20;10686:1;10675:9;10671:17;10664:47;10728:131;10854:4;10728:131;:::i;:::-;10720:139;;10447:419;;;:::o;10872:229::-;11012:34;11008:1;11000:6;10996:14;10989:58;11081:12;11076:2;11068:6;11064:15;11057:37;10872:229;:::o;11107:366::-;11249:3;11270:67;11334:2;11329:3;11270:67;:::i;:::-;11263:74;;11346:93;11435:3;11346:93;:::i;:::-;11464:2;11459:3;11455:12;11448:19;;11107:366;;;:::o;11479:419::-;11645:4;11683:2;11672:9;11668:18;11660:26;;11732:9;11726:4;11722:20;11718:1;11707:9;11703:17;11696:47;11760:131;11886:4;11760:131;:::i;:::-;11752:139;;11479:419;;;:::o;11904:181::-;12044:33;12040:1;12032:6;12028:14;12021:57;11904:181;:::o;12091:366::-;12233:3;12254:67;12318:2;12313:3;12254:67;:::i;:::-;12247:74;;12330:93;12419:3;12330:93;:::i;:::-;12448:2;12443:3;12439:12;12432:19;;12091:366;;;:::o;12463:419::-;12629:4;12667:2;12656:9;12652:18;12644:26;;12716:9;12710:4;12706:20;12702:1;12691:9;12687:17;12680:47;12744:131;12870:4;12744:131;:::i;:::-;12736:139;;12463:419;;;:::o;12888:221::-;13028:34;13024:1;13016:6;13012:14;13005:58;13097:4;13092:2;13084:6;13080:15;13073:29;12888:221;:::o;13115:366::-;13257:3;13278:67;13342:2;13337:3;13278:67;:::i;:::-;13271:74;;13354:93;13443:3;13354:93;:::i;:::-;13472:2;13467:3;13463:12;13456:19;;13115:366;;;:::o;13487:419::-;13653:4;13691:2;13680:9;13676:18;13668:26;;13740:9;13734:4;13730:20;13726:1;13715:9;13711:17;13704:47;13768:131;13894:4;13768:131;:::i;:::-;13760:139;;13487:419;;;:::o;13912:174::-;14052:26;14048:1;14040:6;14036:14;14029:50;13912:174;:::o;14092:366::-;14234:3;14255:67;14319:2;14314:3;14255:67;:::i;:::-;14248:74;;14331:93;14420:3;14331:93;:::i;:::-;14449:2;14444:3;14440:12;14433:19;;14092:366;;;:::o;14464:419::-;14630:4;14668:2;14657:9;14653:18;14645:26;;14717:9;14711:4;14707:20;14703:1;14692:9;14688:17;14681:47;14745:131;14871:4;14745:131;:::i;:::-;14737:139;;14464:419;;;:::o;14889:175::-;15029:27;15025:1;15017:6;15013:14;15006:51;14889:175;:::o;15070:366::-;15212:3;15233:67;15297:2;15292:3;15233:67;:::i;:::-;15226:74;;15309:93;15398:3;15309:93;:::i;:::-;15427:2;15422:3;15418:12;15411:19;;15070:366;;;:::o;15442:419::-;15608:4;15646:2;15635:9;15631:18;15623:26;;15695:9;15689:4;15685:20;15681:1;15670:9;15666:17;15659:47;15723:131;15849:4;15723:131;:::i;:::-;15715:139;;15442:419;;;:::o;15867:174::-;16007:26;16003:1;15995:6;15991:14;15984:50;15867:174;:::o;16047:366::-;16189:3;16210:67;16274:2;16269:3;16210:67;:::i;:::-;16203:74;;16286:93;16375:3;16286:93;:::i;:::-;16404:2;16399:3;16395:12;16388:19;;16047:366;;;:::o;16419:419::-;16585:4;16623:2;16612:9;16608:18;16600:26;;16672:9;16666:4;16662:20;16658:1;16647:9;16643:17;16636:47;16700:131;16826:4;16700:131;:::i;:::-;16692:139;;16419:419;;;:::o;16844:332::-;16965:4;17003:2;16992:9;16988:18;16980:26;;17016:71;17084:1;17073:9;17069:17;17060:6;17016:71;:::i;:::-;17097:72;17165:2;17154:9;17150:18;17141:6;17097:72;:::i;:::-;16844:332;;;;;:::o;17182:137::-;17236:5;17267:6;17261:13;17252:22;;17283:30;17307:5;17283:30;:::i;:::-;17182:137;;;;:::o;17325:345::-;17392:6;17441:2;17429:9;17420:7;17416:23;17412:32;17409:119;;;17447:79;;:::i;:::-;17409:119;17567:1;17592:61;17645:7;17636:6;17625:9;17621:22;17592:61;:::i;:::-;17582:71;;17538:125;17325:345;;;;:::o;17676:174::-;17816:26;17812:1;17804:6;17800:14;17793:50;17676:174;:::o;17856:366::-;17998:3;18019:67;18083:2;18078:3;18019:67;:::i;:::-;18012:74;;18095:93;18184:3;18095:93;:::i;:::-;18213:2;18208:3;18204:12;18197:19;;17856:366;;;:::o;18228:419::-;18394:4;18432:2;18421:9;18417:18;18409:26;;18481:9;18475:4;18471:20;18467:1;18456:9;18452:17;18445:47;18509:131;18635:4;18509:131;:::i;:::-;18501:139;;18228:419;;;:::o;18653:300::-;18793:34;18789:1;18781:6;18777:14;18770:58;18862:34;18857:2;18849:6;18845:15;18838:59;18931:14;18926:2;18918:6;18914:15;18907:39;18653:300;:::o;18959:366::-;19101:3;19122:67;19186:2;19181:3;19122:67;:::i;:::-;19115:74;;19198:93;19287:3;19198:93;:::i;:::-;19316:2;19311:3;19307:12;19300:19;;18959:366;;;:::o;19331:419::-;19497:4;19535:2;19524:9;19520:18;19512:26;;19584:9;19578:4;19574:20;19570:1;19559:9;19555:17;19548:47;19612:131;19738:4;19612:131;:::i;:::-;19604:139;;19331:419;;;:::o;19756:225::-;19896:34;19892:1;19884:6;19880:14;19873:58;19965:8;19960:2;19952:6;19948:15;19941:33;19756:225;:::o;19987:366::-;20129:3;20150:67;20214:2;20209:3;20150:67;:::i;:::-;20143:74;;20226:93;20315:3;20226:93;:::i;:::-;20344:2;20339:3;20335:12;20328:19;;19987:366;;;:::o;20359:419::-;20525:4;20563:2;20552:9;20548:18;20540:26;;20612:9;20606:4;20602:20;20598:1;20587:9;20583:17;20576:47;20640:131;20766:4;20640:131;:::i;:::-;20632:139;;20359:419;;;:::o;20784:223::-;20924:34;20920:1;20912:6;20908:14;20901:58;20993:6;20988:2;20980:6;20976:15;20969:31;20784:223;:::o;21013:366::-;21155:3;21176:67;21240:2;21235:3;21176:67;:::i;:::-;21169:74;;21252:93;21341:3;21252:93;:::i;:::-;21370:2;21365:3;21361:12;21354:19;;21013:366;;;:::o;21385:419::-;21551:4;21589:2;21578:9;21574:18;21566:26;;21638:9;21632:4;21628:20;21624:1;21613:9;21609:17;21602:47;21666:131;21792:4;21666:131;:::i;:::-;21658:139;;21385:419;;;:::o;21810:221::-;21950:34;21946:1;21938:6;21934:14;21927:58;22019:4;22014:2;22006:6;22002:15;21995:29;21810:221;:::o;22037:366::-;22179:3;22200:67;22264:2;22259:3;22200:67;:::i;:::-;22193:74;;22276:93;22365:3;22276:93;:::i;:::-;22394:2;22389:3;22385:12;22378:19;;22037:366;;;:::o;22409:419::-;22575:4;22613:2;22602:9;22598:18;22590:26;;22662:9;22656:4;22652:20;22648:1;22637:9;22633:17;22626:47;22690:131;22816:4;22690:131;:::i;:::-;22682:139;;22409:419;;;:::o;22834:224::-;22974:34;22970:1;22962:6;22958:14;22951:58;23043:7;23038:2;23030:6;23026:15;23019:32;22834:224;:::o;23064:366::-;23206:3;23227:67;23291:2;23286:3;23227:67;:::i;:::-;23220:74;;23303:93;23392:3;23303:93;:::i;:::-;23421:2;23416:3;23412:12;23405:19;;23064:366;;;:::o;23436:419::-;23602:4;23640:2;23629:9;23625:18;23617:26;;23689:9;23683:4;23679:20;23675:1;23664:9;23660:17;23653:47;23717:131;23843:4;23717:131;:::i;:::-;23709:139;;23436:419;;;:::o;23861:222::-;24001:34;23997:1;23989:6;23985:14;23978:58;24070:5;24065:2;24057:6;24053:15;24046:30;23861:222;:::o;24089:366::-;24231:3;24252:67;24316:2;24311:3;24252:67;:::i;:::-;24245:74;;24328:93;24417:3;24328:93;:::i;:::-;24446:2;24441:3;24437:12;24430:19;;24089:366;;;:::o;24461:419::-;24627:4;24665:2;24654:9;24650:18;24642:26;;24714:9;24708:4;24704:20;24700:1;24689:9;24685:17;24678:47;24742:131;24868:4;24742:131;:::i;:::-;24734:139;;24461:419;;;:::o;24886:228::-;25026:34;25022:1;25014:6;25010:14;25003:58;25095:11;25090:2;25082:6;25078:15;25071:36;24886:228;:::o;25120:366::-;25262:3;25283:67;25347:2;25342:3;25283:67;:::i;:::-;25276:74;;25359:93;25448:3;25359:93;:::i;:::-;25477:2;25472:3;25468:12;25461:19;;25120:366;;;:::o;25492:419::-;25658:4;25696:2;25685:9;25681:18;25673:26;;25745:9;25739:4;25735:20;25731:1;25720:9;25716:17;25709:47;25773:131;25899:4;25773:131;:::i;:::-;25765:139;;25492:419;;;:::o;25917:173::-;26057:25;26053:1;26045:6;26041:14;26034:49;25917:173;:::o;26096:366::-;26238:3;26259:67;26323:2;26318:3;26259:67;:::i;:::-;26252:74;;26335:93;26424:3;26335:93;:::i;:::-;26453:2;26448:3;26444:12;26437:19;;26096:366;;;:::o;26468:419::-;26634:4;26672:2;26661:9;26657:18;26649:26;;26721:9;26715:4;26711:20;26707:1;26696:9;26692:17;26685:47;26749:131;26875:4;26749:131;:::i;:::-;26741:139;;26468:419;;;:::o;26893:180::-;26941:77;26938:1;26931:88;27038:4;27035:1;27028:15;27062:4;27059:1;27052:15;27079:194;27119:4;27139:20;27157:1;27139:20;:::i;:::-;27134:25;;27173:20;27191:1;27173:20;:::i;:::-;27168:25;;27217:1;27214;27210:9;27202:17;;27241:1;27235:4;27232:11;27229:37;;;27246:18;;:::i;:::-;27229:37;27079:194;;;;:::o;27279:191::-;27319:3;27338:20;27356:1;27338:20;:::i;:::-;27333:25;;27372:20;27390:1;27372:20;:::i;:::-;27367:25;;27415:1;27412;27408:9;27401:16;;27436:3;27433:1;27430:10;27427:36;;;27443:18;;:::i;:::-;27427:36;27279:191;;;;:::o;27476:177::-;27616:29;27612:1;27604:6;27600:14;27593:53;27476:177;:::o;27659:366::-;27801:3;27822:67;27886:2;27881:3;27822:67;:::i;:::-;27815:74;;27898:93;27987:3;27898:93;:::i;:::-;28016:2;28011:3;28007:12;28000:19;;27659:366;;;:::o;28031:419::-;28197:4;28235:2;28224:9;28220:18;28212:26;;28284:9;28278:4;28274:20;28270:1;28259:9;28255:17;28248:47;28312:131;28438:4;28312:131;:::i;:::-;28304:139;;28031:419;;;:::o;28456:180::-;28504:77;28501:1;28494:88;28601:4;28598:1;28591:15;28625:4;28622:1;28615:15;28642:180;28690:77;28687:1;28680:88;28787:4;28784:1;28777:15;28811:4;28808:1;28801:15;28828:143;28885:5;28916:6;28910:13;28901:22;;28932:33;28959:5;28932:33;:::i;:::-;28828:143;;;;:::o;28977:351::-;29047:6;29096:2;29084:9;29075:7;29071:23;29067:32;29064:119;;;29102:79;;:::i;:::-;29064:119;29222:1;29247:64;29303:7;29294:6;29283:9;29279:22;29247:64;:::i;:::-;29237:74;;29193:128;28977:351;;;;:::o;29334:85::-;29379:7;29408:5;29397:16;;29334:85;;;:::o;29425:158::-;29483:9;29516:61;29534:42;29543:32;29569:5;29543:32;:::i;:::-;29534:42;:::i;:::-;29516:61;:::i;:::-;29503:74;;29425:158;;;:::o;29589:147::-;29684:45;29723:5;29684:45;:::i;:::-;29679:3;29672:58;29589:147;;:::o;29742:114::-;29809:6;29843:5;29837:12;29827:22;;29742:114;;;:::o;29862:184::-;29961:11;29995:6;29990:3;29983:19;30035:4;30030:3;30026:14;30011:29;;29862:184;;;;:::o;30052:132::-;30119:4;30142:3;30134:11;;30172:4;30167:3;30163:14;30155:22;;30052:132;;;:::o;30190:108::-;30267:24;30285:5;30267:24;:::i;:::-;30262:3;30255:37;30190:108;;:::o;30304:179::-;30373:10;30394:46;30436:3;30428:6;30394:46;:::i;:::-;30472:4;30467:3;30463:14;30449:28;;30304:179;;;;:::o;30489:113::-;30559:4;30591;30586:3;30582:14;30574:22;;30489:113;;;:::o;30638:732::-;30757:3;30786:54;30834:5;30786:54;:::i;:::-;30856:86;30935:6;30930:3;30856:86;:::i;:::-;30849:93;;30966:56;31016:5;30966:56;:::i;:::-;31045:7;31076:1;31061:284;31086:6;31083:1;31080:13;31061:284;;;31162:6;31156:13;31189:63;31248:3;31233:13;31189:63;:::i;:::-;31182:70;;31275:60;31328:6;31275:60;:::i;:::-;31265:70;;31121:224;31108:1;31105;31101:9;31096:14;;31061:284;;;31065:14;31361:3;31354:10;;30762:608;;;30638:732;;;;:::o;31376:831::-;31639:4;31677:3;31666:9;31662:19;31654:27;;31691:71;31759:1;31748:9;31744:17;31735:6;31691:71;:::i;:::-;31772:80;31848:2;31837:9;31833:18;31824:6;31772:80;:::i;:::-;31899:9;31893:4;31889:20;31884:2;31873:9;31869:18;31862:48;31927:108;32030:4;32021:6;31927:108;:::i;:::-;31919:116;;32045:72;32113:2;32102:9;32098:18;32089:6;32045:72;:::i;:::-;32127:73;32195:3;32184:9;32180:19;32171:6;32127:73;:::i;:::-;31376:831;;;;;;;;:::o;32213:227::-;32353:34;32349:1;32341:6;32337:14;32330:58;32422:10;32417:2;32409:6;32405:15;32398:35;32213:227;:::o;32446:366::-;32588:3;32609:67;32673:2;32668:3;32609:67;:::i;:::-;32602:74;;32685:93;32774:3;32685:93;:::i;:::-;32803:2;32798:3;32794:12;32787:19;;32446:366;;;:::o;32818:419::-;32984:4;33022:2;33011:9;33007:18;32999:26;;33071:9;33065:4;33061:20;33057:1;33046:9;33042:17;33035:47;33099:131;33225:4;33099:131;:::i;:::-;33091:139;;32818:419;;;:::o;33243:180::-;33291:77;33288:1;33281:88;33388:4;33385:1;33378:15;33412:4;33409:1;33402:15;33429:185;33469:1;33486:20;33504:1;33486:20;:::i;:::-;33481:25;;33520:20;33538:1;33520:20;:::i;:::-;33515:25;;33559:1;33549:35;;33564:18;;:::i;:::-;33549:35;33606:1;33603;33599:9;33594:14;;33429:185;;;;:::o;33620:410::-;33660:7;33683:20;33701:1;33683:20;:::i;:::-;33678:25;;33717:20;33735:1;33717:20;:::i;:::-;33712:25;;33772:1;33769;33765:9;33794:30;33812:11;33794:30;:::i;:::-;33783:41;;33973:1;33964:7;33960:15;33957:1;33954:22;33934:1;33927:9;33907:83;33884:139;;34003:18;;:::i;:::-;33884:139;33668:362;33620:410;;;;:::o;34036:220::-;34176:34;34172:1;34164:6;34160:14;34153:58;34245:3;34240:2;34232:6;34228:15;34221:28;34036:220;:::o;34262:366::-;34404:3;34425:67;34489:2;34484:3;34425:67;:::i;:::-;34418:74;;34501:93;34590:3;34501:93;:::i;:::-;34619:2;34614:3;34610:12;34603:19;;34262:366;;;:::o;34634:419::-;34800:4;34838:2;34827:9;34823:18;34815:26;;34887:9;34881:4;34877:20;34873:1;34862:9;34858:17;34851:47;34915:131;35041:4;34915:131;:::i;:::-;34907:139;;34634:419;;;:::o
Swarm Source
ipfs://f68d9c80cae0f8029547d880e6fbc115d3887952ac3bc8b71f6ca24d04ba2d3b
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.