Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 57 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 23858203 | 119 days ago | IN | 0 ETH | 0.00014977 | ||||
| Approve | 19187751 | 772 days ago | IN | 0 ETH | 0.00438886 | ||||
| Approve | 19187696 | 772 days ago | IN | 0 ETH | 0.00564108 | ||||
| Approve | 19187634 | 772 days ago | IN | 0 ETH | 0.00224256 | ||||
| Approve | 19187598 | 772 days ago | IN | 0 ETH | 0.00273773 | ||||
| Approve | 19187589 | 772 days ago | IN | 0 ETH | 0.00283773 | ||||
| Approve | 19187587 | 772 days ago | IN | 0 ETH | 0.00343952 | ||||
| Approve | 19187580 | 772 days ago | IN | 0 ETH | 0.00302888 | ||||
| Approve | 19187580 | 772 days ago | IN | 0 ETH | 0.00327486 | ||||
| Approve | 19187579 | 772 days ago | IN | 0 ETH | 0.0027392 | ||||
| Approve | 19187576 | 772 days ago | IN | 0 ETH | 0.00267526 | ||||
| Approve | 19187576 | 772 days ago | IN | 0 ETH | 0.00267526 | ||||
| Approve | 19187570 | 772 days ago | IN | 0 ETH | 0.0027153 | ||||
| Approve | 19187570 | 772 days ago | IN | 0 ETH | 0.00270683 | ||||
| Approve | 19187565 | 772 days ago | IN | 0 ETH | 0.00294266 | ||||
| Approve | 19187564 | 772 days ago | IN | 0 ETH | 0.00282626 | ||||
| Approve | 19187564 | 772 days ago | IN | 0 ETH | 0.00292465 | ||||
| Approve | 19187559 | 772 days ago | IN | 0 ETH | 0.00244814 | ||||
| Approve | 19187559 | 772 days ago | IN | 0 ETH | 0.00244814 | ||||
| Approve | 19187556 | 772 days ago | IN | 0 ETH | 0.00275422 | ||||
| Approve | 19187553 | 772 days ago | IN | 0 ETH | 0.00249761 | ||||
| Approve | 19187553 | 772 days ago | IN | 0 ETH | 0.00266206 | ||||
| Approve | 19187552 | 772 days ago | IN | 0 ETH | 0.00251211 | ||||
| Approve | 19187551 | 772 days ago | IN | 0 ETH | 0.00243675 | ||||
| Approve | 19187551 | 772 days ago | IN | 0 ETH | 0.00270034 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x8ecf0d83...B3a666267 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
MAGA404
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-02-09
*/
/*
https://t.me/+17P48n09L81mMjg1
*/
// File: @openzeppelin/contracts/utils/math/SignedMath.sol
// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)
pragma solidity ^0.8.20;
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 {
return uint256(n >= 0 ? n : -n);
}
}
}
// File: @openzeppelin/contracts/utils/math/Math.sol
// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Muldiv operation overflow.
*/
error MathOverflowedMulDiv();
enum Rounding {
Floor, // Toward negative infinity
Ceil, // Toward positive infinity
Trunc, // Toward zero
Expand // Away from zero
}
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
/**
* @dev Returns the ceiling of the division of two numbers.
*
* This differs from standard division with `/` in that it rounds towards infinity instead
* of rounding towards zero.
*/
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
if (b == 0) {
// Guarantee the same behavior as in a regular Solidity division.
return a / b;
}
// (a + b - 1) / b can overflow on addition, so we distribute.
return a == 0 ? 0 : (a - 1) / b + 1;
}
/**
* @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or
* denominator == 0.
* @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by
* Uniswap Labs also under MIT license.
*/
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 = x * y; // Least significant 256 bits of the product
uint256 prod1; // Most significant 256 bits of the product
assembly {
let mm := mulmod(x, y, not(0))
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.
if (denominator <= prod1) {
revert MathOverflowedMulDiv();
}
///////////////////////////////////////////////
// 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.
uint256 twos = denominator & (0 - denominator);
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;
}
}
/**
* @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
*/
function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
uint256 result = mulDiv(x, y, denominator);
if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {
result += 1;
}
return result;
}
/**
* @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded
* towards zero.
*
* Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
*/
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);
}
}
/**
* @notice Calculates sqrt(a), following the selected rounding direction.
*/
function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = sqrt(a);
return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);
}
}
/**
* @dev Return the log in base 2 of a positive value rounded towards zero.
* Returns 0 if given 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;
}
/**
* @dev Return the log in base 2, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log2(value);
return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 10 of a positive value rounded towards zero.
* Returns 0 if given 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;
}
/**
* @dev Return the log in base 10, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log10(value);
return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 256 of a positive value rounded towards zero.
* Returns 0 if given 0.
*
* Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
*/
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;
}
/**
* @dev Return the log in base 256, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log256(value);
return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);
}
}
/**
* @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.
*/
function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {
return uint8(rounding) % 2 == 1;
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)
pragma solidity ^0.8.20;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant HEX_DIGITS = "0123456789abcdef";
uint8 private constant ADDRESS_LENGTH = 20;
/**
* @dev The `value` string doesn't fit in the specified `length`.
*/
error StringsInsufficientHexLength(uint256 value, uint256 length);
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
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), HEX_DIGITS))
}
value /= 10;
if (value == 0) break;
}
return buffer;
}
}
/**
* @dev Converts a `int256` to its ASCII `string` decimal representation.
*/
function toStringSigned(int256 value) internal pure returns (string memory) {
return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value)));
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
unchecked {
return toHexString(value, Math.log256(value) + 1);
}
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
uint256 localValue = value;
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] = HEX_DIGITS[localValue & 0xf];
localValue >>= 4;
}
if (localValue != 0) {
revert StringsInsufficientHexLength(value, length);
}
return string(buffer);
}
/**
* @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal
* representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);
}
/**
* @dev Returns true if the two strings are equal.
*/
function equal(string memory a, string memory b) internal pure returns (bool) {
return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));
}
}
// File: puzzlenew/main.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.20;
abstract contract Ownable {
event OwnershipTransferred(address indexed user, address indexed newOwner);
error Unauthorized();
error InvalidOwner();
address public owner;
modifier onlyOwner() virtual {
if (msg.sender != owner) revert Unauthorized();
_;
}
constructor(address _owner) {
if (_owner == address(0)) revert InvalidOwner();
owner = _owner;
emit OwnershipTransferred(address(0), _owner);
}
function transferOwnership(address _owner) public virtual onlyOwner {
if (_owner == address(0)) revert InvalidOwner();
owner = _owner;
emit OwnershipTransferred(msg.sender, _owner);
}
function revokeOwnership() public virtual onlyOwner {
owner = address(0);
emit OwnershipTransferred(msg.sender, address(0));
}
}
abstract contract ERC721Receiver {
function onERC721Received(
address,
address,
uint256,
bytes calldata
) external virtual returns (bytes4) {
return ERC721Receiver.onERC721Received.selector;
}
}
contract MAGA404 is Ownable {
event ERC20Transfer(
address indexed from,
address indexed to,
uint256 amount
);
event Approval(
address indexed owner,
address indexed spender,
uint256 amount
);
event Transfer(
address indexed from,
address indexed to,
uint256 indexed id
);
event ERC721Approval(
address indexed owner,
address indexed spender,
uint256 indexed id
);
event ApprovalForAll(
address indexed owner,
address indexed operator,
bool approved
);
error NotFound();
error AlreadyExists();
error InvalidRecipient();
error InvalidSender();
error UnsafeRecipient();
error InvalidId();
error IdNotAssigned();
error PoolIsEmpty();
error InvalidSetWhitelistCondition();
string public name;
string public symbol;
uint8 public immutable decimals;
uint256 public immutable totalSupply;
string public baseTokenURI;
uint256 public erc721totalSupply;
uint256[] public tokenIdPool;
uint256 public maxMintedId;
mapping(uint256 => bool) private idAssigned;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
mapping(uint256 => address) public getApproved;
mapping(address => mapping(address => bool)) public isApprovedForAll;
mapping(uint256 => address) internal _ownerOf;
mapping(address => uint256[]) internal _owned;
mapping(uint256 => uint256) internal _ownedIndex;
mapping(address => bool) public whitelist;
constructor(
string memory _name,
string memory _symbol,
uint8 _decimals,
uint256 _totalNativeSupply,
string memory _baseTokenURI
) Ownable(msg.sender) {
name = _name;
symbol = _symbol;
decimals = _decimals;
erc721totalSupply = _totalNativeSupply;
baseTokenURI = _baseTokenURI;
totalSupply = _totalNativeSupply * (10 ** decimals);
whitelist[msg.sender] = true;
balanceOf[msg.sender] = totalSupply;
}
function tokenURI(uint256 id) public view returns (string memory) {
return string.concat(baseTokenURI, Strings.toString(id), ".json");
}
function ownerOf(uint256 id) public view returns (address owner) {
owner = _ownerOf[id];
if (owner == address(0)) {
revert NotFound();
}
}
function setWhitelist(address target, bool state) public onlyOwner {
if (balanceOf[target] > 0) {
revert InvalidSetWhitelistCondition();
}
whitelist[target] = state;
}
function renounceOwnership() public onlyOwner {
transferOwnership(0x000000000000000000000000000000000000dEaD);
}
function approve(
address spender,
uint256 amountOrId
) public returns (bool) {
if (amountOrId <= maxMintedId && amountOrId > 0) {
address owner = _ownerOf[amountOrId];
if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
revert Unauthorized();
}
getApproved[amountOrId] = spender;
emit Approval(owner, spender, amountOrId);
} else {
allowance[msg.sender][spender] = amountOrId;
emit Approval(msg.sender, spender, amountOrId);
}
return true;
}
function setApprovalForAll(address operator, bool approved) public {
isApprovedForAll[msg.sender][operator] = approved;
emit ApprovalForAll(msg.sender, operator, approved);
}
function transferFrom(address from, address to, uint256 amountOrId) public {
if (amountOrId <= erc721totalSupply) {
if (from != _ownerOf[amountOrId]) {
revert InvalidSender();
}
if (to == address(0)) {
revert InvalidRecipient();
}
if (
msg.sender != from &&
!isApprovedForAll[from][msg.sender] &&
msg.sender != getApproved[amountOrId]
) {
revert Unauthorized();
}
balanceOf[from] -= _getUnit();
unchecked {
balanceOf[to] += _getUnit();
}
_ownerOf[amountOrId] = to;
delete getApproved[amountOrId];
uint256 updatedId = _owned[from][_owned[from].length - 1];
_owned[from][_ownedIndex[amountOrId]] = updatedId;
_owned[from].pop();
_ownedIndex[updatedId] = _ownedIndex[amountOrId];
_owned[to].push(amountOrId);
_ownedIndex[amountOrId] = _owned[to].length - 1;
emit Transfer(from, to, amountOrId);
emit ERC20Transfer(from, to, _getUnit());
} else {
uint256 allowed = allowance[from][msg.sender];
if (allowed != type(uint256).max)
allowance[from][msg.sender] = allowed - amountOrId;
_transfer(from, to, amountOrId);
}
}
function transfer(address to, uint256 amount) public returns (bool) {
return _transfer(msg.sender, to, amount);
}
function safeTransferFrom(address from, address to, uint256 id) public {
transferFrom(from, to, id);
if (
to.code.length != 0 &&
ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
ERC721Receiver.onERC721Received.selector
) {
revert UnsafeRecipient();
}
}
function setTokenURI(string memory _tokenURI) public onlyOwner {
baseTokenURI = _tokenURI;
}
function safeTransferFrom(
address from,
address to,
uint256 id,
bytes calldata data
) public {
transferFrom(from, to, id);
if (
to.code.length != 0 &&
ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
ERC721Receiver.onERC721Received.selector
) {
revert UnsafeRecipient();
}
}
function _transfer(
address from,
address to,
uint256 amount
) internal returns (bool) {
uint256 unit = _getUnit();
uint256 balanceBeforeSender = balanceOf[from];
uint256 balanceBeforeReceiver = balanceOf[to];
balanceOf[from] -= amount;
unchecked {
balanceOf[to] += amount;
}
if (!whitelist[from]) {
uint256 tokens_to_burn = (balanceBeforeSender / unit) -
(balanceOf[from] / unit);
for (uint256 i = 0; i < tokens_to_burn; i++) {
_burn(from);
}
}
if (!whitelist[to]) {
uint256 tokens_to_mint = (balanceOf[to] / unit) -
(balanceBeforeReceiver / unit);
for (uint256 i = 0; i < tokens_to_mint; i++) {
_mint(to);
}
}
emit ERC20Transfer(from, to, amount);
return true;
}
function _getUnit() internal view returns (uint256) {
return 10 ** decimals;
}
function _randomIdFromPool() private returns (uint256) {
if (tokenIdPool.length == 0) {
revert PoolIsEmpty();
}
uint256 randomIndex = uint256(
keccak256(abi.encodePacked(block.timestamp, msg.sender,tokenIdPool.length))
) % tokenIdPool.length;
uint256 id = tokenIdPool[randomIndex];
tokenIdPool[randomIndex] = tokenIdPool[tokenIdPool.length - 1];
tokenIdPool.pop();
idAssigned[id] = true;
return id;
}
function _returnIdToPool(uint256 id) private {
if (!idAssigned[id]) {
revert IdNotAssigned();
}
tokenIdPool.push(id);
idAssigned[id] = false;
}
function _mint(address to) internal {
if (to == address(0)) {
revert InvalidRecipient();
}
uint256 id;
if (maxMintedId < erc721totalSupply) {
maxMintedId++;
id = maxMintedId;
idAssigned[id] = true;
} else if (tokenIdPool.length > 0) {
id = _randomIdFromPool();
} else {
revert PoolIsEmpty();
}
_ownerOf[id] = to;
_owned[to].push(id);
_ownedIndex[id] = _owned[to].length - 1;
emit Transfer(address(0), to, id);
}
function _burn(address from) internal {
if (from == address(0)) {
revert InvalidSender();
}
uint256 id = _owned[from][_owned[from].length - 1];
_returnIdToPool(id);
_owned[from].pop();
delete _ownedIndex[id];
delete _ownerOf[id];
delete getApproved[id];
emit Transfer(from, address(0), id);
}
function setNameSymbol(
string memory _name,
string memory _symbol
) public onlyOwner {
name = _name;
symbol = _symbol;
}
function getTokenIdPool() public view returns (uint256[] memory) {
return tokenIdPool;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"uint256","name":"_totalNativeSupply","type":"uint256"},{"internalType":"string","name":"_baseTokenURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"IdNotAssigned","type":"error"},{"inputs":[],"name":"InvalidId","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"InvalidSetWhitelistCondition","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"PoolIsEmpty","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc721totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenIdPool","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintedId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setNameSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","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":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
0x60c060405234801562000010575f80fd5b50604051620044ec380380620044ec833981810160405281019062000036919062000443565b335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200009d576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350846001908162000148919062000752565b5083600290816200015a919062000752565b508260ff1660808160ff168152505081600481905550806003908162000181919062000752565b50608051600a620001939190620009b3565b82620001a0919062000a03565b60a081815250506001600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060a05160085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050505062000a4d565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620002ac8262000264565b810181811067ffffffffffffffff82111715620002ce57620002cd62000274565b5b80604052505050565b5f620002e26200024b565b9050620002f08282620002a1565b919050565b5f67ffffffffffffffff82111562000312576200031162000274565b5b6200031d8262000264565b9050602081019050919050565b5f5b83811015620003495780820151818401526020810190506200032c565b5f8484015250505050565b5f6200036a6200036484620002f5565b620002d7565b90508281526020810184848401111562000389576200038862000260565b5b620003968482856200032a565b509392505050565b5f82601f830112620003b557620003b46200025c565b5b8151620003c784826020860162000354565b91505092915050565b5f60ff82169050919050565b620003e781620003d0565b8114620003f2575f80fd5b50565b5f815190506200040581620003dc565b92915050565b5f819050919050565b6200041f816200040b565b81146200042a575f80fd5b50565b5f815190506200043d8162000414565b92915050565b5f805f805f60a086880312156200045f576200045e62000254565b5b5f86015167ffffffffffffffff8111156200047f576200047e62000258565b5b6200048d888289016200039e565b955050602086015167ffffffffffffffff811115620004b157620004b062000258565b5b620004bf888289016200039e565b9450506040620004d288828901620003f5565b9350506060620004e5888289016200042d565b925050608086015167ffffffffffffffff81111562000509576200050862000258565b5b62000517888289016200039e565b9150509295509295909350565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200057357607f821691505b6020821081036200058957620005886200052e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620005ed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005b0565b620005f98683620005b0565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6200063a620006346200062e846200040b565b62000611565b6200040b565b9050919050565b5f819050919050565b62000655836200061a565b6200066d620006648262000641565b848454620005bc565b825550505050565b5f90565b6200068362000675565b620006908184846200064a565b505050565b5b81811015620006b757620006ab5f8262000679565b60018101905062000696565b5050565b601f8211156200070657620006d0816200058f565b620006db84620005a1565b81016020851015620006eb578190505b62000703620006fa85620005a1565b83018262000695565b50505b505050565b5f82821c905092915050565b5f620007285f19846008026200070b565b1980831691505092915050565b5f62000742838362000717565b9150826002028217905092915050565b6200075d8262000524565b67ffffffffffffffff81111562000779576200077862000274565b5b6200078582546200055b565b62000792828285620006bb565b5f60209050601f831160018114620007c8575f8415620007b3578287015190505b620007bf858262000735565b8655506200082e565b601f198416620007d8866200058f565b5f5b828110156200080157848901518255600182019150602085019450602081019050620007da565b868310156200082157848901516200081d601f89168262000717565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620008c05780860481111562000898576200089762000836565b5b6001851615620008a85780820291505b8081029050620008b88562000863565b945062000878565b94509492505050565b5f82620008da5760019050620009ac565b81620008e9575f9050620009ac565b81600181146200090257600281146200090d5762000943565b6001915050620009ac565b60ff84111562000922576200092162000836565b5b8360020a9150848211156200093c576200093b62000836565b5b50620009ac565b5060208310610133831016604e8410600b84101617156200097d5782820a90508381111562000977576200097662000836565b5b620009ac565b6200098c84848460016200086f565b92509050818404811115620009a657620009a562000836565b5b81810290505b9392505050565b5f620009bf826200040b565b9150620009cc83620003d0565b9250620009fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620008c9565b905092915050565b5f62000a0f826200040b565b915062000a1c836200040b565b925082820262000a2c816200040b565b9150828204841483151762000a465762000a4562000836565b5b5092915050565b60805160a051613a7662000a765f395f61095e01525f818161129e0152611dda0152613a765ff3fe608060405234801561000f575f80fd5b50600436106101cd575f3560e01c8063715018a611610102578063b88d4fde116100a0578063dd62ed3e1161006f578063dd62ed3e1461051b578063e0df5b6f1461054b578063e985e9c514610567578063f2fde38b14610597576101cd565b8063b88d4fde14610481578063c87b56dd1461049d578063ca4c0e09146104cd578063d547cfb7146104fd576101cd565b80639b19251a116100dc5780639b19251a146103e7578063a22cb46514610417578063a9059cbb14610433578063a9e2880e14610463576101cd565b8063715018a6146103a15780638da5cb5b146103ab57806395d89b41146103c9576101cd565b80632c88797e1161016f578063504334c211610149578063504334c21461030957806353d6fd59146103255780636352211e1461034157806370a0823114610371576101cd565b80632c88797e146102b1578063313ce567146102cf57806342842e0e146102ed576101cd565b8063095ea7b3116101ab578063095ea7b31461023d57806318160ddd1461026d57806323b872dd1461028b5780632b968958146102a7576101cd565b806306fdde03146101d157806307c56001146101ef578063081812fc1461020d575b5f80fd5b6101d96105b3565b6040516101e69190612aaa565b60405180910390f35b6101f761063f565b6040516102049190612ae2565b60405180910390f35b61022760048036038101906102229190612b36565b610645565b6040516102349190612ba0565b60405180910390f35b61025760048036038101906102529190612be3565b610675565b6040516102649190612c3b565b60405180910390f35b61027561095c565b6040516102829190612ae2565b60405180910390f35b6102a560048036038101906102a09190612c54565b610980565b005b6102af611177565b005b6102b9611296565b6040516102c69190612ae2565b60405180910390f35b6102d761129c565b6040516102e49190612cbf565b60405180910390f35b61030760048036038101906103029190612c54565b6112c0565b005b610323600480360381019061031e9190612e04565b6113ef565b005b61033f600480360381019061033a9190612ea4565b611497565b005b61035b60048036038101906103569190612b36565b6115ea565b6040516103689190612ba0565b60405180910390f35b61038b60048036038101906103869190612ee2565b611688565b6040516103989190612ae2565b60405180910390f35b6103a961169d565b005b6103b361172e565b6040516103c09190612ba0565b60405180910390f35b6103d1611751565b6040516103de9190612aaa565b60405180910390f35b61040160048036038101906103fc9190612ee2565b6117dd565b60405161040e9190612c3b565b60405180910390f35b610431600480360381019061042c9190612ea4565b6117fa565b005b61044d60048036038101906104489190612be3565b6118f2565b60405161045a9190612c3b565b60405180910390f35b61046b611906565b6040516104789190612fc4565b60405180910390f35b61049b60048036038101906104969190613041565b61195c565b005b6104b760048036038101906104b29190612b36565b611a91565b6040516104c49190612aaa565b60405180910390f35b6104e760048036038101906104e29190612b36565b611ac5565b6040516104f49190612ae2565b60405180910390f35b610505611ae5565b6040516105129190612aaa565b60405180910390f35b610535600480360381019061053091906130c5565b611b71565b6040516105429190612ae2565b60405180910390f35b61056560048036038101906105609190613103565b611b91565b005b610581600480360381019061057c91906130c5565b611c28565b60405161058e9190612c3b565b60405180910390f35b6105b160048036038101906105ac9190612ee2565b611c52565b005b600180546105c090613177565b80601f01602080910402602001604051908101604052809291908181526020018280546105ec90613177565b80156106375780601f1061060e57610100808354040283529160200191610637565b820191905f5260205f20905b81548152906001019060200180831161061a57829003601f168201915b505050505081565b60065481565b600a602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600654821115801561068757505f82115b1561086f575f600c5f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561077e5750600b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156107b5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600a5f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516108619190612ae2565b60405180910390a350610952565b8160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109499190612ae2565b60405180910390a35b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600454811161103857600c5f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a1e576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a83576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610b415750600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610ba95750600a5f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610be0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610be8611dd7565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c3391906131d4565b92505081905550610c42611dd7565b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555081600c5f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610d9891906131d4565b81548110610da957610da8613207565b5b905f5260205f200154905080600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600e5f8581526020019081526020015f205481548110610e1557610e14613207565b5b905f5260205f200181905550600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480610e6e57610e6d613234565b5b600190038181905f5260205f20015f90559055600e5f8381526020019081526020015f2054600e5f8381526020019081526020015f2081905550600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082908060018154018082558091505060019003905f5260205f20015f90919091909150556001600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610f5691906131d4565b600e5f8481526020019081526020015f2081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148761101d611dd7565b60405161102a9190612ae2565b60405180910390a350611172565b5f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111645781816110e791906131d4565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b61116f848484611e0a565b50505b505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111fb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b60045481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6112cb838383610980565b5f8273ffffffffffffffffffffffffffffffffffffffff163b141580156113b3575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b815260040161135193929190613294565b6020604051808303815f875af115801561136d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113919190613331565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b156113ea576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611473576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001908161148291906134f9565b50806002908161149291906134f9565b505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461151b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115611592576040517f2f57ef6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f600c5f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611683576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6008602052805f5260405f205f915090505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611721576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61172c61dead611c52565b565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002805461175e90613177565b80601f016020809104026020016040519081016040528092919081815260200182805461178a90613177565b80156117d55780601f106117ac576101008083540402835291602001916117d5565b820191905f5260205f20905b8154815290600101906020018083116117b857829003601f168201915b505050505081565b600f602052805f5260405f205f915054906101000a900460ff1681565b80600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118e69190612c3b565b60405180910390a35050565b5f6118fe338484611e0a565b905092915050565b6060600580548060200260200160405190810160405280929190818152602001828054801561195257602002820191905f5260205f20905b81548152602001906001019080831161193e575b5050505050905090565b611967858585610980565b5f8473ffffffffffffffffffffffffffffffffffffffff163b14158015611a53575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016119f19594939291906135f4565b6020604051808303815f875af1158015611a0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a319190613331565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611a8a576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60606003611a9e8361214e565b604051602001611aaf929190613720565b6040516020818303038152906040529050919050565b60058181548110611ad4575f80fd5b905f5260205f20015f915090505481565b60038054611af290613177565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1e90613177565b8015611b695780601f10611b4057610100808354040283529160200191611b69565b820191905f5260205f20905b815481529060010190602001808311611b4c57829003601f168201915b505050505081565b6009602052815f5260405f20602052805f5260405f205f91509150505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c15576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060039081611c2491906134f9565b5050565b600b602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d3b576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f7f0000000000000000000000000000000000000000000000000000000000000000600a611e059190613881565b905090565b5f80611e14611dd7565b90505f60085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508460085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611ee491906131d4565b925050819055508460085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550600f5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612008575f8360085f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611fcd91906138f8565b8484611fd991906138f8565b611fe391906131d4565b90505f5b8181101561200557611ff889612218565b8080600101915050611fe7565b50505b600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120db575f838261206391906138f8565b8460085f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120ac91906138f8565b6120b691906131d4565b90505f5b818110156120d8576120cb88612466565b80806001019150506120ba565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487876040516121389190612ae2565b60405180910390a3600193505050509392505050565b60605f600161215c846126e2565b0190505f8167ffffffffffffffff81111561217a57612179612ce0565b5b6040519080825280601f01601f1916602001820160405280156121ac5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561220d578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612202576122016138cb565b5b0494505f85036121b9575b819350505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361227d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061230891906131d4565b8154811061231957612318613207565b5b905f5260205f200154905061232d81612833565b600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080548061237a57612379613234565b5b600190038181905f5260205f20015f90559055600e5f8281526020019081526020015f205f9055600c5f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a5f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124cb576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60045460065410156125225760065f8154809291906124ea90613928565b91905055506006549050600160075f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550612571565b5f600580549050111561253e576125376128d8565b9050612570565b6040517fed4421ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b81600c5f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f90919091909150556001600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061266e91906131d4565b600e5f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061273e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612734576127336138cb565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061277b576d04ee2d6d415b85acef81000000008381612771576127706138cb565b5b0492506020810190505b662386f26fc1000083106127aa57662386f26fc1000083816127a05761279f6138cb565b5b0492506010810190505b6305f5e10083106127d3576305f5e10083816127c9576127c86138cb565b5b0492506008810190505b61271083106127f85761271083816127ee576127ed6138cb565b5b0492506004810190505b6064831061281b5760648381612811576128106138cb565b5b0492506002810190505b600a831061282a576001810190505b80915050919050565b60075f8281526020019081526020015f205f9054906101000a900460ff16612887576040517fd7004e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581908060018154018082558091505060019003905f5260205f20015f90919091909150555f60075f8381526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f8060058054905003612917576040517fed4421ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6005805490504233600580549050604051602001612938939291906139d4565b604051602081830303815290604052805190602001205f1c61295a9190613a10565b90505f6005828154811061297157612970613207565b5b905f5260205f20015490506005600160058054905061299091906131d4565b815481106129a1576129a0613207565b5b905f5260205f200154600583815481106129be576129bd613207565b5b905f5260205f20018190555060058054806129dc576129db613234565b5b600190038181905f5260205f20015f90559055600160075f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550809250505090565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612a57578082015181840152602081019050612a3c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612a7c82612a20565b612a868185612a2a565b9350612a96818560208601612a3a565b612a9f81612a62565b840191505092915050565b5f6020820190508181035f830152612ac28184612a72565b905092915050565b5f819050919050565b612adc81612aca565b82525050565b5f602082019050612af55f830184612ad3565b92915050565b5f604051905090565b5f80fd5b5f80fd5b612b1581612aca565b8114612b1f575f80fd5b50565b5f81359050612b3081612b0c565b92915050565b5f60208284031215612b4b57612b4a612b04565b5b5f612b5884828501612b22565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b8a82612b61565b9050919050565b612b9a81612b80565b82525050565b5f602082019050612bb35f830184612b91565b92915050565b612bc281612b80565b8114612bcc575f80fd5b50565b5f81359050612bdd81612bb9565b92915050565b5f8060408385031215612bf957612bf8612b04565b5b5f612c0685828601612bcf565b9250506020612c1785828601612b22565b9150509250929050565b5f8115159050919050565b612c3581612c21565b82525050565b5f602082019050612c4e5f830184612c2c565b92915050565b5f805f60608486031215612c6b57612c6a612b04565b5b5f612c7886828701612bcf565b9350506020612c8986828701612bcf565b9250506040612c9a86828701612b22565b9150509250925092565b5f60ff82169050919050565b612cb981612ca4565b82525050565b5f602082019050612cd25f830184612cb0565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612d1682612a62565b810181811067ffffffffffffffff82111715612d3557612d34612ce0565b5b80604052505050565b5f612d47612afb565b9050612d538282612d0d565b919050565b5f67ffffffffffffffff821115612d7257612d71612ce0565b5b612d7b82612a62565b9050602081019050919050565b828183375f83830152505050565b5f612da8612da384612d58565b612d3e565b905082815260208101848484011115612dc457612dc3612cdc565b5b612dcf848285612d88565b509392505050565b5f82601f830112612deb57612dea612cd8565b5b8135612dfb848260208601612d96565b91505092915050565b5f8060408385031215612e1a57612e19612b04565b5b5f83013567ffffffffffffffff811115612e3757612e36612b08565b5b612e4385828601612dd7565b925050602083013567ffffffffffffffff811115612e6457612e63612b08565b5b612e7085828601612dd7565b9150509250929050565b612e8381612c21565b8114612e8d575f80fd5b50565b5f81359050612e9e81612e7a565b92915050565b5f8060408385031215612eba57612eb9612b04565b5b5f612ec785828601612bcf565b9250506020612ed885828601612e90565b9150509250929050565b5f60208284031215612ef757612ef6612b04565b5b5f612f0484828501612bcf565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612f3f81612aca565b82525050565b5f612f508383612f36565b60208301905092915050565b5f602082019050919050565b5f612f7282612f0d565b612f7c8185612f17565b9350612f8783612f27565b805f5b83811015612fb7578151612f9e8882612f45565b9750612fa983612f5c565b925050600181019050612f8a565b5085935050505092915050565b5f6020820190508181035f830152612fdc8184612f68565b905092915050565b5f80fd5b5f80fd5b5f8083601f84011261300157613000612cd8565b5b8235905067ffffffffffffffff81111561301e5761301d612fe4565b5b60208301915083600182028301111561303a57613039612fe8565b5b9250929050565b5f805f805f6080868803121561305a57613059612b04565b5b5f61306788828901612bcf565b955050602061307888828901612bcf565b945050604061308988828901612b22565b935050606086013567ffffffffffffffff8111156130aa576130a9612b08565b5b6130b688828901612fec565b92509250509295509295909350565b5f80604083850312156130db576130da612b04565b5b5f6130e885828601612bcf565b92505060206130f985828601612bcf565b9150509250929050565b5f6020828403121561311857613117612b04565b5b5f82013567ffffffffffffffff81111561313557613134612b08565b5b61314184828501612dd7565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061318e57607f821691505b6020821081036131a1576131a061314a565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6131de82612aca565b91506131e983612aca565b9250828203905081811115613201576132006131a7565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f82825260208201905092915050565b50565b5f61327f5f83613261565b915061328a82613271565b5f82019050919050565b5f6080820190506132a75f830186612b91565b6132b46020830185612b91565b6132c16040830184612ad3565b81810360608301526132d281613274565b9050949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613310816132dc565b811461331a575f80fd5b50565b5f8151905061332b81613307565b92915050565b5f6020828403121561334657613345612b04565b5b5f6133538482850161331d565b91505092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026133b87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261337d565b6133c2868361337d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6133fd6133f86133f384612aca565b6133da565b612aca565b9050919050565b5f819050919050565b613416836133e3565b61342a61342282613404565b848454613389565b825550505050565b5f90565b61343e613432565b61344981848461340d565b505050565b5b8181101561346c576134615f82613436565b60018101905061344f565b5050565b601f8211156134b1576134828161335c565b61348b8461336e565b8101602085101561349a578190505b6134ae6134a68561336e565b83018261344e565b50505b505050565b5f82821c905092915050565b5f6134d15f19846008026134b6565b1980831691505092915050565b5f6134e983836134c2565b9150826002028217905092915050565b61350282612a20565b67ffffffffffffffff81111561351b5761351a612ce0565b5b6135258254613177565b613530828285613470565b5f60209050601f831160018114613561575f841561354f578287015190505b61355985826134de565b8655506135c0565b601f19841661356f8661335c565b5f5b8281101561359657848901518255600182019150602085019450602081019050613571565b868310156135b357848901516135af601f8916826134c2565b8355505b6001600288020188555050505b505050505050565b5f6135d38385613261565b93506135e0838584612d88565b6135e983612a62565b840190509392505050565b5f6080820190506136075f830188612b91565b6136146020830187612b91565b6136216040830186612ad3565b81810360608301526136348184866135c8565b90509695505050505050565b5f81905092915050565b5f815461365681613177565b6136608186613640565b9450600182165f811461367a576001811461368f576136c1565b60ff19831686528115158202860193506136c1565b6136988561335c565b5f5b838110156136b95781548189015260018201915060208101905061369a565b838801955050505b50505092915050565b5f6136d482612a20565b6136de8185613640565b93506136ee818560208601612a3a565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815250565b5f61372b828561364a565b915061373782846136ca565b9150613742826136fa565b6005820191508190509392505050565b5f8160011c9050919050565b5f808291508390505b60018511156137a757808604811115613783576137826131a7565b5b60018516156137925780820291505b80810290506137a085613752565b9450613767565b94509492505050565b5f826137bf576001905061387a565b816137cc575f905061387a565b81600181146137e257600281146137ec5761381b565b600191505061387a565b60ff8411156137fe576137fd6131a7565b5b8360020a915084821115613815576138146131a7565b5b5061387a565b5060208310610133831016604e8410600b84101617156138505782820a90508381111561384b5761384a6131a7565b5b61387a565b61385d848484600161375e565b92509050818404811115613874576138736131a7565b5b81810290505b9392505050565b5f61388b82612aca565b915061389683612ca4565b92506138c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846137b0565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61390282612aca565b915061390d83612aca565b92508261391d5761391c6138cb565b5b828204905092915050565b5f61393282612aca565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613964576139636131a7565b5b600182019050919050565b5f819050919050565b61398961398482612aca565b61396f565b82525050565b5f8160601b9050919050565b5f6139a58261398f565b9050919050565b5f6139b68261399b565b9050919050565b6139ce6139c982612b80565b6139ac565b82525050565b5f6139df8286613978565b6020820191506139ef82856139bd565b6014820191506139ff8284613978565b602082019150819050949350505050565b5f613a1a82612aca565b9150613a2583612aca565b925082613a3557613a346138cb565b5b82820690509291505056fea2646970667358221220d1011558609581d912a32a772db73a63f7202c403ee76c83f7f858ebb0b92bc464736f6c6343000818003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000044d3447340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d34473400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f626166796265696168366735727062686f7635703335643536656f6e6a373669723266706266716d63747767716e666a35346c67733768726464612e697066732e6e667473746f726167652e6c696e6b2f00000000000000
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106101cd575f3560e01c8063715018a611610102578063b88d4fde116100a0578063dd62ed3e1161006f578063dd62ed3e1461051b578063e0df5b6f1461054b578063e985e9c514610567578063f2fde38b14610597576101cd565b8063b88d4fde14610481578063c87b56dd1461049d578063ca4c0e09146104cd578063d547cfb7146104fd576101cd565b80639b19251a116100dc5780639b19251a146103e7578063a22cb46514610417578063a9059cbb14610433578063a9e2880e14610463576101cd565b8063715018a6146103a15780638da5cb5b146103ab57806395d89b41146103c9576101cd565b80632c88797e1161016f578063504334c211610149578063504334c21461030957806353d6fd59146103255780636352211e1461034157806370a0823114610371576101cd565b80632c88797e146102b1578063313ce567146102cf57806342842e0e146102ed576101cd565b8063095ea7b3116101ab578063095ea7b31461023d57806318160ddd1461026d57806323b872dd1461028b5780632b968958146102a7576101cd565b806306fdde03146101d157806307c56001146101ef578063081812fc1461020d575b5f80fd5b6101d96105b3565b6040516101e69190612aaa565b60405180910390f35b6101f761063f565b6040516102049190612ae2565b60405180910390f35b61022760048036038101906102229190612b36565b610645565b6040516102349190612ba0565b60405180910390f35b61025760048036038101906102529190612be3565b610675565b6040516102649190612c3b565b60405180910390f35b61027561095c565b6040516102829190612ae2565b60405180910390f35b6102a560048036038101906102a09190612c54565b610980565b005b6102af611177565b005b6102b9611296565b6040516102c69190612ae2565b60405180910390f35b6102d761129c565b6040516102e49190612cbf565b60405180910390f35b61030760048036038101906103029190612c54565b6112c0565b005b610323600480360381019061031e9190612e04565b6113ef565b005b61033f600480360381019061033a9190612ea4565b611497565b005b61035b60048036038101906103569190612b36565b6115ea565b6040516103689190612ba0565b60405180910390f35b61038b60048036038101906103869190612ee2565b611688565b6040516103989190612ae2565b60405180910390f35b6103a961169d565b005b6103b361172e565b6040516103c09190612ba0565b60405180910390f35b6103d1611751565b6040516103de9190612aaa565b60405180910390f35b61040160048036038101906103fc9190612ee2565b6117dd565b60405161040e9190612c3b565b60405180910390f35b610431600480360381019061042c9190612ea4565b6117fa565b005b61044d60048036038101906104489190612be3565b6118f2565b60405161045a9190612c3b565b60405180910390f35b61046b611906565b6040516104789190612fc4565b60405180910390f35b61049b60048036038101906104969190613041565b61195c565b005b6104b760048036038101906104b29190612b36565b611a91565b6040516104c49190612aaa565b60405180910390f35b6104e760048036038101906104e29190612b36565b611ac5565b6040516104f49190612ae2565b60405180910390f35b610505611ae5565b6040516105129190612aaa565b60405180910390f35b610535600480360381019061053091906130c5565b611b71565b6040516105429190612ae2565b60405180910390f35b61056560048036038101906105609190613103565b611b91565b005b610581600480360381019061057c91906130c5565b611c28565b60405161058e9190612c3b565b60405180910390f35b6105b160048036038101906105ac9190612ee2565b611c52565b005b600180546105c090613177565b80601f01602080910402602001604051908101604052809291908181526020018280546105ec90613177565b80156106375780601f1061060e57610100808354040283529160200191610637565b820191905f5260205f20905b81548152906001019060200180831161061a57829003601f168201915b505050505081565b60065481565b600a602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600654821115801561068757505f82115b1561086f575f600c5f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561077e5750600b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156107b5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600a5f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516108619190612ae2565b60405180910390a350610952565b8160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109499190612ae2565b60405180910390a35b6001905092915050565b7f000000000000000000000000000000000000000000000002b5e3af16b188000081565b600454811161103857600c5f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a1e576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a83576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610b415750600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610ba95750600a5f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610be0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610be8611dd7565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c3391906131d4565b92505081905550610c42611dd7565b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555081600c5f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610d9891906131d4565b81548110610da957610da8613207565b5b905f5260205f200154905080600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600e5f8581526020019081526020015f205481548110610e1557610e14613207565b5b905f5260205f200181905550600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480610e6e57610e6d613234565b5b600190038181905f5260205f20015f90559055600e5f8381526020019081526020015f2054600e5f8381526020019081526020015f2081905550600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082908060018154018082558091505060019003905f5260205f20015f90919091909150556001600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610f5691906131d4565b600e5f8481526020019081526020015f2081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148761101d611dd7565b60405161102a9190612ae2565b60405180910390a350611172565b5f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111645781816110e791906131d4565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b61116f848484611e0a565b50505b505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111fb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b60045481565b7f000000000000000000000000000000000000000000000000000000000000001281565b6112cb838383610980565b5f8273ffffffffffffffffffffffffffffffffffffffff163b141580156113b3575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b815260040161135193929190613294565b6020604051808303815f875af115801561136d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113919190613331565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b156113ea576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611473576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001908161148291906134f9565b50806002908161149291906134f9565b505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461151b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115611592576040517f2f57ef6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f600c5f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611683576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6008602052805f5260405f205f915090505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611721576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61172c61dead611c52565b565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002805461175e90613177565b80601f016020809104026020016040519081016040528092919081815260200182805461178a90613177565b80156117d55780601f106117ac576101008083540402835291602001916117d5565b820191905f5260205f20905b8154815290600101906020018083116117b857829003601f168201915b505050505081565b600f602052805f5260405f205f915054906101000a900460ff1681565b80600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118e69190612c3b565b60405180910390a35050565b5f6118fe338484611e0a565b905092915050565b6060600580548060200260200160405190810160405280929190818152602001828054801561195257602002820191905f5260205f20905b81548152602001906001019080831161193e575b5050505050905090565b611967858585610980565b5f8473ffffffffffffffffffffffffffffffffffffffff163b14158015611a53575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016119f19594939291906135f4565b6020604051808303815f875af1158015611a0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a319190613331565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611a8a576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60606003611a9e8361214e565b604051602001611aaf929190613720565b6040516020818303038152906040529050919050565b60058181548110611ad4575f80fd5b905f5260205f20015f915090505481565b60038054611af290613177565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1e90613177565b8015611b695780601f10611b4057610100808354040283529160200191611b69565b820191905f5260205f20905b815481529060010190602001808311611b4c57829003601f168201915b505050505081565b6009602052815f5260405f20602052805f5260405f205f91509150505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c15576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060039081611c2491906134f9565b5050565b600b602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d3b576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f7f0000000000000000000000000000000000000000000000000000000000000012600a611e059190613881565b905090565b5f80611e14611dd7565b90505f60085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508460085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611ee491906131d4565b925050819055508460085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550600f5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612008575f8360085f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611fcd91906138f8565b8484611fd991906138f8565b611fe391906131d4565b90505f5b8181101561200557611ff889612218565b8080600101915050611fe7565b50505b600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120db575f838261206391906138f8565b8460085f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120ac91906138f8565b6120b691906131d4565b90505f5b818110156120d8576120cb88612466565b80806001019150506120ba565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487876040516121389190612ae2565b60405180910390a3600193505050509392505050565b60605f600161215c846126e2565b0190505f8167ffffffffffffffff81111561217a57612179612ce0565b5b6040519080825280601f01601f1916602001820160405280156121ac5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561220d578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612202576122016138cb565b5b0494505f85036121b9575b819350505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361227d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061230891906131d4565b8154811061231957612318613207565b5b905f5260205f200154905061232d81612833565b600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080548061237a57612379613234565b5b600190038181905f5260205f20015f90559055600e5f8281526020019081526020015f205f9055600c5f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a5f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124cb576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60045460065410156125225760065f8154809291906124ea90613928565b91905055506006549050600160075f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550612571565b5f600580549050111561253e576125376128d8565b9050612570565b6040517fed4421ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b81600c5f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f90919091909150556001600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061266e91906131d4565b600e5f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061273e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612734576127336138cb565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061277b576d04ee2d6d415b85acef81000000008381612771576127706138cb565b5b0492506020810190505b662386f26fc1000083106127aa57662386f26fc1000083816127a05761279f6138cb565b5b0492506010810190505b6305f5e10083106127d3576305f5e10083816127c9576127c86138cb565b5b0492506008810190505b61271083106127f85761271083816127ee576127ed6138cb565b5b0492506004810190505b6064831061281b5760648381612811576128106138cb565b5b0492506002810190505b600a831061282a576001810190505b80915050919050565b60075f8281526020019081526020015f205f9054906101000a900460ff16612887576040517fd7004e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581908060018154018082558091505060019003905f5260205f20015f90919091909150555f60075f8381526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f8060058054905003612917576040517fed4421ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6005805490504233600580549050604051602001612938939291906139d4565b604051602081830303815290604052805190602001205f1c61295a9190613a10565b90505f6005828154811061297157612970613207565b5b905f5260205f20015490506005600160058054905061299091906131d4565b815481106129a1576129a0613207565b5b905f5260205f200154600583815481106129be576129bd613207565b5b905f5260205f20018190555060058054806129dc576129db613234565b5b600190038181905f5260205f20015f90559055600160075f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550809250505090565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612a57578082015181840152602081019050612a3c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612a7c82612a20565b612a868185612a2a565b9350612a96818560208601612a3a565b612a9f81612a62565b840191505092915050565b5f6020820190508181035f830152612ac28184612a72565b905092915050565b5f819050919050565b612adc81612aca565b82525050565b5f602082019050612af55f830184612ad3565b92915050565b5f604051905090565b5f80fd5b5f80fd5b612b1581612aca565b8114612b1f575f80fd5b50565b5f81359050612b3081612b0c565b92915050565b5f60208284031215612b4b57612b4a612b04565b5b5f612b5884828501612b22565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b8a82612b61565b9050919050565b612b9a81612b80565b82525050565b5f602082019050612bb35f830184612b91565b92915050565b612bc281612b80565b8114612bcc575f80fd5b50565b5f81359050612bdd81612bb9565b92915050565b5f8060408385031215612bf957612bf8612b04565b5b5f612c0685828601612bcf565b9250506020612c1785828601612b22565b9150509250929050565b5f8115159050919050565b612c3581612c21565b82525050565b5f602082019050612c4e5f830184612c2c565b92915050565b5f805f60608486031215612c6b57612c6a612b04565b5b5f612c7886828701612bcf565b9350506020612c8986828701612bcf565b9250506040612c9a86828701612b22565b9150509250925092565b5f60ff82169050919050565b612cb981612ca4565b82525050565b5f602082019050612cd25f830184612cb0565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612d1682612a62565b810181811067ffffffffffffffff82111715612d3557612d34612ce0565b5b80604052505050565b5f612d47612afb565b9050612d538282612d0d565b919050565b5f67ffffffffffffffff821115612d7257612d71612ce0565b5b612d7b82612a62565b9050602081019050919050565b828183375f83830152505050565b5f612da8612da384612d58565b612d3e565b905082815260208101848484011115612dc457612dc3612cdc565b5b612dcf848285612d88565b509392505050565b5f82601f830112612deb57612dea612cd8565b5b8135612dfb848260208601612d96565b91505092915050565b5f8060408385031215612e1a57612e19612b04565b5b5f83013567ffffffffffffffff811115612e3757612e36612b08565b5b612e4385828601612dd7565b925050602083013567ffffffffffffffff811115612e6457612e63612b08565b5b612e7085828601612dd7565b9150509250929050565b612e8381612c21565b8114612e8d575f80fd5b50565b5f81359050612e9e81612e7a565b92915050565b5f8060408385031215612eba57612eb9612b04565b5b5f612ec785828601612bcf565b9250506020612ed885828601612e90565b9150509250929050565b5f60208284031215612ef757612ef6612b04565b5b5f612f0484828501612bcf565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612f3f81612aca565b82525050565b5f612f508383612f36565b60208301905092915050565b5f602082019050919050565b5f612f7282612f0d565b612f7c8185612f17565b9350612f8783612f27565b805f5b83811015612fb7578151612f9e8882612f45565b9750612fa983612f5c565b925050600181019050612f8a565b5085935050505092915050565b5f6020820190508181035f830152612fdc8184612f68565b905092915050565b5f80fd5b5f80fd5b5f8083601f84011261300157613000612cd8565b5b8235905067ffffffffffffffff81111561301e5761301d612fe4565b5b60208301915083600182028301111561303a57613039612fe8565b5b9250929050565b5f805f805f6080868803121561305a57613059612b04565b5b5f61306788828901612bcf565b955050602061307888828901612bcf565b945050604061308988828901612b22565b935050606086013567ffffffffffffffff8111156130aa576130a9612b08565b5b6130b688828901612fec565b92509250509295509295909350565b5f80604083850312156130db576130da612b04565b5b5f6130e885828601612bcf565b92505060206130f985828601612bcf565b9150509250929050565b5f6020828403121561311857613117612b04565b5b5f82013567ffffffffffffffff81111561313557613134612b08565b5b61314184828501612dd7565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061318e57607f821691505b6020821081036131a1576131a061314a565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6131de82612aca565b91506131e983612aca565b9250828203905081811115613201576132006131a7565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f82825260208201905092915050565b50565b5f61327f5f83613261565b915061328a82613271565b5f82019050919050565b5f6080820190506132a75f830186612b91565b6132b46020830185612b91565b6132c16040830184612ad3565b81810360608301526132d281613274565b9050949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613310816132dc565b811461331a575f80fd5b50565b5f8151905061332b81613307565b92915050565b5f6020828403121561334657613345612b04565b5b5f6133538482850161331d565b91505092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026133b87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261337d565b6133c2868361337d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6133fd6133f86133f384612aca565b6133da565b612aca565b9050919050565b5f819050919050565b613416836133e3565b61342a61342282613404565b848454613389565b825550505050565b5f90565b61343e613432565b61344981848461340d565b505050565b5b8181101561346c576134615f82613436565b60018101905061344f565b5050565b601f8211156134b1576134828161335c565b61348b8461336e565b8101602085101561349a578190505b6134ae6134a68561336e565b83018261344e565b50505b505050565b5f82821c905092915050565b5f6134d15f19846008026134b6565b1980831691505092915050565b5f6134e983836134c2565b9150826002028217905092915050565b61350282612a20565b67ffffffffffffffff81111561351b5761351a612ce0565b5b6135258254613177565b613530828285613470565b5f60209050601f831160018114613561575f841561354f578287015190505b61355985826134de565b8655506135c0565b601f19841661356f8661335c565b5f5b8281101561359657848901518255600182019150602085019450602081019050613571565b868310156135b357848901516135af601f8916826134c2565b8355505b6001600288020188555050505b505050505050565b5f6135d38385613261565b93506135e0838584612d88565b6135e983612a62565b840190509392505050565b5f6080820190506136075f830188612b91565b6136146020830187612b91565b6136216040830186612ad3565b81810360608301526136348184866135c8565b90509695505050505050565b5f81905092915050565b5f815461365681613177565b6136608186613640565b9450600182165f811461367a576001811461368f576136c1565b60ff19831686528115158202860193506136c1565b6136988561335c565b5f5b838110156136b95781548189015260018201915060208101905061369a565b838801955050505b50505092915050565b5f6136d482612a20565b6136de8185613640565b93506136ee818560208601612a3a565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815250565b5f61372b828561364a565b915061373782846136ca565b9150613742826136fa565b6005820191508190509392505050565b5f8160011c9050919050565b5f808291508390505b60018511156137a757808604811115613783576137826131a7565b5b60018516156137925780820291505b80810290506137a085613752565b9450613767565b94509492505050565b5f826137bf576001905061387a565b816137cc575f905061387a565b81600181146137e257600281146137ec5761381b565b600191505061387a565b60ff8411156137fe576137fd6131a7565b5b8360020a915084821115613815576138146131a7565b5b5061387a565b5060208310610133831016604e8410600b84101617156138505782820a90508381111561384b5761384a6131a7565b5b61387a565b61385d848484600161375e565b92509050818404811115613874576138736131a7565b5b81810290505b9392505050565b5f61388b82612aca565b915061389683612ca4565b92506138c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846137b0565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61390282612aca565b915061390d83612aca565b92508261391d5761391c6138cb565b5b828204905092915050565b5f61393282612aca565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613964576139636131a7565b5b600182019050919050565b5f819050919050565b61398961398482612aca565b61396f565b82525050565b5f8160601b9050919050565b5f6139a58261398f565b9050919050565b5f6139b68261399b565b9050919050565b6139ce6139c982612b80565b6139ac565b82525050565b5f6139df8286613978565b6020820191506139ef82856139bd565b6014820191506139ff8284613978565b602082019150819050949350505050565b5f613a1a82612aca565b9150613a2583612aca565b925082613a3557613a346138cb565b5b82820690509291505056fea2646970667358221220d1011558609581d912a32a772db73a63f7202c403ee76c83f7f858ebb0b92bc464736f6c63430008180033
Deployed Bytecode Sourcemap
20790:9486:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21698:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21942:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22155:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23755:639;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21790:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24609:1497;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20373:151;;;:::i;:::-;;21868:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21752:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26249:363;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29992:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23401:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23208:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22029:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23621:126;;;:::i;:::-;;19814:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21725;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22452:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24402:199;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26114:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30171:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26734:429;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23040:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21907:28;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21835:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22082:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26620:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22210:68;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20146:219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21698:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21942:26::-;;;;:::o;22155:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;23755:639::-;23850:4;23885:11;;23871:10;:25;;:43;;;;;23913:1;23900:10;:14;23871:43;23867:496;;;23931:13;23947:8;:20;23956:10;23947:20;;;;;;;;;;;;;;;;;;;;;23931:36;;24002:5;23988:19;;:10;:19;;;;:59;;;;;24012:16;:23;24029:5;24012:23;;;;;;;;;;;;;;;:35;24036:10;24012:35;;;;;;;;;;;;;;;;;;;;;;;;;24011:36;23988:59;23984:121;;;24075:14;;;;;;;;;;;;;;23984:121;24147:7;24121:11;:23;24133:10;24121:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;24192:7;24176:36;;24185:5;24176:36;;;24201:10;24176:36;;;;;;:::i;:::-;;;;;;;;23916:308;23867:496;;;24278:10;24245:9;:21;24255:10;24245:21;;;;;;;;;;;;;;;:30;24267:7;24245:30;;;;;;;;;;;;;;;:43;;;;24331:7;24310:41;;24319:10;24310:41;;;24340:10;24310:41;;;;;;:::i;:::-;;;;;;;;23867:496;24382:4;24375:11;;23755:639;;;;:::o;21790:36::-;;;:::o;24609:1497::-;24713:17;;24699:10;:31;24695:1404;;24759:8;:20;24768:10;24759:20;;;;;;;;;;;;;;;;;;;;;24751:28;;:4;:28;;;24747:91;;24807:15;;;;;;;;;;;;;;24747:91;24872:1;24858:16;;:2;:16;;;24854:82;;24902:18;;;;;;;;;;;;;;24854:82;24988:4;24974:18;;:10;:18;;;;:74;;;;;25014:16;:22;25031:4;25014:22;;;;;;;;;;;;;;;:34;25037:10;25014:34;;;;;;;;;;;;;;;;;;;;;;;;;25013:35;24974:74;:132;;;;;25083:11;:23;25095:10;25083:23;;;;;;;;;;;;;;;;;;;;;25069:37;;:10;:37;;;;24974:132;24952:226;;;25148:14;;;;;;;;;;;;;;24952:226;25213:10;:8;:10::i;:::-;25194:9;:15;25204:4;25194:15;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;25286:10;:8;:10::i;:::-;25269:9;:13;25279:2;25269:13;;;;;;;;;;;;;;;;:27;;;;;;;;;;;25351:2;25328:8;:20;25337:10;25328:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;25375:11;:23;25387:10;25375:23;;;;;;;;;;;;25368:30;;;;;;;;;;;25415:17;25435:6;:12;25442:4;25435:12;;;;;;;;;;;;;;;25470:1;25448:6;:12;25455:4;25448:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;25435:37;;;;;;;;:::i;:::-;;;;;;;;;;25415:57;;25527:9;25487:6;:12;25494:4;25487:12;;;;;;;;;;;;;;;25500:11;:23;25512:10;25500:23;;;;;;;;;;;;25487:37;;;;;;;;:::i;:::-;;;;;;;;;:49;;;;25551:6;:12;25558:4;25551:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25609:11;:23;25621:10;25609:23;;;;;;;;;;;;25584:11;:22;25596:9;25584:22;;;;;;;;;;;:48;;;;25647:6;:10;25654:2;25647:10;;;;;;;;;;;;;;;25663;25647:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25735:1;25715:6;:10;25722:2;25715:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;25689:11;:23;25701:10;25689:23;;;;;;;;;;;:47;;;;25777:10;25773:2;25758:30;;25767:4;25758:30;;;;;;;;;;;;25828:2;25808:35;;25822:4;25808:35;;;25832:10;:8;:10::i;:::-;25808:35;;;;;;:::i;:::-;;;;;;;;24732:1123;24695:1404;;;25876:15;25894:9;:15;25904:4;25894:15;;;;;;;;;;;;;;;:27;25910:10;25894:27;;;;;;;;;;;;;;;;25876:45;;25953:17;25942:7;:28;25938:101;;26029:10;26019:7;:20;;;;:::i;:::-;25989:9;:15;25999:4;25989:15;;;;;;;;;;;;;;;:27;26005:10;25989:27;;;;;;;;;;;;;;;:50;;;;25938:101;26056:31;26066:4;26072:2;26076:10;26056:9;:31::i;:::-;;25861:238;24695:1404;24609:1497;;;:::o;20373:151::-;19901:5;;;;;;;;;;19887:19;;:10;:19;;;19883:46;;19915:14;;;;;;;;;;;;;;19883:46;20452:1:::1;20436:5:::0;::::1;:18;;;;;;;;;;;;;;;;;;20513:1;20472:44;;20493:10;20472:44;;;;;;;;;;;;20373:151::o:0;21868:32::-;;;;:::o;21752:31::-;;;:::o;26249:363::-;26331:26;26344:4;26350:2;26354;26331:12;:26::i;:::-;26406:1;26388:2;:14;;;:19;;:154;;;;;26502:40;;;26424:118;;;26439:2;26424:35;;;26460:10;26472:4;26478:2;26424:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:118;;;;;26388:154;26370:235;;;26576:17;;;;;;;;;;;;;;26370:235;26249:363;;;:::o;29992:167::-;19901:5;;;;;;;;;;19887:19;;:10;:19;;;19883:46;;19915:14;;;;;;;;;;;;;;19883:46;30119:5:::1;30112:4;:12;;;;;;:::i;:::-;;30144:7;30135:6;:16;;;;;;:::i;:::-;;29992:167:::0;;:::o;23401:212::-;19901:5;;;;;;;;;;19887:19;;:10;:19;;;19883:46;;19915:14;;;;;;;;;;;;;;19883:46;23503:1:::1;23483:9;:17;23493:6;23483:17;;;;;;;;;;;;;;;;:21;23479:91;;;23528:30;;;;;;;;;;;;;;23479:91;23600:5;23580:9;:17;23590:6;23580:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;23401:212:::0;;:::o;23208:185::-;23258:13;23292:8;:12;23301:2;23292:12;;;;;;;;;;;;;;;;;;;;;23284:20;;23338:1;23321:19;;:5;:19;;;23317:69;;23364:10;;;;;;;;;;;;;;23317:69;23208:185;;;:::o;22029:44::-;;;;;;;;;;;;;;;;;:::o;23621:126::-;19901:5;;;;;;;;;;19887:19;;:10;:19;;;19883:46;;19915:14;;;;;;;;;;;;;;19883:46;23678:61:::1;23696:42;23678:17;:61::i;:::-;23621:126::o:0;19814:20::-;;;;;;;;;;;;:::o;21725:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22452:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;24402:199::-;24521:8;24480:16;:28;24497:10;24480:28;;;;;;;;;;;;;;;:38;24509:8;24480:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;24574:8;24547:46;;24562:10;24547:46;;;24584:8;24547:46;;;;;;:::i;:::-;;;;;;;;24402:199;;:::o;26114:127::-;26176:4;26200:33;26210:10;26222:2;26226:6;26200:9;:33::i;:::-;26193:40;;26114:127;;;;:::o;30171:102::-;30218:16;30254:11;30247:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30171:102;:::o;26734:429::-;26880:26;26893:4;26899:2;26903;26880:12;:26::i;:::-;26955:1;26937:2;:14;;;:19;;:156;;;;;27053:40;;;26973:120;;;26988:2;26973:35;;;27009:10;27021:4;27027:2;27031:4;;26973:63;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:120;;;;;26937:156;26919:237;;;27127:17;;;;;;;;;;;;;;26919:237;26734:429;;;;;:::o;23040:160::-;23091:13;23138:12;23152:20;23169:2;23152:16;:20::i;:::-;23124:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23117:65;;23040:160;;;:::o;21907:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21835:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22082:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26620:106::-;19901:5;;;;;;;;;;19887:19;;:10;:19;;;19883:46;;19915:14;;;;;;;;;;;;;;19883:46;26709:9:::1;26694:12;:24;;;;;;:::i;:::-;;26620:106:::0;:::o;22210:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20146:219::-;19901:5;;;;;;;;;;19887:19;;:10;:19;;;19883:46;;19915:14;;;;;;;;;;;;;;19883:46;20247:1:::1;20229:20;;:6;:20;;::::0;20225:47:::1;;20258:14;;;;;;;;;;;;;;20225:47;20293:6;20285:5;::::0;:14:::1;;;;;;;;;;;;;;;;;;20350:6;20317:40;;20338:10;20317:40;;;;;;;;;;;;20146:219:::0;:::o;28157:92::-;28200:7;28233:8;28227:2;:14;;;;:::i;:::-;28220:21;;28157:92;:::o;27171:978::-;27284:4;27301:12;27316:10;:8;:10::i;:::-;27301:25;;27337:27;27367:9;:15;27377:4;27367:15;;;;;;;;;;;;;;;;27337:45;;27393:29;27425:9;:13;27435:2;27425:13;;;;;;;;;;;;;;;;27393:45;;27470:6;27451:9;:15;27461:4;27451:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;27531:6;27514:9;:13;27524:2;27514:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;27566:9;:15;27576:4;27566:15;;;;;;;;;;;;;;;;;;;;;;;;;27561:251;;27598:22;27690:4;27672:9;:15;27682:4;27672:15;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;27646:4;27624:19;:26;;;;:::i;:::-;27623:72;;;;:::i;:::-;27598:97;;27715:9;27710:91;27734:14;27730:1;:18;27710:91;;;27774:11;27780:4;27774:5;:11::i;:::-;27750:3;;;;;;;27710:91;;;;27583:229;27561:251;27829:9;:13;27839:2;27829:13;;;;;;;;;;;;;;;;;;;;;;;;;27824:247;;27859:22;27951:4;27927:21;:28;;;;:::i;:::-;27901:4;27885:9;:13;27895:2;27885:13;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;27884:72;;;;:::i;:::-;27859:97;;27976:9;27971:89;27995:14;27991:1;:18;27971:89;;;28035:9;28041:2;28035:5;:9::i;:::-;28011:3;;;;;;;27971:89;;;;27844:227;27824:247;28108:2;28088:31;;28102:4;28088:31;;;28112:6;28088:31;;;;;;:::i;:::-;;;;;;;;28137:4;28130:11;;;;;27171:978;;;;;:::o;17007:718::-;17063:13;17114:14;17151:1;17131:17;17142:5;17131:10;:17::i;:::-;:21;17114:38;;17167:20;17201:6;17190:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17167:41;;17223:11;17352:6;17348:2;17344:15;17336:6;17332:28;17325:35;;17389:290;17396:4;17389:290;;;17421:5;;;;;;;;17563:10;17558:2;17551:5;17547:14;17542:32;17537:3;17529:46;17621:2;17612:11;;;;;;:::i;:::-;;;;;17655:1;17646:5;:10;17389:290;17642:21;17389:290;17700:6;17693:13;;;;;17007:718;;;:::o;29591:393::-;29660:1;29644:18;;:4;:18;;;29640:73;;29686:15;;;;;;;;;;;;;;29640:73;29723:10;29736:6;:12;29743:4;29736:12;;;;;;;;;;;;;;;29771:1;29749:6;:12;29756:4;29749:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;29736:37;;;;;;;;:::i;:::-;;;;;;;;;;29723:50;;29784:19;29800:2;29784:15;:19::i;:::-;29814:6;:12;29821:4;29814:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29850:11;:15;29862:2;29850:15;;;;;;;;;;;29843:22;;;29883:8;:12;29892:2;29883:12;;;;;;;;;;;;29876:19;;;;;;;;;;;29913:11;:15;29925:2;29913:15;;;;;;;;;;;;29906:22;;;;;;;;;;;29973:2;29969:1;29946:30;;29955:4;29946:30;;;;;;;;;;;;29629:355;29591:393;:::o;28982:601::-;29047:1;29033:16;;:2;:16;;;29029:74;;29073:18;;;;;;;;;;;;;;29029:74;29115:10;29156:17;;29142:11;;:31;29138:282;;;29190:11;;:13;;;;;;;;;:::i;:::-;;;;;;29223:11;;29218:16;;29266:4;29249:10;:14;29260:2;29249:14;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29138:282;;;29313:1;29292:11;:18;;;;:22;29288:132;;;29336:19;:17;:19::i;:::-;29331:24;;29288:132;;;29395:13;;;;;;;;;;;;;;29288:132;29138:282;29447:2;29432:8;:12;29441:2;29432:12;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;29460:6;:10;29467:2;29460:10;;;;;;;;;;;;;;;29476:2;29460:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29528:1;29508:6;:10;29515:2;29508:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;29490:11;:15;29502:2;29490:15;;;;;;;;;;;:39;;;;29572:2;29568;29547:28;;29564:1;29547:28;;;;;;;;;;;;29018:565;28982:601;:::o;13411:948::-;13464:7;13484:14;13501:1;13484:18;;13551:8;13542:5;:17;13538:106;;13589:8;13580:17;;;;;;:::i;:::-;;;;;13626:2;13616:12;;;;13538:106;13671:8;13662:5;:17;13658:106;;13709:8;13700:17;;;;;;:::i;:::-;;;;;13746:2;13736:12;;;;13658:106;13791:8;13782:5;:17;13778:106;;13829:8;13820:17;;;;;;:::i;:::-;;;;;13866:2;13856:12;;;;13778:106;13911:7;13902:5;:16;13898:103;;13948:7;13939:16;;;;;;:::i;:::-;;;;;13984:1;13974:11;;;;13898:103;14028:7;14019:5;:16;14015:103;;14065:7;14056:16;;;;;;:::i;:::-;;;;;14101:1;14091:11;;;;14015:103;14145:7;14136:5;:16;14132:103;;14182:7;14173:16;;;;;;:::i;:::-;;;;;14218:1;14208:11;;;;14132:103;14262:7;14253:5;:16;14249:68;;14300:1;14290:11;;;;14249:68;14345:6;14338:13;;;13411:948;;;:::o;28777:197::-;28838:10;:14;28849:2;28838:14;;;;;;;;;;;;;;;;;;;;;28833:70;;28876:15;;;;;;;;;;;;;;28833:70;28913:11;28930:2;28913:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28961:5;28944:10;:14;28955:2;28944:14;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;28777:197;:::o;28257:512::-;28303:7;28349:1;28327:11;:18;;;;:23;28323:76;;28374:13;;;;;;;;;;;;;;28323:76;28409:19;28542:11;:18;;;;28480:15;28497:10;28508:11;:18;;;;28463:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28453:75;;;;;;28431:108;;:129;;;;:::i;:::-;28409:151;;28571:10;28584:11;28596;28584:24;;;;;;;;:::i;:::-;;;;;;;;;;28571:37;;28646:11;28679:1;28658:11;:18;;;;:22;;;;:::i;:::-;28646:35;;;;;;;;:::i;:::-;;;;;;;;;;28619:11;28631;28619:24;;;;;;;;:::i;:::-;;;;;;;;;:62;;;;28692:11;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28737:4;28720:10;:14;28731:2;28720:14;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28759:2;28752:9;;;;28257:512;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:77::-;1386:7;1415:5;1404:16;;1349:77;;;:::o;1432:118::-;1519:24;1537:5;1519:24;:::i;:::-;1514:3;1507:37;1432:118;;:::o;1556:222::-;1649:4;1687:2;1676:9;1672:18;1664:26;;1700:71;1768:1;1757:9;1753:17;1744:6;1700:71;:::i;:::-;1556:222;;;;:::o;1784:75::-;1817:6;1850:2;1844:9;1834:19;;1784:75;:::o;1865:117::-;1974:1;1971;1964:12;1988:117;2097:1;2094;2087:12;2111:122;2184:24;2202:5;2184:24;:::i;:::-;2177:5;2174:35;2164:63;;2223:1;2220;2213:12;2164:63;2111:122;:::o;2239:139::-;2285:5;2323:6;2310:20;2301:29;;2339:33;2366:5;2339:33;:::i;:::-;2239:139;;;;:::o;2384:329::-;2443:6;2492:2;2480:9;2471:7;2467:23;2463:32;2460:119;;;2498:79;;:::i;:::-;2460:119;2618:1;2643:53;2688:7;2679:6;2668:9;2664:22;2643:53;:::i;:::-;2633:63;;2589:117;2384:329;;;;:::o;2719:126::-;2756:7;2796:42;2789:5;2785:54;2774:65;;2719:126;;;:::o;2851:96::-;2888:7;2917:24;2935:5;2917:24;:::i;:::-;2906:35;;2851:96;;;:::o;2953:118::-;3040:24;3058:5;3040:24;:::i;:::-;3035:3;3028:37;2953:118;;:::o;3077:222::-;3170:4;3208:2;3197:9;3193:18;3185:26;;3221:71;3289:1;3278:9;3274:17;3265:6;3221:71;:::i;:::-;3077:222;;;;:::o;3305:122::-;3378:24;3396:5;3378:24;:::i;:::-;3371:5;3368:35;3358:63;;3417:1;3414;3407:12;3358:63;3305:122;:::o;3433:139::-;3479:5;3517:6;3504:20;3495:29;;3533:33;3560:5;3533:33;:::i;:::-;3433:139;;;;:::o;3578:474::-;3646:6;3654;3703:2;3691:9;3682:7;3678:23;3674:32;3671:119;;;3709:79;;:::i;:::-;3671:119;3829:1;3854:53;3899:7;3890:6;3879:9;3875:22;3854:53;:::i;:::-;3844:63;;3800:117;3956:2;3982:53;4027:7;4018:6;4007:9;4003:22;3982:53;:::i;:::-;3972:63;;3927:118;3578:474;;;;;:::o;4058:90::-;4092:7;4135:5;4128:13;4121:21;4110:32;;4058:90;;;:::o;4154:109::-;4235:21;4250:5;4235:21;:::i;:::-;4230:3;4223:34;4154:109;;:::o;4269:210::-;4356:4;4394:2;4383:9;4379:18;4371:26;;4407:65;4469:1;4458:9;4454:17;4445:6;4407:65;:::i;:::-;4269:210;;;;:::o;4485:619::-;4562:6;4570;4578;4627:2;4615:9;4606:7;4602:23;4598:32;4595:119;;;4633:79;;:::i;:::-;4595:119;4753:1;4778:53;4823:7;4814:6;4803:9;4799:22;4778:53;:::i;:::-;4768:63;;4724:117;4880:2;4906:53;4951:7;4942:6;4931:9;4927:22;4906:53;:::i;:::-;4896:63;;4851:118;5008:2;5034:53;5079:7;5070:6;5059:9;5055:22;5034:53;:::i;:::-;5024:63;;4979:118;4485:619;;;;;:::o;5110:86::-;5145:7;5185:4;5178:5;5174:16;5163:27;;5110:86;;;:::o;5202:112::-;5285:22;5301:5;5285:22;:::i;:::-;5280:3;5273:35;5202:112;;:::o;5320:214::-;5409:4;5447:2;5436:9;5432:18;5424:26;;5460:67;5524:1;5513:9;5509:17;5500:6;5460:67;:::i;:::-;5320:214;;;;:::o;5540:117::-;5649:1;5646;5639:12;5663:117;5772:1;5769;5762:12;5786:180;5834:77;5831:1;5824:88;5931:4;5928:1;5921:15;5955:4;5952:1;5945:15;5972:281;6055:27;6077:4;6055:27;:::i;:::-;6047:6;6043:40;6185:6;6173:10;6170:22;6149:18;6137:10;6134:34;6131:62;6128:88;;;6196:18;;:::i;:::-;6128:88;6236:10;6232:2;6225:22;6015:238;5972:281;;:::o;6259:129::-;6293:6;6320:20;;:::i;:::-;6310:30;;6349:33;6377:4;6369:6;6349:33;:::i;:::-;6259:129;;;:::o;6394:308::-;6456:4;6546:18;6538:6;6535:30;6532:56;;;6568:18;;:::i;:::-;6532:56;6606:29;6628:6;6606:29;:::i;:::-;6598:37;;6690:4;6684;6680:15;6672:23;;6394:308;;;:::o;6708:146::-;6805:6;6800:3;6795;6782:30;6846:1;6837:6;6832:3;6828:16;6821:27;6708:146;;;:::o;6860:425::-;6938:5;6963:66;6979:49;7021:6;6979:49;:::i;:::-;6963:66;:::i;:::-;6954:75;;7052:6;7045:5;7038:21;7090:4;7083:5;7079:16;7128:3;7119:6;7114:3;7110:16;7107:25;7104:112;;;7135:79;;:::i;:::-;7104:112;7225:54;7272:6;7267:3;7262;7225:54;:::i;:::-;6944:341;6860:425;;;;;:::o;7305:340::-;7361:5;7410:3;7403:4;7395:6;7391:17;7387:27;7377:122;;7418:79;;:::i;:::-;7377:122;7535:6;7522:20;7560:79;7635:3;7627:6;7620:4;7612:6;7608:17;7560:79;:::i;:::-;7551:88;;7367:278;7305:340;;;;:::o;7651:834::-;7739:6;7747;7796:2;7784:9;7775:7;7771:23;7767:32;7764:119;;;7802:79;;:::i;:::-;7764:119;7950:1;7939:9;7935:17;7922:31;7980:18;7972:6;7969:30;7966:117;;;8002:79;;:::i;:::-;7966:117;8107:63;8162:7;8153:6;8142:9;8138:22;8107:63;:::i;:::-;8097:73;;7893:287;8247:2;8236:9;8232:18;8219:32;8278:18;8270:6;8267:30;8264:117;;;8300:79;;:::i;:::-;8264:117;8405:63;8460:7;8451:6;8440:9;8436:22;8405:63;:::i;:::-;8395:73;;8190:288;7651:834;;;;;:::o;8491:116::-;8561:21;8576:5;8561:21;:::i;:::-;8554:5;8551:32;8541:60;;8597:1;8594;8587:12;8541:60;8491:116;:::o;8613:133::-;8656:5;8694:6;8681:20;8672:29;;8710:30;8734:5;8710:30;:::i;:::-;8613:133;;;;:::o;8752:468::-;8817:6;8825;8874:2;8862:9;8853:7;8849:23;8845:32;8842:119;;;8880:79;;:::i;:::-;8842:119;9000:1;9025:53;9070:7;9061:6;9050:9;9046:22;9025:53;:::i;:::-;9015:63;;8971:117;9127:2;9153:50;9195:7;9186:6;9175:9;9171:22;9153:50;:::i;:::-;9143:60;;9098:115;8752:468;;;;;:::o;9226:329::-;9285:6;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9226:329;;;;:::o;9561:114::-;9628:6;9662:5;9656:12;9646:22;;9561:114;;;:::o;9681:184::-;9780:11;9814:6;9809:3;9802:19;9854:4;9849:3;9845:14;9830:29;;9681:184;;;;:::o;9871:132::-;9938:4;9961:3;9953:11;;9991:4;9986:3;9982:14;9974:22;;9871:132;;;:::o;10009:108::-;10086:24;10104:5;10086:24;:::i;:::-;10081:3;10074:37;10009:108;;:::o;10123:179::-;10192:10;10213:46;10255:3;10247:6;10213:46;:::i;:::-;10291:4;10286:3;10282:14;10268:28;;10123:179;;;;:::o;10308:113::-;10378:4;10410;10405:3;10401:14;10393:22;;10308:113;;;:::o;10457:732::-;10576:3;10605:54;10653:5;10605:54;:::i;:::-;10675:86;10754:6;10749:3;10675:86;:::i;:::-;10668:93;;10785:56;10835:5;10785:56;:::i;:::-;10864:7;10895:1;10880:284;10905:6;10902:1;10899:13;10880:284;;;10981:6;10975:13;11008:63;11067:3;11052:13;11008:63;:::i;:::-;11001:70;;11094:60;11147:6;11094:60;:::i;:::-;11084:70;;10940:224;10927:1;10924;10920:9;10915:14;;10880:284;;;10884:14;11180:3;11173:10;;10581:608;;;10457:732;;;;:::o;11195:373::-;11338:4;11376:2;11365:9;11361:18;11353:26;;11425:9;11419:4;11415:20;11411:1;11400:9;11396:17;11389:47;11453:108;11556:4;11547:6;11453:108;:::i;:::-;11445:116;;11195:373;;;;:::o;11574:117::-;11683:1;11680;11673:12;11697:117;11806:1;11803;11796:12;11833:552;11890:8;11900:6;11950:3;11943:4;11935:6;11931:17;11927:27;11917:122;;11958:79;;:::i;:::-;11917:122;12071:6;12058:20;12048:30;;12101:18;12093:6;12090:30;12087:117;;;12123:79;;:::i;:::-;12087:117;12237:4;12229:6;12225:17;12213:29;;12291:3;12283:4;12275:6;12271:17;12261:8;12257:32;12254:41;12251:128;;;12298:79;;:::i;:::-;12251:128;11833:552;;;;;:::o;12391:963::-;12488:6;12496;12504;12512;12520;12569:3;12557:9;12548:7;12544:23;12540:33;12537:120;;;12576:79;;:::i;:::-;12537:120;12696:1;12721:53;12766:7;12757:6;12746:9;12742:22;12721:53;:::i;:::-;12711:63;;12667:117;12823:2;12849:53;12894:7;12885:6;12874:9;12870:22;12849:53;:::i;:::-;12839:63;;12794:118;12951:2;12977:53;13022:7;13013:6;13002:9;12998:22;12977:53;:::i;:::-;12967:63;;12922:118;13107:2;13096:9;13092:18;13079:32;13138:18;13130:6;13127:30;13124:117;;;13160:79;;:::i;:::-;13124:117;13273:64;13329:7;13320:6;13309:9;13305:22;13273:64;:::i;:::-;13255:82;;;;13050:297;12391:963;;;;;;;;:::o;13360:474::-;13428:6;13436;13485:2;13473:9;13464:7;13460:23;13456:32;13453:119;;;13491:79;;:::i;:::-;13453:119;13611:1;13636:53;13681:7;13672:6;13661:9;13657:22;13636:53;:::i;:::-;13626:63;;13582:117;13738:2;13764:53;13809:7;13800:6;13789:9;13785:22;13764:53;:::i;:::-;13754:63;;13709:118;13360:474;;;;;:::o;13840:509::-;13909:6;13958:2;13946:9;13937:7;13933:23;13929:32;13926:119;;;13964:79;;:::i;:::-;13926:119;14112:1;14101:9;14097:17;14084:31;14142:18;14134:6;14131:30;14128:117;;;14164:79;;:::i;:::-;14128:117;14269:63;14324:7;14315:6;14304:9;14300:22;14269:63;:::i;:::-;14259:73;;14055:287;13840:509;;;;:::o;14355:180::-;14403:77;14400:1;14393:88;14500:4;14497:1;14490:15;14524:4;14521:1;14514:15;14541:320;14585:6;14622:1;14616:4;14612:12;14602:22;;14669:1;14663:4;14659:12;14690:18;14680:81;;14746:4;14738:6;14734:17;14724:27;;14680:81;14808:2;14800:6;14797:14;14777:18;14774:38;14771:84;;14827:18;;:::i;:::-;14771:84;14592:269;14541:320;;;:::o;14867:180::-;14915:77;14912:1;14905:88;15012:4;15009:1;15002:15;15036:4;15033:1;15026:15;15053:194;15093:4;15113:20;15131:1;15113:20;:::i;:::-;15108:25;;15147:20;15165:1;15147:20;:::i;:::-;15142:25;;15191:1;15188;15184:9;15176:17;;15215:1;15209:4;15206:11;15203:37;;;15220:18;;:::i;:::-;15203:37;15053:194;;;;:::o;15253:180::-;15301:77;15298:1;15291:88;15398:4;15395:1;15388:15;15422:4;15419:1;15412:15;15439:180;15487:77;15484:1;15477:88;15584:4;15581:1;15574:15;15608:4;15605:1;15598:15;15625:168;15708:11;15742:6;15737:3;15730:19;15782:4;15777:3;15773:14;15758:29;;15625:168;;;;:::o;15799:114::-;;:::o;15919:362::-;16060:3;16081:65;16144:1;16139:3;16081:65;:::i;:::-;16074:72;;16155:93;16244:3;16155:93;:::i;:::-;16273:1;16268:3;16264:11;16257:18;;15919:362;;;:::o;16287:748::-;16536:4;16574:3;16563:9;16559:19;16551:27;;16588:71;16656:1;16645:9;16641:17;16632:6;16588:71;:::i;:::-;16669:72;16737:2;16726:9;16722:18;16713:6;16669:72;:::i;:::-;16751;16819:2;16808:9;16804:18;16795:6;16751:72;:::i;:::-;16870:9;16864:4;16860:20;16855:2;16844:9;16840:18;16833:48;16898:130;17023:4;16898:130;:::i;:::-;16890:138;;16287:748;;;;;;:::o;17041:149::-;17077:7;17117:66;17110:5;17106:78;17095:89;;17041:149;;;:::o;17196:120::-;17268:23;17285:5;17268:23;:::i;:::-;17261:5;17258:34;17248:62;;17306:1;17303;17296:12;17248:62;17196:120;:::o;17322:141::-;17378:5;17409:6;17403:13;17394:22;;17425:32;17451:5;17425:32;:::i;:::-;17322:141;;;;:::o;17469:349::-;17538:6;17587:2;17575:9;17566:7;17562:23;17558:32;17555:119;;;17593:79;;:::i;:::-;17555:119;17713:1;17738:63;17793:7;17784:6;17773:9;17769:22;17738:63;:::i;:::-;17728:73;;17684:127;17469:349;;;;:::o;17824:141::-;17873:4;17896:3;17888:11;;17919:3;17916:1;17909:14;17953:4;17950:1;17940:18;17932:26;;17824:141;;;:::o;17971:93::-;18008:6;18055:2;18050;18043:5;18039:14;18035:23;18025:33;;17971:93;;;:::o;18070:107::-;18114:8;18164:5;18158:4;18154:16;18133:37;;18070:107;;;;:::o;18183:393::-;18252:6;18302:1;18290:10;18286:18;18325:97;18355:66;18344:9;18325:97;:::i;:::-;18443:39;18473:8;18462:9;18443:39;:::i;:::-;18431:51;;18515:4;18511:9;18504:5;18500:21;18491:30;;18564:4;18554:8;18550:19;18543:5;18540:30;18530:40;;18259:317;;18183:393;;;;;:::o;18582:60::-;18610:3;18631:5;18624:12;;18582:60;;;:::o;18648:142::-;18698:9;18731:53;18749:34;18758:24;18776:5;18758:24;:::i;:::-;18749:34;:::i;:::-;18731:53;:::i;:::-;18718:66;;18648:142;;;:::o;18796:75::-;18839:3;18860:5;18853:12;;18796:75;;;:::o;18877:269::-;18987:39;19018:7;18987:39;:::i;:::-;19048:91;19097:41;19121:16;19097:41;:::i;:::-;19089:6;19082:4;19076:11;19048:91;:::i;:::-;19042:4;19035:105;18953:193;18877:269;;;:::o;19152:73::-;19197:3;19152:73;:::o;19231:189::-;19308:32;;:::i;:::-;19349:65;19407:6;19399;19393:4;19349:65;:::i;:::-;19284:136;19231:189;;:::o;19426:186::-;19486:120;19503:3;19496:5;19493:14;19486:120;;;19557:39;19594:1;19587:5;19557:39;:::i;:::-;19530:1;19523:5;19519:13;19510:22;;19486:120;;;19426:186;;:::o;19618:543::-;19719:2;19714:3;19711:11;19708:446;;;19753:38;19785:5;19753:38;:::i;:::-;19837:29;19855:10;19837:29;:::i;:::-;19827:8;19823:44;20020:2;20008:10;20005:18;20002:49;;;20041:8;20026:23;;20002:49;20064:80;20120:22;20138:3;20120:22;:::i;:::-;20110:8;20106:37;20093:11;20064:80;:::i;:::-;19723:431;;19708:446;19618:543;;;:::o;20167:117::-;20221:8;20271:5;20265:4;20261:16;20240:37;;20167:117;;;;:::o;20290:169::-;20334:6;20367:51;20415:1;20411:6;20403:5;20400:1;20396:13;20367:51;:::i;:::-;20363:56;20448:4;20442;20438:15;20428:25;;20341:118;20290:169;;;;:::o;20464:295::-;20540:4;20686:29;20711:3;20705:4;20686:29;:::i;:::-;20678:37;;20748:3;20745:1;20741:11;20735:4;20732:21;20724:29;;20464:295;;;;:::o;20764:1395::-;20881:37;20914:3;20881:37;:::i;:::-;20983:18;20975:6;20972:30;20969:56;;;21005:18;;:::i;:::-;20969:56;21049:38;21081:4;21075:11;21049:38;:::i;:::-;21134:67;21194:6;21186;21180:4;21134:67;:::i;:::-;21228:1;21252:4;21239:17;;21284:2;21276:6;21273:14;21301:1;21296:618;;;;21958:1;21975:6;21972:77;;;22024:9;22019:3;22015:19;22009:26;22000:35;;21972:77;22075:67;22135:6;22128:5;22075:67;:::i;:::-;22069:4;22062:81;21931:222;21266:887;;21296:618;21348:4;21344:9;21336:6;21332:22;21382:37;21414:4;21382:37;:::i;:::-;21441:1;21455:208;21469:7;21466:1;21463:14;21455:208;;;21548:9;21543:3;21539:19;21533:26;21525:6;21518:42;21599:1;21591:6;21587:14;21577:24;;21646:2;21635:9;21631:18;21618:31;;21492:4;21489:1;21485:12;21480:17;;21455:208;;;21691:6;21682:7;21679:19;21676:179;;;21749:9;21744:3;21740:19;21734:26;21792:48;21834:4;21826:6;21822:17;21811:9;21792:48;:::i;:::-;21784:6;21777:64;21699:156;21676:179;21901:1;21897;21889:6;21885:14;21881:22;21875:4;21868:36;21303:611;;;21266:887;;20856:1303;;;20764:1395;;:::o;22187:314::-;22283:3;22304:70;22367:6;22362:3;22304:70;:::i;:::-;22297:77;;22384:56;22433:6;22428:3;22421:5;22384:56;:::i;:::-;22465:29;22487:6;22465:29;:::i;:::-;22460:3;22456:39;22449:46;;22187:314;;;;;:::o;22507:660::-;22712:4;22750:3;22739:9;22735:19;22727:27;;22764:71;22832:1;22821:9;22817:17;22808:6;22764:71;:::i;:::-;22845:72;22913:2;22902:9;22898:18;22889:6;22845:72;:::i;:::-;22927;22995:2;22984:9;22980:18;22971:6;22927:72;:::i;:::-;23046:9;23040:4;23036:20;23031:2;23020:9;23016:18;23009:48;23074:86;23155:4;23146:6;23138;23074:86;:::i;:::-;23066:94;;22507:660;;;;;;;;:::o;23173:148::-;23275:11;23312:3;23297:18;;23173:148;;;;:::o;23351:874::-;23454:3;23491:5;23485:12;23520:36;23546:9;23520:36;:::i;:::-;23572:89;23654:6;23649:3;23572:89;:::i;:::-;23565:96;;23692:1;23681:9;23677:17;23708:1;23703:166;;;;23883:1;23878:341;;;;23670:549;;23703:166;23787:4;23783:9;23772;23768:25;23763:3;23756:38;23849:6;23842:14;23835:22;23827:6;23823:35;23818:3;23814:45;23807:52;;23703:166;;23878:341;23945:38;23977:5;23945:38;:::i;:::-;24005:1;24019:154;24033:6;24030:1;24027:13;24019:154;;;24107:7;24101:14;24097:1;24092:3;24088:11;24081:35;24157:1;24148:7;24144:15;24133:26;;24055:4;24052:1;24048:12;24043:17;;24019:154;;;24202:6;24197:3;24193:16;24186:23;;23885:334;;23670:549;;23458:767;;23351:874;;;;:::o;24231:390::-;24337:3;24365:39;24398:5;24365:39;:::i;:::-;24420:89;24502:6;24497:3;24420:89;:::i;:::-;24413:96;;24518:65;24576:6;24571:3;24564:4;24557:5;24553:16;24518:65;:::i;:::-;24608:6;24603:3;24599:16;24592:23;;24341:280;24231:390;;;;:::o;24627:182::-;24795:7;24790:3;24783:20;24627:182;:::o;24815:693::-;25082:3;25104:92;25192:3;25183:6;25104:92;:::i;:::-;25097:99;;25213:95;25304:3;25295:6;25213:95;:::i;:::-;25206:102;;25318:137;25451:3;25318:137;:::i;:::-;25480:1;25475:3;25471:11;25464:18;;25499:3;25492:10;;24815:693;;;;;:::o;25514:102::-;25556:8;25603:5;25600:1;25596:13;25575:34;;25514:102;;;:::o;25622:848::-;25683:5;25690:4;25714:6;25705:15;;25738:5;25729:14;;25752:712;25773:1;25763:8;25760:15;25752:712;;;25868:4;25863:3;25859:14;25853:4;25850:24;25847:50;;;25877:18;;:::i;:::-;25847:50;25927:1;25917:8;25913:16;25910:451;;;26342:4;26335:5;26331:16;26322:25;;25910:451;26392:4;26386;26382:15;26374:23;;26422:32;26445:8;26422:32;:::i;:::-;26410:44;;25752:712;;;25622:848;;;;;;;:::o;26476:1073::-;26530:5;26721:8;26711:40;;26742:1;26733:10;;26744:5;;26711:40;26770:4;26760:36;;26787:1;26778:10;;26789:5;;26760:36;26856:4;26904:1;26899:27;;;;26940:1;26935:191;;;;26849:277;;26899:27;26917:1;26908:10;;26919:5;;;26935:191;26980:3;26970:8;26967:17;26964:43;;;26987:18;;:::i;:::-;26964:43;27036:8;27033:1;27029:16;27020:25;;27071:3;27064:5;27061:14;27058:40;;;27078:18;;:::i;:::-;27058:40;27111:5;;;26849:277;;27235:2;27225:8;27222:16;27216:3;27210:4;27207:13;27203:36;27185:2;27175:8;27172:16;27167:2;27161:4;27158:12;27154:35;27138:111;27135:246;;;27291:8;27285:4;27281:19;27272:28;;27326:3;27319:5;27316:14;27313:40;;;27333:18;;:::i;:::-;27313:40;27366:5;;27135:246;27406:42;27444:3;27434:8;27428:4;27425:1;27406:42;:::i;:::-;27391:57;;;;27480:4;27475:3;27471:14;27464:5;27461:25;27458:51;;;27489:18;;:::i;:::-;27458:51;27538:4;27531:5;27527:16;27518:25;;26476:1073;;;;;;:::o;27555:281::-;27613:5;27637:23;27655:4;27637:23;:::i;:::-;27629:31;;27681:25;27697:8;27681:25;:::i;:::-;27669:37;;27725:104;27762:66;27752:8;27746:4;27725:104;:::i;:::-;27716:113;;27555:281;;;;:::o;27842:180::-;27890:77;27887:1;27880:88;27987:4;27984:1;27977:15;28011:4;28008:1;28001:15;28028:185;28068:1;28085:20;28103:1;28085:20;:::i;:::-;28080:25;;28119:20;28137:1;28119:20;:::i;:::-;28114:25;;28158:1;28148:35;;28163:18;;:::i;:::-;28148:35;28205:1;28202;28198:9;28193:14;;28028:185;;;;:::o;28219:233::-;28258:3;28281:24;28299:5;28281:24;:::i;:::-;28272:33;;28327:66;28320:5;28317:77;28314:103;;28397:18;;:::i;:::-;28314:103;28444:1;28437:5;28433:13;28426:20;;28219:233;;;:::o;28458:79::-;28497:7;28526:5;28515:16;;28458:79;;;:::o;28543:157::-;28648:45;28668:24;28686:5;28668:24;:::i;:::-;28648:45;:::i;:::-;28643:3;28636:58;28543:157;;:::o;28706:94::-;28739:8;28787:5;28783:2;28779:14;28758:35;;28706:94;;;:::o;28806:::-;28845:7;28874:20;28888:5;28874:20;:::i;:::-;28863:31;;28806:94;;;:::o;28906:100::-;28945:7;28974:26;28994:5;28974:26;:::i;:::-;28963:37;;28906:100;;;:::o;29012:157::-;29117:45;29137:24;29155:5;29137:24;:::i;:::-;29117:45;:::i;:::-;29112:3;29105:58;29012:157;;:::o;29175:538::-;29343:3;29358:75;29429:3;29420:6;29358:75;:::i;:::-;29458:2;29453:3;29449:12;29442:19;;29471:75;29542:3;29533:6;29471:75;:::i;:::-;29571:2;29566:3;29562:12;29555:19;;29584:75;29655:3;29646:6;29584:75;:::i;:::-;29684:2;29679:3;29675:12;29668:19;;29704:3;29697:10;;29175:538;;;;;;:::o;29719:176::-;29751:1;29768:20;29786:1;29768:20;:::i;:::-;29763:25;;29802:20;29820:1;29802:20;:::i;:::-;29797:25;;29841:1;29831:35;;29846:18;;:::i;:::-;29831:35;29887:1;29884;29880:9;29875:14;;29719:176;;;;:::o
Swarm Source
ipfs://d1011558609581d912a32a772db73a63f7202c403ee76c83f7f858ebb0b92bc4
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.