ERC-721
Overview
Max Total Supply
895 FERALS
Holders
216
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 FERALSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Ferals
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-26 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } pragma solidity ^0.8.0; library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } pragma solidity ^0.8.0; library EnumerableSet { struct Set { // Storage of set values bytes32[] _values; mapping(bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; set._values[toDeleteIndex] = lastValue; set._indexes[lastValue] = valueIndex; } set._values.pop(); delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } struct Bytes32Set { Set _inner; } function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } struct AddressSet { Set _inner; } function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } struct UintSet { Set _inner; } function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } pragma solidity ^0.8.4; interface IERC721A { error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); error MintERC2309QuantityExceedsLimit(); error OwnershipNotInitializedForExtraData(); struct TokenOwnership { address addr; uint64 startTimestamp; bool burned; uint24 extraData; } function totalSupply() external view returns (uint256); function supportsInterface(bytes4 interfaceId) external view returns (bool); event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external payable; function safeTransferFrom( address from, address to, uint256 tokenId ) external payable; function transferFrom( address from, address to, uint256 tokenId ) external payable; function approve(address to, uint256 tokenId) external payable; function setApprovalForAll(address operator, bool _approved) external; function getApproved(uint256 tokenId) external view returns (address operator); function isApprovedForAll(address owner, address operator) external view returns (bool); function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); } pragma solidity ^0.8.4; interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } contract ERC721A is IERC721A { struct TokenApprovalRef { address value; } uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; uint256 private constant _BITPOS_NUMBER_MINTED = 64; uint256 private constant _BITPOS_NUMBER_BURNED = 128; uint256 private constant _BITPOS_AUX = 192; uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; uint256 private constant _BITPOS_START_TIMESTAMP = 160; uint256 private constant _BITMASK_BURNED = 1 << 224; uint256 private constant _BITPOS_NEXT_INITIALIZED = 225; uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225; uint256 private constant _BITPOS_EXTRA_DATA = 232; uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1; uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1; uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000; bytes32 private constant _TRANSFER_EVENT_SIGNATURE = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef; uint256 private _currentIndex; uint256 private _burnCounter; string private _name; string private _symbol; mapping(uint256 => uint256) private _packedOwnerships; mapping(address => uint256) private _packedAddressData; mapping(uint256 => TokenApprovalRef) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } function _startTokenId() internal view virtual returns (uint256) { return 0; } function _nextTokenId() internal view virtual returns (uint256) { return _currentIndex; } function totalSupply() public view virtual override returns (uint256) { unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } function _totalMinted() internal view virtual returns (uint256) { unchecked { return _currentIndex - _startTokenId(); } } function _totalBurned() internal view virtual returns (uint256) { return _burnCounter; } function balanceOf(address owner) public view virtual override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY; } function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY; } function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY; } function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> _BITPOS_AUX); } function _setAux(address owner, uint64 aux) internal virtual { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; // Cast `aux` with assembly to avoid redundant masking. assembly { auxCasted := aux } packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX); _packedAddressData[owner] = packed; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == 0x01ffc9a7 || interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } function _baseURI() internal view virtual returns (string memory) { return ''; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } function _initializeOwnershipAt(uint256 index) internal virtual { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; if (packed & _BITMASK_BURNED == 0) { while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP); ownership.burned = packed & _BITMASK_BURNED != 0; ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA); } function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) { assembly { // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean. owner := and(owner, _BITMASK_ADDRESS) // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`. result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags)) } } function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) { // For branchless setting of the `nextInitialized` flag. assembly { // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`. result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1)) } } function approve(address to, uint256 tokenId) public payable virtual override { address owner = ownerOf(tokenId); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId].value = to; emit Approval(owner, to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId].value; } function setApprovalForAll(address operator, bool approved) public virtual override { _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned. } function _isSenderApprovedOrOwner( address approvedAddress, address owner, address msgSender ) private pure returns (bool result) { assembly { owner := and(owner, _BITMASK_ADDRESS) msgSender := and(msgSender, _BITMASK_ADDRESS) result := or(eq(msgSender, owner), eq(msgSender, approvedAddress)) } } function _getApprovedSlotAndAddress(uint256 tokenId) private view returns (uint256 approvedAddressSlot, address approvedAddress) { TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId]; assembly { approvedAddressSlot := tokenApproval.slot approvedAddress := sload(approvedAddressSlot) } } function transferFrom( address from, address to, uint256 tokenId ) public payable virtual override { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); assembly { if approvedAddress { sstore(approvedAddressSlot, 0) } } unchecked { --_packedAddressData[from]; ++_packedAddressData[to]; _packedOwnerships[tokenId] = _packOwnershipData( to, _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked) ); if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; if (_packedOwnerships[nextTokenId] == 0) { if (nextTokenId != _currentIndex) { _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } function safeTransferFrom( address from, address to, uint256 tokenId ) public payable virtual override { safeTransferFrom(from, to, tokenId, ''); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public payable virtual override { transferFrom(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } function _mint(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); uint256 toMasked; uint256 end = startTokenId + quantity; assembly { toMasked := and(to, _BITMASK_ADDRESS) log4( 0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, startTokenId ) for { let tokenId := add(startTokenId, 1) } iszero(eq(tokenId, end)) { tokenId := add(tokenId, 1) } { log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId) } } if (toMasked == 0) revert MintToZeroAddress(); _currentIndex = end; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _mintERC2309(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to); _currentIndex = startTokenId + quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _safeMint( address to, uint256 quantity, bytes memory _data ) internal virtual { _mint(to, quantity); unchecked { if (to.code.length != 0) { uint256 end = _currentIndex; uint256 index = end - quantity; do { if (!_checkContractOnERC721Received(address(0), to, index++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (index < end); // Reentrancy protection. if (_currentIndex != end) revert(); } } } function _safeMint(address to, uint256 quantity) internal virtual { _safeMint(to, quantity, ''); } function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); if (approvalCheck) { if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); assembly { if approvedAddress { sstore(approvedAddressSlot, 0) } } unchecked { _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1; _packedOwnerships[tokenId] = _packOwnershipData( from, (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked) ); if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; if (_packedOwnerships[nextTokenId] == 0) { if (nextTokenId != _currentIndex) { _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); unchecked { _burnCounter++; } } function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual { uint256 packed = _packedOwnerships[index]; if (packed == 0) revert OwnershipNotInitializedForExtraData(); uint256 extraDataCasted; assembly { extraDataCasted := extraData } packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA); _packedOwnerships[index] = packed; } function _extraData( address from, address to, uint24 previousExtraData ) internal view virtual returns (uint24) {} function _nextExtraData( address from, address to, uint256 prevOwnershipPacked ) private view returns (uint256) { uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA); return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA; } function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } function _toString(uint256 value) internal pure virtual returns (string memory str) { assembly { let m := add(mload(0x40), 0xa0) mstore(0x40, m) str := sub(m, 0x20) mstore(str, 0) let end := str for { let temp := value } 1 {} { str := sub(str, 1) mstore8(str, add(48, mod(temp, 10))) temp := div(temp, 10) if iszero(temp) { break } } let length := sub(end, str) str := sub(str, 0x20) mstore(str, length) } } } pragma solidity ^0.8.13; contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry constant operatorFilterRegistry = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { if (address(operatorFilterRegistry).code.length > 0) { if (subscribe) { operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { operatorFilterRegistry.register(address(this)); } } } } modifier onlyAllowedOperator() virtual { if (address(operatorFilterRegistry).code.length > 0) { if (!operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)) { revert OperatorNotAllowed(msg.sender); } } _; } } pragma solidity ^0.8.13; contract DefaultOperatorFilterer is OperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} } pragma solidity ^0.8.13; interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries(address registrant, address registrantToCopy) external; function updateOperator(address registrant, address operator, bool filtered) external; function updateOperators(address registrant, address[] calldata operators, bool filtered) external; function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } pragma solidity ^0.8.4; interface IERC721ABurnable is IERC721A { function burn(uint256 tokenId) external; } pragma solidity ^0.8.4; abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable { function burn(uint256 tokenId) public virtual override { _burn(tokenId, true); } } pragma solidity ^0.8.16; contract Ferals is Ownable, ERC721A, ReentrancyGuard, ERC721ABurnable, DefaultOperatorFilterer{ string public CONTRACT_URI = ""; mapping(address => uint) public userHasMinted; bool public REVEALED; string public UNREVEALED_URI = ""; string public BASE_URI = ""; bool public isPublicMintEnabled = false; uint public COLLECTION_SIZE = 4444; uint public MINT_PRICE = 0.0022 ether; uint public MAX_BATCH_SIZE = 25; uint public SUPPLY_PER_WALLET = 150; uint public FREE_SUPPLY_PER_WALLET = 2; constructor() ERC721A("FERALS", "FERALS") {} function MintVip(uint256 quantity, address receiver) public onlyOwner { require( totalSupply() + quantity <= COLLECTION_SIZE, "No more in stock!" ); _safeMint(receiver, quantity); } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function getPrice(uint quantity) public view returns(uint){ uint price; uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender]; if (quantity >= free) { price = (MINT_PRICE) * (quantity - free); } else { price = 0; } return price; } function mint(uint quantity) external payable callerIsUser nonReentrant { uint price; uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender]; if (quantity >= free) { price = (MINT_PRICE) * (quantity - free); userHasMinted[msg.sender] = userHasMinted[msg.sender] + free; } else { price = 0; userHasMinted[msg.sender] = userHasMinted[msg.sender] + quantity; } require(isPublicMintEnabled, "Mint not ready yet!"); require(totalSupply() + quantity <= COLLECTION_SIZE, "No more left!"); require(balanceOf(msg.sender) + quantity <= SUPPLY_PER_WALLET, "Tried to mint over over limit"); require(quantity <= MAX_BATCH_SIZE, "Tried to mint over limit, retry with reduced quantity"); require(msg.value >= price, "Must send more eth!"); _safeMint(msg.sender, quantity); if (msg.value > price) { payable(msg.sender).transfer(msg.value - price); } } function setPublicMintEnabled() public onlyOwner { isPublicMintEnabled = !isPublicMintEnabled; } function withdrawFunds() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function CollectionUrI(bool _revealed, string memory _baseURI) public onlyOwner { BASE_URI = _baseURI; REVEALED = _revealed; } function contractURI() public view returns (string memory) { return CONTRACT_URI; } function setContract(string memory _contractURI) public onlyOwner { CONTRACT_URI = _contractURI; } function ChangeCollectionSupply(uint256 _new) external onlyOwner { COLLECTION_SIZE = _new; } function ChangePrice(uint256 _newPrice) external onlyOwner { MINT_PRICE = _newPrice; } function ChangeFreePerWallet(uint256 _new) external onlyOwner { FREE_SUPPLY_PER_WALLET = _new; } function ChangeSupplyPerWallet(uint256 _new) external onlyOwner { SUPPLY_PER_WALLET = _new; } function SetMaxBatchSize(uint256 _new) external onlyOwner { MAX_BATCH_SIZE = _new; } function transferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator { super.transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public payable override (ERC721A, IERC721A) onlyAllowedOperator { super.safeTransferFrom(from, to, tokenId, data); } function tokenURI(uint256 _tokenId) public view override (ERC721A, IERC721A) returns (string memory) { if (REVEALED) { return string(abi.encodePacked(BASE_URI, Strings.toString(_tokenId))); } else { return UNREVEALED_URI; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BASE_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLECTION_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeCollectionSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeFreePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"ChangePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeSupplyPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"CollectionUrI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FREE_SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BATCH_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"MintVip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"REVEALED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetMaxBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UNREVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","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":"_contractURI","type":"string"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userHasMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052805f815250600a9081620000239190620006ad565b5060405180602001604052805f815250600d9081620000439190620006ad565b5060405180602001604052805f815250600e9081620000639190620006ad565b505f600f5f6101000a81548160ff02191690831515021790555061115c6010556607d0e36a818000601155601960125560966013556002601455348015620000a9575f80fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600681526020017f464552414c5300000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f464552414c5300000000000000000000000000000000000000000000000000008152506200014d620001416200037d60201b60201c565b6200038460201b60201c565b81600390816200015e9190620006ad565b508060049081620001709190620006ad565b50620001816200044560201b60201c565b600181905550505060016009819055505f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156200037557801562000246576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b815260040162000211929190620007d4565b5f604051808303815f87803b15801562000229575f80fd5b505af11580156200023c573d5f803e3d5ffd5b5050505062000374565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620002fa576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620002c5929190620007d4565b5f604051808303815f87803b158015620002dd575f80fd5b505af1158015620002f0573d5f803e3d5ffd5b5050505062000373565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b8152600401620003439190620007ff565b5f604051808303815f87803b1580156200035b575f80fd5b505af11580156200036e573d5f803e3d5ffd5b505050505b5b5b50506200081a565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f90565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620004c557607f821691505b602082108103620004db57620004da62000480565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200053f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000502565b6200054b868362000502565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620005956200058f620005898462000563565b6200056c565b62000563565b9050919050565b5f819050919050565b620005b08362000575565b620005c8620005bf826200059c565b8484546200050e565b825550505050565b5f90565b620005de620005d0565b620005eb818484620005a5565b505050565b5b818110156200061257620006065f82620005d4565b600181019050620005f1565b5050565b601f82111562000661576200062b81620004e1565b6200063684620004f3565b8101602085101562000646578190505b6200065e6200065585620004f3565b830182620005f0565b50505b505050565b5f82821c905092915050565b5f620006835f198460080262000666565b1980831691505092915050565b5f6200069d838362000672565b9150826002028217905092915050565b620006b88262000449565b67ffffffffffffffff811115620006d457620006d362000453565b5b620006e08254620004ad565b620006ed82828562000616565b5f60209050601f83116001811462000723575f84156200070e578287015190505b6200071a858262000690565b86555062000789565b601f1984166200073386620004e1565b5f5b828110156200075c5784890151825560018201915060208501945060208101905062000735565b868310156200077c578489015162000778601f89168262000672565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620007bc8262000791565b9050919050565b620007ce81620007b0565b82525050565b5f604082019050620007e95f830185620007c3565b620007f86020830184620007c3565b9392505050565b5f602082019050620008145f830184620007c3565b92915050565b613e8680620008285f395ff3fe608060405260043610610250575f3560e01c806375b6447111610138578063c144a4ba116100b5578063e757223011610079578063e757223014610816578063e8a3d48514610852578063e985e9c51461087c578063f2fde38b146108b8578063f814943d146108e0578063fb92488b1461090857610250565b8063c144a4ba14610734578063c87b56dd1461075c578063cfdbf25414610798578063d8258d95146107c2578063dbddb26a146107ec57610250565b8063a22cb465116100fc578063a22cb46514610686578063a4cdd719146106ae578063a76a9587146106c4578063b88d4fde146106ee578063c002d23d1461070a57610250565b806375b64471146105c65780638da5cb5b146105ee57806395d89b4114610618578063a0712d6814610642578063a1db246e1461065e57610250565b806324600fc3116101d157806356b4f6731161019557806356b4f673146104bc5780635fe75587146104e65780636352211e1461051057806370a082311461054c578063715018a6146105885780637304ff6c1461059e57610250565b806324600fc31461041057806342842e0e1461042657806342966c6814610442578063507862d11461046a57806356b48d631461049457610250565b80631422374f116102185780631422374f1461033c57806318160ddd146103665780631d188d7a146103905780631d985778146103b857806323b872dd146103f457610250565b80630116bc2d1461025457806301ffc9a71461027e57806306fdde03146102ba578063081812fc146102e4578063095ea7b314610320575b5f80fd5b34801561025f575f80fd5b50610268610930565b6040516102759190612bab565b60405180910390f35b348015610289575f80fd5b506102a4600480360381019061029f9190612c2a565b610942565b6040516102b19190612bab565b60405180910390f35b3480156102c5575f80fd5b506102ce6109d3565b6040516102db9190612cdf565b60405180910390f35b3480156102ef575f80fd5b5061030a60048036038101906103059190612d32565b610a63565b6040516103179190612d9c565b60405180910390f35b61033a60048036038101906103359190612ddf565b610add565b005b348015610347575f80fd5b50610350610c1c565b60405161035d9190612e2c565b60405180910390f35b348015610371575f80fd5b5061037a610c22565b6040516103879190612e2c565b60405180910390f35b34801561039b575f80fd5b506103b660048036038101906103b19190612e45565b610c38565b005b3480156103c3575f80fd5b506103de60048036038101906103d99190612e83565b610ca5565b6040516103eb9190612e2c565b60405180910390f35b61040e60048036038101906104099190612eae565b610cba565b005b34801561041b575f80fd5b50610424610dc2565b005b610440600480360381019061043b9190612eae565b610eca565b005b34801561044d575f80fd5b5061046860048036038101906104639190612d32565b610fd2565b005b348015610475575f80fd5b5061047e610fe0565b60405161048b9190612cdf565b60405180910390f35b34801561049f575f80fd5b506104ba60048036038101906104b5919061302a565b61106c565b005b3480156104c7575f80fd5b506104d0611087565b6040516104dd9190612cdf565b60405180910390f35b3480156104f1575f80fd5b506104fa611113565b6040516105079190612e2c565b60405180910390f35b34801561051b575f80fd5b5061053660048036038101906105319190612d32565b611119565b6040516105439190612d9c565b60405180910390f35b348015610557575f80fd5b50610572600480360381019061056d9190612e83565b61112a565b60405161057f9190612e2c565b60405180910390f35b348015610593575f80fd5b5061059c6111df565b005b3480156105a9575f80fd5b506105c460048036038101906105bf919061309b565b6111f2565b005b3480156105d1575f80fd5b506105ec60048036038101906105e79190612d32565b611227565b005b3480156105f9575f80fd5b50610602611239565b60405161060f9190612d9c565b60405180910390f35b348015610623575f80fd5b5061062c611260565b6040516106399190612cdf565b60405180910390f35b61065c60048036038101906106579190612d32565b6112f0565b005b348015610669575f80fd5b50610684600480360381019061067f9190612d32565b61172d565b005b348015610691575f80fd5b506106ac60048036038101906106a791906130f5565b61173f565b005b3480156106b9575f80fd5b506106c2611845565b005b3480156106cf575f80fd5b506106d8611877565b6040516106e59190612bab565b60405180910390f35b610708600480360381019061070391906131d1565b611889565b005b348015610715575f80fd5b5061071e611993565b60405161072b9190612e2c565b60405180910390f35b34801561073f575f80fd5b5061075a60048036038101906107559190612d32565b611999565b005b348015610767575f80fd5b50610782600480360381019061077d9190612d32565b6119ab565b60405161078f9190612cdf565b60405180910390f35b3480156107a3575f80fd5b506107ac611a84565b6040516107b99190612e2c565b60405180910390f35b3480156107cd575f80fd5b506107d6611a8a565b6040516107e39190612e2c565b60405180910390f35b3480156107f7575f80fd5b50610800611a90565b60405161080d9190612cdf565b60405180910390f35b348015610821575f80fd5b5061083c60048036038101906108379190612d32565b611b1c565b6040516108499190612e2c565b60405180910390f35b34801561085d575f80fd5b50610866611ba1565b6040516108739190612cdf565b60405180910390f35b348015610887575f80fd5b506108a2600480360381019061089d9190613251565b611c31565b6040516108af9190612bab565b60405180910390f35b3480156108c3575f80fd5b506108de60048036038101906108d99190612e83565b611cbf565b005b3480156108eb575f80fd5b5061090660048036038101906109019190612d32565b611d41565b005b348015610913575f80fd5b5061092e60048036038101906109299190612d32565b611d53565b005b600f5f9054906101000a900460ff1681565b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099c57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109cc5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600380546109e2906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e906132bc565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b5f610a6d82611d65565b610aa3576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610ae782611119565b90508073ffffffffffffffffffffffffffffffffffffffff16610b08611dc0565b73ffffffffffffffffffffffffffffffffffffffff1614610b6b57610b3481610b2f611dc0565b611c31565b610b6a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260075f8481526020019081526020015f205f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b5f610c2b611dc7565b6002546001540303905090565b610c40611dcb565b60105482610c4c610c22565b610c569190613319565b1115610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90613396565b60405180910390fd5b610ca18183611e49565b5050565b600b602052805f5260405f205f915090505481565b5f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610db2576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610d309291906133b4565b6020604051808303815f875af1158015610d4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d7091906133ef565b610db157336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610da89190612d9c565b60405180910390fd5b5b610dbd838383611e66565b505050565b610dca611dcb565b600260095403610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0690613464565b60405180910390fd5b60026009819055505f3373ffffffffffffffffffffffffffffffffffffffff1647604051610e3c906134af565b5f6040518083038185875af1925050503d805f8114610e76576040519150601f19603f3d011682016040523d82523d5f602084013e610e7b565b606091505b5050905080610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb69061350d565b60405180910390fd5b506001600981905550565b5f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fc2576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f409291906133b4565b6020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8091906133ef565b610fc157336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fb89190612d9c565b60405180910390fd5b5b610fcd838383612175565b505050565b610fdd816001612194565b50565b600d8054610fed906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611019906132bc565b80156110645780601f1061103b57610100808354040283529160200191611064565b820191905f5260205f20905b81548152906001019060200180831161104757829003601f168201915b505050505081565b611074611dcb565b80600a908161108391906136c8565b5050565b600a8054611094906132bc565b80601f01602080910402602001604051908101604052809291908181526020018280546110c0906132bc565b801561110b5780601f106110e25761010080835404028352916020019161110b565b820191905f5260205f20905b8154815290600101906020018083116110ee57829003601f168201915b505050505081565b60135481565b5f611123826123d1565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611190576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b6111e7611dcb565b6111f05f612495565b565b6111fa611dcb565b80600e908161120991906136c8565b5081600c5f6101000a81548160ff0219169083151502179055505050565b61122f611dcb565b8060108190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461126f906132bc565b80601f016020809104026020016040519081016040528092919081815260200182805461129b906132bc565b80156112e65780601f106112bd576101008083540402835291602001916112e6565b820191905f5260205f20905b8154815290600101906020018083116112c957829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461135e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611355906137e1565b60405180910390fd5b6002600954036113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90613464565b60405180910390fd5b60026009819055505f80600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546014546113f891906137ff565b90508083106114ab57808361140d91906137ff565b60115461141a9190613832565b915080600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114659190613319565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611539565b5f915082600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114f79190613319565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600f5f9054906101000a900460ff16611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e906138bd565b60405180910390fd5b60105483611593610c22565b61159d9190613319565b11156115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d590613925565b60405180910390fd5b601354836115eb3361112a565b6115f59190613319565b1115611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d9061398d565b60405180910390fd5b60125483111561167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290613a1b565b60405180910390fd5b813410156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590613a83565b60405180910390fd5b6116c83384611e49565b81341115611720573373ffffffffffffffffffffffffffffffffffffffff166108fc83346116f691906137ff565b90811502906040515f60405180830381858888f1935050505015801561171e573d5f803e3d5ffd5b505b5050600160098190555050565b611735611dcb565b8060148190555050565b8060085f61174b611dc0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117f4611dc0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118399190612bab565b60405180910390a35050565b61184d611dcb565b600f5f9054906101000a900460ff1615600f5f6101000a81548160ff021916908315150217905550565b600c5f9054906101000a900460ff1681565b5f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611981576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016118ff9291906133b4565b6020604051808303815f875af115801561191b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193f91906133ef565b61198057336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119779190612d9c565b60405180910390fd5b5b61198d84848484612556565b50505050565b60115481565b6119a1611dcb565b8060128190555050565b6060600c5f9054906101000a900460ff16156119f357600e6119cc836125c8565b6040516020016119dd929190613b5b565b6040516020818303038152906040529050611a7f565b600d8054611a00906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2c906132bc565b8015611a775780601f10611a4e57610100808354040283529160200191611a77565b820191905f5260205f20905b815481529060010190602001808311611a5a57829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611a9d906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac9906132bc565b8015611b145780601f10611aeb57610100808354040283529160200191611b14565b820191905f5260205f20905b815481529060010190602001808311611af757829003601f168201915b505050505081565b5f805f600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054601454611b6a91906137ff565b9050808410611b93578084611b7f91906137ff565b601154611b8c9190613832565b9150611b97565b5f91505b8192505050919050565b6060600a8054611bb0906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611bdc906132bc565b8015611c275780601f10611bfe57610100808354040283529160200191611c27565b820191905f5260205f20905b815481529060010190602001808311611c0a57829003601f168201915b5050505050905090565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611cc7611dcb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90613bee565b60405180910390fd5b611d3e81612495565b50565b611d49611dcb565b8060138190555050565b611d5b611dcb565b8060118190555050565b5f81611d6f611dc7565b11158015611d7e575060015482105b8015611db957505f7c010000000000000000000000000000000000000000000000000000000060055f8581526020019081526020015f205416145b9050919050565b5f33905090565b5f90565b611dd3612721565b73ffffffffffffffffffffffffffffffffffffffff16611df1611239565b73ffffffffffffffffffffffffffffffffffffffff1614611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e90613c56565b60405180910390fd5b565b611e62828260405180602001604052805f815250612728565b5050565b5f611e70826123d1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ed7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611ee2846127c1565b91509150611ef88187611ef3611dc0565b6127e4565b611f4457611f0d86611f08611dc0565b611c31565b611f43576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611fa9576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fb68686866001612827565b8015611fc0575f82555b60065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600101919050819055506120888561206488888761282d565b7c020000000000000000000000000000000000000000000000000000000017612854565b60055f8681526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000841603612105575f6001850190505f60055f8381526020019081526020015f205403612103576001548114612102578360055f8381526020019081526020015f20819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461216d868686600161287e565b505050505050565b61218f83838360405180602001604052805f815250611889565b505050565b5f61219e836123d1565b90505f8190505f806121af866127c1565b915091508415612218576121cb81846121c6611dc0565b6127e4565b612217576121e0836121db611dc0565b611c31565b612216576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b612225835f886001612827565b801561222f575f82555b600160806001901b0360065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055506122d383612290855f8861282d565b7c02000000000000000000000000000000000000000000000000000000007c01000000000000000000000000000000000000000000000000000000001717612854565b60055f8881526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000851603612350575f6001870190505f60055f8381526020019081526020015f20540361234e57600154811461234d578460055f8381526020019081526020015f20819055505b5b505b855f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123b8835f88600161287e565b60025f8154809291906001019190505550505050505050565b5f80829050806123df611dc7565b1161245e5760015481101561245d575f60055f8381526020019081526020015f205490505f7c010000000000000000000000000000000000000000000000000000000082160361245b575b5f81036124515760055f836001900393508381526020019081526020015f2054905061242a565b8092505050612490565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612561848484610cba565b5f8373ffffffffffffffffffffffffffffffffffffffff163b146125c25761258b84848484612884565b6125c1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60605f820361260e576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061271c565b5f8290505f5b5f821461263d57808061262690613c74565b915050600a826126369190613ce8565b9150612614565b5f8167ffffffffffffffff81111561265857612657612f06565b5b6040519080825280601f01601f19166020018201604052801561268a5781602001600182028036833780820191505090505b5090505b5f8514612715576001826126a291906137ff565b9150600a856126b19190613d18565b60306126bd9190613319565b60f81b8183815181106126d3576126d2613d48565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561270e9190613ce8565b945061268e565b8093505050505b919050565b5f33905090565b61273283836129cf565b5f8373ffffffffffffffffffffffffffffffffffffffff163b146127bc575f60015490505f83820390505b61276f5f868380600101945086612884565b6127a5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061275d5781600154146127b9575f80fd5b50505b505050565b5f805f60075f8581526020019081526020015f2090508092508254915050915091565b5f73ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b5f8060e883901c905060e8612843868684612b7a565b62ffffff16901b9150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128a9611dc0565b8786866040518563ffffffff1660e01b81526004016128cb9493929190613dc7565b6020604051808303815f875af192505050801561290657506040513d601f19601f820116820180604052508101906129039190613e25565b60015b61297c573d805f8114612934576040519150601f19603f3d011682016040523d82523d5f602084013e612939565b606091505b505f815103612974576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b5f60015490505f8203612a0e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a1a5f848385612827565b600160406001901b17820260065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550612a8c83612a7d5f865f61282d565b612a8685612b82565b17612854565b60055f8381526020019081526020015f20819055505f80838301905073ffffffffffffffffffffffffffffffffffffffff8516915082825f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4600183015b818114612b265780835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4600181019050612aed565b505f8203612b60576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612b755f84838561287e565b505050565b5f9392505050565b5f6001821460e11b9050919050565b5f8115159050919050565b612ba581612b91565b82525050565b5f602082019050612bbe5f830184612b9c565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c0981612bd5565b8114612c13575f80fd5b50565b5f81359050612c2481612c00565b92915050565b5f60208284031215612c3f57612c3e612bcd565b5b5f612c4c84828501612c16565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612c8c578082015181840152602081019050612c71565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612cb182612c55565b612cbb8185612c5f565b9350612ccb818560208601612c6f565b612cd481612c97565b840191505092915050565b5f6020820190508181035f830152612cf78184612ca7565b905092915050565b5f819050919050565b612d1181612cff565b8114612d1b575f80fd5b50565b5f81359050612d2c81612d08565b92915050565b5f60208284031215612d4757612d46612bcd565b5b5f612d5484828501612d1e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d8682612d5d565b9050919050565b612d9681612d7c565b82525050565b5f602082019050612daf5f830184612d8d565b92915050565b612dbe81612d7c565b8114612dc8575f80fd5b50565b5f81359050612dd981612db5565b92915050565b5f8060408385031215612df557612df4612bcd565b5b5f612e0285828601612dcb565b9250506020612e1385828601612d1e565b9150509250929050565b612e2681612cff565b82525050565b5f602082019050612e3f5f830184612e1d565b92915050565b5f8060408385031215612e5b57612e5a612bcd565b5b5f612e6885828601612d1e565b9250506020612e7985828601612dcb565b9150509250929050565b5f60208284031215612e9857612e97612bcd565b5b5f612ea584828501612dcb565b91505092915050565b5f805f60608486031215612ec557612ec4612bcd565b5b5f612ed286828701612dcb565b9350506020612ee386828701612dcb565b9250506040612ef486828701612d1e565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612f3c82612c97565b810181811067ffffffffffffffff82111715612f5b57612f5a612f06565b5b80604052505050565b5f612f6d612bc4565b9050612f798282612f33565b919050565b5f67ffffffffffffffff821115612f9857612f97612f06565b5b612fa182612c97565b9050602081019050919050565b828183375f83830152505050565b5f612fce612fc984612f7e565b612f64565b905082815260208101848484011115612fea57612fe9612f02565b5b612ff5848285612fae565b509392505050565b5f82601f83011261301157613010612efe565b5b8135613021848260208601612fbc565b91505092915050565b5f6020828403121561303f5761303e612bcd565b5b5f82013567ffffffffffffffff81111561305c5761305b612bd1565b5b61306884828501612ffd565b91505092915050565b61307a81612b91565b8114613084575f80fd5b50565b5f8135905061309581613071565b92915050565b5f80604083850312156130b1576130b0612bcd565b5b5f6130be85828601613087565b925050602083013567ffffffffffffffff8111156130df576130de612bd1565b5b6130eb85828601612ffd565b9150509250929050565b5f806040838503121561310b5761310a612bcd565b5b5f61311885828601612dcb565b925050602061312985828601613087565b9150509250929050565b5f67ffffffffffffffff82111561314d5761314c612f06565b5b61315682612c97565b9050602081019050919050565b5f61317561317084613133565b612f64565b90508281526020810184848401111561319157613190612f02565b5b61319c848285612fae565b509392505050565b5f82601f8301126131b8576131b7612efe565b5b81356131c8848260208601613163565b91505092915050565b5f805f80608085870312156131e9576131e8612bcd565b5b5f6131f687828801612dcb565b945050602061320787828801612dcb565b935050604061321887828801612d1e565b925050606085013567ffffffffffffffff81111561323957613238612bd1565b5b613245878288016131a4565b91505092959194509250565b5f806040838503121561326757613266612bcd565b5b5f61327485828601612dcb565b925050602061328585828601612dcb565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806132d357607f821691505b6020821081036132e6576132e561328f565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61332382612cff565b915061332e83612cff565b9250828201905080821115613346576133456132ec565b5b92915050565b7f4e6f206d6f726520696e2073746f636b210000000000000000000000000000005f82015250565b5f613380601183612c5f565b915061338b8261334c565b602082019050919050565b5f6020820190508181035f8301526133ad81613374565b9050919050565b5f6040820190506133c75f830185612d8d565b6133d46020830184612d8d565b9392505050565b5f815190506133e981613071565b92915050565b5f6020828403121561340457613403612bcd565b5b5f613411848285016133db565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f61344e601f83612c5f565b91506134598261341a565b602082019050919050565b5f6020820190508181035f83015261347b81613442565b9050919050565b5f81905092915050565b50565b5f61349a5f83613482565b91506134a58261348c565b5f82019050919050565b5f6134b98261348f565b9150819050919050565b7f5472616e73666572206661696c65642e000000000000000000000000000000005f82015250565b5f6134f7601083612c5f565b9150613502826134c3565b602082019050919050565b5f6020820190508181035f830152613524816134eb565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026135877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261354c565b613591868361354c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6135cc6135c76135c284612cff565b6135a9565b612cff565b9050919050565b5f819050919050565b6135e5836135b2565b6135f96135f1826135d3565b848454613558565b825550505050565b5f90565b61360d613601565b6136188184846135dc565b505050565b5b8181101561363b576136305f82613605565b60018101905061361e565b5050565b601f821115613680576136518161352b565b61365a8461353d565b81016020851015613669578190505b61367d6136758561353d565b83018261361d565b50505b505050565b5f82821c905092915050565b5f6136a05f1984600802613685565b1980831691505092915050565b5f6136b88383613691565b9150826002028217905092915050565b6136d182612c55565b67ffffffffffffffff8111156136ea576136e9612f06565b5b6136f482546132bc565b6136ff82828561363f565b5f60209050601f831160018114613730575f841561371e578287015190505b61372885826136ad565b86555061378f565b601f19841661373e8661352b565b5f5b8281101561376557848901518255600182019150602085019450602081019050613740565b86831015613782578489015161377e601f891682613691565b8355505b6001600288020188555050505b505050505050565b7f5468652063616c6c657220697320616e6f7468657220636f6e747261637400005f82015250565b5f6137cb601e83612c5f565b91506137d682613797565b602082019050919050565b5f6020820190508181035f8301526137f8816137bf565b9050919050565b5f61380982612cff565b915061381483612cff565b925082820390508181111561382c5761382b6132ec565b5b92915050565b5f61383c82612cff565b915061384783612cff565b925082820261385581612cff565b9150828204841483151761386c5761386b6132ec565b5b5092915050565b7f4d696e74206e6f742072656164792079657421000000000000000000000000005f82015250565b5f6138a7601383612c5f565b91506138b282613873565b602082019050919050565b5f6020820190508181035f8301526138d48161389b565b9050919050565b7f4e6f206d6f7265206c65667421000000000000000000000000000000000000005f82015250565b5f61390f600d83612c5f565b915061391a826138db565b602082019050919050565b5f6020820190508181035f83015261393c81613903565b9050919050565b7f547269656420746f206d696e74206f766572206f766572206c696d69740000005f82015250565b5f613977601d83612c5f565b915061398282613943565b602082019050919050565b5f6020820190508181035f8301526139a48161396b565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69742c207265747279205f8201527f776974682072656475636564207175616e746974790000000000000000000000602082015250565b5f613a05603583612c5f565b9150613a10826139ab565b604082019050919050565b5f6020820190508181035f830152613a32816139f9565b9050919050565b7f4d7573742073656e64206d6f72652065746821000000000000000000000000005f82015250565b5f613a6d601383612c5f565b9150613a7882613a39565b602082019050919050565b5f6020820190508181035f830152613a9a81613a61565b9050919050565b5f81905092915050565b5f8154613ab7816132bc565b613ac18186613aa1565b9450600182165f8114613adb5760018114613af057613b22565b60ff1983168652811515820286019350613b22565b613af98561352b565b5f5b83811015613b1a57815481890152600182019150602081019050613afb565b838801955050505b50505092915050565b5f613b3582612c55565b613b3f8185613aa1565b9350613b4f818560208601612c6f565b80840191505092915050565b5f613b668285613aab565b9150613b728284613b2b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613bd8602683612c5f565b9150613be382613b7e565b604082019050919050565b5f6020820190508181035f830152613c0581613bcc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c40602083612c5f565b9150613c4b82613c0c565b602082019050919050565b5f6020820190508181035f830152613c6d81613c34565b9050919050565b5f613c7e82612cff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cb057613caf6132ec565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cf282612cff565b9150613cfd83612cff565b925082613d0d57613d0c613cbb565b5b828204905092915050565b5f613d2282612cff565b9150613d2d83612cff565b925082613d3d57613d3c613cbb565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f613d9982613d75565b613da38185613d7f565b9350613db3818560208601612c6f565b613dbc81612c97565b840191505092915050565b5f608082019050613dda5f830187612d8d565b613de76020830186612d8d565b613df46040830185612e1d565b8181036060830152613e068184613d8f565b905095945050505050565b5f81519050613e1f81612c00565b92915050565b5f60208284031215613e3a57613e39612bcd565b5b5f613e4784828501613e11565b9150509291505056fea26469706673582212200067d68c7211a260bc68a675dabb6ef5fb4535c374e4d2d7c30472605fddb61964736f6c63430008150033
Deployed Bytecode
0x608060405260043610610250575f3560e01c806375b6447111610138578063c144a4ba116100b5578063e757223011610079578063e757223014610816578063e8a3d48514610852578063e985e9c51461087c578063f2fde38b146108b8578063f814943d146108e0578063fb92488b1461090857610250565b8063c144a4ba14610734578063c87b56dd1461075c578063cfdbf25414610798578063d8258d95146107c2578063dbddb26a146107ec57610250565b8063a22cb465116100fc578063a22cb46514610686578063a4cdd719146106ae578063a76a9587146106c4578063b88d4fde146106ee578063c002d23d1461070a57610250565b806375b64471146105c65780638da5cb5b146105ee57806395d89b4114610618578063a0712d6814610642578063a1db246e1461065e57610250565b806324600fc3116101d157806356b4f6731161019557806356b4f673146104bc5780635fe75587146104e65780636352211e1461051057806370a082311461054c578063715018a6146105885780637304ff6c1461059e57610250565b806324600fc31461041057806342842e0e1461042657806342966c6814610442578063507862d11461046a57806356b48d631461049457610250565b80631422374f116102185780631422374f1461033c57806318160ddd146103665780631d188d7a146103905780631d985778146103b857806323b872dd146103f457610250565b80630116bc2d1461025457806301ffc9a71461027e57806306fdde03146102ba578063081812fc146102e4578063095ea7b314610320575b5f80fd5b34801561025f575f80fd5b50610268610930565b6040516102759190612bab565b60405180910390f35b348015610289575f80fd5b506102a4600480360381019061029f9190612c2a565b610942565b6040516102b19190612bab565b60405180910390f35b3480156102c5575f80fd5b506102ce6109d3565b6040516102db9190612cdf565b60405180910390f35b3480156102ef575f80fd5b5061030a60048036038101906103059190612d32565b610a63565b6040516103179190612d9c565b60405180910390f35b61033a60048036038101906103359190612ddf565b610add565b005b348015610347575f80fd5b50610350610c1c565b60405161035d9190612e2c565b60405180910390f35b348015610371575f80fd5b5061037a610c22565b6040516103879190612e2c565b60405180910390f35b34801561039b575f80fd5b506103b660048036038101906103b19190612e45565b610c38565b005b3480156103c3575f80fd5b506103de60048036038101906103d99190612e83565b610ca5565b6040516103eb9190612e2c565b60405180910390f35b61040e60048036038101906104099190612eae565b610cba565b005b34801561041b575f80fd5b50610424610dc2565b005b610440600480360381019061043b9190612eae565b610eca565b005b34801561044d575f80fd5b5061046860048036038101906104639190612d32565b610fd2565b005b348015610475575f80fd5b5061047e610fe0565b60405161048b9190612cdf565b60405180910390f35b34801561049f575f80fd5b506104ba60048036038101906104b5919061302a565b61106c565b005b3480156104c7575f80fd5b506104d0611087565b6040516104dd9190612cdf565b60405180910390f35b3480156104f1575f80fd5b506104fa611113565b6040516105079190612e2c565b60405180910390f35b34801561051b575f80fd5b5061053660048036038101906105319190612d32565b611119565b6040516105439190612d9c565b60405180910390f35b348015610557575f80fd5b50610572600480360381019061056d9190612e83565b61112a565b60405161057f9190612e2c565b60405180910390f35b348015610593575f80fd5b5061059c6111df565b005b3480156105a9575f80fd5b506105c460048036038101906105bf919061309b565b6111f2565b005b3480156105d1575f80fd5b506105ec60048036038101906105e79190612d32565b611227565b005b3480156105f9575f80fd5b50610602611239565b60405161060f9190612d9c565b60405180910390f35b348015610623575f80fd5b5061062c611260565b6040516106399190612cdf565b60405180910390f35b61065c60048036038101906106579190612d32565b6112f0565b005b348015610669575f80fd5b50610684600480360381019061067f9190612d32565b61172d565b005b348015610691575f80fd5b506106ac60048036038101906106a791906130f5565b61173f565b005b3480156106b9575f80fd5b506106c2611845565b005b3480156106cf575f80fd5b506106d8611877565b6040516106e59190612bab565b60405180910390f35b610708600480360381019061070391906131d1565b611889565b005b348015610715575f80fd5b5061071e611993565b60405161072b9190612e2c565b60405180910390f35b34801561073f575f80fd5b5061075a60048036038101906107559190612d32565b611999565b005b348015610767575f80fd5b50610782600480360381019061077d9190612d32565b6119ab565b60405161078f9190612cdf565b60405180910390f35b3480156107a3575f80fd5b506107ac611a84565b6040516107b99190612e2c565b60405180910390f35b3480156107cd575f80fd5b506107d6611a8a565b6040516107e39190612e2c565b60405180910390f35b3480156107f7575f80fd5b50610800611a90565b60405161080d9190612cdf565b60405180910390f35b348015610821575f80fd5b5061083c60048036038101906108379190612d32565b611b1c565b6040516108499190612e2c565b60405180910390f35b34801561085d575f80fd5b50610866611ba1565b6040516108739190612cdf565b60405180910390f35b348015610887575f80fd5b506108a2600480360381019061089d9190613251565b611c31565b6040516108af9190612bab565b60405180910390f35b3480156108c3575f80fd5b506108de60048036038101906108d99190612e83565b611cbf565b005b3480156108eb575f80fd5b5061090660048036038101906109019190612d32565b611d41565b005b348015610913575f80fd5b5061092e60048036038101906109299190612d32565b611d53565b005b600f5f9054906101000a900460ff1681565b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099c57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109cc5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600380546109e2906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e906132bc565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b5f610a6d82611d65565b610aa3576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610ae782611119565b90508073ffffffffffffffffffffffffffffffffffffffff16610b08611dc0565b73ffffffffffffffffffffffffffffffffffffffff1614610b6b57610b3481610b2f611dc0565b611c31565b610b6a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260075f8481526020019081526020015f205f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b5f610c2b611dc7565b6002546001540303905090565b610c40611dcb565b60105482610c4c610c22565b610c569190613319565b1115610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90613396565b60405180910390fd5b610ca18183611e49565b5050565b600b602052805f5260405f205f915090505481565b5f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610db2576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610d309291906133b4565b6020604051808303815f875af1158015610d4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d7091906133ef565b610db157336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610da89190612d9c565b60405180910390fd5b5b610dbd838383611e66565b505050565b610dca611dcb565b600260095403610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0690613464565b60405180910390fd5b60026009819055505f3373ffffffffffffffffffffffffffffffffffffffff1647604051610e3c906134af565b5f6040518083038185875af1925050503d805f8114610e76576040519150601f19603f3d011682016040523d82523d5f602084013e610e7b565b606091505b5050905080610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb69061350d565b60405180910390fd5b506001600981905550565b5f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fc2576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f409291906133b4565b6020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8091906133ef565b610fc157336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fb89190612d9c565b60405180910390fd5b5b610fcd838383612175565b505050565b610fdd816001612194565b50565b600d8054610fed906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611019906132bc565b80156110645780601f1061103b57610100808354040283529160200191611064565b820191905f5260205f20905b81548152906001019060200180831161104757829003601f168201915b505050505081565b611074611dcb565b80600a908161108391906136c8565b5050565b600a8054611094906132bc565b80601f01602080910402602001604051908101604052809291908181526020018280546110c0906132bc565b801561110b5780601f106110e25761010080835404028352916020019161110b565b820191905f5260205f20905b8154815290600101906020018083116110ee57829003601f168201915b505050505081565b60135481565b5f611123826123d1565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611190576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b6111e7611dcb565b6111f05f612495565b565b6111fa611dcb565b80600e908161120991906136c8565b5081600c5f6101000a81548160ff0219169083151502179055505050565b61122f611dcb565b8060108190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461126f906132bc565b80601f016020809104026020016040519081016040528092919081815260200182805461129b906132bc565b80156112e65780601f106112bd576101008083540402835291602001916112e6565b820191905f5260205f20905b8154815290600101906020018083116112c957829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461135e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611355906137e1565b60405180910390fd5b6002600954036113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90613464565b60405180910390fd5b60026009819055505f80600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546014546113f891906137ff565b90508083106114ab57808361140d91906137ff565b60115461141a9190613832565b915080600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114659190613319565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611539565b5f915082600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114f79190613319565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600f5f9054906101000a900460ff16611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e906138bd565b60405180910390fd5b60105483611593610c22565b61159d9190613319565b11156115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d590613925565b60405180910390fd5b601354836115eb3361112a565b6115f59190613319565b1115611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d9061398d565b60405180910390fd5b60125483111561167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290613a1b565b60405180910390fd5b813410156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590613a83565b60405180910390fd5b6116c83384611e49565b81341115611720573373ffffffffffffffffffffffffffffffffffffffff166108fc83346116f691906137ff565b90811502906040515f60405180830381858888f1935050505015801561171e573d5f803e3d5ffd5b505b5050600160098190555050565b611735611dcb565b8060148190555050565b8060085f61174b611dc0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117f4611dc0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118399190612bab565b60405180910390a35050565b61184d611dcb565b600f5f9054906101000a900460ff1615600f5f6101000a81548160ff021916908315150217905550565b600c5f9054906101000a900460ff1681565b5f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611981576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016118ff9291906133b4565b6020604051808303815f875af115801561191b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193f91906133ef565b61198057336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119779190612d9c565b60405180910390fd5b5b61198d84848484612556565b50505050565b60115481565b6119a1611dcb565b8060128190555050565b6060600c5f9054906101000a900460ff16156119f357600e6119cc836125c8565b6040516020016119dd929190613b5b565b6040516020818303038152906040529050611a7f565b600d8054611a00906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2c906132bc565b8015611a775780601f10611a4e57610100808354040283529160200191611a77565b820191905f5260205f20905b815481529060010190602001808311611a5a57829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611a9d906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac9906132bc565b8015611b145780601f10611aeb57610100808354040283529160200191611b14565b820191905f5260205f20905b815481529060010190602001808311611af757829003601f168201915b505050505081565b5f805f600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054601454611b6a91906137ff565b9050808410611b93578084611b7f91906137ff565b601154611b8c9190613832565b9150611b97565b5f91505b8192505050919050565b6060600a8054611bb0906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611bdc906132bc565b8015611c275780601f10611bfe57610100808354040283529160200191611c27565b820191905f5260205f20905b815481529060010190602001808311611c0a57829003601f168201915b5050505050905090565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611cc7611dcb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90613bee565b60405180910390fd5b611d3e81612495565b50565b611d49611dcb565b8060138190555050565b611d5b611dcb565b8060118190555050565b5f81611d6f611dc7565b11158015611d7e575060015482105b8015611db957505f7c010000000000000000000000000000000000000000000000000000000060055f8581526020019081526020015f205416145b9050919050565b5f33905090565b5f90565b611dd3612721565b73ffffffffffffffffffffffffffffffffffffffff16611df1611239565b73ffffffffffffffffffffffffffffffffffffffff1614611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e90613c56565b60405180910390fd5b565b611e62828260405180602001604052805f815250612728565b5050565b5f611e70826123d1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ed7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611ee2846127c1565b91509150611ef88187611ef3611dc0565b6127e4565b611f4457611f0d86611f08611dc0565b611c31565b611f43576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611fa9576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fb68686866001612827565b8015611fc0575f82555b60065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600101919050819055506120888561206488888761282d565b7c020000000000000000000000000000000000000000000000000000000017612854565b60055f8681526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000841603612105575f6001850190505f60055f8381526020019081526020015f205403612103576001548114612102578360055f8381526020019081526020015f20819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461216d868686600161287e565b505050505050565b61218f83838360405180602001604052805f815250611889565b505050565b5f61219e836123d1565b90505f8190505f806121af866127c1565b915091508415612218576121cb81846121c6611dc0565b6127e4565b612217576121e0836121db611dc0565b611c31565b612216576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b612225835f886001612827565b801561222f575f82555b600160806001901b0360065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055506122d383612290855f8861282d565b7c02000000000000000000000000000000000000000000000000000000007c01000000000000000000000000000000000000000000000000000000001717612854565b60055f8881526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000851603612350575f6001870190505f60055f8381526020019081526020015f20540361234e57600154811461234d578460055f8381526020019081526020015f20819055505b5b505b855f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123b8835f88600161287e565b60025f8154809291906001019190505550505050505050565b5f80829050806123df611dc7565b1161245e5760015481101561245d575f60055f8381526020019081526020015f205490505f7c010000000000000000000000000000000000000000000000000000000082160361245b575b5f81036124515760055f836001900393508381526020019081526020015f2054905061242a565b8092505050612490565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612561848484610cba565b5f8373ffffffffffffffffffffffffffffffffffffffff163b146125c25761258b84848484612884565b6125c1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60605f820361260e576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061271c565b5f8290505f5b5f821461263d57808061262690613c74565b915050600a826126369190613ce8565b9150612614565b5f8167ffffffffffffffff81111561265857612657612f06565b5b6040519080825280601f01601f19166020018201604052801561268a5781602001600182028036833780820191505090505b5090505b5f8514612715576001826126a291906137ff565b9150600a856126b19190613d18565b60306126bd9190613319565b60f81b8183815181106126d3576126d2613d48565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561270e9190613ce8565b945061268e565b8093505050505b919050565b5f33905090565b61273283836129cf565b5f8373ffffffffffffffffffffffffffffffffffffffff163b146127bc575f60015490505f83820390505b61276f5f868380600101945086612884565b6127a5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061275d5781600154146127b9575f80fd5b50505b505050565b5f805f60075f8581526020019081526020015f2090508092508254915050915091565b5f73ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b5f8060e883901c905060e8612843868684612b7a565b62ffffff16901b9150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128a9611dc0565b8786866040518563ffffffff1660e01b81526004016128cb9493929190613dc7565b6020604051808303815f875af192505050801561290657506040513d601f19601f820116820180604052508101906129039190613e25565b60015b61297c573d805f8114612934576040519150601f19603f3d011682016040523d82523d5f602084013e612939565b606091505b505f815103612974576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b5f60015490505f8203612a0e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a1a5f848385612827565b600160406001901b17820260065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550612a8c83612a7d5f865f61282d565b612a8685612b82565b17612854565b60055f8381526020019081526020015f20819055505f80838301905073ffffffffffffffffffffffffffffffffffffffff8516915082825f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4600183015b818114612b265780835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4600181019050612aed565b505f8203612b60576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612b755f84838561287e565b505050565b5f9392505050565b5f6001821460e11b9050919050565b5f8115159050919050565b612ba581612b91565b82525050565b5f602082019050612bbe5f830184612b9c565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c0981612bd5565b8114612c13575f80fd5b50565b5f81359050612c2481612c00565b92915050565b5f60208284031215612c3f57612c3e612bcd565b5b5f612c4c84828501612c16565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612c8c578082015181840152602081019050612c71565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612cb182612c55565b612cbb8185612c5f565b9350612ccb818560208601612c6f565b612cd481612c97565b840191505092915050565b5f6020820190508181035f830152612cf78184612ca7565b905092915050565b5f819050919050565b612d1181612cff565b8114612d1b575f80fd5b50565b5f81359050612d2c81612d08565b92915050565b5f60208284031215612d4757612d46612bcd565b5b5f612d5484828501612d1e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d8682612d5d565b9050919050565b612d9681612d7c565b82525050565b5f602082019050612daf5f830184612d8d565b92915050565b612dbe81612d7c565b8114612dc8575f80fd5b50565b5f81359050612dd981612db5565b92915050565b5f8060408385031215612df557612df4612bcd565b5b5f612e0285828601612dcb565b9250506020612e1385828601612d1e565b9150509250929050565b612e2681612cff565b82525050565b5f602082019050612e3f5f830184612e1d565b92915050565b5f8060408385031215612e5b57612e5a612bcd565b5b5f612e6885828601612d1e565b9250506020612e7985828601612dcb565b9150509250929050565b5f60208284031215612e9857612e97612bcd565b5b5f612ea584828501612dcb565b91505092915050565b5f805f60608486031215612ec557612ec4612bcd565b5b5f612ed286828701612dcb565b9350506020612ee386828701612dcb565b9250506040612ef486828701612d1e565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612f3c82612c97565b810181811067ffffffffffffffff82111715612f5b57612f5a612f06565b5b80604052505050565b5f612f6d612bc4565b9050612f798282612f33565b919050565b5f67ffffffffffffffff821115612f9857612f97612f06565b5b612fa182612c97565b9050602081019050919050565b828183375f83830152505050565b5f612fce612fc984612f7e565b612f64565b905082815260208101848484011115612fea57612fe9612f02565b5b612ff5848285612fae565b509392505050565b5f82601f83011261301157613010612efe565b5b8135613021848260208601612fbc565b91505092915050565b5f6020828403121561303f5761303e612bcd565b5b5f82013567ffffffffffffffff81111561305c5761305b612bd1565b5b61306884828501612ffd565b91505092915050565b61307a81612b91565b8114613084575f80fd5b50565b5f8135905061309581613071565b92915050565b5f80604083850312156130b1576130b0612bcd565b5b5f6130be85828601613087565b925050602083013567ffffffffffffffff8111156130df576130de612bd1565b5b6130eb85828601612ffd565b9150509250929050565b5f806040838503121561310b5761310a612bcd565b5b5f61311885828601612dcb565b925050602061312985828601613087565b9150509250929050565b5f67ffffffffffffffff82111561314d5761314c612f06565b5b61315682612c97565b9050602081019050919050565b5f61317561317084613133565b612f64565b90508281526020810184848401111561319157613190612f02565b5b61319c848285612fae565b509392505050565b5f82601f8301126131b8576131b7612efe565b5b81356131c8848260208601613163565b91505092915050565b5f805f80608085870312156131e9576131e8612bcd565b5b5f6131f687828801612dcb565b945050602061320787828801612dcb565b935050604061321887828801612d1e565b925050606085013567ffffffffffffffff81111561323957613238612bd1565b5b613245878288016131a4565b91505092959194509250565b5f806040838503121561326757613266612bcd565b5b5f61327485828601612dcb565b925050602061328585828601612dcb565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806132d357607f821691505b6020821081036132e6576132e561328f565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61332382612cff565b915061332e83612cff565b9250828201905080821115613346576133456132ec565b5b92915050565b7f4e6f206d6f726520696e2073746f636b210000000000000000000000000000005f82015250565b5f613380601183612c5f565b915061338b8261334c565b602082019050919050565b5f6020820190508181035f8301526133ad81613374565b9050919050565b5f6040820190506133c75f830185612d8d565b6133d46020830184612d8d565b9392505050565b5f815190506133e981613071565b92915050565b5f6020828403121561340457613403612bcd565b5b5f613411848285016133db565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f61344e601f83612c5f565b91506134598261341a565b602082019050919050565b5f6020820190508181035f83015261347b81613442565b9050919050565b5f81905092915050565b50565b5f61349a5f83613482565b91506134a58261348c565b5f82019050919050565b5f6134b98261348f565b9150819050919050565b7f5472616e73666572206661696c65642e000000000000000000000000000000005f82015250565b5f6134f7601083612c5f565b9150613502826134c3565b602082019050919050565b5f6020820190508181035f830152613524816134eb565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026135877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261354c565b613591868361354c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6135cc6135c76135c284612cff565b6135a9565b612cff565b9050919050565b5f819050919050565b6135e5836135b2565b6135f96135f1826135d3565b848454613558565b825550505050565b5f90565b61360d613601565b6136188184846135dc565b505050565b5b8181101561363b576136305f82613605565b60018101905061361e565b5050565b601f821115613680576136518161352b565b61365a8461353d565b81016020851015613669578190505b61367d6136758561353d565b83018261361d565b50505b505050565b5f82821c905092915050565b5f6136a05f1984600802613685565b1980831691505092915050565b5f6136b88383613691565b9150826002028217905092915050565b6136d182612c55565b67ffffffffffffffff8111156136ea576136e9612f06565b5b6136f482546132bc565b6136ff82828561363f565b5f60209050601f831160018114613730575f841561371e578287015190505b61372885826136ad565b86555061378f565b601f19841661373e8661352b565b5f5b8281101561376557848901518255600182019150602085019450602081019050613740565b86831015613782578489015161377e601f891682613691565b8355505b6001600288020188555050505b505050505050565b7f5468652063616c6c657220697320616e6f7468657220636f6e747261637400005f82015250565b5f6137cb601e83612c5f565b91506137d682613797565b602082019050919050565b5f6020820190508181035f8301526137f8816137bf565b9050919050565b5f61380982612cff565b915061381483612cff565b925082820390508181111561382c5761382b6132ec565b5b92915050565b5f61383c82612cff565b915061384783612cff565b925082820261385581612cff565b9150828204841483151761386c5761386b6132ec565b5b5092915050565b7f4d696e74206e6f742072656164792079657421000000000000000000000000005f82015250565b5f6138a7601383612c5f565b91506138b282613873565b602082019050919050565b5f6020820190508181035f8301526138d48161389b565b9050919050565b7f4e6f206d6f7265206c65667421000000000000000000000000000000000000005f82015250565b5f61390f600d83612c5f565b915061391a826138db565b602082019050919050565b5f6020820190508181035f83015261393c81613903565b9050919050565b7f547269656420746f206d696e74206f766572206f766572206c696d69740000005f82015250565b5f613977601d83612c5f565b915061398282613943565b602082019050919050565b5f6020820190508181035f8301526139a48161396b565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69742c207265747279205f8201527f776974682072656475636564207175616e746974790000000000000000000000602082015250565b5f613a05603583612c5f565b9150613a10826139ab565b604082019050919050565b5f6020820190508181035f830152613a32816139f9565b9050919050565b7f4d7573742073656e64206d6f72652065746821000000000000000000000000005f82015250565b5f613a6d601383612c5f565b9150613a7882613a39565b602082019050919050565b5f6020820190508181035f830152613a9a81613a61565b9050919050565b5f81905092915050565b5f8154613ab7816132bc565b613ac18186613aa1565b9450600182165f8114613adb5760018114613af057613b22565b60ff1983168652811515820286019350613b22565b613af98561352b565b5f5b83811015613b1a57815481890152600182019150602081019050613afb565b838801955050505b50505092915050565b5f613b3582612c55565b613b3f8185613aa1565b9350613b4f818560208601612c6f565b80840191505092915050565b5f613b668285613aab565b9150613b728284613b2b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613bd8602683612c5f565b9150613be382613b7e565b604082019050919050565b5f6020820190508181035f830152613c0581613bcc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c40602083612c5f565b9150613c4b82613c0c565b602082019050919050565b5f6020820190508181035f830152613c6d81613c34565b9050919050565b5f613c7e82612cff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cb057613caf6132ec565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cf282612cff565b9150613cfd83612cff565b925082613d0d57613d0c613cbb565b5b828204905092915050565b5f613d2282612cff565b9150613d2d83612cff565b925082613d3d57613d3c613cbb565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f613d9982613d75565b613da38185613d7f565b9350613db3818560208601612c6f565b613dbc81612c97565b840191505092915050565b5f608082019050613dda5f830187612d8d565b613de76020830186612d8d565b613df46040830185612e1d565b8181036060830152613e068184613d8f565b905095945050505050565b5f81519050613e1f81612c00565b92915050565b5f60208284031215613e3a57613e39612bcd565b5b5f613e4784828501613e11565b9150509291505056fea26469706673582212200067d68c7211a260bc68a675dabb6ef5fb4535c374e4d2d7c30472605fddb61964736f6c63430008150033
Deployed Bytecode Sourcemap
34032:4620:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34300:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14527:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14779:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18355:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17939:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34493:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12890:180;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34588:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34163:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37654:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36512:191;;;;;;;;;;;;;:::i;:::-;;37847:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33903:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34234:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36973:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34129:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34455:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15427:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13355:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;885:103;;;;;;;;;;;;;:::i;:::-;;36711:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37093:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;650:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14887:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35306:1082;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37315:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18581:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36394:110;;;;;;;;;;;;;:::i;:::-;;34211:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38048:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34380:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37548:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38306:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34421:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34342:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34270:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34974:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36868:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18823:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;998:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37433:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37207:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34300:39;;;;;;;;;;;;;:::o;14527:244::-;14612:4;14666:10;14651:25;;:11;:25;;;;:68;;;;14709:10;14694:25;;:11;:25;;;;14651:68;:111;;;;14752:10;14737:25;;:11;:25;;;;14651:111;14631:131;;14527:244;;;:::o;14779:100::-;14833:13;14866:5;14859:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14779:100;:::o;18355:218::-;18431:7;18456:16;18464:7;18456;:16::i;:::-;18451:64;;18481:34;;;;;;;;;;;;;;18451:64;18535:15;:24;18551:7;18535:24;;;;;;;;;;;:30;;;;;;;;;;;;18528:37;;18355:218;;;:::o;17939:408::-;18028:13;18044:16;18052:7;18044;:16::i;:::-;18028:32;;18100:5;18077:28;;:19;:17;:19::i;:::-;:28;;;18073:175;;18125:44;18142:5;18149:19;:17;:19::i;:::-;18125:16;:44::i;:::-;18120:128;;18197:35;;;;;;;;;;;;;;18120:128;18073:175;18293:2;18260:15;:24;18276:7;18260:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;18331:7;18327:2;18311:28;;18320:5;18311:28;;;;;;;;;;;;18017:330;17939:408;;:::o;34493:38::-;;;;:::o;12890:180::-;12951:7;13036:15;:13;:15::i;:::-;13021:12;;13005:13;;:28;:46;12998:53;;12890:180;:::o;34588:249::-;609:13;:11;:13::i;:::-;34719:15:::1;;34707:8;34691:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;34669:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;34800:29;34810:8;34820;34800:9;:29::i;:::-;34588:249:::0;;:::o;34163:45::-;;;;;;;;;;;;;;;;;:::o;37654:185::-;31139:1;30350:42;31093:43;;;:47;31089:225;;;30350:42;31162:40;;;31211:4;31218:10;31162:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31157:146;;31276:10;31257:30;;;;;;;;;;;:::i;:::-;;;;;;;;31157:146;31089:225;37794:37:::1;37813:4;37819:2;37823:7;37794:18;:37::i;:::-;37654:185:::0;;;:::o;36512:191::-;609:13;:11;:13::i;:::-;1559:1:::1;1717:7;;:19:::0;1709:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1559:1;1785:7;:18;;;;36581:12:::2;36599:10;:15;;36622:21;36599:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36580:68;;;36667:7;36659:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;36569:134;1515:1:::1;1830:7;:22;;;;36512:191::o:0;37847:193::-;31139:1;30350:42;31093:43;;;:47;31089:225;;;30350:42;31162:40;;;31211:4;31218:10;31162:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31157:146;;31276:10;31257:30;;;;;;;;;;;:::i;:::-;;;;;;;;31157:146;31089:225;37991:41:::1;38014:4;38020:2;38024:7;37991:22;:41::i;:::-;37847:193:::0;;;:::o;33903:94::-;33969:20;33975:7;33984:4;33969:5;:20::i;:::-;33903:94;:::o;34234:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36973:112::-;609:13;:11;:13::i;:::-;37065:12:::1;37050;:27;;;;;;:::i;:::-;;36973:112:::0;:::o;34129:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34455:35::-;;;;:::o;15427:152::-;15499:7;15542:27;15561:7;15542:18;:27::i;:::-;15519:52;;15427:152;;;:::o;13355:233::-;13427:7;13468:1;13451:19;;:5;:19;;;13447:60;;13479:28;;;;;;;;;;;;;;13447:60;11163:13;13525:18;:25;13544:5;13525:25;;;;;;;;;;;;;;;;:55;13518:62;;13355:233;;;:::o;885:103::-;609:13;:11;:13::i;:::-;950:30:::1;977:1;950:18;:30::i;:::-;885:103::o:0;36711:149::-;609:13;:11;:13::i;:::-;36813:8:::1;36802;:19;;;;;;:::i;:::-;;36843:9;36832:8;;:20;;;;;;;;;;;;;;;;;;36711:149:::0;;:::o;37093:106::-;609:13;:11;:13::i;:::-;37187:4:::1;37169:15;:22;;;;37093:106:::0;:::o;650:87::-;696:7;723:6;;;;;;;;;;;716:13;;650:87;:::o;14887:104::-;14943:13;14976:7;14969:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14887:104;:::o;35306:1082::-;34901:10;34888:23;;:9;:23;;;34880:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1559:1:::1;1717:7;;:19:::0;1709:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1559:1;1785:7;:18;;;;35431:10:::2;35452:9:::0;35489:13:::2;:25;35503:10;35489:25;;;;;;;;;;;;;;;;35464:22;;:50;;;;:::i;:::-;35452:62;;35541:4;35529:8;:16;35525:285;;35597:4;35586:8;:15;;;;:::i;:::-;35571:10;;35570:32;;;;:::i;:::-;35562:40;;35673:4;35645:13;:25;35659:10;35645:25;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;35617:13;:25;35631:10;35617:25;;;;;;;;;;;;;;;:60;;;;35525:285;;;35718:1;35710:9;;35790:8;35762:13;:25;35776:10;35762:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;35734:13;:25;35748:10;35734:25;;;;;;;;;;;;;;;:64;;;;35525:285;35830:19;;;;;;;;;;;35822:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;35920:15;;35908:8;35892:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;35884:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36010:17;;35998:8;35974:21;35984:10;35974:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;35966:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36094:14;;36082:8;:26;;36074:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;36198:5;36185:9;:18;;36177:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;36240:31;36250:10;36262:8;36240:9;:31::i;:::-;36300:5;36288:9;:17;36284:97;;;36330:10;36322:28;;:47;36363:5;36351:9;:17;;;;:::i;:::-;36322:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;36284:97;35420:968;;1515:1:::1;1830:7;:22;;;;35306:1082:::0;:::o;37315:110::-;609:13;:11;:13::i;:::-;37413:4:::1;37388:22;:29;;;;37315:110:::0;:::o;18581:234::-;18728:8;18676:18;:39;18695:19;:17;:19::i;:::-;18676:39;;;;;;;;;;;;;;;:49;18716:8;18676:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;18788:8;18752:55;;18767:19;:17;:19::i;:::-;18752:55;;;18798:8;18752:55;;;;;;:::i;:::-;;;;;;;;18581:234;;:::o;36394:110::-;609:13;:11;:13::i;:::-;36477:19:::1;;;;;;;;;;;36476:20;36454:19;;:42;;;;;;;;;;;;;;;;;;36394:110::o:0;34211:20::-;;;;;;;;;;;;;:::o;38048:250::-;31139:1;30350:42;31093:43;;;:47;31089:225;;;30350:42;31162:40;;;31211:4;31218:10;31162:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31157:146;;31276:10;31257:30;;;;;;;;;;;:::i;:::-;;;;;;;;31157:146;31089:225;38243:47:::1;38266:4;38272:2;38276:7;38285:4;38243:22;:47::i;:::-;38048:250:::0;;;;:::o;34380:37::-;;;;:::o;37548:98::-;609:13;:11;:13::i;:::-;37634:4:::1;37617:14;:21;;;;37548:98:::0;:::o;38306:341::-;38428:13;38463:8;;;;;;;;;;;38459:181;;;38536:8;38546:26;38563:8;38546:16;:26::i;:::-;38519:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38488:86;;;;38459:181;38614:14;38607:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38306:341;;;;:::o;34421:31::-;;;;:::o;34342:34::-;;;;:::o;34270:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34974:324::-;35027:4;35043:10;35064:9;35101:13;:25;35115:10;35101:25;;;;;;;;;;;;;;;;35076:22;;:50;;;;:::i;:::-;35064:62;;35153:4;35141:8;:16;35137:131;;35209:4;35198:8;:15;;;;:::i;:::-;35183:10;;35182:32;;;;:::i;:::-;35174:40;;35137:131;;;35255:1;35247:9;;35137:131;35285:5;35278:12;;;;34974:324;;;:::o;36868:97::-;36912:13;36945:12;36938:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36868:97;:::o;18823:164::-;18920:4;18944:18;:25;18963:5;18944:25;;;;;;;;;;;;;;;:35;18970:8;18944:35;;;;;;;;;;;;;;;;;;;;;;;;;18937:42;;18823:164;;;;:::o;998:201::-;609:13;:11;:13::i;:::-;1107:1:::1;1087:22;;:8;:22;;::::0;1079:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1163:28;1182:8;1163:18;:28::i;:::-;998:201:::0;:::o;37433:107::-;609:13;:11;:13::i;:::-;37528:4:::1;37508:17;:24;;;;37433:107:::0;:::o;37207:100::-;609:13;:11;:13::i;:::-;37290:9:::1;37277:10;:22;;;;37207:100:::0;:::o;18995:282::-;19060:4;19116:7;19097:15;:13;:15::i;:::-;:26;;:66;;;;;19150:13;;19140:7;:23;19097:66;:153;;;;;19249:1;11537:8;19201:17;:26;19219:7;19201:26;;;;;;;;;;;;:44;:49;19097:153;19077:173;;18995:282;;;:::o;29375:105::-;29435:7;29462:10;29455:17;;29375:105;:::o;12679:92::-;12735:7;12679:92;:::o;745:132::-;820:12;:10;:12::i;:::-;809:23;;:7;:5;:7::i;:::-;:23;;;801:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;745:132::o;26528:112::-;26605:27;26615:2;26619:8;26605:27;;;;;;;;;;;;:9;:27::i;:::-;26528:112;;:::o;20090:1651::-;20232:27;20262;20281:7;20262:18;:27::i;:::-;20232:57;;20347:4;20306:45;;20322:19;20306:45;;;20302:86;;20360:28;;;;;;;;;;;;;;20302:86;20402:27;20431:23;20458:35;20485:7;20458:26;:35::i;:::-;20401:92;;;;20511:68;20536:15;20553:4;20559:19;:17;:19::i;:::-;20511:24;:68::i;:::-;20506:180;;20599:43;20616:4;20622:19;:17;:19::i;:::-;20599:16;:43::i;:::-;20594:92;;20651:35;;;;;;;;;;;;;;20594:92;20506:180;20717:1;20703:16;;:2;:16;;;20699:52;;20728:23;;;;;;;;;;;;;;20699:52;20764:43;20786:4;20792:2;20796:7;20805:1;20764:21;:43::i;:::-;20847:15;20844:85;;;20912:1;20891:19;20884:30;20844:85;20981:18;:24;21000:4;20981:24;;;;;;;;;;;;;;;;20979:26;;;;;;;;;;;;21023:18;:22;21042:2;21023:22;;;;;;;;;;;;;;;;21021:24;;;;;;;;;;;21092:146;21129:2;21178:45;21193:4;21199:2;21203:19;21178:14;:45::i;:::-;11671:8;21150:73;21092:18;:146::i;:::-;21063:17;:26;21081:7;21063:26;;;;;;;;;;;:175;;;;21310:1;11671:8;21259:19;:47;:52;21255:370;;21332:19;21364:1;21354:7;:11;21332:33;;21424:1;21390:17;:30;21408:11;21390:30;;;;;;;;;;;;:35;21386:224;;21471:13;;21456:11;:28;21452:139;;21548:19;21515:17;:30;21533:11;21515:30;;;;;;;;;;;:52;;;;21452:139;21386:224;21313:312;21255:370;21672:7;21668:2;21653:27;;21662:4;21653:27;;;;;;;;;;;;21691:42;21712:4;21718:2;21722:7;21731:1;21691:20;:42::i;:::-;20221:1520;;;20090:1651;;;:::o;21749:193::-;21895:39;21912:4;21918:2;21922:7;21895:39;;;;;;;;;;;;:16;:39::i;:::-;21749:193;;;:::o;26745:1679::-;26825:27;26855;26874:7;26855:18;:27::i;:::-;26825:57;;26895:12;26926:19;26895:52;;26961:27;26990:23;27017:35;27044:7;27017:26;:35::i;:::-;26960:92;;;;27069:13;27065:244;;;27118:68;27143:15;27160:4;27166:19;:17;:19::i;:::-;27118:24;:68::i;:::-;27113:184;;27210:43;27227:4;27233:19;:17;:19::i;:::-;27210:16;:43::i;:::-;27205:92;;27262:35;;;;;;;;;;;;;;27205:92;27113:184;27065:244;27321:51;27343:4;27357:1;27361:7;27370:1;27321:21;:51::i;:::-;27412:15;27409:101;;;27493:1;27472:19;27465:30;27409:101;27619:1;11294:3;27589:1;:26;;27588:32;27560:18;:24;27579:4;27560:24;;;;;;;;;;;;;;;;:60;;;;;;;;;;;27666:176;27703:4;27774:53;27789:4;27803:1;27807:19;27774:14;:53::i;:::-;11671:8;11537;27727:43;27726:101;27666:18;:176::i;:::-;27637:17;:26;27655:7;27637:26;;;;;;;;;;;:205;;;;27914:1;11671:8;27863:19;:47;:52;27859:370;;27936:19;27968:1;27958:7;:11;27936:33;;28028:1;27994:17;:30;28012:11;27994:30;;;;;;;;;;;;:35;27990:224;;28075:13;;28060:11;:28;28056:139;;28152:19;28119:17;:30;28137:11;28119:30;;;;;;;;;;;:52;;;;28056:139;27990:224;27917:312;27859:370;28284:7;28280:1;28257:35;;28266:4;28257:35;;;;;;;;;;;;28303:50;28324:4;28338:1;28342:7;28351:1;28303:20;:50::i;:::-;28391:12;;:14;;;;;;;;;;;;;26814:1610;;;;26745:1679;;:::o;16134:633::-;16201:7;16221:12;16236:7;16221:22;;16304:4;16285:15;:13;:15::i;:::-;:23;16281:419;;16338:13;;16331:4;:20;16327:373;;;16376:14;16393:17;:23;16411:4;16393:23;;;;;;;;;;;;16376:40;;16473:1;11537:8;16445:6;:24;:29;16441:240;;16505:113;16522:1;16512:6;:11;16505:113;;16565:17;:25;16583:6;;;;;;;16565:25;;;;;;;;;;;;16556:34;;16505:113;;;16651:6;16644:13;;;;;;16441:240;16353:347;16327:373;16281:419;16728:31;;;;;;;;;;;;;;16134:633;;;;:::o;1207:191::-;1281:16;1300:6;;;;;;;;;;;1281:25;;1326:8;1317:6;;:17;;;;;;;;;;;;;;;;;;1381:8;1350:40;;1371:8;1350:40;;;;;;;;;;;;1270:128;1207:191;:::o;21950:407::-;22125:31;22138:4;22144:2;22148:7;22125:12;:31::i;:::-;22189:1;22171:2;:14;;;:19;22167:183;;22210:56;22241:4;22247:2;22251:7;22260:5;22210:30;:56::i;:::-;22205:145;;22294:40;;;;;;;;;;;;;;22205:145;22167:183;21950:407;;;;:::o;2034:534::-;2090:13;2131:1;2122:5;:10;2118:53;;2149:10;;;;;;;;;;;;;;;;;;;;;2118:53;2181:12;2196:5;2181:20;;2212:14;2237:78;2252:1;2244:4;:9;2237:78;;2270:8;;;;;:::i;:::-;;;;2301:2;2293:10;;;;;:::i;:::-;;;2237:78;;;2325:19;2357:6;2347:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2325:39;;2375:154;2391:1;2382:5;:10;2375:154;;2419:1;2409:11;;;;;:::i;:::-;;;2486:2;2478:5;:10;;;;:::i;:::-;2465:2;:24;;;;:::i;:::-;2452:39;;2435:6;2442;2435:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2515:2;2506:11;;;;;:::i;:::-;;;2375:154;;;2553:6;2539:21;;;;;2034:534;;;;:::o;98:98::-;151:7;178:10;171:17;;98:98;:::o;25831:689::-;25962:19;25968:2;25972:8;25962:5;:19::i;:::-;26041:1;26023:2;:14;;;:19;26019:483;;26063:11;26077:13;;26063:27;;26109:13;26131:8;26125:3;:14;26109:30;;26158:233;26189:62;26228:1;26232:2;26236:7;;;;;;26245:5;26189:30;:62::i;:::-;26184:167;;26287:40;;;;;;;;;;;;;;26184:167;26386:3;26378:5;:11;26158:233;;26473:3;26456:13;;:20;26452:34;;26478:8;;;26452:34;26044:458;;26019:483;25831:689;;;:::o;19690:392::-;19792:27;19821:23;19862:38;19903:15;:24;19919:7;19903:24;;;;;;;;;;;19862:65;;19987:18;19964:41;;20044:19;20038:26;20019:45;;19949:126;19690:392;;;:::o;19285:397::-;19434:11;19504:16;19497:5;19493:28;19484:37;;19565:16;19554:9;19550:32;19537:45;;19647:15;19636:9;19633:30;19625:5;19614:9;19611:20;19608:56;19598:66;;19285:397;;;;;:::o;22365:159::-;;;;;:::o;29056:311::-;29191:7;29211:16;11734:3;29237:19;:41;;29211:68;;11734:3;29305:31;29316:4;29322:2;29326:9;29305:10;:31::i;:::-;29297:40;;:62;;29290:69;;;29056:311;;;;;:::o;17149:450::-;17229:14;17397:16;17390:5;17386:28;17377:37;;17574:5;17560:11;17535:23;17531:41;17528:52;17521:5;17518:63;17508:73;;17149:450;;;;:::o;22532:158::-;;;;;:::o;22698:716::-;22861:4;22907:2;22882:45;;;22928:19;:17;:19::i;:::-;22949:4;22955:7;22964:5;22882:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22878:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23182:1;23165:6;:13;:18;23161:235;;23211:40;;;;;;;;;;;;;;23161:235;23354:6;23348:13;23339:6;23335:2;23331:15;23324:38;22878:529;23051:54;;;23041:64;;;:6;:64;;;;23034:71;;;22698:716;;;;;;:::o;23422:1442::-;23495:20;23518:13;;23495:36;;23558:1;23546:8;:13;23542:44;;23568:18;;;;;;;;;;;;;;23542:44;23599:61;23629:1;23633:2;23637:12;23651:8;23599:21;:61::i;:::-;23769:1;11234:2;23739:1;:26;;23738:32;23726:8;:45;23700:18;:22;23719:2;23700:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;23822:139;23859:2;23913:33;23936:1;23940:2;23944:1;23913:14;:33::i;:::-;23880:30;23901:8;23880:20;:30::i;:::-;:66;23822:18;:139::i;:::-;23788:17;:31;23806:12;23788:31;;;;;;;;;;;:173;;;;23978:16;24009:11;24038:8;24023:12;:23;24009:37;;24113:16;24109:2;24105:25;24093:37;;24333:12;24301:8;24276:1;24227:25;24202:1;24177;24150:215;24445:1;24431:12;24427:20;24385:279;24486:3;24477:7;24474:16;24385:279;;24637:7;24627:8;24624:1;24597:25;24594:1;24591;24586:59;24539:1;24530:7;24526:15;24515:26;;24385:279;;;24389:77;24709:1;24697:8;:13;24693:45;;24719:19;;;;;;;;;;;;;;24693:45;24771:3;24755:13;:19;;;;23673:1113;;24796:60;24825:1;24829:2;24833:12;24847:8;24796:20;:60::i;:::-;23484:1380;23422:1442;;:::o;28901:147::-;29038:6;28901:147;;;;;:::o;17607:324::-;17677:14;17910:1;17900:8;17897:15;17871:24;17867:46;17857:56;;17607:324;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:75::-;467:6;500:2;494:9;484:19;;434:75;:::o;515:117::-;624:1;621;614:12;638:117;747:1;744;737:12;761:149;797:7;837:66;830:5;826:78;815:89;;761:149;;;:::o;916:120::-;988:23;1005:5;988:23;:::i;:::-;981:5;978:34;968:62;;1026:1;1023;1016:12;968:62;916:120;:::o;1042:137::-;1087:5;1125:6;1112:20;1103:29;;1141:32;1167:5;1141:32;:::i;:::-;1042:137;;;;:::o;1185:327::-;1243:6;1292:2;1280:9;1271:7;1267:23;1263:32;1260:119;;;1298:79;;:::i;:::-;1260:119;1418:1;1443:52;1487:7;1478:6;1467:9;1463:22;1443:52;:::i;:::-;1433:62;;1389:116;1185:327;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:474::-;5310:6;5318;5367:2;5355:9;5346:7;5342:23;5338:32;5335:119;;;5373:79;;:::i;:::-;5335:119;5493:1;5518:53;5563:7;5554:6;5543:9;5539:22;5518:53;:::i;:::-;5508:63;;5464:117;5620:2;5646:53;5691:7;5682:6;5671:9;5667:22;5646:53;:::i;:::-;5636:63;;5591:118;5242:474;;;;;:::o;5722:329::-;5781:6;5830:2;5818:9;5809:7;5805:23;5801:32;5798:119;;;5836:79;;:::i;:::-;5798:119;5956:1;5981:53;6026:7;6017:6;6006:9;6002:22;5981:53;:::i;:::-;5971:63;;5927:117;5722:329;;;;:::o;6057:619::-;6134:6;6142;6150;6199:2;6187:9;6178:7;6174:23;6170:32;6167:119;;;6205:79;;:::i;:::-;6167:119;6325:1;6350:53;6395:7;6386:6;6375:9;6371:22;6350:53;:::i;:::-;6340:63;;6296:117;6452:2;6478:53;6523:7;6514:6;6503:9;6499:22;6478:53;:::i;:::-;6468:63;;6423:118;6580:2;6606:53;6651:7;6642:6;6631:9;6627:22;6606:53;:::i;:::-;6596:63;;6551:118;6057:619;;;;;:::o;6682:117::-;6791:1;6788;6781:12;6805:117;6914:1;6911;6904:12;6928:180;6976:77;6973:1;6966:88;7073:4;7070:1;7063:15;7097:4;7094:1;7087:15;7114:281;7197:27;7219:4;7197:27;:::i;:::-;7189:6;7185:40;7327:6;7315:10;7312:22;7291:18;7279:10;7276:34;7273:62;7270:88;;;7338:18;;:::i;:::-;7270:88;7378:10;7374:2;7367:22;7157:238;7114:281;;:::o;7401:129::-;7435:6;7462:20;;:::i;:::-;7452:30;;7491:33;7519:4;7511:6;7491:33;:::i;:::-;7401:129;;;:::o;7536:308::-;7598:4;7688:18;7680:6;7677:30;7674:56;;;7710:18;;:::i;:::-;7674:56;7748:29;7770:6;7748:29;:::i;:::-;7740:37;;7832:4;7826;7822:15;7814:23;;7536:308;;;:::o;7850:146::-;7947:6;7942:3;7937;7924:30;7988:1;7979:6;7974:3;7970:16;7963:27;7850:146;;;:::o;8002:425::-;8080:5;8105:66;8121:49;8163:6;8121:49;:::i;:::-;8105:66;:::i;:::-;8096:75;;8194:6;8187:5;8180:21;8232:4;8225:5;8221:16;8270:3;8261:6;8256:3;8252:16;8249:25;8246:112;;;8277:79;;:::i;:::-;8246:112;8367:54;8414:6;8409:3;8404;8367:54;:::i;:::-;8086:341;8002:425;;;;;:::o;8447:340::-;8503:5;8552:3;8545:4;8537:6;8533:17;8529:27;8519:122;;8560:79;;:::i;:::-;8519:122;8677:6;8664:20;8702:79;8777:3;8769:6;8762:4;8754:6;8750:17;8702:79;:::i;:::-;8693:88;;8509:278;8447:340;;;;:::o;8793:509::-;8862:6;8911:2;8899:9;8890:7;8886:23;8882:32;8879:119;;;8917:79;;:::i;:::-;8879:119;9065:1;9054:9;9050:17;9037:31;9095:18;9087:6;9084:30;9081:117;;;9117:79;;:::i;:::-;9081:117;9222:63;9277:7;9268:6;9257:9;9253:22;9222:63;:::i;:::-;9212:73;;9008:287;8793:509;;;;:::o;9308:116::-;9378:21;9393:5;9378:21;:::i;:::-;9371:5;9368:32;9358:60;;9414:1;9411;9404:12;9358:60;9308:116;:::o;9430:133::-;9473:5;9511:6;9498:20;9489:29;;9527:30;9551:5;9527:30;:::i;:::-;9430:133;;;;:::o;9569:648::-;9644:6;9652;9701:2;9689:9;9680:7;9676:23;9672:32;9669:119;;;9707:79;;:::i;:::-;9669:119;9827:1;9852:50;9894:7;9885:6;9874:9;9870:22;9852:50;:::i;:::-;9842:60;;9798:114;9979:2;9968:9;9964:18;9951:32;10010:18;10002:6;9999:30;9996:117;;;10032:79;;:::i;:::-;9996:117;10137:63;10192:7;10183:6;10172:9;10168:22;10137:63;:::i;:::-;10127:73;;9922:288;9569:648;;;;;:::o;10223:468::-;10288:6;10296;10345:2;10333:9;10324:7;10320:23;10316:32;10313:119;;;10351:79;;:::i;:::-;10313:119;10471:1;10496:53;10541:7;10532:6;10521:9;10517:22;10496:53;:::i;:::-;10486:63;;10442:117;10598:2;10624:50;10666:7;10657:6;10646:9;10642:22;10624:50;:::i;:::-;10614:60;;10569:115;10223:468;;;;;:::o;10697:307::-;10758:4;10848:18;10840:6;10837:30;10834:56;;;10870:18;;:::i;:::-;10834:56;10908:29;10930:6;10908:29;:::i;:::-;10900:37;;10992:4;10986;10982:15;10974:23;;10697:307;;;:::o;11010:423::-;11087:5;11112:65;11128:48;11169:6;11128:48;:::i;:::-;11112:65;:::i;:::-;11103:74;;11200:6;11193:5;11186:21;11238:4;11231:5;11227:16;11276:3;11267:6;11262:3;11258:16;11255:25;11252:112;;;11283:79;;:::i;:::-;11252:112;11373:54;11420:6;11415:3;11410;11373:54;:::i;:::-;11093:340;11010:423;;;;;:::o;11452:338::-;11507:5;11556:3;11549:4;11541:6;11537:17;11533:27;11523:122;;11564:79;;:::i;:::-;11523:122;11681:6;11668:20;11706:78;11780:3;11772:6;11765:4;11757:6;11753:17;11706:78;:::i;:::-;11697:87;;11513:277;11452:338;;;;:::o;11796:943::-;11891:6;11899;11907;11915;11964:3;11952:9;11943:7;11939:23;11935:33;11932:120;;;11971:79;;:::i;:::-;11932:120;12091:1;12116:53;12161:7;12152:6;12141:9;12137:22;12116:53;:::i;:::-;12106:63;;12062:117;12218:2;12244:53;12289:7;12280:6;12269:9;12265:22;12244:53;:::i;:::-;12234:63;;12189:118;12346:2;12372:53;12417:7;12408:6;12397:9;12393:22;12372:53;:::i;:::-;12362:63;;12317:118;12502:2;12491:9;12487:18;12474:32;12533:18;12525:6;12522:30;12519:117;;;12555:79;;:::i;:::-;12519:117;12660:62;12714:7;12705:6;12694:9;12690:22;12660:62;:::i;:::-;12650:72;;12445:287;11796:943;;;;;;;:::o;12745:474::-;12813:6;12821;12870:2;12858:9;12849:7;12845:23;12841:32;12838:119;;;12876:79;;:::i;:::-;12838:119;12996:1;13021:53;13066:7;13057:6;13046:9;13042:22;13021:53;:::i;:::-;13011:63;;12967:117;13123:2;13149:53;13194:7;13185:6;13174:9;13170:22;13149:53;:::i;:::-;13139:63;;13094:118;12745:474;;;;;:::o;13225:180::-;13273:77;13270:1;13263:88;13370:4;13367:1;13360:15;13394:4;13391:1;13384:15;13411:320;13455:6;13492:1;13486:4;13482:12;13472:22;;13539:1;13533:4;13529:12;13560:18;13550:81;;13616:4;13608:6;13604:17;13594:27;;13550:81;13678:2;13670:6;13667:14;13647:18;13644:38;13641:84;;13697:18;;:::i;:::-;13641:84;13462:269;13411:320;;;:::o;13737:180::-;13785:77;13782:1;13775:88;13882:4;13879:1;13872:15;13906:4;13903:1;13896:15;13923:191;13963:3;13982:20;14000:1;13982:20;:::i;:::-;13977:25;;14016:20;14034:1;14016:20;:::i;:::-;14011:25;;14059:1;14056;14052:9;14045:16;;14080:3;14077:1;14074:10;14071:36;;;14087:18;;:::i;:::-;14071:36;13923:191;;;;:::o;14120:167::-;14260:19;14256:1;14248:6;14244:14;14237:43;14120:167;:::o;14293:366::-;14435:3;14456:67;14520:2;14515:3;14456:67;:::i;:::-;14449:74;;14532:93;14621:3;14532:93;:::i;:::-;14650:2;14645:3;14641:12;14634:19;;14293:366;;;:::o;14665:419::-;14831:4;14869:2;14858:9;14854:18;14846:26;;14918:9;14912:4;14908:20;14904:1;14893:9;14889:17;14882:47;14946:131;15072:4;14946:131;:::i;:::-;14938:139;;14665:419;;;:::o;15090:332::-;15211:4;15249:2;15238:9;15234:18;15226:26;;15262:71;15330:1;15319:9;15315:17;15306:6;15262:71;:::i;:::-;15343:72;15411:2;15400:9;15396:18;15387:6;15343:72;:::i;:::-;15090:332;;;;;:::o;15428:137::-;15482:5;15513:6;15507:13;15498:22;;15529:30;15553:5;15529:30;:::i;:::-;15428:137;;;;:::o;15571:345::-;15638:6;15687:2;15675:9;15666:7;15662:23;15658:32;15655:119;;;15693:79;;:::i;:::-;15655:119;15813:1;15838:61;15891:7;15882:6;15871:9;15867:22;15838:61;:::i;:::-;15828:71;;15784:125;15571:345;;;;:::o;15922:181::-;16062:33;16058:1;16050:6;16046:14;16039:57;15922:181;:::o;16109:366::-;16251:3;16272:67;16336:2;16331:3;16272:67;:::i;:::-;16265:74;;16348:93;16437:3;16348:93;:::i;:::-;16466:2;16461:3;16457:12;16450:19;;16109:366;;;:::o;16481:419::-;16647:4;16685:2;16674:9;16670:18;16662:26;;16734:9;16728:4;16724:20;16720:1;16709:9;16705:17;16698:47;16762:131;16888:4;16762:131;:::i;:::-;16754:139;;16481:419;;;:::o;16906:147::-;17007:11;17044:3;17029:18;;16906:147;;;;:::o;17059:114::-;;:::o;17179:398::-;17338:3;17359:83;17440:1;17435:3;17359:83;:::i;:::-;17352:90;;17451:93;17540:3;17451:93;:::i;:::-;17569:1;17564:3;17560:11;17553:18;;17179:398;;;:::o;17583:379::-;17767:3;17789:147;17932:3;17789:147;:::i;:::-;17782:154;;17953:3;17946:10;;17583:379;;;:::o;17968:166::-;18108:18;18104:1;18096:6;18092:14;18085:42;17968:166;:::o;18140:366::-;18282:3;18303:67;18367:2;18362:3;18303:67;:::i;:::-;18296:74;;18379:93;18468:3;18379:93;:::i;:::-;18497:2;18492:3;18488:12;18481:19;;18140:366;;;:::o;18512:419::-;18678:4;18716:2;18705:9;18701:18;18693:26;;18765:9;18759:4;18755:20;18751:1;18740:9;18736:17;18729:47;18793:131;18919:4;18793:131;:::i;:::-;18785:139;;18512:419;;;:::o;18937:141::-;18986:4;19009:3;19001:11;;19032:3;19029:1;19022:14;19066:4;19063:1;19053:18;19045:26;;18937:141;;;:::o;19084:93::-;19121:6;19168:2;19163;19156:5;19152:14;19148:23;19138:33;;19084:93;;;:::o;19183:107::-;19227:8;19277:5;19271:4;19267:16;19246:37;;19183:107;;;;:::o;19296:393::-;19365:6;19415:1;19403:10;19399:18;19438:97;19468:66;19457:9;19438:97;:::i;:::-;19556:39;19586:8;19575:9;19556:39;:::i;:::-;19544:51;;19628:4;19624:9;19617:5;19613:21;19604:30;;19677:4;19667:8;19663:19;19656:5;19653:30;19643:40;;19372:317;;19296:393;;;;;:::o;19695:60::-;19723:3;19744:5;19737:12;;19695:60;;;:::o;19761:142::-;19811:9;19844:53;19862:34;19871:24;19889:5;19871:24;:::i;:::-;19862:34;:::i;:::-;19844:53;:::i;:::-;19831:66;;19761:142;;;:::o;19909:75::-;19952:3;19973:5;19966:12;;19909:75;;;:::o;19990:269::-;20100:39;20131:7;20100:39;:::i;:::-;20161:91;20210:41;20234:16;20210:41;:::i;:::-;20202:6;20195:4;20189:11;20161:91;:::i;:::-;20155:4;20148:105;20066:193;19990:269;;;:::o;20265:73::-;20310:3;20265:73;:::o;20344:189::-;20421:32;;:::i;:::-;20462:65;20520:6;20512;20506:4;20462:65;:::i;:::-;20397:136;20344:189;;:::o;20539:186::-;20599:120;20616:3;20609:5;20606:14;20599:120;;;20670:39;20707:1;20700:5;20670:39;:::i;:::-;20643:1;20636:5;20632:13;20623:22;;20599:120;;;20539:186;;:::o;20731:543::-;20832:2;20827:3;20824:11;20821:446;;;20866:38;20898:5;20866:38;:::i;:::-;20950:29;20968:10;20950:29;:::i;:::-;20940:8;20936:44;21133:2;21121:10;21118:18;21115:49;;;21154:8;21139:23;;21115:49;21177:80;21233:22;21251:3;21233:22;:::i;:::-;21223:8;21219:37;21206:11;21177:80;:::i;:::-;20836:431;;20821:446;20731:543;;;:::o;21280:117::-;21334:8;21384:5;21378:4;21374:16;21353:37;;21280:117;;;;:::o;21403:169::-;21447:6;21480:51;21528:1;21524:6;21516:5;21513:1;21509:13;21480:51;:::i;:::-;21476:56;21561:4;21555;21551:15;21541:25;;21454:118;21403:169;;;;:::o;21577:295::-;21653:4;21799:29;21824:3;21818:4;21799:29;:::i;:::-;21791:37;;21861:3;21858:1;21854:11;21848:4;21845:21;21837:29;;21577:295;;;;:::o;21877:1395::-;21994:37;22027:3;21994:37;:::i;:::-;22096:18;22088:6;22085:30;22082:56;;;22118:18;;:::i;:::-;22082:56;22162:38;22194:4;22188:11;22162:38;:::i;:::-;22247:67;22307:6;22299;22293:4;22247:67;:::i;:::-;22341:1;22365:4;22352:17;;22397:2;22389:6;22386:14;22414:1;22409:618;;;;23071:1;23088:6;23085:77;;;23137:9;23132:3;23128:19;23122:26;23113:35;;23085:77;23188:67;23248:6;23241:5;23188:67;:::i;:::-;23182:4;23175:81;23044:222;22379:887;;22409:618;22461:4;22457:9;22449:6;22445:22;22495:37;22527:4;22495:37;:::i;:::-;22554:1;22568:208;22582:7;22579:1;22576:14;22568:208;;;22661:9;22656:3;22652:19;22646:26;22638:6;22631:42;22712:1;22704:6;22700:14;22690:24;;22759:2;22748:9;22744:18;22731:31;;22605:4;22602:1;22598:12;22593:17;;22568:208;;;22804:6;22795:7;22792:19;22789:179;;;22862:9;22857:3;22853:19;22847:26;22905:48;22947:4;22939:6;22935:17;22924:9;22905:48;:::i;:::-;22897:6;22890:64;22812:156;22789:179;23014:1;23010;23002:6;22998:14;22994:22;22988:4;22981:36;22416:611;;;22379:887;;21969:1303;;;21877:1395;;:::o;23278:180::-;23418:32;23414:1;23406:6;23402:14;23395:56;23278:180;:::o;23464:366::-;23606:3;23627:67;23691:2;23686:3;23627:67;:::i;:::-;23620:74;;23703:93;23792:3;23703:93;:::i;:::-;23821:2;23816:3;23812:12;23805:19;;23464:366;;;:::o;23836:419::-;24002:4;24040:2;24029:9;24025:18;24017:26;;24089:9;24083:4;24079:20;24075:1;24064:9;24060:17;24053:47;24117:131;24243:4;24117:131;:::i;:::-;24109:139;;23836:419;;;:::o;24261:194::-;24301:4;24321:20;24339:1;24321:20;:::i;:::-;24316:25;;24355:20;24373:1;24355:20;:::i;:::-;24350:25;;24399:1;24396;24392:9;24384:17;;24423:1;24417:4;24414:11;24411:37;;;24428:18;;:::i;:::-;24411:37;24261:194;;;;:::o;24461:410::-;24501:7;24524:20;24542:1;24524:20;:::i;:::-;24519:25;;24558:20;24576:1;24558:20;:::i;:::-;24553:25;;24613:1;24610;24606:9;24635:30;24653:11;24635:30;:::i;:::-;24624:41;;24814:1;24805:7;24801:15;24798:1;24795:22;24775:1;24768:9;24748:83;24725:139;;24844:18;;:::i;:::-;24725:139;24509:362;24461:410;;;;:::o;24877:169::-;25017:21;25013:1;25005:6;25001:14;24994:45;24877:169;:::o;25052:366::-;25194:3;25215:67;25279:2;25274:3;25215:67;:::i;:::-;25208:74;;25291:93;25380:3;25291:93;:::i;:::-;25409:2;25404:3;25400:12;25393:19;;25052:366;;;:::o;25424:419::-;25590:4;25628:2;25617:9;25613:18;25605:26;;25677:9;25671:4;25667:20;25663:1;25652:9;25648:17;25641:47;25705:131;25831:4;25705:131;:::i;:::-;25697:139;;25424:419;;;:::o;25849:163::-;25989:15;25985:1;25977:6;25973:14;25966:39;25849:163;:::o;26018:366::-;26160:3;26181:67;26245:2;26240:3;26181:67;:::i;:::-;26174:74;;26257:93;26346:3;26257:93;:::i;:::-;26375:2;26370:3;26366:12;26359:19;;26018:366;;;:::o;26390:419::-;26556:4;26594:2;26583:9;26579:18;26571:26;;26643:9;26637:4;26633:20;26629:1;26618:9;26614:17;26607:47;26671:131;26797:4;26671:131;:::i;:::-;26663:139;;26390:419;;;:::o;26815:179::-;26955:31;26951:1;26943:6;26939:14;26932:55;26815:179;:::o;27000:366::-;27142:3;27163:67;27227:2;27222:3;27163:67;:::i;:::-;27156:74;;27239:93;27328:3;27239:93;:::i;:::-;27357:2;27352:3;27348:12;27341:19;;27000:366;;;:::o;27372:419::-;27538:4;27576:2;27565:9;27561:18;27553:26;;27625:9;27619:4;27615:20;27611:1;27600:9;27596:17;27589:47;27653:131;27779:4;27653:131;:::i;:::-;27645:139;;27372:419;;;:::o;27797:240::-;27937:34;27933:1;27925:6;27921:14;27914:58;28006:23;28001:2;27993:6;27989:15;27982:48;27797:240;:::o;28043:366::-;28185:3;28206:67;28270:2;28265:3;28206:67;:::i;:::-;28199:74;;28282:93;28371:3;28282:93;:::i;:::-;28400:2;28395:3;28391:12;28384:19;;28043:366;;;:::o;28415:419::-;28581:4;28619:2;28608:9;28604:18;28596:26;;28668:9;28662:4;28658:20;28654:1;28643:9;28639:17;28632:47;28696:131;28822:4;28696:131;:::i;:::-;28688:139;;28415:419;;;:::o;28840:169::-;28980:21;28976:1;28968:6;28964:14;28957:45;28840:169;:::o;29015:366::-;29157:3;29178:67;29242:2;29237:3;29178:67;:::i;:::-;29171:74;;29254:93;29343:3;29254:93;:::i;:::-;29372:2;29367:3;29363:12;29356:19;;29015:366;;;:::o;29387:419::-;29553:4;29591:2;29580:9;29576:18;29568:26;;29640:9;29634:4;29630:20;29626:1;29615:9;29611:17;29604:47;29668:131;29794:4;29668:131;:::i;:::-;29660:139;;29387:419;;;:::o;29812:148::-;29914:11;29951:3;29936:18;;29812:148;;;;:::o;29990:874::-;30093:3;30130:5;30124:12;30159:36;30185:9;30159:36;:::i;:::-;30211:89;30293:6;30288:3;30211:89;:::i;:::-;30204:96;;30331:1;30320:9;30316:17;30347:1;30342:166;;;;30522:1;30517:341;;;;30309:549;;30342:166;30426:4;30422:9;30411;30407:25;30402:3;30395:38;30488:6;30481:14;30474:22;30466:6;30462:35;30457:3;30453:45;30446:52;;30342:166;;30517:341;30584:38;30616:5;30584:38;:::i;:::-;30644:1;30658:154;30672:6;30669:1;30666:13;30658:154;;;30746:7;30740:14;30736:1;30731:3;30727:11;30720:35;30796:1;30787:7;30783:15;30772:26;;30694:4;30691:1;30687:12;30682:17;;30658:154;;;30841:6;30836:3;30832:16;30825:23;;30524:334;;30309:549;;30097:767;;29990:874;;;;:::o;30870:390::-;30976:3;31004:39;31037:5;31004:39;:::i;:::-;31059:89;31141:6;31136:3;31059:89;:::i;:::-;31052:96;;31157:65;31215:6;31210:3;31203:4;31196:5;31192:16;31157:65;:::i;:::-;31247:6;31242:3;31238:16;31231:23;;30980:280;30870:390;;;;:::o;31266:429::-;31443:3;31465:92;31553:3;31544:6;31465:92;:::i;:::-;31458:99;;31574:95;31665:3;31656:6;31574:95;:::i;:::-;31567:102;;31686:3;31679:10;;31266:429;;;;;:::o;31701:225::-;31841:34;31837:1;31829:6;31825:14;31818:58;31910:8;31905:2;31897:6;31893:15;31886:33;31701:225;:::o;31932:366::-;32074:3;32095:67;32159:2;32154:3;32095:67;:::i;:::-;32088:74;;32171:93;32260:3;32171:93;:::i;:::-;32289:2;32284:3;32280:12;32273:19;;31932:366;;;:::o;32304:419::-;32470:4;32508:2;32497:9;32493:18;32485:26;;32557:9;32551:4;32547:20;32543:1;32532:9;32528:17;32521:47;32585:131;32711:4;32585:131;:::i;:::-;32577:139;;32304:419;;;:::o;32729:182::-;32869:34;32865:1;32857:6;32853:14;32846:58;32729:182;:::o;32917:366::-;33059:3;33080:67;33144:2;33139:3;33080:67;:::i;:::-;33073:74;;33156:93;33245:3;33156:93;:::i;:::-;33274:2;33269:3;33265:12;33258:19;;32917:366;;;:::o;33289:419::-;33455:4;33493:2;33482:9;33478:18;33470:26;;33542:9;33536:4;33532:20;33528:1;33517:9;33513:17;33506:47;33570:131;33696:4;33570:131;:::i;:::-;33562:139;;33289:419;;;:::o;33714:233::-;33753:3;33776:24;33794:5;33776:24;:::i;:::-;33767:33;;33822:66;33815:5;33812:77;33809:103;;33892:18;;:::i;:::-;33809:103;33939:1;33932:5;33928:13;33921:20;;33714:233;;;:::o;33953:180::-;34001:77;33998:1;33991:88;34098:4;34095:1;34088:15;34122:4;34119:1;34112:15;34139:185;34179:1;34196:20;34214:1;34196:20;:::i;:::-;34191:25;;34230:20;34248:1;34230:20;:::i;:::-;34225:25;;34269:1;34259:35;;34274:18;;:::i;:::-;34259:35;34316:1;34313;34309:9;34304:14;;34139:185;;;;:::o;34330:176::-;34362:1;34379:20;34397:1;34379:20;:::i;:::-;34374:25;;34413:20;34431:1;34413:20;:::i;:::-;34408:25;;34452:1;34442:35;;34457:18;;:::i;:::-;34442:35;34498:1;34495;34491:9;34486:14;;34330:176;;;;:::o;34512:180::-;34560:77;34557:1;34550:88;34657:4;34654:1;34647:15;34681:4;34678:1;34671:15;34698:98;34749:6;34783:5;34777:12;34767:22;;34698:98;;;:::o;34802:168::-;34885:11;34919:6;34914:3;34907:19;34959:4;34954:3;34950:14;34935:29;;34802:168;;;;:::o;34976:373::-;35062:3;35090:38;35122:5;35090:38;:::i;:::-;35144:70;35207:6;35202:3;35144:70;:::i;:::-;35137:77;;35223:65;35281:6;35276:3;35269:4;35262:5;35258:16;35223:65;:::i;:::-;35313:29;35335:6;35313:29;:::i;:::-;35308:3;35304:39;35297:46;;35066:283;34976:373;;;;:::o;35355:640::-;35550:4;35588:3;35577:9;35573:19;35565:27;;35602:71;35670:1;35659:9;35655:17;35646:6;35602:71;:::i;:::-;35683:72;35751:2;35740:9;35736:18;35727:6;35683:72;:::i;:::-;35765;35833:2;35822:9;35818:18;35809:6;35765:72;:::i;:::-;35884:9;35878:4;35874:20;35869:2;35858:9;35854:18;35847:48;35912:76;35983:4;35974:6;35912:76;:::i;:::-;35904:84;;35355:640;;;;;;;:::o;36001:141::-;36057:5;36088:6;36082:13;36073:22;;36104:32;36130:5;36104:32;:::i;:::-;36001:141;;;;:::o;36148:349::-;36217:6;36266:2;36254:9;36245:7;36241:23;36237:32;36234:119;;;36272:79;;:::i;:::-;36234:119;36392:1;36417:63;36472:7;36463:6;36452:9;36448:22;36417:63;:::i;:::-;36407:73;;36363:127;36148:349;;;;:::o
Swarm Source
ipfs://0067d68c7211a260bc68a675dabb6ef5fb4535c374e4d2d7c30472605fddb619
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.