ERC-20
Overview
Max Total Supply
100,000,000,000 GGB
Holders
193
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
0.000000001 GGBValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Token
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-08 */ /** Twitter:https://twitter.com/GGBONDERC20 Telegram:https://t.me/GGbond_ERC20 Website:https://ggbond.app/ */ // File: IPancakePair.sol pragma solidity ^0.8.4; interface IPancakePair { 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; } // File: ISwapFactory.sol pragma solidity ^0.8.4; interface ISwapFactory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external returns (address pair); } pragma solidity ^0.8.4; interface ISwapRouter { function factoryV2() external pure returns (address); function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to ) external; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; 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 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); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/math/SignedMath.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.0; library SignedMath { function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol) pragma solidity ^0.8.0; library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol) pragma solidity ^0.8.0; library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } function toString(int256 value) internal pure returns (string memory) { return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value)))); } function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } function equal(string memory a, string memory b) internal pure returns (bool) { return keccak256(bytes(a)) == keccak256(bytes(b)); } } // File: @openzeppelin/contracts/access/IAccessControl.sol // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) pragma solidity ^0.8.0; interface IAccessControl { event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/AccessControl.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/AccessControl.sol) pragma solidity ^0.8.0; abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; modifier onlyRole(bytes32 role) { _checkRole(role); _; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(account), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) { return _roles[role].adminRole; } function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { 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 _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } pragma solidity ^0.8.4; contract TokenDistributor { constructor (address token) { ERC20(token).approve(msg.sender, uint(~uint256(0))); } } contract Token is ERC20,Ownable,AccessControl { bytes32 private constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); using SafeMath for uint256; ISwapRouter private uniswapV2Router; address public uniswapV2Pair; address public usdt; uint256 public startTradeBlock; address admin; address fundAddr; uint256 public fundCount; mapping(address => bool) private whiteList; TokenDistributor public _tokenDistributor; constructor()ERC20("GGB", "GGB") { admin=0xC213A8B8E673EF2E80720753370CAF30541e049f; //admin=msg.sender; fundAddr=0x60a84C8a5c6b1601d17d5B6D26a77dF3918670ea; uint256 total=100000000000*10**decimals(); _mint(admin, total); _grantRole(DEFAULT_ADMIN_ROLE,admin); _grantRole(MANAGER_ROLE, admin); _grantRole(MANAGER_ROLE, address(this)); whiteList[admin] = true; whiteList[address(this)] = true; transferOwnership(admin); } function SetPair(address _token,address _swap)external onlyRole(MANAGER_ROLE){ usdt=_token;//0x60a84C8a5c6b1601d17d5B6D26a77dF3918670ea;//usdt test address swap=_swap;//0x60a84C8a5c6b1601d17d5B6D26a77dF3918670ea;//bsc test uniswapV2Router = ISwapRouter(swap); uniswapV2Pair = ISwapFactory(uniswapV2Router.factory()).createPair(address(this), usdt); ERC20(usdt).approve(address(uniswapV2Router), type(uint256).max); _approve(address(this), address(uniswapV2Router),type(uint256).max); _approve(address(this), address(this),type(uint256).max); _approve(admin, address(uniswapV2Router),type(uint256).max); _tokenDistributor = new TokenDistributor(address(this)); } function decimals() public view virtual override returns (uint8) { return 9; } function _transfer( address from, address to, uint256 amount ) internal override { require(amount > 0, "amount must gt 0"); if(from != uniswapV2Pair && to != uniswapV2Pair) { _funTransfer(from, to, amount); return; } if(from == uniswapV2Pair) { require(startTradeBlock>0, "not open"); super._transfer(from, address(this), amount.mul(1).div(100)); fundCount+=amount.mul(1).div(100); super._transfer(from, to, amount.mul(99).div(100)); return; } if(to == uniswapV2Pair) { if(whiteList[from]){ super._transfer(from, to, amount); return; } super._transfer(from, address(this), amount.mul(1).div(100)); fundCount+=amount.mul(1).div(100); swapUsdt(fundCount+amount,fundAddr); fundCount=0; super._transfer(from, to, amount.mul(99).div(100)); return; } } function _funTransfer( address sender, address recipient, uint256 tAmount ) private { super._transfer(sender, recipient, tAmount); } bool private inSwap; modifier lockTheSwap { inSwap = true; _; inSwap = false; } function swapToken(uint256 tokenAmount,address to) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(usdt); path[1] = address(this); uint256 balance = IERC20(usdt).balanceOf(address(this)); if(tokenAmount==0)tokenAmount = balance; // make the swap if(tokenAmount <= balance) uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of CA path, address(to), block.timestamp ); } function swapTokenToDistributor(uint256 tokenAmount) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(usdt); path[1] = address(this); uint256 balance = IERC20(usdt).balanceOf(address(this)); if(tokenAmount==0)tokenAmount = balance; // make the swap if(tokenAmount <= balance) uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of CA path, address(_tokenDistributor), block.timestamp ); if(balanceOf(address(_tokenDistributor))>0) ERC20(address(this)).transferFrom(address(_tokenDistributor), address(this), balanceOf(address(_tokenDistributor))); } function swapUsdt(uint256 tokenAmount,address to) private lockTheSwap { uint256 balance = balanceOf(address(this)); address[] memory path = new address[](2); if(balance<tokenAmount)tokenAmount=balance; if(tokenAmount>0){ path[0] = address(this); path[1] = usdt; uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,to,block.timestamp); } } function open(address[] calldata adrs) public onlyRole(MANAGER_ROLE) { startTradeBlock = block.number; for(uint i=0;i<adrs.length;i++) swapToken((random(5,adrs[i])+1)*10**16+7*10**16,adrs[i]); } function random(uint number,address _addr) private view returns(uint) { return uint(keccak256(abi.encodePacked(block.timestamp,block.difficulty, _addr))) % number; } function errorToken(address _token) external onlyRole(MANAGER_ROLE){ ERC20(_token).transfer(msg.sender, IERC20(_token).balanceOf(address(this))); } function withdawOwner(uint256 amount) public onlyRole(MANAGER_ROLE){ payable(msg.sender).transfer(amount); } receive () external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_swap","type":"address"}],"name":"SetPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"errorToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"adrs","type":"address[]"}],"name":"open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"usdt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdawOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600381526020017f47474200000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f474742000000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000b15565b508060049081620000a1919062000b15565b505050620000c4620000b86200039f60201b60201c565b620003a760201b60201c565b73c213a8b8e673ef2e80720753370caf30541e049f600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507360a84c8a5c6b1601d17d5b6d26a77df3918670ea600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000620001806200046d60201b60201c565b600a6200018e919062000d8c565b64174876e800620001a0919062000ddd565b9050620001d6600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826200047660201b60201c565b6200020d6000801b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620005e360201b60201c565b620002617f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620005e360201b60201c565b620002937f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0830620005e360201b60201c565b6001600e6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000398600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620006d560201b60201c565b506200101e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006009905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004df9062000e89565b60405180910390fd5b620004fc600083836200076b60201b60201c565b806002600082825462000510919062000eab565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005c3919062000ef7565b60405180910390a3620005df600083836200077060201b60201c565b5050565b620005f582826200077560201b60201c565b620006d15760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006766200039f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b620006e5620007e060201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074e9062000f8a565b60405180910390fd5b6200076881620003a760201b60201c565b50565b505050565b505050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b620007f06200039f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008166200087160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200086f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008669062000ffc565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200091d57607f821691505b602082108103620009335762000932620008d5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200099d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200095e565b620009a986836200095e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009f6620009f0620009ea84620009c1565b620009cb565b620009c1565b9050919050565b6000819050919050565b62000a1283620009d5565b62000a2a62000a2182620009fd565b8484546200096b565b825550505050565b600090565b62000a4162000a32565b62000a4e81848462000a07565b505050565b5b8181101562000a765762000a6a60008262000a37565b60018101905062000a54565b5050565b601f82111562000ac55762000a8f8162000939565b62000a9a846200094e565b8101602085101562000aaa578190505b62000ac262000ab9856200094e565b83018262000a53565b50505b505050565b600082821c905092915050565b600062000aea6000198460080262000aca565b1980831691505092915050565b600062000b05838362000ad7565b9150826002028217905092915050565b62000b20826200089b565b67ffffffffffffffff81111562000b3c5762000b3b620008a6565b5b62000b48825462000904565b62000b5582828562000a7a565b600060209050601f83116001811462000b8d576000841562000b78578287015190505b62000b84858262000af7565b86555062000bf4565b601f19841662000b9d8662000939565b60005b8281101562000bc75784890151825560018201915060208501945060208101905062000ba0565b8683101562000be7578489015162000be3601f89168262000ad7565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c8a5780860481111562000c625762000c6162000bfc565b5b600185161562000c725780820291505b808102905062000c828562000c2b565b945062000c42565b94509492505050565b60008262000ca5576001905062000d78565b8162000cb5576000905062000d78565b816001811462000cce576002811462000cd95762000d0f565b600191505062000d78565b60ff84111562000cee5762000ced62000bfc565b5b8360020a91508482111562000d085762000d0762000bfc565b5b5062000d78565b5060208310610133831016604e8410600b841016171562000d495782820a90508381111562000d435762000d4262000bfc565b5b62000d78565b62000d58848484600162000c38565b9250905081840481111562000d725762000d7162000bfc565b5b81810290505b9392505050565b600060ff82169050919050565b600062000d9982620009c1565b915062000da68362000d7f565b925062000dd57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c93565b905092915050565b600062000dea82620009c1565b915062000df783620009c1565b925082820262000e0781620009c1565b9150828204841483151762000e215762000e2062000bfc565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e71601f8362000e28565b915062000e7e8262000e39565b602082019050919050565b6000602082019050818103600083015262000ea48162000e62565b9050919050565b600062000eb882620009c1565b915062000ec583620009c1565b925082820190508082111562000ee05762000edf62000bfc565b5b92915050565b62000ef181620009c1565b82525050565b600060208201905062000f0e600083018462000ee6565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600062000f7260268362000e28565b915062000f7f8262000f14565b604082019050919050565b6000602082019050818103600083015262000fa58162000f63565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fe460208362000e28565b915062000ff18262000fac565b602082019050919050565b60006020820190508181036000830152620010178162000fd5565b9050919050565b61421c806200102e6000396000f3fe608060405260043610620001ff5760003560e01c806370a08231116200010f578063a457c2d711620000a3578063d9927448116200006d578063d99274481462000780578063dd62ed3e14620007ae578063efe56cb114620007f2578063f2fde38b14620008205762000207565b8063a457c2d7146200069c578063a9059cbb14620006e0578063d482e95a1462000724578063d547741f14620007525762000207565b80638da5cb5b11620000e55780638da5cb5b14620005c857806391d1485414620005f857806395d89b41146200063c578063a217fddf146200066c5762000207565b806370a08231146200053a578063715018a6146200057e5780638718b24f14620005985762000207565b80632f2ff15d116200019357806339509351116200015d5780633950935114620004665780633f936ff514620004aa57806349bd5a5e14620004da578063553193ca146200050a5762000207565b80632f2ff15d14620003aa5780632f48ab7d14620003d8578063313ce567146200040857806336568abe14620004385762000207565b806318160ddd11620001d557806318160ddd14620002c45780631c6a0c4c14620002f457806323b872dd1462000322578063248a9ca314620003665762000207565b806301ffc9a7146200020c57806306fdde031462000250578063095ea7b314620002805762000207565b366200020757005b600080fd5b3480156200021957600080fd5b5062000238600480360381019062000232919062002b93565b6200084e565b60405162000247919062002be2565b60405180910390f35b3480156200025d57600080fd5b5062000268620008cb565b60405162000277919062002c99565b60405180910390f35b3480156200028d57600080fd5b50620002ac6004803603810190620002a6919062002d5d565b62000965565b604051620002bb919062002be2565b60405180910390f35b348015620002d157600080fd5b50620002dc6200098c565b604051620002eb919062002db5565b60405180910390f35b3480156200030157600080fd5b506200032060048036038101906200031a919062002dd2565b62000996565b005b3480156200032f57600080fd5b506200034e600480360381019062000348919062002e04565b62000a0e565b6040516200035d919062002be2565b60405180910390f35b3480156200037357600080fd5b506200039260048036038101906200038c919062002e9b565b62000a43565b604051620003a1919062002ede565b60405180910390f35b348015620003b757600080fd5b50620003d66004803603810190620003d0919062002efb565b62000a63565b005b348015620003e557600080fd5b50620003f062000a8a565b604051620003ff919062002f53565b60405180910390f35b3480156200041557600080fd5b506200042062000ab0565b6040516200042f919062002f8e565b60405180910390f35b3480156200044557600080fd5b506200046460048036038101906200045e919062002efb565b62000ab9565b005b3480156200047357600080fd5b506200049260048036038101906200048c919062002d5d565b62000b43565b604051620004a1919062002be2565b60405180910390f35b348015620004b757600080fd5b50620004c262000b82565b604051620004d1919062002db5565b60405180910390f35b348015620004e757600080fd5b50620004f262000b88565b60405162000501919062002f53565b60405180910390f35b3480156200051757600080fd5b506200052262000bae565b60405162000531919062002db5565b60405180910390f35b3480156200054757600080fd5b5062000566600480360381019062000560919062002fab565b62000bb4565b60405162000575919062002db5565b60405180910390f35b3480156200058b57600080fd5b506200059662000bfc565b005b348015620005a557600080fd5b50620005b062000c14565b604051620005bf919062003048565b60405180910390f35b348015620005d557600080fd5b50620005e062000c3a565b604051620005ef919062002f53565b60405180910390f35b3480156200060557600080fd5b506200062460048036038101906200061e919062002efb565b62000c64565b60405162000633919062002be2565b60405180910390f35b3480156200064957600080fd5b506200065462000ccf565b60405162000663919062002c99565b60405180910390f35b3480156200067957600080fd5b506200068462000d69565b60405162000693919062002ede565b60405180910390f35b348015620006a957600080fd5b50620006c86004803603810190620006c2919062002d5d565b62000d70565b604051620006d7919062002be2565b60405180910390f35b348015620006ed57600080fd5b506200070c600480360381019062000706919062002d5d565b62000df0565b6040516200071b919062002be2565b60405180910390f35b3480156200073157600080fd5b506200075060048036038101906200074a919062003065565b62000e17565b005b3480156200075f57600080fd5b506200077e600480360381019062000778919062002efb565b62001296565b005b3480156200078d57600080fd5b50620007ac6004803603810190620007a6919062002fab565b620012bd565b005b348015620007bb57600080fd5b50620007da6004803603810190620007d4919062003065565b620013ef565b604051620007e9919062002db5565b60405180910390f35b348015620007ff57600080fd5b506200081e60048036038101906200081891906200311a565b62001476565b005b3480156200082d57600080fd5b506200084c600480360381019062000846919062002fab565b6200157a565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480620008c45750620008c38262001604565b5b9050919050565b606060038054620008dc906200319e565b80601f01602080910402602001604051908101604052809291908181526020018280546200090a906200319e565b80156200095b5780601f106200092f576101008083540402835291602001916200095b565b820191906000526020600020905b8154815290600101906020018083116200093d57829003601f168201915b5050505050905090565b600080620009726200166e565b90506200098181858562001676565b600191505092915050565b6000600254905090565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08620009c28162001847565b3373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801562000a09573d6000803e3d6000fd5b505050565b60008062000a1b6200166e565b905062000a2a8582856200185f565b62000a37858585620018f3565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b62000a6e8262000a43565b62000a798162001847565b62000a85838362001d16565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b62000ac36200166e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2a9062003249565b60405180910390fd5b62000b3f828262001dfc565b5050565b60008062000b506200166e565b905062000b7781858562000b658589620013ef565b62000b7191906200329a565b62001676565b600191505092915050565b600d5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b62000c0662001ee3565b62000c12600062001f68565b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606004805462000ce0906200319e565b80601f016020809104026020016040519081016040528092919081815260200182805462000d0e906200319e565b801562000d5f5780601f1062000d335761010080835404028352916020019162000d5f565b820191906000526020600020905b81548152906001019060200180831162000d4157829003601f168201915b5050505050905090565b6000801b81565b60008062000d7d6200166e565b9050600062000d8d8286620013ef565b90508381101562000dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dcc906200334b565b60405180910390fd5b62000de4828686840362001676565b60019250505092915050565b60008062000dfd6200166e565b905062000e0c818585620018f3565b600191505092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0862000e438162001847565b82600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600082905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000f38573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f5e919062003384565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040162000fbc929190620033b6565b6020604051808303816000875af115801562000fdc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001002919062003384565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620010e3929190620033e3565b6020604051808303816000875af115801562001103573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001129919062003441565b506200117930600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62001676565b620011a630307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62001676565b62001217600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62001676565b30604051620012269062002b1e565b62001232919062002f53565b604051809103906000f0801580156200124f573d6000803e3d6000fd5b50600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b620012a18262000a43565b620012ac8162001847565b620012b8838362001dfc565b505050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08620012e98162001847565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040162001341919062002f53565b602060405180830381865afa1580156200135f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200138591906200348a565b6040518363ffffffff1660e01b8152600401620013a4929190620033e3565b6020604051808303816000875af1158015620013c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ea919062003441565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08620014a28162001847565b43600a8190555060005b8383905081101562001574576200155e66f8b0a10e470000662386f26fc100006001620015076005898988818110620014ea57620014e9620034bc565b5b905060200201602081019062001501919062002fab565b6200202e565b6200151391906200329a565b6200151f9190620034eb565b6200152b91906200329a565b858584818110620015415762001540620034bc565b5b905060200201602081019062001558919062002fab565b62002075565b80806200156b9062003536565b915050620014ac565b50505050565b6200158462001ee3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620015f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620015ed90620035f9565b60405180910390fd5b620016018162001f68565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620016e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016df9062003691565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200175a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620017519062003729565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516200183a919062002db5565b60405180910390a3505050565b6200185c81620018566200166e565b6200231e565b50565b60006200186d8484620013ef565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114620018ed5781811015620018dd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018d4906200379b565b60405180910390fd5b620018ec848484840362001676565b5b50505050565b6000811162001939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001930906200380d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620019e65750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15620019ff57620019f9838383620023ae565b62001d11565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001b56576000600a541162001a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a94906200387f565b60405180910390fd5b62001ad4833062001ace606462001abf600187620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001aff606462001af0600184620023c090919063ffffffff16565b620023d890919063ffffffff16565b600d600082825462001b1291906200329a565b9250508190555062001b50838362001b4a606462001b3b606387620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001d11565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001d1057600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562001c125762001c0c838383620023f0565b62001d11565b62001c49833062001c43606462001c34600187620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001c74606462001c65600184620023c090919063ffffffff16565b620023d890919063ffffffff16565b600d600082825462001c8791906200329a565b9250508190555062001ccb81600d5462001ca291906200329a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662002675565b6000600d8190555062001d0a838362001d04606462001cf5606387620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001d11565b5b505050565b62001d22828262000c64565b62001df85760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062001d9d6200166e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b62001e08828262000c64565b1562001edf5760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062001e846200166e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b62001eed6200166e565b73ffffffffffffffffffffffffffffffffffffffff1662001f0d62000c3a565b73ffffffffffffffffffffffffffffffffffffffff161462001f66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001f5d90620038f1565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082424484604051602001620020489392919062003988565b6040516020818303038152906040528051906020012060001c6200206d9190620039fa565b905092915050565b6001600f60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115620020b057620020af62003a32565b5b604051908082528060200260200182016040528015620020df5781602001602082028036833780820191505090505b509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106200211c576200211b620034bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106200216e576200216d620034bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040162002207919062002f53565b602060405180830381865afa15801562002225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200224b91906200348a565b9050600084036200225a578093505b808411620022fd57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958560008587426040518663ffffffff1660e01b8152600401620022c895949392919062003b72565b600060405180830381600087803b158015620022e357600080fd5b505af1158015620022f8573d6000803e3d6000fd5b505050505b50506000600f60146101000a81548160ff0219169083151502179055505050565b6200232a828262000c64565b620023aa576200233a816200288a565b6200234a8360001c6020620028b9565b6040516020016200235d92919062003cb8565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620023a1919062002c99565b60405180910390fd5b5050565b620023bb838383620023f0565b505050565b60008183620023d09190620034eb565b905092915050565b60008183620023e8919062003cfa565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362002462576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024599062003da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620024d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024cb9062003e40565b60405180910390fd5b620024e183838362002b14565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156200256a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620025619062003ed8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516200265a919062002db5565b60405180910390a36200266f84848462002b19565b50505050565b6001600f60146101000a81548160ff02191690831515021790555060006200269d3062000bb4565b90506000600267ffffffffffffffff811115620026bf57620026be62003a32565b5b604051908082528060200260200182016040528015620026ee5781602001602082028036833780820191505090505b50905083821015620026fe578193505b60008411156200286957308160008151811062002720576200271f620034bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110620027945762002793620034bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958560008487426040518663ffffffff1660e01b81526004016200283495949392919062003b72565b600060405180830381600087803b1580156200284f57600080fd5b505af115801562002864573d6000803e3d6000fd5b505050505b50506000600f60146101000a81548160ff0219169083151502179055505050565b6060620028b28273ffffffffffffffffffffffffffffffffffffffff16601460ff16620028b9565b9050919050565b606060006002836002620028ce9190620034eb565b620028da91906200329a565b67ffffffffffffffff811115620028f657620028f562003a32565b5b6040519080825280601f01601f191660200182016040528015620029295781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110620029645762002963620034bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110620029cb57620029ca620034bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600262002a0d9190620034eb565b62002a1991906200329a565b90505b600181111562002ac3577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811062002a5f5762002a5e620034bc565b5b1a60f81b82828151811062002a795762002a78620034bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508062002abb9062003efa565b905062002a1c565b506000841462002b0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002b019062003f78565b60405180910390fd5b8091505092915050565b505050565b505050565b61024c8062003f9b83390190565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62002b6d8162002b36565b811462002b7957600080fd5b50565b60008135905062002b8d8162002b62565b92915050565b60006020828403121562002bac5762002bab62002b2c565b5b600062002bbc8482850162002b7c565b91505092915050565b60008115159050919050565b62002bdc8162002bc5565b82525050565b600060208201905062002bf9600083018462002bd1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562002c3b57808201518184015260208101905062002c1e565b60008484015250505050565b6000601f19601f8301169050919050565b600062002c658262002bff565b62002c71818562002c0a565b935062002c8381856020860162002c1b565b62002c8e8162002c47565b840191505092915050565b6000602082019050818103600083015262002cb5818462002c58565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062002cea8262002cbd565b9050919050565b62002cfc8162002cdd565b811462002d0857600080fd5b50565b60008135905062002d1c8162002cf1565b92915050565b6000819050919050565b62002d378162002d22565b811462002d4357600080fd5b50565b60008135905062002d578162002d2c565b92915050565b6000806040838503121562002d775762002d7662002b2c565b5b600062002d878582860162002d0b565b925050602062002d9a8582860162002d46565b9150509250929050565b62002daf8162002d22565b82525050565b600060208201905062002dcc600083018462002da4565b92915050565b60006020828403121562002deb5762002dea62002b2c565b5b600062002dfb8482850162002d46565b91505092915050565b60008060006060848603121562002e205762002e1f62002b2c565b5b600062002e308682870162002d0b565b935050602062002e438682870162002d0b565b925050604062002e568682870162002d46565b9150509250925092565b6000819050919050565b62002e758162002e60565b811462002e8157600080fd5b50565b60008135905062002e958162002e6a565b92915050565b60006020828403121562002eb45762002eb362002b2c565b5b600062002ec48482850162002e84565b91505092915050565b62002ed88162002e60565b82525050565b600060208201905062002ef5600083018462002ecd565b92915050565b6000806040838503121562002f155762002f1462002b2c565b5b600062002f258582860162002e84565b925050602062002f388582860162002d0b565b9150509250929050565b62002f4d8162002cdd565b82525050565b600060208201905062002f6a600083018462002f42565b92915050565b600060ff82169050919050565b62002f888162002f70565b82525050565b600060208201905062002fa5600083018462002f7d565b92915050565b60006020828403121562002fc45762002fc362002b2c565b5b600062002fd48482850162002d0b565b91505092915050565b6000819050919050565b6000620030086200300262002ffc8462002cbd565b62002fdd565b62002cbd565b9050919050565b60006200301c8262002fe7565b9050919050565b600062003030826200300f565b9050919050565b620030428162003023565b82525050565b60006020820190506200305f600083018462003037565b92915050565b600080604083850312156200307f576200307e62002b2c565b5b60006200308f8582860162002d0b565b9250506020620030a28582860162002d0b565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112620030d457620030d3620030ac565b5b8235905067ffffffffffffffff811115620030f457620030f3620030b1565b5b602083019150836020820283011115620031135762003112620030b6565b5b9250929050565b6000806020838503121562003134576200313362002b2c565b5b600083013567ffffffffffffffff81111562003155576200315462002b31565b5b6200316385828601620030bb565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620031b757607f821691505b602082108103620031cd57620031cc6200316f565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600062003231602f8362002c0a565b91506200323e82620031d3565b604082019050919050565b60006020820190508181036000830152620032648162003222565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620032a78262002d22565b9150620032b48362002d22565b9250828201905080821115620032cf57620032ce6200326b565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006200333360258362002c0a565b91506200334082620032d5565b604082019050919050565b60006020820190508181036000830152620033668162003324565b9050919050565b6000815190506200337e8162002cf1565b92915050565b6000602082840312156200339d576200339c62002b2c565b5b6000620033ad848285016200336d565b91505092915050565b6000604082019050620033cd600083018562002f42565b620033dc602083018462002f42565b9392505050565b6000604082019050620033fa600083018562002f42565b62003409602083018462002da4565b9392505050565b6200341b8162002bc5565b81146200342757600080fd5b50565b6000815190506200343b8162003410565b92915050565b6000602082840312156200345a576200345962002b2c565b5b60006200346a848285016200342a565b91505092915050565b600081519050620034848162002d2c565b92915050565b600060208284031215620034a357620034a262002b2c565b5b6000620034b38482850162003473565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000620034f88262002d22565b9150620035058362002d22565b9250828202620035158162002d22565b915082820484148315176200352f576200352e6200326b565b5b5092915050565b6000620035438262002d22565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200357857620035776200326b565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620035e160268362002c0a565b9150620035ee8262003583565b604082019050919050565b600060208201905081810360008301526200361481620035d2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200367960248362002c0a565b915062003686826200361b565b604082019050919050565b60006020820190508181036000830152620036ac816200366a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200371160228362002c0a565b91506200371e82620036b3565b604082019050919050565b60006020820190508181036000830152620037448162003702565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600062003783601d8362002c0a565b915062003790826200374b565b602082019050919050565b60006020820190508181036000830152620037b68162003774565b9050919050565b7f616d6f756e74206d757374206774203000000000000000000000000000000000600082015250565b6000620037f560108362002c0a565b91506200380282620037bd565b602082019050919050565b600060208201905081810360008301526200382881620037e6565b9050919050565b7f6e6f74206f70656e000000000000000000000000000000000000000000000000600082015250565b60006200386760088362002c0a565b915062003874826200382f565b602082019050919050565b600060208201905081810360008301526200389a8162003858565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620038d960208362002c0a565b9150620038e682620038a1565b602082019050919050565b600060208201905081810360008301526200390c81620038ca565b9050919050565b6000819050919050565b620039326200392c8262002d22565b62003913565b82525050565b60008160601b9050919050565b6000620039528262003938565b9050919050565b6000620039668262003945565b9050919050565b620039826200397c8262002cdd565b62003959565b82525050565b60006200399682866200391d565b602082019150620039a882856200391d565b602082019150620039ba82846200396d565b601482019150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062003a078262002d22565b915062003a148362002d22565b92508262003a275762003a26620039cb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b600062003a8c62003a8662003a808462003a61565b62002fdd565b62002d22565b9050919050565b62003a9e8162003a6b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b62003adb8162002cdd565b82525050565b600062003aef838362003ad0565b60208301905092915050565b6000602082019050919050565b600062003b158262003aa4565b62003b21818562003aaf565b935062003b2e8362003ac0565b8060005b8381101562003b6557815162003b49888262003ae1565b975062003b568362003afb565b92505060018101905062003b32565b5085935050505092915050565b600060a08201905062003b89600083018862002da4565b62003b98602083018762003a93565b818103604083015262003bac818662003b08565b905062003bbd606083018562002f42565b62003bcc608083018462002da4565b9695505050505050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b600062003c1960178362003bd6565b915062003c268262003be1565b601782019050919050565b600062003c3e8262002bff565b62003c4a818562003bd6565b935062003c5c81856020860162002c1b565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b600062003ca060118362003bd6565b915062003cad8262003c68565b601182019050919050565b600062003cc58262003c0a565b915062003cd3828562003c31565b915062003ce08262003c91565b915062003cee828462003c31565b91508190509392505050565b600062003d078262002d22565b915062003d148362002d22565b92508262003d275762003d26620039cb565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600062003d9060258362002c0a565b915062003d9d8262003d32565b604082019050919050565b6000602082019050818103600083015262003dc38162003d81565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600062003e2860238362002c0a565b915062003e358262003dca565b604082019050919050565b6000602082019050818103600083015262003e5b8162003e19565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600062003ec060268362002c0a565b915062003ecd8262003e62565b604082019050919050565b6000602082019050818103600083015262003ef38162003eb1565b9050919050565b600062003f078262002d22565b91506000820362003f1d5762003f1c6200326b565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600062003f6060208362002c0a565b915062003f6d8262003f28565b602082019050919050565b6000602082019050818103600083015262003f938162003f51565b905091905056fe608060405234801561001057600080fd5b5060405161024c38038061024c8339818101604052810190610032919061011c565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3336000196040518363ffffffff1660e01b815260040161006f929190610171565b6020604051808303816000875af115801561008e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b291906101d2565b50506101ff565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100e9826100be565b9050919050565b6100f9816100de565b811461010457600080fd5b50565b600081519050610116816100f0565b92915050565b600060208284031215610132576101316100b9565b5b600061014084828501610107565b91505092915050565b610152816100de565b82525050565b6000819050919050565b61016b81610158565b82525050565b60006040820190506101866000830185610149565b6101936020830184610162565b9392505050565b60008115159050919050565b6101af8161019a565b81146101ba57600080fd5b50565b6000815190506101cc816101a6565b92915050565b6000602082840312156101e8576101e76100b9565b5b60006101f6848285016101bd565b91505092915050565b603f8061020d6000396000f3fe6080604052600080fdfea264697066735822122023e197a6227f5bec54831a823ebc8829c78c4e1a0b7613505360d178f1a5764764736f6c63430008120033a2646970667358221220601be68ca2e94e39086f20c05276e75193f57096b2ff11ab039685360933d50864736f6c63430008120033
Deployed Bytecode
0x608060405260043610620001ff5760003560e01c806370a08231116200010f578063a457c2d711620000a3578063d9927448116200006d578063d99274481462000780578063dd62ed3e14620007ae578063efe56cb114620007f2578063f2fde38b14620008205762000207565b8063a457c2d7146200069c578063a9059cbb14620006e0578063d482e95a1462000724578063d547741f14620007525762000207565b80638da5cb5b11620000e55780638da5cb5b14620005c857806391d1485414620005f857806395d89b41146200063c578063a217fddf146200066c5762000207565b806370a08231146200053a578063715018a6146200057e5780638718b24f14620005985762000207565b80632f2ff15d116200019357806339509351116200015d5780633950935114620004665780633f936ff514620004aa57806349bd5a5e14620004da578063553193ca146200050a5762000207565b80632f2ff15d14620003aa5780632f48ab7d14620003d8578063313ce567146200040857806336568abe14620004385762000207565b806318160ddd11620001d557806318160ddd14620002c45780631c6a0c4c14620002f457806323b872dd1462000322578063248a9ca314620003665762000207565b806301ffc9a7146200020c57806306fdde031462000250578063095ea7b314620002805762000207565b366200020757005b600080fd5b3480156200021957600080fd5b5062000238600480360381019062000232919062002b93565b6200084e565b60405162000247919062002be2565b60405180910390f35b3480156200025d57600080fd5b5062000268620008cb565b60405162000277919062002c99565b60405180910390f35b3480156200028d57600080fd5b50620002ac6004803603810190620002a6919062002d5d565b62000965565b604051620002bb919062002be2565b60405180910390f35b348015620002d157600080fd5b50620002dc6200098c565b604051620002eb919062002db5565b60405180910390f35b3480156200030157600080fd5b506200032060048036038101906200031a919062002dd2565b62000996565b005b3480156200032f57600080fd5b506200034e600480360381019062000348919062002e04565b62000a0e565b6040516200035d919062002be2565b60405180910390f35b3480156200037357600080fd5b506200039260048036038101906200038c919062002e9b565b62000a43565b604051620003a1919062002ede565b60405180910390f35b348015620003b757600080fd5b50620003d66004803603810190620003d0919062002efb565b62000a63565b005b348015620003e557600080fd5b50620003f062000a8a565b604051620003ff919062002f53565b60405180910390f35b3480156200041557600080fd5b506200042062000ab0565b6040516200042f919062002f8e565b60405180910390f35b3480156200044557600080fd5b506200046460048036038101906200045e919062002efb565b62000ab9565b005b3480156200047357600080fd5b506200049260048036038101906200048c919062002d5d565b62000b43565b604051620004a1919062002be2565b60405180910390f35b348015620004b757600080fd5b50620004c262000b82565b604051620004d1919062002db5565b60405180910390f35b348015620004e757600080fd5b50620004f262000b88565b60405162000501919062002f53565b60405180910390f35b3480156200051757600080fd5b506200052262000bae565b60405162000531919062002db5565b60405180910390f35b3480156200054757600080fd5b5062000566600480360381019062000560919062002fab565b62000bb4565b60405162000575919062002db5565b60405180910390f35b3480156200058b57600080fd5b506200059662000bfc565b005b348015620005a557600080fd5b50620005b062000c14565b604051620005bf919062003048565b60405180910390f35b348015620005d557600080fd5b50620005e062000c3a565b604051620005ef919062002f53565b60405180910390f35b3480156200060557600080fd5b506200062460048036038101906200061e919062002efb565b62000c64565b60405162000633919062002be2565b60405180910390f35b3480156200064957600080fd5b506200065462000ccf565b60405162000663919062002c99565b60405180910390f35b3480156200067957600080fd5b506200068462000d69565b60405162000693919062002ede565b60405180910390f35b348015620006a957600080fd5b50620006c86004803603810190620006c2919062002d5d565b62000d70565b604051620006d7919062002be2565b60405180910390f35b348015620006ed57600080fd5b506200070c600480360381019062000706919062002d5d565b62000df0565b6040516200071b919062002be2565b60405180910390f35b3480156200073157600080fd5b506200075060048036038101906200074a919062003065565b62000e17565b005b3480156200075f57600080fd5b506200077e600480360381019062000778919062002efb565b62001296565b005b3480156200078d57600080fd5b50620007ac6004803603810190620007a6919062002fab565b620012bd565b005b348015620007bb57600080fd5b50620007da6004803603810190620007d4919062003065565b620013ef565b604051620007e9919062002db5565b60405180910390f35b348015620007ff57600080fd5b506200081e60048036038101906200081891906200311a565b62001476565b005b3480156200082d57600080fd5b506200084c600480360381019062000846919062002fab565b6200157a565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480620008c45750620008c38262001604565b5b9050919050565b606060038054620008dc906200319e565b80601f01602080910402602001604051908101604052809291908181526020018280546200090a906200319e565b80156200095b5780601f106200092f576101008083540402835291602001916200095b565b820191906000526020600020905b8154815290600101906020018083116200093d57829003601f168201915b5050505050905090565b600080620009726200166e565b90506200098181858562001676565b600191505092915050565b6000600254905090565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08620009c28162001847565b3373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801562000a09573d6000803e3d6000fd5b505050565b60008062000a1b6200166e565b905062000a2a8582856200185f565b62000a37858585620018f3565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b62000a6e8262000a43565b62000a798162001847565b62000a85838362001d16565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b62000ac36200166e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2a9062003249565b60405180910390fd5b62000b3f828262001dfc565b5050565b60008062000b506200166e565b905062000b7781858562000b658589620013ef565b62000b7191906200329a565b62001676565b600191505092915050565b600d5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b62000c0662001ee3565b62000c12600062001f68565b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606004805462000ce0906200319e565b80601f016020809104026020016040519081016040528092919081815260200182805462000d0e906200319e565b801562000d5f5780601f1062000d335761010080835404028352916020019162000d5f565b820191906000526020600020905b81548152906001019060200180831162000d4157829003601f168201915b5050505050905090565b6000801b81565b60008062000d7d6200166e565b9050600062000d8d8286620013ef565b90508381101562000dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dcc906200334b565b60405180910390fd5b62000de4828686840362001676565b60019250505092915050565b60008062000dfd6200166e565b905062000e0c818585620018f3565b600191505092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0862000e438162001847565b82600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600082905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000f38573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f5e919062003384565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040162000fbc929190620033b6565b6020604051808303816000875af115801562000fdc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001002919062003384565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620010e3929190620033e3565b6020604051808303816000875af115801562001103573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001129919062003441565b506200117930600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62001676565b620011a630307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62001676565b62001217600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62001676565b30604051620012269062002b1e565b62001232919062002f53565b604051809103906000f0801580156200124f573d6000803e3d6000fd5b50600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b620012a18262000a43565b620012ac8162001847565b620012b8838362001dfc565b505050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08620012e98162001847565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040162001341919062002f53565b602060405180830381865afa1580156200135f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200138591906200348a565b6040518363ffffffff1660e01b8152600401620013a4929190620033e3565b6020604051808303816000875af1158015620013c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ea919062003441565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08620014a28162001847565b43600a8190555060005b8383905081101562001574576200155e66f8b0a10e470000662386f26fc100006001620015076005898988818110620014ea57620014e9620034bc565b5b905060200201602081019062001501919062002fab565b6200202e565b6200151391906200329a565b6200151f9190620034eb565b6200152b91906200329a565b858584818110620015415762001540620034bc565b5b905060200201602081019062001558919062002fab565b62002075565b80806200156b9062003536565b915050620014ac565b50505050565b6200158462001ee3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620015f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620015ed90620035f9565b60405180910390fd5b620016018162001f68565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620016e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016df9062003691565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200175a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620017519062003729565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516200183a919062002db5565b60405180910390a3505050565b6200185c81620018566200166e565b6200231e565b50565b60006200186d8484620013ef565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114620018ed5781811015620018dd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018d4906200379b565b60405180910390fd5b620018ec848484840362001676565b5b50505050565b6000811162001939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001930906200380d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620019e65750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15620019ff57620019f9838383620023ae565b62001d11565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001b56576000600a541162001a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a94906200387f565b60405180910390fd5b62001ad4833062001ace606462001abf600187620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001aff606462001af0600184620023c090919063ffffffff16565b620023d890919063ffffffff16565b600d600082825462001b1291906200329a565b9250508190555062001b50838362001b4a606462001b3b606387620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001d11565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001d1057600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562001c125762001c0c838383620023f0565b62001d11565b62001c49833062001c43606462001c34600187620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001c74606462001c65600184620023c090919063ffffffff16565b620023d890919063ffffffff16565b600d600082825462001c8791906200329a565b9250508190555062001ccb81600d5462001ca291906200329a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662002675565b6000600d8190555062001d0a838362001d04606462001cf5606387620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001d11565b5b505050565b62001d22828262000c64565b62001df85760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062001d9d6200166e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b62001e08828262000c64565b1562001edf5760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062001e846200166e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b62001eed6200166e565b73ffffffffffffffffffffffffffffffffffffffff1662001f0d62000c3a565b73ffffffffffffffffffffffffffffffffffffffff161462001f66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001f5d90620038f1565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082424484604051602001620020489392919062003988565b6040516020818303038152906040528051906020012060001c6200206d9190620039fa565b905092915050565b6001600f60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115620020b057620020af62003a32565b5b604051908082528060200260200182016040528015620020df5781602001602082028036833780820191505090505b509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106200211c576200211b620034bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106200216e576200216d620034bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040162002207919062002f53565b602060405180830381865afa15801562002225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200224b91906200348a565b9050600084036200225a578093505b808411620022fd57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958560008587426040518663ffffffff1660e01b8152600401620022c895949392919062003b72565b600060405180830381600087803b158015620022e357600080fd5b505af1158015620022f8573d6000803e3d6000fd5b505050505b50506000600f60146101000a81548160ff0219169083151502179055505050565b6200232a828262000c64565b620023aa576200233a816200288a565b6200234a8360001c6020620028b9565b6040516020016200235d92919062003cb8565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620023a1919062002c99565b60405180910390fd5b5050565b620023bb838383620023f0565b505050565b60008183620023d09190620034eb565b905092915050565b60008183620023e8919062003cfa565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362002462576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024599062003da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620024d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024cb9062003e40565b60405180910390fd5b620024e183838362002b14565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156200256a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620025619062003ed8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516200265a919062002db5565b60405180910390a36200266f84848462002b19565b50505050565b6001600f60146101000a81548160ff02191690831515021790555060006200269d3062000bb4565b90506000600267ffffffffffffffff811115620026bf57620026be62003a32565b5b604051908082528060200260200182016040528015620026ee5781602001602082028036833780820191505090505b50905083821015620026fe578193505b60008411156200286957308160008151811062002720576200271f620034bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110620027945762002793620034bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958560008487426040518663ffffffff1660e01b81526004016200283495949392919062003b72565b600060405180830381600087803b1580156200284f57600080fd5b505af115801562002864573d6000803e3d6000fd5b505050505b50506000600f60146101000a81548160ff0219169083151502179055505050565b6060620028b28273ffffffffffffffffffffffffffffffffffffffff16601460ff16620028b9565b9050919050565b606060006002836002620028ce9190620034eb565b620028da91906200329a565b67ffffffffffffffff811115620028f657620028f562003a32565b5b6040519080825280601f01601f191660200182016040528015620029295781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110620029645762002963620034bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110620029cb57620029ca620034bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600262002a0d9190620034eb565b62002a1991906200329a565b90505b600181111562002ac3577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811062002a5f5762002a5e620034bc565b5b1a60f81b82828151811062002a795762002a78620034bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508062002abb9062003efa565b905062002a1c565b506000841462002b0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002b019062003f78565b60405180910390fd5b8091505092915050565b505050565b505050565b61024c8062003f9b83390190565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62002b6d8162002b36565b811462002b7957600080fd5b50565b60008135905062002b8d8162002b62565b92915050565b60006020828403121562002bac5762002bab62002b2c565b5b600062002bbc8482850162002b7c565b91505092915050565b60008115159050919050565b62002bdc8162002bc5565b82525050565b600060208201905062002bf9600083018462002bd1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562002c3b57808201518184015260208101905062002c1e565b60008484015250505050565b6000601f19601f8301169050919050565b600062002c658262002bff565b62002c71818562002c0a565b935062002c8381856020860162002c1b565b62002c8e8162002c47565b840191505092915050565b6000602082019050818103600083015262002cb5818462002c58565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062002cea8262002cbd565b9050919050565b62002cfc8162002cdd565b811462002d0857600080fd5b50565b60008135905062002d1c8162002cf1565b92915050565b6000819050919050565b62002d378162002d22565b811462002d4357600080fd5b50565b60008135905062002d578162002d2c565b92915050565b6000806040838503121562002d775762002d7662002b2c565b5b600062002d878582860162002d0b565b925050602062002d9a8582860162002d46565b9150509250929050565b62002daf8162002d22565b82525050565b600060208201905062002dcc600083018462002da4565b92915050565b60006020828403121562002deb5762002dea62002b2c565b5b600062002dfb8482850162002d46565b91505092915050565b60008060006060848603121562002e205762002e1f62002b2c565b5b600062002e308682870162002d0b565b935050602062002e438682870162002d0b565b925050604062002e568682870162002d46565b9150509250925092565b6000819050919050565b62002e758162002e60565b811462002e8157600080fd5b50565b60008135905062002e958162002e6a565b92915050565b60006020828403121562002eb45762002eb362002b2c565b5b600062002ec48482850162002e84565b91505092915050565b62002ed88162002e60565b82525050565b600060208201905062002ef5600083018462002ecd565b92915050565b6000806040838503121562002f155762002f1462002b2c565b5b600062002f258582860162002e84565b925050602062002f388582860162002d0b565b9150509250929050565b62002f4d8162002cdd565b82525050565b600060208201905062002f6a600083018462002f42565b92915050565b600060ff82169050919050565b62002f888162002f70565b82525050565b600060208201905062002fa5600083018462002f7d565b92915050565b60006020828403121562002fc45762002fc362002b2c565b5b600062002fd48482850162002d0b565b91505092915050565b6000819050919050565b6000620030086200300262002ffc8462002cbd565b62002fdd565b62002cbd565b9050919050565b60006200301c8262002fe7565b9050919050565b600062003030826200300f565b9050919050565b620030428162003023565b82525050565b60006020820190506200305f600083018462003037565b92915050565b600080604083850312156200307f576200307e62002b2c565b5b60006200308f8582860162002d0b565b9250506020620030a28582860162002d0b565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112620030d457620030d3620030ac565b5b8235905067ffffffffffffffff811115620030f457620030f3620030b1565b5b602083019150836020820283011115620031135762003112620030b6565b5b9250929050565b6000806020838503121562003134576200313362002b2c565b5b600083013567ffffffffffffffff81111562003155576200315462002b31565b5b6200316385828601620030bb565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620031b757607f821691505b602082108103620031cd57620031cc6200316f565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600062003231602f8362002c0a565b91506200323e82620031d3565b604082019050919050565b60006020820190508181036000830152620032648162003222565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620032a78262002d22565b9150620032b48362002d22565b9250828201905080821115620032cf57620032ce6200326b565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006200333360258362002c0a565b91506200334082620032d5565b604082019050919050565b60006020820190508181036000830152620033668162003324565b9050919050565b6000815190506200337e8162002cf1565b92915050565b6000602082840312156200339d576200339c62002b2c565b5b6000620033ad848285016200336d565b91505092915050565b6000604082019050620033cd600083018562002f42565b620033dc602083018462002f42565b9392505050565b6000604082019050620033fa600083018562002f42565b62003409602083018462002da4565b9392505050565b6200341b8162002bc5565b81146200342757600080fd5b50565b6000815190506200343b8162003410565b92915050565b6000602082840312156200345a576200345962002b2c565b5b60006200346a848285016200342a565b91505092915050565b600081519050620034848162002d2c565b92915050565b600060208284031215620034a357620034a262002b2c565b5b6000620034b38482850162003473565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000620034f88262002d22565b9150620035058362002d22565b9250828202620035158162002d22565b915082820484148315176200352f576200352e6200326b565b5b5092915050565b6000620035438262002d22565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200357857620035776200326b565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620035e160268362002c0a565b9150620035ee8262003583565b604082019050919050565b600060208201905081810360008301526200361481620035d2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200367960248362002c0a565b915062003686826200361b565b604082019050919050565b60006020820190508181036000830152620036ac816200366a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200371160228362002c0a565b91506200371e82620036b3565b604082019050919050565b60006020820190508181036000830152620037448162003702565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600062003783601d8362002c0a565b915062003790826200374b565b602082019050919050565b60006020820190508181036000830152620037b68162003774565b9050919050565b7f616d6f756e74206d757374206774203000000000000000000000000000000000600082015250565b6000620037f560108362002c0a565b91506200380282620037bd565b602082019050919050565b600060208201905081810360008301526200382881620037e6565b9050919050565b7f6e6f74206f70656e000000000000000000000000000000000000000000000000600082015250565b60006200386760088362002c0a565b915062003874826200382f565b602082019050919050565b600060208201905081810360008301526200389a8162003858565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620038d960208362002c0a565b9150620038e682620038a1565b602082019050919050565b600060208201905081810360008301526200390c81620038ca565b9050919050565b6000819050919050565b620039326200392c8262002d22565b62003913565b82525050565b60008160601b9050919050565b6000620039528262003938565b9050919050565b6000620039668262003945565b9050919050565b620039826200397c8262002cdd565b62003959565b82525050565b60006200399682866200391d565b602082019150620039a882856200391d565b602082019150620039ba82846200396d565b601482019150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062003a078262002d22565b915062003a148362002d22565b92508262003a275762003a26620039cb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b600062003a8c62003a8662003a808462003a61565b62002fdd565b62002d22565b9050919050565b62003a9e8162003a6b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b62003adb8162002cdd565b82525050565b600062003aef838362003ad0565b60208301905092915050565b6000602082019050919050565b600062003b158262003aa4565b62003b21818562003aaf565b935062003b2e8362003ac0565b8060005b8381101562003b6557815162003b49888262003ae1565b975062003b568362003afb565b92505060018101905062003b32565b5085935050505092915050565b600060a08201905062003b89600083018862002da4565b62003b98602083018762003a93565b818103604083015262003bac818662003b08565b905062003bbd606083018562002f42565b62003bcc608083018462002da4565b9695505050505050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b600062003c1960178362003bd6565b915062003c268262003be1565b601782019050919050565b600062003c3e8262002bff565b62003c4a818562003bd6565b935062003c5c81856020860162002c1b565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b600062003ca060118362003bd6565b915062003cad8262003c68565b601182019050919050565b600062003cc58262003c0a565b915062003cd3828562003c31565b915062003ce08262003c91565b915062003cee828462003c31565b91508190509392505050565b600062003d078262002d22565b915062003d148362002d22565b92508262003d275762003d26620039cb565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600062003d9060258362002c0a565b915062003d9d8262003d32565b604082019050919050565b6000602082019050818103600083015262003dc38162003d81565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600062003e2860238362002c0a565b915062003e358262003dca565b604082019050919050565b6000602082019050818103600083015262003e5b8162003e19565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600062003ec060268362002c0a565b915062003ecd8262003e62565b604082019050919050565b6000602082019050818103600083015262003ef38162003eb1565b9050919050565b600062003f078262002d22565b91506000820362003f1d5762003f1c6200326b565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600062003f6060208362002c0a565b915062003f6d8262003f28565b602082019050919050565b6000602082019050818103600083015262003f938162003f51565b905091905056fe608060405234801561001057600080fd5b5060405161024c38038061024c8339818101604052810190610032919061011c565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3336000196040518363ffffffff1660e01b815260040161006f929190610171565b6020604051808303816000875af115801561008e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b291906101d2565b50506101ff565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100e9826100be565b9050919050565b6100f9816100de565b811461010457600080fd5b50565b600081519050610116816100f0565b92915050565b600060208284031215610132576101316100b9565b5b600061014084828501610107565b91505092915050565b610152816100de565b82525050565b6000819050919050565b61016b81610158565b82525050565b60006040820190506101866000830185610149565b6101936020830184610162565b9392505050565b60008115159050919050565b6101af8161019a565b81146101ba57600080fd5b50565b6000815190506101cc816101a6565b92915050565b6000602082840312156101e8576101e76100b9565b5b60006101f6848285016101bd565b91505092915050565b603f8061020d6000396000f3fe6080604052600080fdfea264697066735822122023e197a6227f5bec54831a823ebc8829c78c4e1a0b7613505360d178f1a5764764736f6c63430008120033a2646970667358221220601be68ca2e94e39086f20c05276e75193f57096b2ff11ab039685360933d50864736f6c63430008120033
Deployed Bytecode Sourcemap
35278:5930:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24292:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29953:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30899:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30278:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41040:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31108:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25283:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25422:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35513:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37035:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25739:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31377:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35619:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35478:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35539:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30399:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27563:103;;;;;;;;;;;;;:::i;:::-;;35699:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27328:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24510:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30061:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24142:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31628:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30539:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36282:747;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25582:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40867:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30740:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40443:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27674:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24292:204;24377:4;24416:32;24401:47;;;:11;:47;;;;:87;;;;24452:36;24476:11;24452:23;:36::i;:::-;24401:87;24394:94;;24292:204;;;:::o;29953:100::-;30007:13;30040:5;30033:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29953:100;:::o;30899:201::-;30982:4;30999:13;31015:12;:10;:12::i;:::-;30999:28;;31038:32;31047:5;31054:7;31063:6;31038:8;:32::i;:::-;31088:4;31081:11;;;30899:201;;;;:::o;30278:108::-;30339:7;30366:12;;30359:19;;30278:108;:::o;41040:122::-;35371:25;24248:16;24259:4;24248:10;:16::i;:::-;41126:10:::1;41118:28;;:36;41147:6;41118:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41040:122:::0;;:::o;31108:261::-;31205:4;31222:15;31240:12;:10;:12::i;:::-;31222:30;;31263:38;31279:4;31285:7;31294:6;31263:15;:38::i;:::-;31312:27;31322:4;31328:2;31332:6;31312:9;:27::i;:::-;31357:4;31350:11;;;31108:261;;;;;:::o;25283:131::-;25357:7;25384:6;:12;25391:4;25384:12;;;;;;;;;;;:22;;;25377:29;;25283:131;;;:::o;25422:147::-;25505:18;25518:4;25505:12;:18::i;:::-;24248:16;24259:4;24248:10;:16::i;:::-;25536:25:::1;25547:4;25553:7;25536:10;:25::i;:::-;25422:147:::0;;;:::o;35513:19::-;;;;;;;;;;;;;:::o;37035:92::-;37093:5;37118:1;37111:8;;37035:92;:::o;25739:218::-;25846:12;:10;:12::i;:::-;25835:23;;:7;:23;;;25827:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25923:26;25935:4;25941:7;25923:11;:26::i;:::-;25739:218;;:::o;31377:238::-;31465:4;31482:13;31498:12;:10;:12::i;:::-;31482:28;;31521:64;31530:5;31537:7;31574:10;31546:25;31556:5;31563:7;31546:9;:25::i;:::-;:38;;;;:::i;:::-;31521:8;:64::i;:::-;31603:4;31596:11;;;31377:238;;;;:::o;35619:24::-;;;;:::o;35478:28::-;;;;;;;;;;;;;:::o;35539:30::-;;;;:::o;30399:127::-;30473:7;30500:9;:18;30510:7;30500:18;;;;;;;;;;;;;;;;30493:25;;30399:127;;;:::o;27563:103::-;27283:13;:11;:13::i;:::-;27628:30:::1;27655:1;27628:18;:30::i;:::-;27563:103::o:0;35699:41::-;;;;;;;;;;;;;:::o;27328:87::-;27374:7;27401:6;;;;;;;;;;;27394:13;;27328:87;:::o;24510:147::-;24596:4;24620:6;:12;24627:4;24620:12;;;;;;;;;;;:20;;:29;24641:7;24620:29;;;;;;;;;;;;;;;;;;;;;;;;;24613:36;;24510:147;;;;:::o;30061:104::-;30117:13;30150:7;30143:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30061:104;:::o;24142:49::-;24187:4;24142:49;;;:::o;31628:436::-;31721:4;31738:13;31754:12;:10;:12::i;:::-;31738:28;;31777:24;31804:25;31814:5;31821:7;31804:9;:25::i;:::-;31777:52;;31868:15;31848:16;:35;;31840:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31961:60;31970:5;31977:7;32005:15;31986:16;:34;31961:8;:60::i;:::-;32052:4;32045:11;;;;31628:436;;;;:::o;30539:193::-;30618:4;30635:13;30651:12;:10;:12::i;:::-;30635:28;;30674;30684:5;30691:2;30695:6;30674:9;:28::i;:::-;30720:4;30713:11;;;30539:193;;;;:::o;36282:747::-;35371:25;24248:16;24259:4;24248:10;:16::i;:::-;36375:6:::1;36370:4;;:11;;;;;;;;;;;;;;;;;;36448:12;36461:5;36448:18;;36562:4;36532:15;;:35;;;;;;;;;;;;;;;;;;36607:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36594:50;;;36653:4;36660;;;;;;;;;;;36594:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36578:13;;:87;;;;;;;;;;;;;;;;;;36682:4;;;;;;;;;;;36676:19;;;36704:15;;;;;;;;;;;36722:17;36676:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36751:67;36768:4;36783:15;;;;;;;;;;;36800:17;36751:8;:67::i;:::-;36829:56;36846:4;36861;36867:17;36829:8;:56::i;:::-;36896:59;36905:5;;;;;;;;;;;36920:15;;;;;;;;;;;36937:17;36896:8;:59::i;:::-;37015:4;36986:35;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36966:17;;:55;;;;;;;;;;;;;;;;;;36359:670;36282:747:::0;;;:::o;25582:149::-;25666:18;25679:4;25666:12;:18::i;:::-;24248:16;24259:4;24248:10;:16::i;:::-;25697:26:::1;25709:4;25715:7;25697:11;:26::i;:::-;25582:149:::0;;;:::o;40867:161::-;35371:25;24248:16;24259:4;24248:10;:16::i;:::-;40951:6:::1;40945:22;;;40968:10;40987:6;40980:24;;;41013:4;40980:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40945:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40867:161:::0;;:::o;30740:151::-;30829:7;30856:11;:18;30868:5;30856:18;;;;;;;;;;;;;;;:27;30875:7;30856:27;;;;;;;;;;;;;;;;30849:34;;30740:151;;;;:::o;40443:230::-;35371:25;24248:16;24259:4;24248:10;:16::i;:::-;40541:12:::1;40523:15;:30;;;;40568:6;40564:101;40579:4;;:11;;40577:1;:13;40564:101;;;40609:56;40648:8;40641:6;40638:1;40620:17;40627:1;40629:4;;40634:1;40629:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40620:6;:17::i;:::-;:19;;;;:::i;:::-;40619:28;;;;:::i;:::-;:37;;;;:::i;:::-;40657:4;;40662:1;40657:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40609:9;:56::i;:::-;40591:3;;;;;:::i;:::-;;;;40564:101;;;;40443:230:::0;;;:::o;27674:201::-;27283:13;:11;:13::i;:::-;27783:1:::1;27763:22;;:8;:22;;::::0;27755:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27839:28;27858:8;27839:18;:28::i;:::-;27674:201:::0;:::o;5388:157::-;5473:4;5512:25;5497:40;;;:11;:40;;;;5490:47;;5388:157;;;:::o;23521:98::-;23574:7;23601:10;23594:17;;23521:98;:::o;34136:346::-;34255:1;34238:19;;:5;:19;;;34230:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34336:1;34317:21;;:7;:21;;;34309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34420:6;34390:11;:18;34402:5;34390:18;;;;;;;;;;;;;;;:27;34409:7;34390:27;;;;;;;;;;;;;;;:36;;;;34458:7;34442:32;;34451:5;34442:32;;;34467:6;34442:32;;;;;;:::i;:::-;;;;;;;;34136:346;;;:::o;24665:105::-;24732:30;24743:4;24749:12;:10;:12::i;:::-;24732:10;:30::i;:::-;24665:105;:::o;34490:419::-;34591:24;34618:25;34628:5;34635:7;34618:9;:25::i;:::-;34591:52;;34678:17;34658:16;:37;34654:248;;34740:6;34720:16;:26;;34712:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34824:51;34833:5;34840:7;34868:6;34849:16;:25;34824:8;:51::i;:::-;34654:248;34580:329;34490:419;;;:::o;37138:1085::-;37279:1;37270:6;:10;37262:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;37333:13;;;;;;;;;;;37325:21;;:4;:21;;;;:44;;;;;37356:13;;;;;;;;;;;37350:19;;:2;:19;;;;37325:44;37322:127;;;37386:30;37399:4;37405:2;37409:6;37386:12;:30::i;:::-;37431:7;;37322:127;37470:13;;;;;;;;;;;37462:21;;:4;:21;;;37459:300;;37524:1;37508:15;;:17;37500:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;37553:60;37569:4;37583;37590:22;37608:3;37590:13;37601:1;37590:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;37553:15;:60::i;:::-;37639:22;37657:3;37639:13;37650:1;37639:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;37628:9;;:33;;;;;;;:::i;:::-;;;;;;;;37676:50;37692:4;37698:2;37702:23;37721:3;37702:14;37713:2;37702:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;37676:15;:50::i;:::-;37741:7;;37459:300;37778:13;;;;;;;;;;;37772:19;;:2;:19;;;37769:447;;37811:9;:15;37821:4;37811:15;;;;;;;;;;;;;;;;;;;;;;;;;37808:112;;;37846:33;37862:4;37868:2;37872:6;37846:15;:33::i;:::-;37898:7;;37808:112;37934:60;37950:4;37964;37971:22;37989:3;37971:13;37982:1;37971:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;37934:15;:60::i;:::-;38020:22;38038:3;38020:13;38031:1;38020:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;38009:9;;:33;;;;;;;:::i;:::-;;;;;;;;38057:35;38076:6;38066:9;;:16;;;;:::i;:::-;38083:8;;;;;;;;;;;38057;:35::i;:::-;38117:1;38107:9;:11;;;;38133:50;38149:4;38155:2;38159:23;38178:3;38159:14;38170:2;38159:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;38133:15;:50::i;:::-;38198:7;;37769:447;37138:1085;;;;:::o;26355:238::-;26439:22;26447:4;26453:7;26439;:22::i;:::-;26434:152;;26510:4;26478:6;:12;26485:4;26478:12;;;;;;;;;;;:20;;:29;26499:7;26478:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;26561:12;:10;:12::i;:::-;26534:40;;26552:7;26534:40;;26546:4;26534:40;;;;;;;;;;26434:152;26355:238;;:::o;26601:239::-;26685:22;26693:4;26699:7;26685;:22::i;:::-;26681:152;;;26756:5;26724:6;:12;26731:4;26724:12;;;;;;;;;;;:20;;:29;26745:7;26724:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;26808:12;:10;:12::i;:::-;26781:40;;26799:7;26781:40;;26793:4;26781:40;;;;;;;;;;26681:152;26601:239;;:::o;27423:132::-;27498:12;:10;:12::i;:::-;27487:23;;:7;:5;:7::i;:::-;:23;;;27479:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27423:132::o;27883:191::-;27957:16;27976:6;;;;;;;;;;;27957:25;;28002:8;27993:6;;:17;;;;;;;;;;;;;;;;;;28057:8;28026:40;;28047:8;28026:40;;;;;;;;;;;;27946:128;27883:191;:::o;40679:180::-;40743:4;40845:6;40799:15;40815:16;40834:5;40782:58;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40772:69;;;;;;40767:75;;:84;;;;:::i;:::-;40760:91;;40679:180;;;;:::o;38535:611::-;38480:4;38471:6;;:13;;;;;;;;;;;;;;;;;;38617:21:::1;38655:1;38641:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38617:40;;38686:4;;;;;;;;;;;38668;38673:1;38668:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;38720:4;38702;38707:1;38702:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;38736:15;38761:4;;;;;;;;;;;38754:22;;;38785:4;38754:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38736:55;;38818:1;38805:11;:14:::0;38802:39:::1;;38834:7;38820:21;;38802:39;38896:7;38881:11;:22;38878:260;;38914:15;;;;;;;;;;;:69;;;38998:11;39024:1;39067:4;39094:2;39112:15;38914:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38878:260;38606:540;;38516:5:::0;38507:6;;:14;;;;;;;;;;;;;;;;;;38535:611;;:::o;24778:492::-;24867:22;24875:4;24881:7;24867;:22::i;:::-;24862:401;;25055:28;25075:7;25055:19;:28::i;:::-;25156:38;25184:4;25176:13;;25191:2;25156:19;:38::i;:::-;24960:257;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24906:345;;;;;;;;;;;:::i;:::-;;;;;;;;24862:401;24778:492;;:::o;38229:178::-;38356:43;38372:6;38380:9;38391:7;38356:15;:43::i;:::-;38229:178;;;:::o;22385:98::-;22443:7;22474:1;22470;:5;;;;:::i;:::-;22463:12;;22385:98;;;;:::o;22491:::-;22549:7;22580:1;22576;:5;;;;:::i;:::-;22569:12;;22491:98;;;;:::o;32072:806::-;32185:1;32169:18;;:4;:18;;;32161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32262:1;32248:16;;:2;:16;;;32240:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32317:38;32338:4;32344:2;32348:6;32317:20;:38::i;:::-;32368:19;32390:9;:15;32400:4;32390:15;;;;;;;;;;;;;;;;32368:37;;32439:6;32424:11;:21;;32416:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;32556:6;32542:11;:20;32524:9;:15;32534:4;32524:15;;;;;;;;;;;;;;;:38;;;;32759:6;32742:9;:13;32752:2;32742:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;32809:2;32794:26;;32803:4;32794:26;;;32813:6;32794:26;;;;;;:::i;:::-;;;;;;;;32833:37;32853:4;32859:2;32863:6;32833:19;:37::i;:::-;32150:728;32072:806;;;:::o;39971:464::-;38480:4;38471:6;;:13;;;;;;;;;;;;;;;;;;40052:15:::1;40070:24;40088:4;40070:9;:24::i;:::-;40052:42;;40105:21;40143:1;40129:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40105:40;;40167:11;40159:7;:19;40156:42;;;40191:7;40179:19;;40156:42;40224:1;40212:11;:13;40209:219;;;40259:4;40241;40246:1;40241:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;40289:4;;;;;;;;;;;40279;40284:1;40279:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;40308:15;;;;;;;;;;;:69;;;40378:11;40390:1;40392:4;40397:2;40400:15;40308:108;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40209:219;40041:394;;38516:5:::0;38507:6;;:14;;;;;;;;;;;;;;;;;;39971:464;;:::o;19269:151::-;19327:13;19360:52;19388:4;19372:22;;17705:2;19360:52;;:11;:52::i;:::-;19353:59;;19269:151;;;:::o;18814:447::-;18889:13;18915:19;18960:1;18951:6;18947:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;18937:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18915:47;;18973:15;:6;18980:1;18973:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;18999;:6;19006:1;18999:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;19030:9;19055:1;19046:6;19042:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;19030:26;;19025:131;19062:1;19058;:5;19025:131;;;19097:8;19114:3;19106:5;:11;19097:21;;;;;;;:::i;:::-;;;;;19085:6;19092:1;19085:9;;;;;;;;:::i;:::-;;;;;:33;;;;;;;;;;;19143:1;19133:11;;;;;19065:3;;;;:::i;:::-;;;19025:131;;;;19183:1;19174:5;:10;19166:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;19246:6;19232:21;;;18814:447;;;;:::o;34917:91::-;;;;:::o;35016:90::-;;;;:::o;-1:-1:-1:-;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:126::-;2897:7;2937:42;2930:5;2926:54;2915:65;;2860:126;;;:::o;2992:96::-;3029:7;3058:24;3076:5;3058:24;:::i;:::-;3047:35;;2992:96;;;:::o;3094:122::-;3167:24;3185:5;3167:24;:::i;:::-;3160:5;3157:35;3147:63;;3206:1;3203;3196:12;3147:63;3094:122;:::o;3222:139::-;3268:5;3306:6;3293:20;3284:29;;3322:33;3349:5;3322:33;:::i;:::-;3222:139;;;;:::o;3367:77::-;3404:7;3433:5;3422:16;;3367:77;;;:::o;3450:122::-;3523:24;3541:5;3523:24;:::i;:::-;3516:5;3513:35;3503:63;;3562:1;3559;3552:12;3503:63;3450:122;:::o;3578:139::-;3624:5;3662:6;3649:20;3640:29;;3678:33;3705:5;3678:33;:::i;:::-;3578:139;;;;:::o;3723:474::-;3791:6;3799;3848:2;3836:9;3827:7;3823:23;3819:32;3816:119;;;3854:79;;:::i;:::-;3816:119;3974:1;3999:53;4044:7;4035:6;4024:9;4020:22;3999:53;:::i;:::-;3989:63;;3945:117;4101:2;4127:53;4172:7;4163:6;4152:9;4148:22;4127:53;:::i;:::-;4117:63;;4072:118;3723:474;;;;;:::o;4203:118::-;4290:24;4308:5;4290:24;:::i;:::-;4285:3;4278:37;4203:118;;:::o;4327:222::-;4420:4;4458:2;4447:9;4443:18;4435:26;;4471:71;4539:1;4528:9;4524:17;4515:6;4471:71;:::i;:::-;4327:222;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:619::-;4967:6;4975;4983;5032:2;5020:9;5011:7;5007:23;5003:32;5000:119;;;5038:79;;:::i;:::-;5000:119;5158:1;5183:53;5228:7;5219:6;5208:9;5204:22;5183:53;:::i;:::-;5173:63;;5129:117;5285:2;5311:53;5356:7;5347:6;5336:9;5332:22;5311:53;:::i;:::-;5301:63;;5256:118;5413:2;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5384:118;4890:619;;;;;:::o;5515:77::-;5552:7;5581:5;5570:16;;5515:77;;;:::o;5598:122::-;5671:24;5689:5;5671:24;:::i;:::-;5664:5;5661:35;5651:63;;5710:1;5707;5700:12;5651:63;5598:122;:::o;5726:139::-;5772:5;5810:6;5797:20;5788:29;;5826:33;5853:5;5826:33;:::i;:::-;5726:139;;;;:::o;5871:329::-;5930:6;5979:2;5967:9;5958:7;5954:23;5950:32;5947:119;;;5985:79;;:::i;:::-;5947:119;6105:1;6130:53;6175:7;6166:6;6155:9;6151:22;6130:53;:::i;:::-;6120:63;;6076:117;5871:329;;;;:::o;6206:118::-;6293:24;6311:5;6293:24;:::i;:::-;6288:3;6281:37;6206:118;;:::o;6330:222::-;6423:4;6461:2;6450:9;6446:18;6438:26;;6474:71;6542:1;6531:9;6527:17;6518:6;6474:71;:::i;:::-;6330:222;;;;:::o;6558:474::-;6626:6;6634;6683:2;6671:9;6662:7;6658:23;6654:32;6651:119;;;6689:79;;:::i;:::-;6651:119;6809:1;6834:53;6879:7;6870:6;6859:9;6855:22;6834:53;:::i;:::-;6824:63;;6780:117;6936:2;6962:53;7007:7;6998:6;6987:9;6983:22;6962:53;:::i;:::-;6952:63;;6907:118;6558:474;;;;;:::o;7038:118::-;7125:24;7143:5;7125:24;:::i;:::-;7120:3;7113:37;7038:118;;:::o;7162:222::-;7255:4;7293:2;7282:9;7278:18;7270:26;;7306:71;7374:1;7363:9;7359:17;7350:6;7306:71;:::i;:::-;7162:222;;;;:::o;7390:86::-;7425:7;7465:4;7458:5;7454:16;7443:27;;7390:86;;;:::o;7482:112::-;7565:22;7581:5;7565:22;:::i;:::-;7560:3;7553:35;7482:112;;:::o;7600:214::-;7689:4;7727:2;7716:9;7712:18;7704:26;;7740:67;7804:1;7793:9;7789:17;7780:6;7740:67;:::i;:::-;7600:214;;;;:::o;7820:329::-;7879:6;7928:2;7916:9;7907:7;7903:23;7899:32;7896:119;;;7934:79;;:::i;:::-;7896:119;8054:1;8079:53;8124:7;8115:6;8104:9;8100:22;8079:53;:::i;:::-;8069:63;;8025:117;7820:329;;;;:::o;8155:60::-;8183:3;8204:5;8197:12;;8155:60;;;:::o;8221:142::-;8271:9;8304:53;8322:34;8331:24;8349:5;8331:24;:::i;:::-;8322:34;:::i;:::-;8304:53;:::i;:::-;8291:66;;8221:142;;;:::o;8369:126::-;8419:9;8452:37;8483:5;8452:37;:::i;:::-;8439:50;;8369:126;;;:::o;8501:151::-;8576:9;8609:37;8640:5;8609:37;:::i;:::-;8596:50;;8501:151;;;:::o;8658:181::-;8770:62;8826:5;8770:62;:::i;:::-;8765:3;8758:75;8658:181;;:::o;8845:272::-;8963:4;9001:2;8990:9;8986:18;8978:26;;9014:96;9107:1;9096:9;9092:17;9083:6;9014:96;:::i;:::-;8845:272;;;;:::o;9123:474::-;9191:6;9199;9248:2;9236:9;9227:7;9223:23;9219:32;9216:119;;;9254:79;;:::i;:::-;9216:119;9374:1;9399:53;9444:7;9435:6;9424:9;9420:22;9399:53;:::i;:::-;9389:63;;9345:117;9501:2;9527:53;9572:7;9563:6;9552:9;9548:22;9527:53;:::i;:::-;9517:63;;9472:118;9123:474;;;;;:::o;9603:117::-;9712:1;9709;9702:12;9726:117;9835:1;9832;9825:12;9849:117;9958:1;9955;9948:12;9989:568;10062:8;10072:6;10122:3;10115:4;10107:6;10103:17;10099:27;10089:122;;10130:79;;:::i;:::-;10089:122;10243:6;10230:20;10220:30;;10273:18;10265:6;10262:30;10259:117;;;10295:79;;:::i;:::-;10259:117;10409:4;10401:6;10397:17;10385:29;;10463:3;10455:4;10447:6;10443:17;10433:8;10429:32;10426:41;10423:128;;;10470:79;;:::i;:::-;10423:128;9989:568;;;;;:::o;10563:559::-;10649:6;10657;10706:2;10694:9;10685:7;10681:23;10677:32;10674:119;;;10712:79;;:::i;:::-;10674:119;10860:1;10849:9;10845:17;10832:31;10890:18;10882:6;10879:30;10876:117;;;10912:79;;:::i;:::-;10876:117;11025:80;11097:7;11088:6;11077:9;11073:22;11025:80;:::i;:::-;11007:98;;;;10803:312;10563:559;;;;;:::o;11128:180::-;11176:77;11173:1;11166:88;11273:4;11270:1;11263:15;11297:4;11294:1;11287:15;11314:320;11358:6;11395:1;11389:4;11385:12;11375:22;;11442:1;11436:4;11432:12;11463:18;11453:81;;11519:4;11511:6;11507:17;11497:27;;11453:81;11581:2;11573:6;11570:14;11550:18;11547:38;11544:84;;11600:18;;:::i;:::-;11544:84;11365:269;11314:320;;;:::o;11640:234::-;11780:34;11776:1;11768:6;11764:14;11757:58;11849:17;11844:2;11836:6;11832:15;11825:42;11640:234;:::o;11880:366::-;12022:3;12043:67;12107:2;12102:3;12043:67;:::i;:::-;12036:74;;12119:93;12208:3;12119:93;:::i;:::-;12237:2;12232:3;12228:12;12221:19;;11880:366;;;:::o;12252:419::-;12418:4;12456:2;12445:9;12441:18;12433:26;;12505:9;12499:4;12495:20;12491:1;12480:9;12476:17;12469:47;12533:131;12659:4;12533:131;:::i;:::-;12525:139;;12252:419;;;:::o;12677:180::-;12725:77;12722:1;12715:88;12822:4;12819:1;12812:15;12846:4;12843:1;12836:15;12863:191;12903:3;12922:20;12940:1;12922:20;:::i;:::-;12917:25;;12956:20;12974:1;12956:20;:::i;:::-;12951:25;;12999:1;12996;12992:9;12985:16;;13020:3;13017:1;13014:10;13011:36;;;13027:18;;:::i;:::-;13011:36;12863:191;;;;:::o;13060:224::-;13200:34;13196:1;13188:6;13184:14;13177:58;13269:7;13264:2;13256:6;13252:15;13245:32;13060:224;:::o;13290:366::-;13432:3;13453:67;13517:2;13512:3;13453:67;:::i;:::-;13446:74;;13529:93;13618:3;13529:93;:::i;:::-;13647:2;13642:3;13638:12;13631:19;;13290:366;;;:::o;13662:419::-;13828:4;13866:2;13855:9;13851:18;13843:26;;13915:9;13909:4;13905:20;13901:1;13890:9;13886:17;13879:47;13943:131;14069:4;13943:131;:::i;:::-;13935:139;;13662:419;;;:::o;14087:143::-;14144:5;14175:6;14169:13;14160:22;;14191:33;14218:5;14191:33;:::i;:::-;14087:143;;;;:::o;14236:351::-;14306:6;14355:2;14343:9;14334:7;14330:23;14326:32;14323:119;;;14361:79;;:::i;:::-;14323:119;14481:1;14506:64;14562:7;14553:6;14542:9;14538:22;14506:64;:::i;:::-;14496:74;;14452:128;14236:351;;;;:::o;14593:332::-;14714:4;14752:2;14741:9;14737:18;14729:26;;14765:71;14833:1;14822:9;14818:17;14809:6;14765:71;:::i;:::-;14846:72;14914:2;14903:9;14899:18;14890:6;14846:72;:::i;:::-;14593:332;;;;;:::o;14931:::-;15052:4;15090:2;15079:9;15075:18;15067:26;;15103:71;15171:1;15160:9;15156:17;15147:6;15103:71;:::i;:::-;15184:72;15252:2;15241:9;15237:18;15228:6;15184:72;:::i;:::-;14931:332;;;;;:::o;15269:116::-;15339:21;15354:5;15339:21;:::i;:::-;15332:5;15329:32;15319:60;;15375:1;15372;15365:12;15319:60;15269:116;:::o;15391:137::-;15445:5;15476:6;15470:13;15461:22;;15492:30;15516:5;15492:30;:::i;:::-;15391:137;;;;:::o;15534:345::-;15601:6;15650:2;15638:9;15629:7;15625:23;15621:32;15618:119;;;15656:79;;:::i;:::-;15618:119;15776:1;15801:61;15854:7;15845:6;15834:9;15830:22;15801:61;:::i;:::-;15791:71;;15747:125;15534:345;;;;:::o;15885:143::-;15942:5;15973:6;15967:13;15958:22;;15989:33;16016:5;15989:33;:::i;:::-;15885:143;;;;:::o;16034:351::-;16104:6;16153:2;16141:9;16132:7;16128:23;16124:32;16121:119;;;16159:79;;:::i;:::-;16121:119;16279:1;16304:64;16360:7;16351:6;16340:9;16336:22;16304:64;:::i;:::-;16294:74;;16250:128;16034:351;;;;:::o;16391:180::-;16439:77;16436:1;16429:88;16536:4;16533:1;16526:15;16560:4;16557:1;16550:15;16577:410;16617:7;16640:20;16658:1;16640:20;:::i;:::-;16635:25;;16674:20;16692:1;16674:20;:::i;:::-;16669:25;;16729:1;16726;16722:9;16751:30;16769:11;16751:30;:::i;:::-;16740:41;;16930:1;16921:7;16917:15;16914:1;16911:22;16891:1;16884:9;16864:83;16841:139;;16960:18;;:::i;:::-;16841:139;16625:362;16577:410;;;;:::o;16993:233::-;17032:3;17055:24;17073:5;17055:24;:::i;:::-;17046:33;;17101:66;17094:5;17091:77;17088:103;;17171:18;;:::i;:::-;17088:103;17218:1;17211:5;17207:13;17200:20;;16993:233;;;:::o;17232:225::-;17372:34;17368:1;17360:6;17356:14;17349:58;17441:8;17436:2;17428:6;17424:15;17417:33;17232:225;:::o;17463:366::-;17605:3;17626:67;17690:2;17685:3;17626:67;:::i;:::-;17619:74;;17702:93;17791:3;17702:93;:::i;:::-;17820:2;17815:3;17811:12;17804:19;;17463:366;;;:::o;17835:419::-;18001:4;18039:2;18028:9;18024:18;18016:26;;18088:9;18082:4;18078:20;18074:1;18063:9;18059:17;18052:47;18116:131;18242:4;18116:131;:::i;:::-;18108:139;;17835:419;;;:::o;18260:223::-;18400:34;18396:1;18388:6;18384:14;18377:58;18469:6;18464:2;18456:6;18452:15;18445:31;18260:223;:::o;18489:366::-;18631:3;18652:67;18716:2;18711:3;18652:67;:::i;:::-;18645:74;;18728:93;18817:3;18728:93;:::i;:::-;18846:2;18841:3;18837:12;18830:19;;18489:366;;;:::o;18861:419::-;19027:4;19065:2;19054:9;19050:18;19042:26;;19114:9;19108:4;19104:20;19100:1;19089:9;19085:17;19078:47;19142:131;19268:4;19142:131;:::i;:::-;19134:139;;18861:419;;;:::o;19286:221::-;19426:34;19422:1;19414:6;19410:14;19403:58;19495:4;19490:2;19482:6;19478:15;19471:29;19286:221;:::o;19513:366::-;19655:3;19676:67;19740:2;19735:3;19676:67;:::i;:::-;19669:74;;19752:93;19841:3;19752:93;:::i;:::-;19870:2;19865:3;19861:12;19854:19;;19513:366;;;:::o;19885:419::-;20051:4;20089:2;20078:9;20074:18;20066:26;;20138:9;20132:4;20128:20;20124:1;20113:9;20109:17;20102:47;20166:131;20292:4;20166:131;:::i;:::-;20158:139;;19885:419;;;:::o;20310:179::-;20450:31;20446:1;20438:6;20434:14;20427:55;20310:179;:::o;20495:366::-;20637:3;20658:67;20722:2;20717:3;20658:67;:::i;:::-;20651:74;;20734:93;20823:3;20734:93;:::i;:::-;20852:2;20847:3;20843:12;20836:19;;20495:366;;;:::o;20867:419::-;21033:4;21071:2;21060:9;21056:18;21048:26;;21120:9;21114:4;21110:20;21106:1;21095:9;21091:17;21084:47;21148:131;21274:4;21148:131;:::i;:::-;21140:139;;20867:419;;;:::o;21292:166::-;21432:18;21428:1;21420:6;21416:14;21409:42;21292:166;:::o;21464:366::-;21606:3;21627:67;21691:2;21686:3;21627:67;:::i;:::-;21620:74;;21703:93;21792:3;21703:93;:::i;:::-;21821:2;21816:3;21812:12;21805:19;;21464:366;;;:::o;21836:419::-;22002:4;22040:2;22029:9;22025:18;22017:26;;22089:9;22083:4;22079:20;22075:1;22064:9;22060:17;22053:47;22117:131;22243:4;22117:131;:::i;:::-;22109:139;;21836:419;;;:::o;22261:158::-;22401:10;22397:1;22389:6;22385:14;22378:34;22261:158;:::o;22425:365::-;22567:3;22588:66;22652:1;22647:3;22588:66;:::i;:::-;22581:73;;22663:93;22752:3;22663:93;:::i;:::-;22781:2;22776:3;22772:12;22765:19;;22425:365;;;:::o;22796:419::-;22962:4;23000:2;22989:9;22985:18;22977:26;;23049:9;23043:4;23039:20;23035:1;23024:9;23020:17;23013:47;23077:131;23203:4;23077:131;:::i;:::-;23069:139;;22796:419;;;:::o;23221:182::-;23361:34;23357:1;23349:6;23345:14;23338:58;23221:182;:::o;23409:366::-;23551:3;23572:67;23636:2;23631:3;23572:67;:::i;:::-;23565:74;;23648:93;23737:3;23648:93;:::i;:::-;23766:2;23761:3;23757:12;23750:19;;23409:366;;;:::o;23781:419::-;23947:4;23985:2;23974:9;23970:18;23962:26;;24034:9;24028:4;24024:20;24020:1;24009:9;24005:17;23998:47;24062:131;24188:4;24062:131;:::i;:::-;24054:139;;23781:419;;;:::o;24206:79::-;24245:7;24274:5;24263:16;;24206:79;;;:::o;24291:157::-;24396:45;24416:24;24434:5;24416:24;:::i;:::-;24396:45;:::i;:::-;24391:3;24384:58;24291:157;;:::o;24454:94::-;24487:8;24535:5;24531:2;24527:14;24506:35;;24454:94;;;:::o;24554:::-;24593:7;24622:20;24636:5;24622:20;:::i;:::-;24611:31;;24554:94;;;:::o;24654:100::-;24693:7;24722:26;24742:5;24722:26;:::i;:::-;24711:37;;24654:100;;;:::o;24760:157::-;24865:45;24885:24;24903:5;24885:24;:::i;:::-;24865:45;:::i;:::-;24860:3;24853:58;24760:157;;:::o;24923:538::-;25091:3;25106:75;25177:3;25168:6;25106:75;:::i;:::-;25206:2;25201:3;25197:12;25190:19;;25219:75;25290:3;25281:6;25219:75;:::i;:::-;25319:2;25314:3;25310:12;25303:19;;25332:75;25403:3;25394:6;25332:75;:::i;:::-;25432:2;25427:3;25423:12;25416:19;;25452:3;25445:10;;24923:538;;;;;;:::o;25467:180::-;25515:77;25512:1;25505:88;25612:4;25609:1;25602:15;25636:4;25633:1;25626:15;25653:176;25685:1;25702:20;25720:1;25702:20;:::i;:::-;25697:25;;25736:20;25754:1;25736:20;:::i;:::-;25731:25;;25775:1;25765:35;;25780:18;;:::i;:::-;25765:35;25821:1;25818;25814:9;25809:14;;25653:176;;;;:::o;25835:180::-;25883:77;25880:1;25873:88;25980:4;25977:1;25970:15;26004:4;26001:1;25994:15;26021:85;26066:7;26095:5;26084:16;;26021:85;;;:::o;26112:158::-;26170:9;26203:61;26221:42;26230:32;26256:5;26230:32;:::i;:::-;26221:42;:::i;:::-;26203:61;:::i;:::-;26190:74;;26112:158;;;:::o;26276:147::-;26371:45;26410:5;26371:45;:::i;:::-;26366:3;26359:58;26276:147;;:::o;26429:114::-;26496:6;26530:5;26524:12;26514:22;;26429:114;;;:::o;26549:184::-;26648:11;26682:6;26677:3;26670:19;26722:4;26717:3;26713:14;26698:29;;26549:184;;;;:::o;26739:132::-;26806:4;26829:3;26821:11;;26859:4;26854:3;26850:14;26842:22;;26739:132;;;:::o;26877:108::-;26954:24;26972:5;26954:24;:::i;:::-;26949:3;26942:37;26877:108;;:::o;26991:179::-;27060:10;27081:46;27123:3;27115:6;27081:46;:::i;:::-;27159:4;27154:3;27150:14;27136:28;;26991:179;;;;:::o;27176:113::-;27246:4;27278;27273:3;27269:14;27261:22;;27176:113;;;:::o;27325:732::-;27444:3;27473:54;27521:5;27473:54;:::i;:::-;27543:86;27622:6;27617:3;27543:86;:::i;:::-;27536:93;;27653:56;27703:5;27653:56;:::i;:::-;27732:7;27763:1;27748:284;27773:6;27770:1;27767:13;27748:284;;;27849:6;27843:13;27876:63;27935:3;27920:13;27876:63;:::i;:::-;27869:70;;27962:60;28015:6;27962:60;:::i;:::-;27952:70;;27808:224;27795:1;27792;27788:9;27783:14;;27748:284;;;27752:14;28048:3;28041:10;;27449:608;;;27325:732;;;;:::o;28063:831::-;28326:4;28364:3;28353:9;28349:19;28341:27;;28378:71;28446:1;28435:9;28431:17;28422:6;28378:71;:::i;:::-;28459:80;28535:2;28524:9;28520:18;28511:6;28459:80;:::i;:::-;28586:9;28580:4;28576:20;28571:2;28560:9;28556:18;28549:48;28614:108;28717:4;28708:6;28614:108;:::i;:::-;28606:116;;28732:72;28800:2;28789:9;28785:18;28776:6;28732:72;:::i;:::-;28814:73;28882:3;28871:9;28867:19;28858:6;28814:73;:::i;:::-;28063:831;;;;;;;;:::o;28900:148::-;29002:11;29039:3;29024:18;;28900:148;;;;:::o;29054:173::-;29194:25;29190:1;29182:6;29178:14;29171:49;29054:173;:::o;29233:402::-;29393:3;29414:85;29496:2;29491:3;29414:85;:::i;:::-;29407:92;;29508:93;29597:3;29508:93;:::i;:::-;29626:2;29621:3;29617:12;29610:19;;29233:402;;;:::o;29641:390::-;29747:3;29775:39;29808:5;29775:39;:::i;:::-;29830:89;29912:6;29907:3;29830:89;:::i;:::-;29823:96;;29928:65;29986:6;29981:3;29974:4;29967:5;29963:16;29928:65;:::i;:::-;30018:6;30013:3;30009:16;30002:23;;29751:280;29641:390;;;;:::o;30037:167::-;30177:19;30173:1;30165:6;30161:14;30154:43;30037:167;:::o;30210:402::-;30370:3;30391:85;30473:2;30468:3;30391:85;:::i;:::-;30384:92;;30485:93;30574:3;30485:93;:::i;:::-;30603:2;30598:3;30594:12;30587:19;;30210:402;;;:::o;30618:967::-;31000:3;31022:148;31166:3;31022:148;:::i;:::-;31015:155;;31187:95;31278:3;31269:6;31187:95;:::i;:::-;31180:102;;31299:148;31443:3;31299:148;:::i;:::-;31292:155;;31464:95;31555:3;31546:6;31464:95;:::i;:::-;31457:102;;31576:3;31569:10;;30618:967;;;;;:::o;31591:185::-;31631:1;31648:20;31666:1;31648:20;:::i;:::-;31643:25;;31682:20;31700:1;31682:20;:::i;:::-;31677:25;;31721:1;31711:35;;31726:18;;:::i;:::-;31711:35;31768:1;31765;31761:9;31756:14;;31591:185;;;;:::o;31782:224::-;31922:34;31918:1;31910:6;31906:14;31899:58;31991:7;31986:2;31978:6;31974:15;31967:32;31782:224;:::o;32012:366::-;32154:3;32175:67;32239:2;32234:3;32175:67;:::i;:::-;32168:74;;32251:93;32340:3;32251:93;:::i;:::-;32369:2;32364:3;32360:12;32353:19;;32012:366;;;:::o;32384:419::-;32550:4;32588:2;32577:9;32573:18;32565:26;;32637:9;32631:4;32627:20;32623:1;32612:9;32608:17;32601:47;32665:131;32791:4;32665:131;:::i;:::-;32657:139;;32384:419;;;:::o;32809:222::-;32949:34;32945:1;32937:6;32933:14;32926:58;33018:5;33013:2;33005:6;33001:15;32994:30;32809:222;:::o;33037:366::-;33179:3;33200:67;33264:2;33259:3;33200:67;:::i;:::-;33193:74;;33276:93;33365:3;33276:93;:::i;:::-;33394:2;33389:3;33385:12;33378:19;;33037:366;;;:::o;33409:419::-;33575:4;33613:2;33602:9;33598:18;33590:26;;33662:9;33656:4;33652:20;33648:1;33637:9;33633:17;33626:47;33690:131;33816:4;33690:131;:::i;:::-;33682:139;;33409:419;;;:::o;33834:225::-;33974:34;33970:1;33962:6;33958:14;33951:58;34043:8;34038:2;34030:6;34026:15;34019:33;33834:225;:::o;34065:366::-;34207:3;34228:67;34292:2;34287:3;34228:67;:::i;:::-;34221:74;;34304:93;34393:3;34304:93;:::i;:::-;34422:2;34417:3;34413:12;34406:19;;34065:366;;;:::o;34437:419::-;34603:4;34641:2;34630:9;34626:18;34618:26;;34690:9;34684:4;34680:20;34676:1;34665:9;34661:17;34654:47;34718:131;34844:4;34718:131;:::i;:::-;34710:139;;34437:419;;;:::o;34862:171::-;34901:3;34924:24;34942:5;34924:24;:::i;:::-;34915:33;;34970:4;34963:5;34960:15;34957:41;;34978:18;;:::i;:::-;34957:41;35025:1;35018:5;35014:13;35007:20;;34862:171;;;:::o;35039:182::-;35179:34;35175:1;35167:6;35163:14;35156:58;35039:182;:::o;35227:366::-;35369:3;35390:67;35454:2;35449:3;35390:67;:::i;:::-;35383:74;;35466:93;35555:3;35466:93;:::i;:::-;35584:2;35579:3;35575:12;35568:19;;35227:366;;;:::o;35599:419::-;35765:4;35803:2;35792:9;35788:18;35780:26;;35852:9;35846:4;35842:20;35838:1;35827:9;35823:17;35816:47;35880:131;36006:4;35880:131;:::i;:::-;35872:139;;35599:419;;;:::o
Swarm Source
ipfs://601be68ca2e94e39086f20c05276e75193f57096b2ff11ab039685360933d508
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.