ERC-721
Overview
Max Total Supply
1,329 GBZ
Holders
967
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 GBZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFT
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-08 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.13; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // IERC165 // ============================== /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================== // IERC721 // ============================== /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================== // IERC721Metadata // ============================== /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @dev ERC721 token receiver interface. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // Mask of an entry in packed address data. uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225; // The tokenId of the next token to be minted. uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. // See `_packedOwnershipOf` implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // Mapping from token ID to approved address. mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * @dev Returns the starting token ID. * To change the starting token ID, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Returns the next token ID to be minted. */ function _nextTokenId() internal view returns (uint256) { return _currentIndex; } /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see `_totalMinted`. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * @dev Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to `_startTokenId()` unchecked { return _currentIndex - _startTokenId(); } } /** * @dev Returns the total number of tokens burned. */ function _totalBurned() internal view returns (uint256) { return _burnCounter; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes of the XOR of // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165 // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)` return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> BITPOS_AUX); } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; assembly { // Cast aux without masking. auxCasted := aux } packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX); _packedAddressData[owner] = packed; } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & BITMASK_BURNED == 0) { // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. // // We can directly compare the packed value. // If the address is zero, packed is zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * Returns the unpacked `TokenOwnership` struct from `packed`. */ 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; } /** * Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ 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))) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev Casts the address to uint256 without masking. */ function _addressToUint256(address value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev Casts the boolean to uint256 without branching. */ function _boolToUint256(bool value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = address(uint160(_packedOwnershipOf(tokenId))); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned. } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.code.length != 0) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); if (approvalCheck) { bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // Updates: // - `balance -= 1`. // - `numberBurned += 1`. // // We can directly decrement the balance, and increment the number burned. // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`. _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1; // Updates: // - `address` to the last owner. // - `startTimestamp` to the timestamp of burning. // - `burned` to `true`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(from) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_BURNED | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ 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)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function _toString(uint256 value) internal pure returns (string memory ptr) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged. // We will need 1 32-byte word to store the length, // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128. ptr := add(mload(0x40), 128) // Update the free memory pointer to allocate. mstore(0x40, ptr) // Cache the end of the memory to calculate the length later. let end := ptr // We write the string from the rightmost digit to the leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // Costs a bit more than early returning for the zero case, // but cheaper in terms of deployment and overall runtime costs. for { // Initialize and perform the first pass without check. let temp := value // Move the pointer 1 byte leftwards to point to an empty character slot. ptr := sub(ptr, 1) // Write the character to the pointer. 48 is the ASCII index of '0'. mstore8(ptr, add(48, mod(temp, 10))) temp := div(temp, 10) } temp { // Keep dividing `temp` until zero. temp := div(temp, 10) } { // Body of the for loop. ptr := sub(ptr, 1) mstore8(ptr, add(48, mod(temp, 10))) } let length := sub(end, ptr) // Move the pointer 32 bytes leftwards to make room for the length. ptr := sub(ptr, 32) // Store the length. mstore(ptr, length) } } } contract NFT is ERC721A, Ownable { // 1 Slot - gas saving uint32 public maxSupply = 10000; uint32 public preSalemaxSupply = 9000; uint32 public freSalemaxSupply = 1000; uint16 public maxNFTPerAddress = 9; uint16 public presaleMaxMint = 4; uint16 public freeMaxMint = 1; uint64 public publicPrice = 0.022 ether; uint64 public preSalePrice = 0.015 ether; // IsActive bool public isSaleOpen; bool public presaleIsActive; bool public freeSaleIsActive; string private notRevealedURI_; string private baseURI_; string private baseExtension_; // PreSale mapping(address => bool) private _presaleList; mapping(address => uint256) private _presaleListClaimed; // Free mapping(address => bool) private _freeSaleList; mapping(address => uint256) private _freeSaleListClaimed; constructor(string memory _notRevealedURI) ERC721A("Goblinz Nft", "GBZ") { notRevealedURI_ = _notRevealedURI; // First 1 NFT to the team _safeMint(msg.sender, 1); } function mint(uint256 quantity) external payable { require(isSaleOpen, "sale is not started yet"); require(tx.origin == msg.sender, "can not be called by a contract"); require(totalSupply() + quantity <= maxSupply, "amount exceeds max supply"); require(balanceOf(msg.sender) + quantity <= maxNFTPerAddress, "amount exceeds your allocation"); require(msg.value >= quantity * publicPrice, "unsufficient payment"); _safeMint(msg.sender, quantity); } function presaleMint(uint16 quantity) external payable { require(presaleIsActive, "Presale is not active"); require(_presaleList[msg.sender], "You are not on the Presale List"); require(totalSupply() + quantity <= preSalemaxSupply, "amount exceeds max supply"); require(balanceOf(msg.sender) + quantity <= presaleMaxMint, "amount exceeds your allocation"); require(msg.value >= quantity * preSalePrice, "unsufficient payment"); _presaleListClaimed[msg.sender]; _safeMint(msg.sender, quantity); } function addToPresaleList(address[] calldata addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Can't add the null address"); _presaleList[addresses[i]] = true; } } function removeFromPresaleList(address[] calldata addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Can't add the null address"); _presaleList[addresses[i]] = false; } } function setPresaleMaxMint(uint16 maxMint) external onlyOwner { presaleMaxMint = maxMint; } function onPreSaleList(address addr) external view returns (bool) { return _presaleList[addr]; } function freeSaleMint(uint16 quantity) external payable { require(freeSaleIsActive, "Fresale is not active"); require(_freeSaleList[msg.sender], "You are not on the Fresale List"); require(totalSupply() + quantity <= freSalemaxSupply, "amount exceeds max supply"); require(balanceOf(msg.sender) + quantity <= freeMaxMint, "amount exceeds your allocation"); _freeSaleListClaimed[msg.sender]; _safeMint(msg.sender, quantity); } function addToFreeSaleList(address[] calldata addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Can't add the null address"); _freeSaleList[addresses[i]] = true; } } function removeFromFreeSaleList(address[] calldata addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Can't add the null address"); _freeSaleList[addresses[i]] = false; } } function setFreeSaleMaxMint(uint16 maxMint) external onlyOwner { freeMaxMint = maxMint; } function onFreeSaleList(address addr) external view returns (bool) { return _freeSaleList[addr]; } function tokenURI(uint256 tokenId) public view override returns(string memory) { if(!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = baseURI_; return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId), baseExtension_)) : notRevealedURI_; } function _startTokenId() internal pure override returns(uint256) { return 1; } // Only OwnerFunctions function withdraw(uint256 _amount) external onlyOwner { payable(msg.sender).transfer(_amount); } function setBaseURI(string memory _newURI) external onlyOwner { baseURI_ = _newURI; } function setNotRevealedURI(string memory _newURI) external onlyOwner { notRevealedURI_ = _newURI; } function setBaseExtension(string memory _newExtension) external onlyOwner { baseExtension_ = _newExtension; } function toggleSaleOpen() external onlyOwner { isSaleOpen = !isSaleOpen; } function togglePresaleState() external onlyOwner { presaleIsActive = !presaleIsActive; } function toggleFreeState() external onlyOwner { freeSaleIsActive = !freeSaleIsActive; } function setMaxSupply(uint32 _newSupply) external onlyOwner { maxSupply = _newSupply; } function setPreSaleMaxSupply(uint32 _newSupply) external onlyOwner { preSalemaxSupply = _newSupply; } function setFreMaxSupply(uint32 _newSupply) external onlyOwner { freSalemaxSupply = _newSupply; } function setMaxNFTPerAddress(uint16 _newMaxAmount) external onlyOwner { maxNFTPerAddress = _newMaxAmount; } function setPublicPrice(uint64 _newPrice) external onlyOwner { publicPrice = _newPrice; } function setPreSalePrice(uint64 _newPrice) external onlyOwner { preSalePrice = _newPrice; } function ownerMint(address _to, uint256 _amount) external onlyOwner { _safeMint(_to, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","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":"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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToFreeSaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToPresaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freSalemaxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMaxMint","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"quantity","type":"uint16"}],"name":"freeSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"isSaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNFTPerAddress","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"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":[{"internalType":"address","name":"addr","type":"address"}],"name":"onFreeSaleList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"onPreSaleList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSalePrice","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSalemaxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleMaxMint","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"quantity","type":"uint16"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicPrice","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeFromFreeSaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeFromPresaleList","outputs":[],"stateMutability":"nonpayable","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":"nonpayable","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_newSupply","type":"uint32"}],"name":"setFreMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxMint","type":"uint16"}],"name":"setFreeSaleMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newMaxAmount","type":"uint16"}],"name":"setMaxNFTPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_newSupply","type":"uint32"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_newSupply","type":"uint32"}],"name":"setPreSaleMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_newPrice","type":"uint64"}],"name":"setPreSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxMint","type":"uint16"}],"name":"setPresaleMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_newPrice","type":"uint64"}],"name":"setPublicPrice","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":[],"name":"toggleFreeState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePresaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSaleOpen","outputs":[],"stateMutability":"nonpayable","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052612710600860146101000a81548163ffffffff021916908363ffffffff160217905550612328600860186101000a81548163ffffffff021916908363ffffffff1602179055506103e86008601c6101000a81548163ffffffff021916908363ffffffff16021790555060098060006101000a81548161ffff021916908361ffff1602179055506004600960026101000a81548161ffff021916908361ffff1602179055506001600960046101000a81548161ffff021916908361ffff160217905550664e28e2290f0000600960066101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555066354a6ba7a180006009600e6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055503480156200013357600080fd5b506040516200597b3803806200597b833981810160405281019062000159919062000a18565b6040518060400160405280600b81526020017f476f626c696e7a204e66740000000000000000000000000000000000000000008152506040518060400160405280600381526020017f47425a00000000000000000000000000000000000000000000000000000000008152508160029080519060200190620001dd929190620007cb565b508060039080519060200190620001f6929190620007cb565b50620002076200026260201b60201c565b60008190555050506200022f620002236200026b60201b60201c565b6200027360201b60201c565b80600a908051906020019062000247929190620007cb565b506200025b3360016200033960201b60201c565b5062000c6d565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200035b8282604051806020016040528060008152506200035f60201b60201c565b5050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603620003cc576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000830362000407576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200041c60008583866200064260201b60201c565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e162000489600185146200064860201b60201c565b901b60a042901b620004a1866200065260201b60201c565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14620005b2575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200055e60008784806001019550876200065c60201b60201c565b62000595576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210620004e7578260005414620005ac57600080fd5b6200061e565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210620005b3575b8160008190555050506200063c6000858386620007bd60201b60201c565b50505050565b50505050565b6000819050919050565b6000819050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200068a620007c360201b60201c565b8786866040518563ffffffff1660e01b8152600401620006ae949392919062000b26565b6020604051808303816000875af1925050508015620006ed57506040513d601f19601f82011682018060405250810190620006ea919062000bd7565b60015b6200076a573d806000811462000720576040519150601f19603f3d011682016040523d82523d6000602084013e62000725565b606091505b50600081510362000762576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b600033905090565b828054620007d99062000c38565b90600052602060002090601f016020900481019282620007fd576000855562000849565b82601f106200081857805160ff191683800117855562000849565b8280016001018555821562000849579182015b82811115620008485782518255916020019190600101906200082b565b5b5090506200085891906200085c565b5090565b5b80821115620008775760008160009055506001016200085d565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620008e48262000899565b810181811067ffffffffffffffff82111715620009065762000905620008aa565b5b80604052505050565b60006200091b6200087b565b9050620009298282620008d9565b919050565b600067ffffffffffffffff8211156200094c576200094b620008aa565b5b620009578262000899565b9050602081019050919050565b60005b838110156200098457808201518184015260208101905062000967565b8381111562000994576000848401525b50505050565b6000620009b1620009ab846200092e565b6200090f565b905082815260208101848484011115620009d057620009cf62000894565b5b620009dd84828562000964565b509392505050565b600082601f830112620009fd57620009fc6200088f565b5b815162000a0f8482602086016200099a565b91505092915050565b60006020828403121562000a315762000a3062000885565b5b600082015167ffffffffffffffff81111562000a525762000a516200088a565b5b62000a6084828501620009e5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a968262000a69565b9050919050565b62000aa88162000a89565b82525050565b6000819050919050565b62000ac38162000aae565b82525050565b600081519050919050565b600082825260208201905092915050565b600062000af28262000ac9565b62000afe818562000ad4565b935062000b1081856020860162000964565b62000b1b8162000899565b840191505092915050565b600060808201905062000b3d600083018762000a9d565b62000b4c602083018662000a9d565b62000b5b604083018562000ab8565b818103606083015262000b6f818462000ae5565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000bb18162000b7a565b811462000bbd57600080fd5b50565b60008151905062000bd18162000ba6565b92915050565b60006020828403121562000bf05762000bef62000885565b5b600062000c008482850162000bc0565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c5157607f821691505b60208210810362000c675762000c6662000c09565b5b50919050565b614cfe8062000c7d6000396000f3fe60806040526004361061031a5760003560e01c8063837aea6c116101ab578063b88d4fde116100f7578063e757c17d11610095578063f2c4ce1e1161006f578063f2c4ce1e14610b47578063f2fde38b14610b70578063f9da322414610b99578063fa53d65614610bc25761031a565b8063e757c17d14610ac8578063e985e9c514610af3578063f285e69e14610b305761031a565b8063c9c29b18116100d1578063c9c29b1814610a2f578063cc2e55ab14610a4b578063d5abeb0114610a74578063da3ef23f14610a9f5761031a565b8063b88d4fde146109a0578063c203c43d146109c9578063c87b56dd146109f25761031a565b8063a0712d6811610164578063a945bf801161013e578063a945bf80146108f3578063b09c97341461091e578063b179e0601461093a578063b756bc4c146109635761031a565b8063a0712d6814610883578063a22cb4651461089f578063a31d99d8146108c85761031a565b8063837aea6c146107955780638393634c146107c05780638d438273146107d75780638da5cb5b14610802578063946ef42a1461082d57806395d89b41146108585761031a565b806330f72cd41161026a5780635786c8be1161022357806370a08231116101fd57806370a08231146106ef578063715018a61461072c5780637204a3c91461074357806377b6cb0e1461076c5761031a565b80635786c8be1461065e57806359079ba5146106875780636352211e146106b25761031a565b806330f72cd4146105645780633f2c67171461058f57806342842e0e146105ba578063452c5f9e146105e3578063484b973c1461060c57806355f804b3146106355761031a565b806311576b79116102d75780631a081330116102b15780631a081330146104be57806323b872dd146104e95780632d50b477146105125780632e1a7d4d1461053b5761031a565b806311576b791461043f578063136f4f7a1461047c57806318160ddd146104935761031a565b806301ffc9a71461031f57806306fdde031461035c578063081812fc1461038757806309314162146103c4578063095ea7b3146103ed5780630c29dbae14610416575b600080fd5b34801561032b57600080fd5b5061034660048036038101906103419190613b0d565b610beb565b6040516103539190613b55565b60405180910390f35b34801561036857600080fd5b50610371610c7d565b60405161037e9190613c09565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a99190613c61565b610d0f565b6040516103bb9190613ccf565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190613d24565b610d8b565b005b3480156103f957600080fd5b50610414600480360381019061040f9190613d7d565b610e27565b005b34801561042257600080fd5b5061043d60048036038101906104389190613dfd565b610fcd565b005b34801561044b57600080fd5b5061046660048036038101906104619190613e2a565b611075565b6040516104739190613b55565b60405180910390f35b34801561048857600080fd5b506104916110cb565b005b34801561049f57600080fd5b506104a8611173565b6040516104b59190613e66565b60405180910390f35b3480156104ca57600080fd5b506104d361118a565b6040516104e09190613b55565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b9190613e81565b61119d565b005b34801561051e57600080fd5b5061053960048036038101906105349190613f39565b6111ad565b005b34801561054757600080fd5b50610562600480360381019061055d9190613c61565b611364565b005b34801561057057600080fd5b5061057961142a565b6040516105869190613b55565b60405180910390f35b34801561059b57600080fd5b506105a461143d565b6040516105b19190613fa5565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190613e81565b611453565b005b3480156105ef57600080fd5b5061060a60048036038101906106059190613fec565b611473565b005b34801561061857600080fd5b50610633600480360381019061062e9190613d7d565b611513565b005b34801561064157600080fd5b5061065c60048036038101906106579190614149565b61159d565b005b34801561066a57600080fd5b5061068560048036038101906106809190613f39565b611633565b005b34801561069357600080fd5b5061069c6117ea565b6040516106a99190613fa5565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613c61565b611800565b6040516106e69190613ccf565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190613e2a565b611812565b6040516107239190613e66565b60405180910390f35b34801561073857600080fd5b506107416118ca565b005b34801561074f57600080fd5b5061076a60048036038101906107659190613f39565b611952565b005b34801561077857600080fd5b50610793600480360381019061078e9190613d24565b611b09565b005b3480156107a157600080fd5b506107aa611ba5565b6040516107b791906141a1565b60405180910390f35b3480156107cc57600080fd5b506107d5611bb9565b005b3480156107e357600080fd5b506107ec611c61565b6040516107f99190613b55565b60405180910390f35b34801561080e57600080fd5b50610817611c74565b6040516108249190613ccf565b60405180910390f35b34801561083957600080fd5b50610842611c9e565b60405161084f91906141a1565b60405180910390f35b34801561086457600080fd5b5061086d611cb2565b60405161087a9190613c09565b60405180910390f35b61089d60048036038101906108989190613c61565b611d44565b005b3480156108ab57600080fd5b506108c660048036038101906108c191906141e8565b611f53565b005b3480156108d457600080fd5b506108dd6120ca565b6040516108ea91906141a1565b60405180910390f35b3480156108ff57600080fd5b506109086120de565b6040516109159190614237565b60405180910390f35b61093860048036038101906109339190613d24565b6120f8565b005b34801561094657600080fd5b50610961600480360381019061095c9190613f39565b612375565b005b34801561096f57600080fd5b5061098a60048036038101906109859190613e2a565b61252c565b6040516109979190613b55565b60405180910390f35b3480156109ac57600080fd5b506109c760048036038101906109c291906142f3565b612582565b005b3480156109d557600080fd5b506109f060048036038101906109eb9190613dfd565b6125f5565b005b3480156109fe57600080fd5b50610a196004803603810190610a149190613c61565b61269d565b604051610a269190613c09565b60405180910390f35b610a496004803603810190610a449190613d24565b61283c565b005b348015610a5757600080fd5b50610a726004803603810190610a6d9190613fec565b612a47565b005b348015610a8057600080fd5b50610a89612ae7565b604051610a969190613fa5565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac19190614149565b612afd565b005b348015610ad457600080fd5b50610add612b93565b604051610aea9190614237565b60405180910390f35b348015610aff57600080fd5b50610b1a6004803603810190610b159190614376565b612bad565b604051610b279190613b55565b60405180910390f35b348015610b3c57600080fd5b50610b45612c41565b005b348015610b5357600080fd5b50610b6e6004803603810190610b699190614149565b612ce9565b005b348015610b7c57600080fd5b50610b976004803603810190610b929190613e2a565b612d7f565b005b348015610ba557600080fd5b50610bc06004803603810190610bbb9190613fec565b612e76565b005b348015610bce57600080fd5b50610be96004803603810190610be49190613d24565b612f16565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c4657506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c765750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610c8c906143e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb8906143e5565b8015610d055780601f10610cda57610100808354040283529160200191610d05565b820191906000526020600020905b815481529060010190602001808311610ce857829003601f168201915b5050505050905090565b6000610d1a82612fb2565b610d50576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610d93613011565b73ffffffffffffffffffffffffffffffffffffffff16610db1611c74565b73ffffffffffffffffffffffffffffffffffffffff1614610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90614462565b60405180910390fd5b80600960046101000a81548161ffff021916908361ffff16021790555050565b6000610e3282613019565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e99576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610eb86130e5565b73ffffffffffffffffffffffffffffffffffffffff1614610f1b57610ee481610edf6130e5565b612bad565b610f1a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610fd5613011565b73ffffffffffffffffffffffffffffffffffffffff16610ff3611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104090614462565b60405180910390fd5b80600960066101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110d3613011565b73ffffffffffffffffffffffffffffffffffffffff166110f1611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e90614462565b60405180910390fd5b600960189054906101000a900460ff1615600960186101000a81548160ff021916908315150217905550565b600061117d6130ed565b6001546000540303905090565b600960169054906101000a900460ff1681565b6111a88383836130f6565b505050565b6111b5613011565b73ffffffffffffffffffffffffffffffffffffffff166111d3611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090614462565b60405180910390fd5b60005b8282905081101561135f57600073ffffffffffffffffffffffffffffffffffffffff1683838381811061126257611261614482565b5b90506020020160208101906112779190613e2a565b73ffffffffffffffffffffffffffffffffffffffff16036112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c4906144fd565b60405180910390fd5b6001600f60008585858181106112e6576112e5614482565b5b90506020020160208101906112fb9190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113579061454c565b91505061122c565b505050565b61136c613011565b73ffffffffffffffffffffffffffffffffffffffff1661138a611c74565b73ffffffffffffffffffffffffffffffffffffffff16146113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790614462565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611426573d6000803e3d6000fd5b5050565b600960179054906101000a900460ff1681565b600860189054906101000a900463ffffffff1681565b61146e83838360405180602001604052806000815250612582565b505050565b61147b613011565b73ffffffffffffffffffffffffffffffffffffffff16611499611c74565b73ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e690614462565b60405180910390fd5b806008601c6101000a81548163ffffffff021916908363ffffffff16021790555050565b61151b613011565b73ffffffffffffffffffffffffffffffffffffffff16611539611c74565b73ffffffffffffffffffffffffffffffffffffffff161461158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690614462565b60405180910390fd5b611599828261349d565b5050565b6115a5613011565b73ffffffffffffffffffffffffffffffffffffffff166115c3611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090614462565b60405180910390fd5b80600b908051906020019061162f9291906139fe565b5050565b61163b613011565b73ffffffffffffffffffffffffffffffffffffffff16611659611c74565b73ffffffffffffffffffffffffffffffffffffffff16146116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690614462565b60405180910390fd5b60005b828290508110156117e557600073ffffffffffffffffffffffffffffffffffffffff168383838181106116e8576116e7614482565b5b90506020020160208101906116fd9190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1603611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a906144fd565b60405180910390fd5b6000600f600085858581811061176c5761176b614482565b5b90506020020160208101906117819190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806117dd9061454c565b9150506116b2565b505050565b6008601c9054906101000a900463ffffffff1681565b600061180b82613019565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611879576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6118d2613011565b73ffffffffffffffffffffffffffffffffffffffff166118f0611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90614462565b60405180910390fd5b61195060006134bb565b565b61195a613011565b73ffffffffffffffffffffffffffffffffffffffff16611978611c74565b73ffffffffffffffffffffffffffffffffffffffff16146119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c590614462565b60405180910390fd5b60005b82829050811015611b0457600073ffffffffffffffffffffffffffffffffffffffff16838383818110611a0757611a06614482565b5b9050602002016020810190611a1c9190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1603611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a69906144fd565b60405180910390fd5b6001600d6000858585818110611a8b57611a8a614482565b5b9050602002016020810190611aa09190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611afc9061454c565b9150506119d1565b505050565b611b11613011565b73ffffffffffffffffffffffffffffffffffffffff16611b2f611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c90614462565b60405180910390fd5b80600960006101000a81548161ffff021916908361ffff16021790555050565b600960009054906101000a900461ffff1681565b611bc1613011565b73ffffffffffffffffffffffffffffffffffffffff16611bdf611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90614462565b60405180910390fd5b600960169054906101000a900460ff1615600960166101000a81548160ff021916908315150217905550565b600960189054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960029054906101000a900461ffff1681565b606060038054611cc1906143e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611ced906143e5565b8015611d3a5780601f10611d0f57610100808354040283529160200191611d3a565b820191906000526020600020905b815481529060010190602001808311611d1d57829003601f168201915b5050505050905090565b600960169054906101000a900460ff16611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a906145e0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df89061464c565b60405180910390fd5b600860149054906101000a900463ffffffff1663ffffffff1681611e23611173565b611e2d919061466c565b1115611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e659061470e565b60405180910390fd5b600960009054906101000a900461ffff1661ffff1681611e8d33611812565b611e97919061466c565b1115611ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecf9061477a565b60405180910390fd5b600960069054906101000a900467ffffffffffffffff1667ffffffffffffffff1681611f04919061479a565b341015611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d90614840565b60405180910390fd5b611f50338261349d565b50565b611f5b6130e5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fbf576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611fcc6130e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120796130e5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120be9190613b55565b60405180910390a35050565b600960049054906101000a900461ffff1681565b600960069054906101000a900467ffffffffffffffff1681565b600960179054906101000a900460ff16612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e906148ac565b60405180910390fd5b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ca90614918565b60405180910390fd5b600860189054906101000a900463ffffffff1663ffffffff168161ffff166121f9611173565b612203919061466c565b1115612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b9061470e565b60405180910390fd5b600960029054906101000a900461ffff1661ffff168161ffff1661226733611812565b612271919061466c565b11156122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a99061477a565b60405180910390fd5b6009600e9054906101000a900467ffffffffffffffff168161ffff166122d89190614938565b67ffffffffffffffff16341015612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90614840565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002050612372338261ffff1661349d565b50565b61237d613011565b73ffffffffffffffffffffffffffffffffffffffff1661239b611c74565b73ffffffffffffffffffffffffffffffffffffffff16146123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e890614462565b60405180910390fd5b60005b8282905081101561252757600073ffffffffffffffffffffffffffffffffffffffff1683838381811061242a57612429614482565b5b905060200201602081019061243f9190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1603612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c906144fd565b60405180910390fd5b6000600d60008585858181106124ae576124ad614482565b5b90506020020160208101906124c39190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061251f9061454c565b9150506123f4565b505050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61258d8484846130f6565b60008373ffffffffffffffffffffffffffffffffffffffff163b146125ef576125b884848484613581565b6125ee576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6125fd613011565b73ffffffffffffffffffffffffffffffffffffffff1661261b611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266890614462565b60405180910390fd5b806009600e6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60606126a882612fb2565b6126de576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600b80546126ed906143e5565b80601f0160208091040260200160405190810160405280929190818152602001828054612719906143e5565b80156127665780601f1061273b57610100808354040283529160200191612766565b820191906000526020600020905b81548152906001019060200180831161274957829003601f168201915b50505050509050600081510361280657600a8054612783906143e5565b80601f01602080910402602001604051908101604052809291908181526020018280546127af906143e5565b80156127fc5780601f106127d1576101008083540402835291602001916127fc565b820191906000526020600020905b8154815290600101906020018083116127df57829003601f168201915b5050505050612834565b80612810846136d1565b600c60405160200161282493929190614a4a565b6040516020818303038152906040525b915050919050565b600960189054906101000a900460ff1661288b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288290614ac7565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290e90614b33565b60405180910390fd5b6008601c9054906101000a900463ffffffff1663ffffffff168161ffff1661293d611173565b612947919061466c565b1115612988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297f9061470e565b60405180910390fd5b600960049054906101000a900461ffff1661ffff168161ffff166129ab33611812565b6129b5919061466c565b11156129f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ed9061477a565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002050612a44338261ffff1661349d565b50565b612a4f613011565b73ffffffffffffffffffffffffffffffffffffffff16612a6d611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aba90614462565b60405180910390fd5b80600860186101000a81548163ffffffff021916908363ffffffff16021790555050565b600860149054906101000a900463ffffffff1681565b612b05613011565b73ffffffffffffffffffffffffffffffffffffffff16612b23611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7090614462565b60405180910390fd5b80600c9080519060200190612b8f9291906139fe565b5050565b6009600e9054906101000a900467ffffffffffffffff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612c49613011565b73ffffffffffffffffffffffffffffffffffffffff16612c67611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb490614462565b60405180910390fd5b600960179054906101000a900460ff1615600960176101000a81548160ff021916908315150217905550565b612cf1613011565b73ffffffffffffffffffffffffffffffffffffffff16612d0f611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5c90614462565b60405180910390fd5b80600a9080519060200190612d7b9291906139fe565b5050565b612d87613011565b73ffffffffffffffffffffffffffffffffffffffff16612da5611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df290614462565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6190614bc5565b60405180910390fd5b612e73816134bb565b50565b612e7e613011565b73ffffffffffffffffffffffffffffffffffffffff16612e9c611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee990614462565b60405180910390fd5b80600860146101000a81548163ffffffff021916908363ffffffff16021790555050565b612f1e613011565b73ffffffffffffffffffffffffffffffffffffffff16612f3c611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8990614462565b60405180910390fd5b80600960026101000a81548161ffff021916908361ffff16021790555050565b600081612fbd6130ed565b11158015612fcc575060005482105b801561300a575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b600080829050806130286130ed565b116130ae576000548110156130ad5760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036130ab575b600081036130a1576004600083600190039350838152602001908152602001600020549050613077565b80925050506130e0565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b60006001905090565b600061310182613019565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613168576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166131896130e5565b73ffffffffffffffffffffffffffffffffffffffff1614806131b857506131b7856131b26130e5565b612bad565b5b806131fd57506131c66130e5565b73ffffffffffffffffffffffffffffffffffffffff166131e584610d0f565b73ffffffffffffffffffffffffffffffffffffffff16145b905080613236576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361329c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132a9858585600161372b565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b6133a686613731565b1717600460008581526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000083160361342e576000600184019050600060046000838152602001908152602001600020540361342c57600054811461342b578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613496858585600161373b565b5050505050565b6134b7828260405180602001604052806000815250613741565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135a76130e5565b8786866040518563ffffffff1660e01b81526004016135c99493929190614c3a565b6020604051808303816000875af192505050801561360557506040513d601f19601f820116820180604052508101906136029190614c9b565b60015b61367e573d8060008114613635576040519150601f19603f3d011682016040523d82523d6000602084013e61363a565b606091505b506000815103613676576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b801561371757600183039250600a81066030018353600a810490506136f7565b508181036020830392508083525050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036137ad576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083036137e7576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6137f4600085838661372b565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1613859600185146139f4565b901b60a042901b61386986613731565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b1461396d575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461391d6000878480600101955087613581565b613953576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106138ae57826000541461396857600080fd5b6139d8565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821061396e575b8160008190555050506139ee600085838661373b565b50505050565b6000819050919050565b828054613a0a906143e5565b90600052602060002090601f016020900481019282613a2c5760008555613a73565b82601f10613a4557805160ff1916838001178555613a73565b82800160010185558215613a73579182015b82811115613a72578251825591602001919060010190613a57565b5b509050613a809190613a84565b5090565b5b80821115613a9d576000816000905550600101613a85565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613aea81613ab5565b8114613af557600080fd5b50565b600081359050613b0781613ae1565b92915050565b600060208284031215613b2357613b22613aab565b5b6000613b3184828501613af8565b91505092915050565b60008115159050919050565b613b4f81613b3a565b82525050565b6000602082019050613b6a6000830184613b46565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613baa578082015181840152602081019050613b8f565b83811115613bb9576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bdb82613b70565b613be58185613b7b565b9350613bf5818560208601613b8c565b613bfe81613bbf565b840191505092915050565b60006020820190508181036000830152613c238184613bd0565b905092915050565b6000819050919050565b613c3e81613c2b565b8114613c4957600080fd5b50565b600081359050613c5b81613c35565b92915050565b600060208284031215613c7757613c76613aab565b5b6000613c8584828501613c4c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cb982613c8e565b9050919050565b613cc981613cae565b82525050565b6000602082019050613ce46000830184613cc0565b92915050565b600061ffff82169050919050565b613d0181613cea565b8114613d0c57600080fd5b50565b600081359050613d1e81613cf8565b92915050565b600060208284031215613d3a57613d39613aab565b5b6000613d4884828501613d0f565b91505092915050565b613d5a81613cae565b8114613d6557600080fd5b50565b600081359050613d7781613d51565b92915050565b60008060408385031215613d9457613d93613aab565b5b6000613da285828601613d68565b9250506020613db385828601613c4c565b9150509250929050565b600067ffffffffffffffff82169050919050565b613dda81613dbd565b8114613de557600080fd5b50565b600081359050613df781613dd1565b92915050565b600060208284031215613e1357613e12613aab565b5b6000613e2184828501613de8565b91505092915050565b600060208284031215613e4057613e3f613aab565b5b6000613e4e84828501613d68565b91505092915050565b613e6081613c2b565b82525050565b6000602082019050613e7b6000830184613e57565b92915050565b600080600060608486031215613e9a57613e99613aab565b5b6000613ea886828701613d68565b9350506020613eb986828701613d68565b9250506040613eca86828701613c4c565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112613ef957613ef8613ed4565b5b8235905067ffffffffffffffff811115613f1657613f15613ed9565b5b602083019150836020820283011115613f3257613f31613ede565b5b9250929050565b60008060208385031215613f5057613f4f613aab565b5b600083013567ffffffffffffffff811115613f6e57613f6d613ab0565b5b613f7a85828601613ee3565b92509250509250929050565b600063ffffffff82169050919050565b613f9f81613f86565b82525050565b6000602082019050613fba6000830184613f96565b92915050565b613fc981613f86565b8114613fd457600080fd5b50565b600081359050613fe681613fc0565b92915050565b60006020828403121561400257614001613aab565b5b600061401084828501613fd7565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61405682613bbf565b810181811067ffffffffffffffff821117156140755761407461401e565b5b80604052505050565b6000614088613aa1565b9050614094828261404d565b919050565b600067ffffffffffffffff8211156140b4576140b361401e565b5b6140bd82613bbf565b9050602081019050919050565b82818337600083830152505050565b60006140ec6140e784614099565b61407e565b90508281526020810184848401111561410857614107614019565b5b6141138482856140ca565b509392505050565b600082601f8301126141305761412f613ed4565b5b81356141408482602086016140d9565b91505092915050565b60006020828403121561415f5761415e613aab565b5b600082013567ffffffffffffffff81111561417d5761417c613ab0565b5b6141898482850161411b565b91505092915050565b61419b81613cea565b82525050565b60006020820190506141b66000830184614192565b92915050565b6141c581613b3a565b81146141d057600080fd5b50565b6000813590506141e2816141bc565b92915050565b600080604083850312156141ff576141fe613aab565b5b600061420d85828601613d68565b925050602061421e858286016141d3565b9150509250929050565b61423181613dbd565b82525050565b600060208201905061424c6000830184614228565b92915050565b600067ffffffffffffffff82111561426d5761426c61401e565b5b61427682613bbf565b9050602081019050919050565b600061429661429184614252565b61407e565b9050828152602081018484840111156142b2576142b1614019565b5b6142bd8482856140ca565b509392505050565b600082601f8301126142da576142d9613ed4565b5b81356142ea848260208601614283565b91505092915050565b6000806000806080858703121561430d5761430c613aab565b5b600061431b87828801613d68565b945050602061432c87828801613d68565b935050604061433d87828801613c4c565b925050606085013567ffffffffffffffff81111561435e5761435d613ab0565b5b61436a878288016142c5565b91505092959194509250565b6000806040838503121561438d5761438c613aab565b5b600061439b85828601613d68565b92505060206143ac85828601613d68565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143fd57607f821691505b6020821081036144105761440f6143b6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061444c602083613b7b565b915061445782614416565b602082019050919050565b6000602082019050818103600083015261447b8161443f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e27742061646420746865206e756c6c2061646472657373000000000000600082015250565b60006144e7601a83613b7b565b91506144f2826144b1565b602082019050919050565b60006020820190508181036000830152614516816144da565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061455782613c2b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145895761458861451d565b5b600182019050919050565b7f73616c65206973206e6f74207374617274656420796574000000000000000000600082015250565b60006145ca601783613b7b565b91506145d582614594565b602082019050919050565b600060208201905081810360008301526145f9816145bd565b9050919050565b7f63616e206e6f742062652063616c6c6564206279206120636f6e747261637400600082015250565b6000614636601f83613b7b565b915061464182614600565b602082019050919050565b6000602082019050818103600083015261466581614629565b9050919050565b600061467782613c2b565b915061468283613c2b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146b7576146b661451d565b5b828201905092915050565b7f616d6f756e742065786365656473206d617820737570706c7900000000000000600082015250565b60006146f8601983613b7b565b9150614703826146c2565b602082019050919050565b60006020820190508181036000830152614727816146eb565b9050919050565b7f616d6f756e74206578636565647320796f757220616c6c6f636174696f6e0000600082015250565b6000614764601e83613b7b565b915061476f8261472e565b602082019050919050565b6000602082019050818103600083015261479381614757565b9050919050565b60006147a582613c2b565b91506147b083613c2b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147e9576147e861451d565b5b828202905092915050565b7f756e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b600061482a601483613b7b565b9150614835826147f4565b602082019050919050565b600060208201905081810360008301526148598161481d565b9050919050565b7f50726573616c65206973206e6f74206163746976650000000000000000000000600082015250565b6000614896601583613b7b565b91506148a182614860565b602082019050919050565b600060208201905081810360008301526148c581614889565b9050919050565b7f596f7520617265206e6f74206f6e207468652050726573616c65204c69737400600082015250565b6000614902601f83613b7b565b915061490d826148cc565b602082019050919050565b60006020820190508181036000830152614931816148f5565b9050919050565b600061494382613dbd565b915061494e83613dbd565b92508167ffffffffffffffff048311821515161561496f5761496e61451d565b5b828202905092915050565b600081905092915050565b600061499082613b70565b61499a818561497a565b93506149aa818560208601613b8c565b80840191505092915050565b60008190508160005260206000209050919050565b600081546149d8816143e5565b6149e2818661497a565b945060018216600081146149fd5760018114614a0e57614a41565b60ff19831686528186019350614a41565b614a17856149b6565b60005b83811015614a3957815481890152600182019150602081019050614a1a565b838801955050505b50505092915050565b6000614a568286614985565b9150614a628285614985565b9150614a6e82846149cb565b9150819050949350505050565b7f46726573616c65206973206e6f74206163746976650000000000000000000000600082015250565b6000614ab1601583613b7b565b9150614abc82614a7b565b602082019050919050565b60006020820190508181036000830152614ae081614aa4565b9050919050565b7f596f7520617265206e6f74206f6e207468652046726573616c65204c69737400600082015250565b6000614b1d601f83613b7b565b9150614b2882614ae7565b602082019050919050565b60006020820190508181036000830152614b4c81614b10565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614baf602683613b7b565b9150614bba82614b53565b604082019050919050565b60006020820190508181036000830152614bde81614ba2565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614c0c82614be5565b614c168185614bf0565b9350614c26818560208601613b8c565b614c2f81613bbf565b840191505092915050565b6000608082019050614c4f6000830187613cc0565b614c5c6020830186613cc0565b614c696040830185613e57565b8181036060830152614c7b8184614c01565b905095945050505050565b600081519050614c9581613ae1565b92915050565b600060208284031215614cb157614cb0613aab565b5b6000614cbf84828501614c86565b9150509291505056fea26469706673582212205cfdc63271ed251de7fb2c22ceefc67201950150c4c05af9f881f5b527427f9764736f6c634300080d003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f516d58716d3134473779324144414661616144363665364e58543961636659673254757343674b6e6533395241692f6d657461646174612e6a736f6e0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061031a5760003560e01c8063837aea6c116101ab578063b88d4fde116100f7578063e757c17d11610095578063f2c4ce1e1161006f578063f2c4ce1e14610b47578063f2fde38b14610b70578063f9da322414610b99578063fa53d65614610bc25761031a565b8063e757c17d14610ac8578063e985e9c514610af3578063f285e69e14610b305761031a565b8063c9c29b18116100d1578063c9c29b1814610a2f578063cc2e55ab14610a4b578063d5abeb0114610a74578063da3ef23f14610a9f5761031a565b8063b88d4fde146109a0578063c203c43d146109c9578063c87b56dd146109f25761031a565b8063a0712d6811610164578063a945bf801161013e578063a945bf80146108f3578063b09c97341461091e578063b179e0601461093a578063b756bc4c146109635761031a565b8063a0712d6814610883578063a22cb4651461089f578063a31d99d8146108c85761031a565b8063837aea6c146107955780638393634c146107c05780638d438273146107d75780638da5cb5b14610802578063946ef42a1461082d57806395d89b41146108585761031a565b806330f72cd41161026a5780635786c8be1161022357806370a08231116101fd57806370a08231146106ef578063715018a61461072c5780637204a3c91461074357806377b6cb0e1461076c5761031a565b80635786c8be1461065e57806359079ba5146106875780636352211e146106b25761031a565b806330f72cd4146105645780633f2c67171461058f57806342842e0e146105ba578063452c5f9e146105e3578063484b973c1461060c57806355f804b3146106355761031a565b806311576b79116102d75780631a081330116102b15780631a081330146104be57806323b872dd146104e95780632d50b477146105125780632e1a7d4d1461053b5761031a565b806311576b791461043f578063136f4f7a1461047c57806318160ddd146104935761031a565b806301ffc9a71461031f57806306fdde031461035c578063081812fc1461038757806309314162146103c4578063095ea7b3146103ed5780630c29dbae14610416575b600080fd5b34801561032b57600080fd5b5061034660048036038101906103419190613b0d565b610beb565b6040516103539190613b55565b60405180910390f35b34801561036857600080fd5b50610371610c7d565b60405161037e9190613c09565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a99190613c61565b610d0f565b6040516103bb9190613ccf565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190613d24565b610d8b565b005b3480156103f957600080fd5b50610414600480360381019061040f9190613d7d565b610e27565b005b34801561042257600080fd5b5061043d60048036038101906104389190613dfd565b610fcd565b005b34801561044b57600080fd5b5061046660048036038101906104619190613e2a565b611075565b6040516104739190613b55565b60405180910390f35b34801561048857600080fd5b506104916110cb565b005b34801561049f57600080fd5b506104a8611173565b6040516104b59190613e66565b60405180910390f35b3480156104ca57600080fd5b506104d361118a565b6040516104e09190613b55565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b9190613e81565b61119d565b005b34801561051e57600080fd5b5061053960048036038101906105349190613f39565b6111ad565b005b34801561054757600080fd5b50610562600480360381019061055d9190613c61565b611364565b005b34801561057057600080fd5b5061057961142a565b6040516105869190613b55565b60405180910390f35b34801561059b57600080fd5b506105a461143d565b6040516105b19190613fa5565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190613e81565b611453565b005b3480156105ef57600080fd5b5061060a60048036038101906106059190613fec565b611473565b005b34801561061857600080fd5b50610633600480360381019061062e9190613d7d565b611513565b005b34801561064157600080fd5b5061065c60048036038101906106579190614149565b61159d565b005b34801561066a57600080fd5b5061068560048036038101906106809190613f39565b611633565b005b34801561069357600080fd5b5061069c6117ea565b6040516106a99190613fa5565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613c61565b611800565b6040516106e69190613ccf565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190613e2a565b611812565b6040516107239190613e66565b60405180910390f35b34801561073857600080fd5b506107416118ca565b005b34801561074f57600080fd5b5061076a60048036038101906107659190613f39565b611952565b005b34801561077857600080fd5b50610793600480360381019061078e9190613d24565b611b09565b005b3480156107a157600080fd5b506107aa611ba5565b6040516107b791906141a1565b60405180910390f35b3480156107cc57600080fd5b506107d5611bb9565b005b3480156107e357600080fd5b506107ec611c61565b6040516107f99190613b55565b60405180910390f35b34801561080e57600080fd5b50610817611c74565b6040516108249190613ccf565b60405180910390f35b34801561083957600080fd5b50610842611c9e565b60405161084f91906141a1565b60405180910390f35b34801561086457600080fd5b5061086d611cb2565b60405161087a9190613c09565b60405180910390f35b61089d60048036038101906108989190613c61565b611d44565b005b3480156108ab57600080fd5b506108c660048036038101906108c191906141e8565b611f53565b005b3480156108d457600080fd5b506108dd6120ca565b6040516108ea91906141a1565b60405180910390f35b3480156108ff57600080fd5b506109086120de565b6040516109159190614237565b60405180910390f35b61093860048036038101906109339190613d24565b6120f8565b005b34801561094657600080fd5b50610961600480360381019061095c9190613f39565b612375565b005b34801561096f57600080fd5b5061098a60048036038101906109859190613e2a565b61252c565b6040516109979190613b55565b60405180910390f35b3480156109ac57600080fd5b506109c760048036038101906109c291906142f3565b612582565b005b3480156109d557600080fd5b506109f060048036038101906109eb9190613dfd565b6125f5565b005b3480156109fe57600080fd5b50610a196004803603810190610a149190613c61565b61269d565b604051610a269190613c09565b60405180910390f35b610a496004803603810190610a449190613d24565b61283c565b005b348015610a5757600080fd5b50610a726004803603810190610a6d9190613fec565b612a47565b005b348015610a8057600080fd5b50610a89612ae7565b604051610a969190613fa5565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac19190614149565b612afd565b005b348015610ad457600080fd5b50610add612b93565b604051610aea9190614237565b60405180910390f35b348015610aff57600080fd5b50610b1a6004803603810190610b159190614376565b612bad565b604051610b279190613b55565b60405180910390f35b348015610b3c57600080fd5b50610b45612c41565b005b348015610b5357600080fd5b50610b6e6004803603810190610b699190614149565b612ce9565b005b348015610b7c57600080fd5b50610b976004803603810190610b929190613e2a565b612d7f565b005b348015610ba557600080fd5b50610bc06004803603810190610bbb9190613fec565b612e76565b005b348015610bce57600080fd5b50610be96004803603810190610be49190613d24565b612f16565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c4657506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c765750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610c8c906143e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb8906143e5565b8015610d055780601f10610cda57610100808354040283529160200191610d05565b820191906000526020600020905b815481529060010190602001808311610ce857829003601f168201915b5050505050905090565b6000610d1a82612fb2565b610d50576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610d93613011565b73ffffffffffffffffffffffffffffffffffffffff16610db1611c74565b73ffffffffffffffffffffffffffffffffffffffff1614610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90614462565b60405180910390fd5b80600960046101000a81548161ffff021916908361ffff16021790555050565b6000610e3282613019565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e99576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610eb86130e5565b73ffffffffffffffffffffffffffffffffffffffff1614610f1b57610ee481610edf6130e5565b612bad565b610f1a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610fd5613011565b73ffffffffffffffffffffffffffffffffffffffff16610ff3611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104090614462565b60405180910390fd5b80600960066101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110d3613011565b73ffffffffffffffffffffffffffffffffffffffff166110f1611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e90614462565b60405180910390fd5b600960189054906101000a900460ff1615600960186101000a81548160ff021916908315150217905550565b600061117d6130ed565b6001546000540303905090565b600960169054906101000a900460ff1681565b6111a88383836130f6565b505050565b6111b5613011565b73ffffffffffffffffffffffffffffffffffffffff166111d3611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090614462565b60405180910390fd5b60005b8282905081101561135f57600073ffffffffffffffffffffffffffffffffffffffff1683838381811061126257611261614482565b5b90506020020160208101906112779190613e2a565b73ffffffffffffffffffffffffffffffffffffffff16036112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c4906144fd565b60405180910390fd5b6001600f60008585858181106112e6576112e5614482565b5b90506020020160208101906112fb9190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113579061454c565b91505061122c565b505050565b61136c613011565b73ffffffffffffffffffffffffffffffffffffffff1661138a611c74565b73ffffffffffffffffffffffffffffffffffffffff16146113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790614462565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611426573d6000803e3d6000fd5b5050565b600960179054906101000a900460ff1681565b600860189054906101000a900463ffffffff1681565b61146e83838360405180602001604052806000815250612582565b505050565b61147b613011565b73ffffffffffffffffffffffffffffffffffffffff16611499611c74565b73ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e690614462565b60405180910390fd5b806008601c6101000a81548163ffffffff021916908363ffffffff16021790555050565b61151b613011565b73ffffffffffffffffffffffffffffffffffffffff16611539611c74565b73ffffffffffffffffffffffffffffffffffffffff161461158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690614462565b60405180910390fd5b611599828261349d565b5050565b6115a5613011565b73ffffffffffffffffffffffffffffffffffffffff166115c3611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090614462565b60405180910390fd5b80600b908051906020019061162f9291906139fe565b5050565b61163b613011565b73ffffffffffffffffffffffffffffffffffffffff16611659611c74565b73ffffffffffffffffffffffffffffffffffffffff16146116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690614462565b60405180910390fd5b60005b828290508110156117e557600073ffffffffffffffffffffffffffffffffffffffff168383838181106116e8576116e7614482565b5b90506020020160208101906116fd9190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1603611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a906144fd565b60405180910390fd5b6000600f600085858581811061176c5761176b614482565b5b90506020020160208101906117819190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806117dd9061454c565b9150506116b2565b505050565b6008601c9054906101000a900463ffffffff1681565b600061180b82613019565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611879576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6118d2613011565b73ffffffffffffffffffffffffffffffffffffffff166118f0611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90614462565b60405180910390fd5b61195060006134bb565b565b61195a613011565b73ffffffffffffffffffffffffffffffffffffffff16611978611c74565b73ffffffffffffffffffffffffffffffffffffffff16146119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c590614462565b60405180910390fd5b60005b82829050811015611b0457600073ffffffffffffffffffffffffffffffffffffffff16838383818110611a0757611a06614482565b5b9050602002016020810190611a1c9190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1603611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a69906144fd565b60405180910390fd5b6001600d6000858585818110611a8b57611a8a614482565b5b9050602002016020810190611aa09190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611afc9061454c565b9150506119d1565b505050565b611b11613011565b73ffffffffffffffffffffffffffffffffffffffff16611b2f611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c90614462565b60405180910390fd5b80600960006101000a81548161ffff021916908361ffff16021790555050565b600960009054906101000a900461ffff1681565b611bc1613011565b73ffffffffffffffffffffffffffffffffffffffff16611bdf611c74565b73ffffffffffffffffffffffffffffffffffffffff1614611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90614462565b60405180910390fd5b600960169054906101000a900460ff1615600960166101000a81548160ff021916908315150217905550565b600960189054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960029054906101000a900461ffff1681565b606060038054611cc1906143e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611ced906143e5565b8015611d3a5780601f10611d0f57610100808354040283529160200191611d3a565b820191906000526020600020905b815481529060010190602001808311611d1d57829003601f168201915b5050505050905090565b600960169054906101000a900460ff16611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a906145e0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df89061464c565b60405180910390fd5b600860149054906101000a900463ffffffff1663ffffffff1681611e23611173565b611e2d919061466c565b1115611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e659061470e565b60405180910390fd5b600960009054906101000a900461ffff1661ffff1681611e8d33611812565b611e97919061466c565b1115611ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecf9061477a565b60405180910390fd5b600960069054906101000a900467ffffffffffffffff1667ffffffffffffffff1681611f04919061479a565b341015611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d90614840565b60405180910390fd5b611f50338261349d565b50565b611f5b6130e5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fbf576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611fcc6130e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120796130e5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120be9190613b55565b60405180910390a35050565b600960049054906101000a900461ffff1681565b600960069054906101000a900467ffffffffffffffff1681565b600960179054906101000a900460ff16612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e906148ac565b60405180910390fd5b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ca90614918565b60405180910390fd5b600860189054906101000a900463ffffffff1663ffffffff168161ffff166121f9611173565b612203919061466c565b1115612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b9061470e565b60405180910390fd5b600960029054906101000a900461ffff1661ffff168161ffff1661226733611812565b612271919061466c565b11156122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a99061477a565b60405180910390fd5b6009600e9054906101000a900467ffffffffffffffff168161ffff166122d89190614938565b67ffffffffffffffff16341015612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90614840565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002050612372338261ffff1661349d565b50565b61237d613011565b73ffffffffffffffffffffffffffffffffffffffff1661239b611c74565b73ffffffffffffffffffffffffffffffffffffffff16146123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e890614462565b60405180910390fd5b60005b8282905081101561252757600073ffffffffffffffffffffffffffffffffffffffff1683838381811061242a57612429614482565b5b905060200201602081019061243f9190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1603612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c906144fd565b60405180910390fd5b6000600d60008585858181106124ae576124ad614482565b5b90506020020160208101906124c39190613e2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061251f9061454c565b9150506123f4565b505050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61258d8484846130f6565b60008373ffffffffffffffffffffffffffffffffffffffff163b146125ef576125b884848484613581565b6125ee576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6125fd613011565b73ffffffffffffffffffffffffffffffffffffffff1661261b611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266890614462565b60405180910390fd5b806009600e6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60606126a882612fb2565b6126de576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600b80546126ed906143e5565b80601f0160208091040260200160405190810160405280929190818152602001828054612719906143e5565b80156127665780601f1061273b57610100808354040283529160200191612766565b820191906000526020600020905b81548152906001019060200180831161274957829003601f168201915b50505050509050600081510361280657600a8054612783906143e5565b80601f01602080910402602001604051908101604052809291908181526020018280546127af906143e5565b80156127fc5780601f106127d1576101008083540402835291602001916127fc565b820191906000526020600020905b8154815290600101906020018083116127df57829003601f168201915b5050505050612834565b80612810846136d1565b600c60405160200161282493929190614a4a565b6040516020818303038152906040525b915050919050565b600960189054906101000a900460ff1661288b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288290614ac7565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290e90614b33565b60405180910390fd5b6008601c9054906101000a900463ffffffff1663ffffffff168161ffff1661293d611173565b612947919061466c565b1115612988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297f9061470e565b60405180910390fd5b600960049054906101000a900461ffff1661ffff168161ffff166129ab33611812565b6129b5919061466c565b11156129f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ed9061477a565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002050612a44338261ffff1661349d565b50565b612a4f613011565b73ffffffffffffffffffffffffffffffffffffffff16612a6d611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aba90614462565b60405180910390fd5b80600860186101000a81548163ffffffff021916908363ffffffff16021790555050565b600860149054906101000a900463ffffffff1681565b612b05613011565b73ffffffffffffffffffffffffffffffffffffffff16612b23611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7090614462565b60405180910390fd5b80600c9080519060200190612b8f9291906139fe565b5050565b6009600e9054906101000a900467ffffffffffffffff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612c49613011565b73ffffffffffffffffffffffffffffffffffffffff16612c67611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb490614462565b60405180910390fd5b600960179054906101000a900460ff1615600960176101000a81548160ff021916908315150217905550565b612cf1613011565b73ffffffffffffffffffffffffffffffffffffffff16612d0f611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5c90614462565b60405180910390fd5b80600a9080519060200190612d7b9291906139fe565b5050565b612d87613011565b73ffffffffffffffffffffffffffffffffffffffff16612da5611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df290614462565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6190614bc5565b60405180910390fd5b612e73816134bb565b50565b612e7e613011565b73ffffffffffffffffffffffffffffffffffffffff16612e9c611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee990614462565b60405180910390fd5b80600860146101000a81548163ffffffff021916908363ffffffff16021790555050565b612f1e613011565b73ffffffffffffffffffffffffffffffffffffffff16612f3c611c74565b73ffffffffffffffffffffffffffffffffffffffff1614612f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8990614462565b60405180910390fd5b80600960026101000a81548161ffff021916908361ffff16021790555050565b600081612fbd6130ed565b11158015612fcc575060005482105b801561300a575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b600080829050806130286130ed565b116130ae576000548110156130ad5760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036130ab575b600081036130a1576004600083600190039350838152602001908152602001600020549050613077565b80925050506130e0565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b60006001905090565b600061310182613019565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613168576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166131896130e5565b73ffffffffffffffffffffffffffffffffffffffff1614806131b857506131b7856131b26130e5565b612bad565b5b806131fd57506131c66130e5565b73ffffffffffffffffffffffffffffffffffffffff166131e584610d0f565b73ffffffffffffffffffffffffffffffffffffffff16145b905080613236576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361329c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132a9858585600161372b565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b6133a686613731565b1717600460008581526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000083160361342e576000600184019050600060046000838152602001908152602001600020540361342c57600054811461342b578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613496858585600161373b565b5050505050565b6134b7828260405180602001604052806000815250613741565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135a76130e5565b8786866040518563ffffffff1660e01b81526004016135c99493929190614c3a565b6020604051808303816000875af192505050801561360557506040513d601f19601f820116820180604052508101906136029190614c9b565b60015b61367e573d8060008114613635576040519150601f19603f3d011682016040523d82523d6000602084013e61363a565b606091505b506000815103613676576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b801561371757600183039250600a81066030018353600a810490506136f7565b508181036020830392508083525050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036137ad576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083036137e7576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6137f4600085838661372b565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1613859600185146139f4565b901b60a042901b61386986613731565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b1461396d575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461391d6000878480600101955087613581565b613953576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106138ae57826000541461396857600080fd5b6139d8565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821061396e575b8160008190555050506139ee600085838661373b565b50505050565b6000819050919050565b828054613a0a906143e5565b90600052602060002090601f016020900481019282613a2c5760008555613a73565b82601f10613a4557805160ff1916838001178555613a73565b82800160010185558215613a73579182015b82811115613a72578251825591602001919060010190613a57565b5b509050613a809190613a84565b5090565b5b80821115613a9d576000816000905550600101613a85565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613aea81613ab5565b8114613af557600080fd5b50565b600081359050613b0781613ae1565b92915050565b600060208284031215613b2357613b22613aab565b5b6000613b3184828501613af8565b91505092915050565b60008115159050919050565b613b4f81613b3a565b82525050565b6000602082019050613b6a6000830184613b46565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613baa578082015181840152602081019050613b8f565b83811115613bb9576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bdb82613b70565b613be58185613b7b565b9350613bf5818560208601613b8c565b613bfe81613bbf565b840191505092915050565b60006020820190508181036000830152613c238184613bd0565b905092915050565b6000819050919050565b613c3e81613c2b565b8114613c4957600080fd5b50565b600081359050613c5b81613c35565b92915050565b600060208284031215613c7757613c76613aab565b5b6000613c8584828501613c4c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cb982613c8e565b9050919050565b613cc981613cae565b82525050565b6000602082019050613ce46000830184613cc0565b92915050565b600061ffff82169050919050565b613d0181613cea565b8114613d0c57600080fd5b50565b600081359050613d1e81613cf8565b92915050565b600060208284031215613d3a57613d39613aab565b5b6000613d4884828501613d0f565b91505092915050565b613d5a81613cae565b8114613d6557600080fd5b50565b600081359050613d7781613d51565b92915050565b60008060408385031215613d9457613d93613aab565b5b6000613da285828601613d68565b9250506020613db385828601613c4c565b9150509250929050565b600067ffffffffffffffff82169050919050565b613dda81613dbd565b8114613de557600080fd5b50565b600081359050613df781613dd1565b92915050565b600060208284031215613e1357613e12613aab565b5b6000613e2184828501613de8565b91505092915050565b600060208284031215613e4057613e3f613aab565b5b6000613e4e84828501613d68565b91505092915050565b613e6081613c2b565b82525050565b6000602082019050613e7b6000830184613e57565b92915050565b600080600060608486031215613e9a57613e99613aab565b5b6000613ea886828701613d68565b9350506020613eb986828701613d68565b9250506040613eca86828701613c4c565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112613ef957613ef8613ed4565b5b8235905067ffffffffffffffff811115613f1657613f15613ed9565b5b602083019150836020820283011115613f3257613f31613ede565b5b9250929050565b60008060208385031215613f5057613f4f613aab565b5b600083013567ffffffffffffffff811115613f6e57613f6d613ab0565b5b613f7a85828601613ee3565b92509250509250929050565b600063ffffffff82169050919050565b613f9f81613f86565b82525050565b6000602082019050613fba6000830184613f96565b92915050565b613fc981613f86565b8114613fd457600080fd5b50565b600081359050613fe681613fc0565b92915050565b60006020828403121561400257614001613aab565b5b600061401084828501613fd7565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61405682613bbf565b810181811067ffffffffffffffff821117156140755761407461401e565b5b80604052505050565b6000614088613aa1565b9050614094828261404d565b919050565b600067ffffffffffffffff8211156140b4576140b361401e565b5b6140bd82613bbf565b9050602081019050919050565b82818337600083830152505050565b60006140ec6140e784614099565b61407e565b90508281526020810184848401111561410857614107614019565b5b6141138482856140ca565b509392505050565b600082601f8301126141305761412f613ed4565b5b81356141408482602086016140d9565b91505092915050565b60006020828403121561415f5761415e613aab565b5b600082013567ffffffffffffffff81111561417d5761417c613ab0565b5b6141898482850161411b565b91505092915050565b61419b81613cea565b82525050565b60006020820190506141b66000830184614192565b92915050565b6141c581613b3a565b81146141d057600080fd5b50565b6000813590506141e2816141bc565b92915050565b600080604083850312156141ff576141fe613aab565b5b600061420d85828601613d68565b925050602061421e858286016141d3565b9150509250929050565b61423181613dbd565b82525050565b600060208201905061424c6000830184614228565b92915050565b600067ffffffffffffffff82111561426d5761426c61401e565b5b61427682613bbf565b9050602081019050919050565b600061429661429184614252565b61407e565b9050828152602081018484840111156142b2576142b1614019565b5b6142bd8482856140ca565b509392505050565b600082601f8301126142da576142d9613ed4565b5b81356142ea848260208601614283565b91505092915050565b6000806000806080858703121561430d5761430c613aab565b5b600061431b87828801613d68565b945050602061432c87828801613d68565b935050604061433d87828801613c4c565b925050606085013567ffffffffffffffff81111561435e5761435d613ab0565b5b61436a878288016142c5565b91505092959194509250565b6000806040838503121561438d5761438c613aab565b5b600061439b85828601613d68565b92505060206143ac85828601613d68565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143fd57607f821691505b6020821081036144105761440f6143b6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061444c602083613b7b565b915061445782614416565b602082019050919050565b6000602082019050818103600083015261447b8161443f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e27742061646420746865206e756c6c2061646472657373000000000000600082015250565b60006144e7601a83613b7b565b91506144f2826144b1565b602082019050919050565b60006020820190508181036000830152614516816144da565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061455782613c2b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145895761458861451d565b5b600182019050919050565b7f73616c65206973206e6f74207374617274656420796574000000000000000000600082015250565b60006145ca601783613b7b565b91506145d582614594565b602082019050919050565b600060208201905081810360008301526145f9816145bd565b9050919050565b7f63616e206e6f742062652063616c6c6564206279206120636f6e747261637400600082015250565b6000614636601f83613b7b565b915061464182614600565b602082019050919050565b6000602082019050818103600083015261466581614629565b9050919050565b600061467782613c2b565b915061468283613c2b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146b7576146b661451d565b5b828201905092915050565b7f616d6f756e742065786365656473206d617820737570706c7900000000000000600082015250565b60006146f8601983613b7b565b9150614703826146c2565b602082019050919050565b60006020820190508181036000830152614727816146eb565b9050919050565b7f616d6f756e74206578636565647320796f757220616c6c6f636174696f6e0000600082015250565b6000614764601e83613b7b565b915061476f8261472e565b602082019050919050565b6000602082019050818103600083015261479381614757565b9050919050565b60006147a582613c2b565b91506147b083613c2b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147e9576147e861451d565b5b828202905092915050565b7f756e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b600061482a601483613b7b565b9150614835826147f4565b602082019050919050565b600060208201905081810360008301526148598161481d565b9050919050565b7f50726573616c65206973206e6f74206163746976650000000000000000000000600082015250565b6000614896601583613b7b565b91506148a182614860565b602082019050919050565b600060208201905081810360008301526148c581614889565b9050919050565b7f596f7520617265206e6f74206f6e207468652050726573616c65204c69737400600082015250565b6000614902601f83613b7b565b915061490d826148cc565b602082019050919050565b60006020820190508181036000830152614931816148f5565b9050919050565b600061494382613dbd565b915061494e83613dbd565b92508167ffffffffffffffff048311821515161561496f5761496e61451d565b5b828202905092915050565b600081905092915050565b600061499082613b70565b61499a818561497a565b93506149aa818560208601613b8c565b80840191505092915050565b60008190508160005260206000209050919050565b600081546149d8816143e5565b6149e2818661497a565b945060018216600081146149fd5760018114614a0e57614a41565b60ff19831686528186019350614a41565b614a17856149b6565b60005b83811015614a3957815481890152600182019150602081019050614a1a565b838801955050505b50505092915050565b6000614a568286614985565b9150614a628285614985565b9150614a6e82846149cb565b9150819050949350505050565b7f46726573616c65206973206e6f74206163746976650000000000000000000000600082015250565b6000614ab1601583613b7b565b9150614abc82614a7b565b602082019050919050565b60006020820190508181036000830152614ae081614aa4565b9050919050565b7f596f7520617265206e6f74206f6e207468652046726573616c65204c69737400600082015250565b6000614b1d601f83613b7b565b9150614b2882614ae7565b602082019050919050565b60006020820190508181036000830152614b4c81614b10565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614baf602683613b7b565b9150614bba82614b53565b604082019050919050565b60006020820190508181036000830152614bde81614ba2565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614c0c82614be5565b614c168185614bf0565b9350614c26818560208601613b8c565b614c2f81613bbf565b840191505092915050565b6000608082019050614c4f6000830187613cc0565b614c5c6020830186613cc0565b614c696040830185613e57565b8181036060830152614c7b8184614c01565b905095945050505050565b600081519050614c9581613ae1565b92915050565b600060208284031215614cb157614cb0613aab565b5b6000614cbf84828501614c86565b9150509291505056fea26469706673582212205cfdc63271ed251de7fb2c22ceefc67201950150c4c05af9f881f5b527427f9764736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f516d58716d3134473779324144414661616144363665364e58543961636659673254757343674b6e6533395241692f6d657461646174612e6a736f6e0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _notRevealedURI (string): ipfs://QmXqm14G7y2ADAFaaaD66e6NXT9acfYg2TusCgKne39RAi/metadata.json
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [2] : 697066733a2f2f516d58716d3134473779324144414661616144363665364e58
Arg [3] : 543961636659673254757343674b6e6533395241692f6d657461646174612e6a
Arg [4] : 736f6e0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
40287:6421:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15007:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20020:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22088:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44392:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21548:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46371:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43182:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45782:101;;;;;;;;;;;;;:::i;:::-;;14061:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40715:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22974:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43798:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45097:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40744:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40393:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23215:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46123:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46595:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45215:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44090:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40437:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19809:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15686:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1372:103;;;;;;;;;;;;;:::i;:::-;;42479:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46242:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40481:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45576:88;;;;;;;;;;;;;:::i;:::-;;40778:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;721:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40522:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20189:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41387:508;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22364:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40561:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40597:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41903:568;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42769:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44503:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23471:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46482:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44625:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43301:489;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46000:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40355:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45445:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40644:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22743:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45672:102;;;;;;;;;;;;;:::i;:::-;;45322:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1630:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45891:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43069:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15007:615;15092:4;15407:10;15392:25;;:11;:25;;;;:102;;;;15484:10;15469:25;;:11;:25;;;;15392:102;:179;;;;15561:10;15546:25;;:11;:25;;;;15392:179;15372:199;;15007:615;;;:::o;20020:100::-;20074:13;20107:5;20100:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20020:100;:::o;22088:204::-;22156:7;22181:16;22189:7;22181;:16::i;:::-;22176:64;;22206:34;;;;;;;;;;;;;;22176:64;22260:15;:24;22276:7;22260:24;;;;;;;;;;;;;;;;;;;;;22253:31;;22088:204;;;:::o;44392:103::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44480:7:::1;44466:11;;:21;;;;;;;;;;;;;;;;;;44392:103:::0;:::o;21548:474::-;21621:13;21653:27;21672:7;21653:18;:27::i;:::-;21621:61;;21703:5;21697:11;;:2;:11;;;21693:48;;21717:24;;;;;;;;;;;;;;21693:48;21781:5;21758:28;;:19;:17;:19::i;:::-;:28;;;21754:175;;21806:44;21823:5;21830:19;:17;:19::i;:::-;21806:16;:44::i;:::-;21801:128;;21878:35;;;;;;;;;;;;;;21801:128;21754:175;21968:2;21941:15;:24;21957:7;21941:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;22006:7;22002:2;21986:28;;21995:5;21986:28;;;;;;;;;;;;21610:412;21548:474;;:::o;46371:103::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46457:9:::1;46443:11;;:23;;;;;;;;;;;;;;;;;;46371:103:::0;:::o;43182:110::-;43242:4;43266:12;:18;43279:4;43266:18;;;;;;;;;;;;;;;;;;;;;;;;;43259:25;;43182:110;;;:::o;45782:101::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45859:16:::1;;;;;;;;;;;45858:17;45839:16;;:36;;;;;;;;;;;;;;;;;;45782:101::o:0;14061:315::-;14114:7;14342:15;:13;:15::i;:::-;14327:12;;14311:13;;:28;:46;14304:53;;14061:315;:::o;40715:22::-;;;;;;;;;;;;;:::o;22974:170::-;23108:28;23118:4;23124:2;23128:7;23108:9;:28::i;:::-;22974:170;;;:::o;43798:280::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43890:9:::1;43885:186;43909:9;;:16;;43905:1;:20;43885:186;;;43977:1;43953:26;;:9;;43963:1;43953:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;::::0;43945:65:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;44055:4;44025:13;:27;44039:9;;44049:1;44039:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;44025:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;43927:3;;;;;:::i;:::-;;;;43885:186;;;;43798:280:::0;;:::o;45097:110::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45170:10:::1;45162:28;;:37;45191:7;45162:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45097:110:::0;:::o;40744:27::-;;;;;;;;;;;;;:::o;40393:37::-;;;;;;;;;;;;;:::o;23215:185::-;23353:39;23370:4;23376:2;23380:7;23353:39;;;;;;;;;;;;:16;:39::i;:::-;23215:185;;;:::o;46123:111::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46216:10:::1;46197:16;;:29;;;;;;;;;;;;;;;;;;46123:111:::0;:::o;46595:110::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46674:23:::1;46684:3;46689:7;46674:9;:23::i;:::-;46595:110:::0;;:::o;45215:99::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45299:7:::1;45288:8;:18;;;;;;;;;;;;:::i;:::-;;45215:99:::0;:::o;44090:290::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44187:9:::1;44182:191;44206:9;;:16;;44202:1;:20;44182:191;;;44276:1;44252:26;;:9;;44262:1;44252:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;::::0;44244:65:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;44356:5;44326:13;:27;44340:9;;44350:1;44340:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;44326:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;44224:3;;;;;:::i;:::-;;;;44182:191;;;;44090:290:::0;;:::o;40437:37::-;;;;;;;;;;;;;:::o;19809:144::-;19873:7;19916:27;19935:7;19916:18;:27::i;:::-;19893:52;;19809:144;;;:::o;15686:224::-;15750:7;15791:1;15774:19;;:5;:19;;;15770:60;;15802:28;;;;;;;;;;;;;;15770:60;11025:13;15848:18;:25;15867:5;15848:25;;;;;;;;;;;;;;;;:54;15841:61;;15686:224;;;:::o;1372:103::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1437:30:::1;1464:1;1437:18;:30::i;:::-;1372:103::o:0;42479:278::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42570:9:::1;42565:185;42589:9;;:16;;42585:1;:20;42565:185;;;42657:1;42633:26;;:9;;42643:1;42633:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;::::0;42625:65:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42734:4;42705:12;:26;42718:9;;42728:1;42718:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42705:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;42607:3;;;;;:::i;:::-;;;;42565:185;;;;42479:278:::0;;:::o;46242:121::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46342:13:::1;46323:16;;:32;;;;;;;;;;;;;;;;;;46242:121:::0;:::o;40481:34::-;;;;;;;;;;;;;:::o;45576:88::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45646:10:::1;;;;;;;;;;;45645:11;45632:10;;:24;;;;;;;;;;;;;;;;;;45576:88::o:0;40778:28::-;;;;;;;;;;;;;:::o;721:87::-;767:7;794:6;;;;;;;;;;;787:13;;721:87;:::o;40522:32::-;;;;;;;;;;;;;:::o;20189:104::-;20245:13;20278:7;20271:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20189:104;:::o;41387:508::-;41455:10;;;;;;;;;;;41447:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;41525:10;41512:23;;:9;:23;;;41504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41619:9;;;;;;;;;;;41591:37;;41607:8;41591:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;41583:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;41713:16;;;;;;;;;;;41677:52;;41701:8;41677:21;41687:10;41677:9;:21::i;:::-;:32;;;;:::i;:::-;:52;;41669:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41807:11;;;;;;;;;;;41796:22;;:8;:22;;;;:::i;:::-;41783:9;:35;;41775:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41856:31;41866:10;41878:8;41856:9;:31::i;:::-;41387:508;:::o;22364:308::-;22475:19;:17;:19::i;:::-;22463:31;;:8;:31;;;22459:61;;22503:17;;;;;;;;;;;;;;22459:61;22585:8;22533:18;:39;22552:19;:17;:19::i;:::-;22533:39;;;;;;;;;;;;;;;:49;22573:8;22533:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;22645:8;22609:55;;22624:19;:17;:19::i;:::-;22609:55;;;22655:8;22609:55;;;;;;:::i;:::-;;;;;;;;22364:308;;:::o;40561:29::-;;;;;;;;;;;;;:::o;40597:40::-;;;;;;;;;;;;;:::o;41903:568::-;41978:15;;;;;;;;;;;41970:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;42038:12;:24;42051:10;42038:24;;;;;;;;;;;;;;;;;;;;;;;;;42030:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42145:16;;;;;;;;;;;42117:44;;42133:8;42117:24;;:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:44;;42109:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;42246:14;;;;;;;;;;;42210:50;;42234:8;42210:32;;:21;42220:10;42210:9;:21::i;:::-;:32;;;;:::i;:::-;:50;;42202:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;42338:12;;;;;;;;;;;42327:8;:23;;;;;;:::i;:::-;42314:36;;:9;:36;;42306:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42389:19;:31;42409:10;42389:31;;;;;;;;;;;;;;;;42431;42441:10;42453:8;42431:31;;:9;:31::i;:::-;41903:568;:::o;42769:288::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42865:9:::1;42860:190;42884:9;;:16;;42880:1;:20;42860:190;;;42954:1;42930:26;;:9;;42940:1;42930:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;::::0;42922:65:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43033:5;43004:12;:26;43017:9;;43027:1;43017:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43004:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;42902:3;;;;;:::i;:::-;;;;42860:190;;;;42769:288:::0;;:::o;44503:112::-;44564:4;44588:13;:19;44602:4;44588:19;;;;;;;;;;;;;;;;;;;;;;;;;44581:26;;44503:112;;;:::o;23471:396::-;23638:28;23648:4;23654:2;23658:7;23638:9;:28::i;:::-;23699:1;23681:2;:14;;;:19;23677:183;;23720:56;23751:4;23757:2;23761:7;23770:5;23720:30;:56::i;:::-;23715:145;;23804:40;;;;;;;;;;;;;;23715:145;23677:183;23471:396;;;;:::o;46482:105::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46570:9:::1;46555:12;;:24;;;;;;;;;;;;;;;;;;46482:105:::0;:::o;44625:335::-;44689:13;44719:16;44727:7;44719;:16::i;:::-;44715:58;;44744:29;;;;;;;;;;;;;;44715:58;44786:21;44810:8;44786:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44861:1;44842:7;44836:21;:26;:116;;44937:15;44836:116;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44889:7;44898:18;44908:7;44898:9;:18::i;:::-;44918:14;44872:61;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44836:116;44829:123;;;44625:335;;;:::o;43301:489::-;43377:16;;;;;;;;;;;43369:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;43438:13;:25;43452:10;43438:25;;;;;;;;;;;;;;;;;;;;;;;;;43430:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;43546:16;;;;;;;;;;;43518:44;;43534:8;43518:24;;:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:44;;43510:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;43647:11;;;;;;;;;;;43611:47;;43635:8;43611:32;;:21;43621:10;43611:9;:21::i;:::-;:32;;;;:::i;:::-;:47;;43603:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;43707:20;:32;43728:10;43707:32;;;;;;;;;;;;;;;;43750:31;43760:10;43772:8;43750:31;;:9;:31::i;:::-;43301:489;:::o;46000:115::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46097:10:::1;46078:16;;:29;;;;;;;;;;;;;;;;;;46000:115:::0;:::o;40355:31::-;;;;;;;;;;;;;:::o;45445:123::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45547:13:::1;45530:14;:30;;;;;;;;;;;;:::i;:::-;;45445:123:::0;:::o;40644:40::-;;;;;;;;;;;;;:::o;22743:164::-;22840:4;22864:18;:25;22883:5;22864:25;;;;;;;;;;;;;;;:35;22890:8;22864:35;;;;;;;;;;;;;;;;;;;;;;;;;22857:42;;22743:164;;;;:::o;45672:102::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45751:15:::1;;;;;;;;;;;45750:16;45732:15;;:34;;;;;;;;;;;;;;;;;;45672:102::o:0;45322:113::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45420:7:::1;45402:15;:25;;;;;;;;;;;;:::i;:::-;;45322:113:::0;:::o;1630:201::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1739:1:::1;1719:22;;:8;:22;;::::0;1711:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1795:28;1814:8;1795:18;:28::i;:::-;1630:201:::0;:::o;45891:101::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45974:10:::1;45962:9;;:22;;;;;;;;;;;;;;;;;;45891:101:::0;:::o;43069:105::-;952:12;:10;:12::i;:::-;941:23;;:7;:5;:7::i;:::-;:23;;;933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43159:7:::1;43142:14;;:24;;;;;;;;;;;;;;;;;;43069:105:::0;:::o;24122:273::-;24179:4;24235:7;24216:15;:13;:15::i;:::-;:26;;:66;;;;;24269:13;;24259:7;:23;24216:66;:152;;;;;24367:1;11795:8;24320:17;:26;24338:7;24320:26;;;;;;;;;;;;:43;:48;24216:152;24196:172;;24122:273;;;:::o;93:98::-;146:7;173:10;166:17;;93:98;:::o;17324:1129::-;17391:7;17411:12;17426:7;17411:22;;17494:4;17475:15;:13;:15::i;:::-;:23;17471:915;;17528:13;;17521:4;:20;17517:869;;;17566:14;17583:17;:23;17601:4;17583:23;;;;;;;;;;;;17566:40;;17699:1;11795:8;17672:6;:23;:28;17668:699;;18191:113;18208:1;18198:6;:11;18191:113;;18251:17;:25;18269:6;;;;;;;18251:25;;;;;;;;;;;;18242:34;;18191:113;;;18337:6;18330:13;;;;;;17668:699;17543:843;17517:869;17471:915;18414:31;;;;;;;;;;;;;;17324:1129;;;;:::o;38104:105::-;38164:7;38191:10;38184:17;;38104:105;:::o;44968:92::-;45024:7;45051:1;45044:8;;44968:92;:::o;29361:2515::-;29476:27;29506;29525:7;29506:18;:27::i;:::-;29476:57;;29591:4;29550:45;;29566:19;29550:45;;;29546:86;;29604:28;;;;;;;;;;;;;;29546:86;29645:22;29694:4;29671:27;;:19;:17;:19::i;:::-;:27;;;:87;;;;29715:43;29732:4;29738:19;:17;:19::i;:::-;29715:16;:43::i;:::-;29671:87;:147;;;;29799:19;:17;:19::i;:::-;29775:43;;:20;29787:7;29775:11;:20::i;:::-;:43;;;29671:147;29645:174;;29837:17;29832:66;;29863:35;;;;;;;;;;;;;;29832:66;29927:1;29913:16;;:2;:16;;;29909:52;;29938:23;;;;;;;;;;;;;;29909:52;29974:43;29996:4;30002:2;30006:7;30015:1;29974:21;:43::i;:::-;30090:15;:24;30106:7;30090:24;;;;;;;;;;;;30083:31;;;;;;;;;;;30482:18;:24;30501:4;30482:24;;;;;;;;;;;;;;;;30480:26;;;;;;;;;;;;30551:18;:22;30570:2;30551:22;;;;;;;;;;;;;;;;30549:24;;;;;;;;;;;12077:8;11679:3;30932:15;:41;;30890:21;30908:2;30890:17;:21::i;:::-;:84;:128;30844:17;:26;30862:7;30844:26;;;;;;;;;;;:174;;;;31188:1;12077:8;31138:19;:46;:51;31134:626;;31210:19;31242:1;31232:7;:11;31210:33;;31399:1;31365:17;:30;31383:11;31365:30;;;;;;;;;;;;:35;31361:384;;31503:13;;31488:11;:28;31484:242;;31683:19;31650:17;:30;31668:11;31650:30;;;;;;;;;;;:52;;;;31484:242;31361:384;31191:569;31134:626;31807:7;31803:2;31788:27;;31797:4;31788:27;;;;;;;;;;;;31826:42;31847:4;31853:2;31857:7;31866:1;31826:20;:42::i;:::-;29465:2411;;29361:2515;;;:::o;24479:104::-;24548:27;24558:2;24562:8;24548:27;;;;;;;;;;;;:9;:27::i;:::-;24479:104;;:::o;1991:191::-;2065:16;2084:6;;;;;;;;;;;2065:25;;2110:8;2101:6;;:17;;;;;;;;;;;;;;;;;;2165:8;2134:40;;2155:8;2134:40;;;;;;;;;;;;2054:128;1991:191;:::o;35573:716::-;35736:4;35782:2;35757:45;;;35803:19;:17;:19::i;:::-;35824:4;35830:7;35839:5;35757:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35753:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36057:1;36040:6;:13;:18;36036:235;;36086:40;;;;;;;;;;;;;;36036:235;36229:6;36223:13;36214:6;36210:2;36206:15;36199:38;35753:529;35926:54;;;35916:64;;;:6;:64;;;;35909:71;;;35573:716;;;;;;:::o;38315:1959::-;38372:17;38793:3;38786:4;38780:11;38776:21;38769:28;;38884:3;38878:4;38871:17;38990:3;39447:5;39577:1;39572:3;39568:11;39561:18;;39714:2;39708:4;39704:13;39700:2;39696:22;39691:3;39683:36;39755:2;39749:4;39745:13;39737:21;;39338:682;39774:4;39338:682;;;39949:1;39944:3;39940:11;39933:18;;40000:2;39994:4;39990:13;39986:2;39982:22;39977:3;39969:36;39870:2;39864:4;39860:13;39852:21;;39338:682;;;39342:431;40071:3;40066;40062:13;40186:2;40181:3;40177:12;40170:19;;40249:6;40244:3;40237:19;38411:1856;;38315:1959;;;:::o;36937:159::-;;;;;:::o;21109:148::-;21173:14;21234:5;21224:15;;21109:148;;;:::o;37755:158::-;;;;;:::o;24956:2236::-;25079:20;25102:13;;25079:36;;25144:1;25130:16;;:2;:16;;;25126:48;;25155:19;;;;;;;;;;;;;;25126:48;25201:1;25189:8;:13;25185:44;;25211:18;;;;;;;;;;;;;;25185:44;25242:61;25272:1;25276:2;25280:12;25294:8;25242:21;:61::i;:::-;25846:1;11162:2;25817:1;:25;;25816:31;25804:8;:44;25778:18;:22;25797:2;25778:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;11942:3;26247:29;26274:1;26262:8;:13;26247:14;:29::i;:::-;:56;;11679:3;26184:15;:41;;26142:21;26160:2;26142:17;:21::i;:::-;:84;:162;26091:17;:31;26109:12;26091:31;;;;;;;;;;;:213;;;;26321:20;26344:12;26321:35;;26371:11;26400:8;26385:12;:23;26371:37;;26447:1;26429:2;:14;;;:19;26425:635;;26469:313;26525:12;26521:2;26500:38;;26517:1;26500:38;;;;;;;;;;;;26566:69;26605:1;26609:2;26613:14;;;;;;26629:5;26566:30;:69::i;:::-;26561:174;;26671:40;;;;;;;;;;;;;;26561:174;26777:3;26762:12;:18;26469:313;;26863:12;26846:13;;:29;26842:43;;26877:8;;;26842:43;26425:635;;;26926:119;26982:14;;;;;;26978:2;26957:40;;26974:1;26957:40;;;;;;;;;;;;27040:3;27025:12;:18;26926:119;;26425:635;27090:12;27074:13;:28;;;;25555:1559;;27124:60;27153:1;27157:2;27161:12;27175:8;27124:20;:60::i;:::-;25068:2124;24956:2236;;;:::o;21344:142::-;21402:14;21463:5;21453:15;;21344:142;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:89::-;4221:7;4261:6;4254:5;4250:18;4239:29;;4185:89;;;:::o;4280:120::-;4352:23;4369:5;4352:23;:::i;:::-;4345:5;4342:34;4332:62;;4390:1;4387;4380:12;4332:62;4280:120;:::o;4406:137::-;4451:5;4489:6;4476:20;4467:29;;4505:32;4531:5;4505:32;:::i;:::-;4406:137;;;;:::o;4549:327::-;4607:6;4656:2;4644:9;4635:7;4631:23;4627:32;4624:119;;;4662:79;;:::i;:::-;4624:119;4782:1;4807:52;4851:7;4842:6;4831:9;4827:22;4807:52;:::i;:::-;4797:62;;4753:116;4549:327;;;;:::o;4882:122::-;4955:24;4973:5;4955:24;:::i;:::-;4948:5;4945:35;4935:63;;4994:1;4991;4984:12;4935:63;4882:122;:::o;5010:139::-;5056:5;5094:6;5081:20;5072:29;;5110:33;5137:5;5110:33;:::i;:::-;5010:139;;;;:::o;5155:474::-;5223:6;5231;5280:2;5268:9;5259:7;5255:23;5251:32;5248:119;;;5286:79;;:::i;:::-;5248:119;5406:1;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5377:117;5533:2;5559:53;5604:7;5595:6;5584:9;5580:22;5559:53;:::i;:::-;5549:63;;5504:118;5155:474;;;;;:::o;5635:101::-;5671:7;5711:18;5704:5;5700:30;5689:41;;5635:101;;;:::o;5742:120::-;5814:23;5831:5;5814:23;:::i;:::-;5807:5;5804:34;5794:62;;5852:1;5849;5842:12;5794:62;5742:120;:::o;5868:137::-;5913:5;5951:6;5938:20;5929:29;;5967:32;5993:5;5967:32;:::i;:::-;5868:137;;;;:::o;6011:327::-;6069:6;6118:2;6106:9;6097:7;6093:23;6089:32;6086:119;;;6124:79;;:::i;:::-;6086:119;6244:1;6269:52;6313:7;6304:6;6293:9;6289:22;6269:52;:::i;:::-;6259:62;;6215:116;6011:327;;;;:::o;6344:329::-;6403:6;6452:2;6440:9;6431:7;6427:23;6423:32;6420:119;;;6458:79;;:::i;:::-;6420:119;6578:1;6603:53;6648:7;6639:6;6628:9;6624:22;6603:53;:::i;:::-;6593:63;;6549:117;6344:329;;;;:::o;6679:118::-;6766:24;6784:5;6766:24;:::i;:::-;6761:3;6754:37;6679:118;;:::o;6803:222::-;6896:4;6934:2;6923:9;6919:18;6911:26;;6947:71;7015:1;7004:9;7000:17;6991:6;6947:71;:::i;:::-;6803:222;;;;:::o;7031:619::-;7108:6;7116;7124;7173:2;7161:9;7152:7;7148:23;7144:32;7141:119;;;7179:79;;:::i;:::-;7141:119;7299:1;7324:53;7369:7;7360:6;7349:9;7345:22;7324:53;:::i;:::-;7314:63;;7270:117;7426:2;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7397:118;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7031:619;;;;;:::o;7656:117::-;7765:1;7762;7755:12;7779:117;7888:1;7885;7878:12;7902:117;8011:1;8008;8001:12;8042:568;8115:8;8125:6;8175:3;8168:4;8160:6;8156:17;8152:27;8142:122;;8183:79;;:::i;:::-;8142:122;8296:6;8283:20;8273:30;;8326:18;8318:6;8315:30;8312:117;;;8348:79;;:::i;:::-;8312:117;8462:4;8454:6;8450:17;8438:29;;8516:3;8508:4;8500:6;8496:17;8486:8;8482:32;8479:41;8476:128;;;8523:79;;:::i;:::-;8476:128;8042:568;;;;;:::o;8616:559::-;8702:6;8710;8759:2;8747:9;8738:7;8734:23;8730:32;8727:119;;;8765:79;;:::i;:::-;8727:119;8913:1;8902:9;8898:17;8885:31;8943:18;8935:6;8932:30;8929:117;;;8965:79;;:::i;:::-;8929:117;9078:80;9150:7;9141:6;9130:9;9126:22;9078:80;:::i;:::-;9060:98;;;;8856:312;8616:559;;;;;:::o;9181:93::-;9217:7;9257:10;9250:5;9246:22;9235:33;;9181:93;;;:::o;9280:115::-;9365:23;9382:5;9365:23;:::i;:::-;9360:3;9353:36;9280:115;;:::o;9401:218::-;9492:4;9530:2;9519:9;9515:18;9507:26;;9543:69;9609:1;9598:9;9594:17;9585:6;9543:69;:::i;:::-;9401:218;;;;:::o;9625:120::-;9697:23;9714:5;9697:23;:::i;:::-;9690:5;9687:34;9677:62;;9735:1;9732;9725:12;9677:62;9625:120;:::o;9751:137::-;9796:5;9834:6;9821:20;9812:29;;9850:32;9876:5;9850:32;:::i;:::-;9751:137;;;;:::o;9894:327::-;9952:6;10001:2;9989:9;9980:7;9976:23;9972:32;9969:119;;;10007:79;;:::i;:::-;9969:119;10127:1;10152:52;10196:7;10187:6;10176:9;10172:22;10152:52;:::i;:::-;10142:62;;10098:116;9894:327;;;;:::o;10227:117::-;10336:1;10333;10326:12;10350:180;10398:77;10395:1;10388:88;10495:4;10492:1;10485:15;10519:4;10516:1;10509:15;10536:281;10619:27;10641:4;10619:27;:::i;:::-;10611:6;10607:40;10749:6;10737:10;10734:22;10713:18;10701:10;10698:34;10695:62;10692:88;;;10760:18;;:::i;:::-;10692:88;10800:10;10796:2;10789:22;10579:238;10536:281;;:::o;10823:129::-;10857:6;10884:20;;:::i;:::-;10874:30;;10913:33;10941:4;10933:6;10913:33;:::i;:::-;10823:129;;;:::o;10958:308::-;11020:4;11110:18;11102:6;11099:30;11096:56;;;11132:18;;:::i;:::-;11096:56;11170:29;11192:6;11170:29;:::i;:::-;11162:37;;11254:4;11248;11244:15;11236:23;;10958:308;;;:::o;11272:154::-;11356:6;11351:3;11346;11333:30;11418:1;11409:6;11404:3;11400:16;11393:27;11272:154;;;:::o;11432:412::-;11510:5;11535:66;11551:49;11593:6;11551:49;:::i;:::-;11535:66;:::i;:::-;11526:75;;11624:6;11617:5;11610:21;11662:4;11655:5;11651:16;11700:3;11691:6;11686:3;11682:16;11679:25;11676:112;;;11707:79;;:::i;:::-;11676:112;11797:41;11831:6;11826:3;11821;11797:41;:::i;:::-;11516:328;11432:412;;;;;:::o;11864:340::-;11920:5;11969:3;11962:4;11954:6;11950:17;11946:27;11936:122;;11977:79;;:::i;:::-;11936:122;12094:6;12081:20;12119:79;12194:3;12186:6;12179:4;12171:6;12167:17;12119:79;:::i;:::-;12110:88;;11926:278;11864:340;;;;:::o;12210:509::-;12279:6;12328:2;12316:9;12307:7;12303:23;12299:32;12296:119;;;12334:79;;:::i;:::-;12296:119;12482:1;12471:9;12467:17;12454:31;12512:18;12504:6;12501:30;12498:117;;;12534:79;;:::i;:::-;12498:117;12639:63;12694:7;12685:6;12674:9;12670:22;12639:63;:::i;:::-;12629:73;;12425:287;12210:509;;;;:::o;12725:115::-;12810:23;12827:5;12810:23;:::i;:::-;12805:3;12798:36;12725:115;;:::o;12846:218::-;12937:4;12975:2;12964:9;12960:18;12952:26;;12988:69;13054:1;13043:9;13039:17;13030:6;12988:69;:::i;:::-;12846:218;;;;:::o;13070:116::-;13140:21;13155:5;13140:21;:::i;:::-;13133:5;13130:32;13120:60;;13176:1;13173;13166:12;13120:60;13070:116;:::o;13192:133::-;13235:5;13273:6;13260:20;13251:29;;13289:30;13313:5;13289:30;:::i;:::-;13192:133;;;;:::o;13331:468::-;13396:6;13404;13453:2;13441:9;13432:7;13428:23;13424:32;13421:119;;;13459:79;;:::i;:::-;13421:119;13579:1;13604:53;13649:7;13640:6;13629:9;13625:22;13604:53;:::i;:::-;13594:63;;13550:117;13706:2;13732:50;13774:7;13765:6;13754:9;13750:22;13732:50;:::i;:::-;13722:60;;13677:115;13331:468;;;;;:::o;13805:115::-;13890:23;13907:5;13890:23;:::i;:::-;13885:3;13878:36;13805:115;;:::o;13926:218::-;14017:4;14055:2;14044:9;14040:18;14032:26;;14068:69;14134:1;14123:9;14119:17;14110:6;14068:69;:::i;:::-;13926:218;;;;:::o;14150:307::-;14211:4;14301:18;14293:6;14290:30;14287:56;;;14323:18;;:::i;:::-;14287:56;14361:29;14383:6;14361:29;:::i;:::-;14353:37;;14445:4;14439;14435:15;14427:23;;14150:307;;;:::o;14463:410::-;14540:5;14565:65;14581:48;14622:6;14581:48;:::i;:::-;14565:65;:::i;:::-;14556:74;;14653:6;14646:5;14639:21;14691:4;14684:5;14680:16;14729:3;14720:6;14715:3;14711:16;14708:25;14705:112;;;14736:79;;:::i;:::-;14705:112;14826:41;14860:6;14855:3;14850;14826:41;:::i;:::-;14546:327;14463:410;;;;;:::o;14892:338::-;14947:5;14996:3;14989:4;14981:6;14977:17;14973:27;14963:122;;15004:79;;:::i;:::-;14963:122;15121:6;15108:20;15146:78;15220:3;15212:6;15205:4;15197:6;15193:17;15146:78;:::i;:::-;15137:87;;14953:277;14892:338;;;;:::o;15236:943::-;15331:6;15339;15347;15355;15404:3;15392:9;15383:7;15379:23;15375:33;15372:120;;;15411:79;;:::i;:::-;15372:120;15531:1;15556:53;15601:7;15592:6;15581:9;15577:22;15556:53;:::i;:::-;15546:63;;15502:117;15658:2;15684:53;15729:7;15720:6;15709:9;15705:22;15684:53;:::i;:::-;15674:63;;15629:118;15786:2;15812:53;15857:7;15848:6;15837:9;15833:22;15812:53;:::i;:::-;15802:63;;15757:118;15942:2;15931:9;15927:18;15914:32;15973:18;15965:6;15962:30;15959:117;;;15995:79;;:::i;:::-;15959:117;16100:62;16154:7;16145:6;16134:9;16130:22;16100:62;:::i;:::-;16090:72;;15885:287;15236:943;;;;;;;:::o;16185:474::-;16253:6;16261;16310:2;16298:9;16289:7;16285:23;16281:32;16278:119;;;16316:79;;:::i;:::-;16278:119;16436:1;16461:53;16506:7;16497:6;16486:9;16482:22;16461:53;:::i;:::-;16451:63;;16407:117;16563:2;16589:53;16634:7;16625:6;16614:9;16610:22;16589:53;:::i;:::-;16579:63;;16534:118;16185:474;;;;;:::o;16665:180::-;16713:77;16710:1;16703:88;16810:4;16807:1;16800:15;16834:4;16831:1;16824:15;16851:320;16895:6;16932:1;16926:4;16922:12;16912:22;;16979:1;16973:4;16969:12;17000:18;16990:81;;17056:4;17048:6;17044:17;17034:27;;16990:81;17118:2;17110:6;17107:14;17087:18;17084:38;17081:84;;17137:18;;:::i;:::-;17081:84;16902:269;16851:320;;;:::o;17177:182::-;17317:34;17313:1;17305:6;17301:14;17294:58;17177:182;:::o;17365:366::-;17507:3;17528:67;17592:2;17587:3;17528:67;:::i;:::-;17521:74;;17604:93;17693:3;17604:93;:::i;:::-;17722:2;17717:3;17713:12;17706:19;;17365:366;;;:::o;17737:419::-;17903:4;17941:2;17930:9;17926:18;17918:26;;17990:9;17984:4;17980:20;17976:1;17965:9;17961:17;17954:47;18018:131;18144:4;18018:131;:::i;:::-;18010:139;;17737:419;;;:::o;18162:180::-;18210:77;18207:1;18200:88;18307:4;18304:1;18297:15;18331:4;18328:1;18321:15;18348:176;18488:28;18484:1;18476:6;18472:14;18465:52;18348:176;:::o;18530:366::-;18672:3;18693:67;18757:2;18752:3;18693:67;:::i;:::-;18686:74;;18769:93;18858:3;18769:93;:::i;:::-;18887:2;18882:3;18878:12;18871:19;;18530:366;;;:::o;18902:419::-;19068:4;19106:2;19095:9;19091:18;19083:26;;19155:9;19149:4;19145:20;19141:1;19130:9;19126:17;19119:47;19183:131;19309:4;19183:131;:::i;:::-;19175:139;;18902:419;;;:::o;19327:180::-;19375:77;19372:1;19365:88;19472:4;19469:1;19462:15;19496:4;19493:1;19486:15;19513:233;19552:3;19575:24;19593:5;19575:24;:::i;:::-;19566:33;;19621:66;19614:5;19611:77;19608:103;;19691:18;;:::i;:::-;19608:103;19738:1;19731:5;19727:13;19720:20;;19513:233;;;:::o;19752:173::-;19892:25;19888:1;19880:6;19876:14;19869:49;19752:173;:::o;19931:366::-;20073:3;20094:67;20158:2;20153:3;20094:67;:::i;:::-;20087:74;;20170:93;20259:3;20170:93;:::i;:::-;20288:2;20283:3;20279:12;20272:19;;19931:366;;;:::o;20303:419::-;20469:4;20507:2;20496:9;20492:18;20484:26;;20556:9;20550:4;20546:20;20542:1;20531:9;20527:17;20520:47;20584:131;20710:4;20584:131;:::i;:::-;20576:139;;20303:419;;;:::o;20728:181::-;20868:33;20864:1;20856:6;20852:14;20845:57;20728:181;:::o;20915:366::-;21057:3;21078:67;21142:2;21137:3;21078:67;:::i;:::-;21071:74;;21154:93;21243:3;21154:93;:::i;:::-;21272:2;21267:3;21263:12;21256:19;;20915:366;;;:::o;21287:419::-;21453:4;21491:2;21480:9;21476:18;21468:26;;21540:9;21534:4;21530:20;21526:1;21515:9;21511:17;21504:47;21568:131;21694:4;21568:131;:::i;:::-;21560:139;;21287:419;;;:::o;21712:305::-;21752:3;21771:20;21789:1;21771:20;:::i;:::-;21766:25;;21805:20;21823:1;21805:20;:::i;:::-;21800:25;;21959:1;21891:66;21887:74;21884:1;21881:81;21878:107;;;21965:18;;:::i;:::-;21878:107;22009:1;22006;22002:9;21995:16;;21712:305;;;;:::o;22023:175::-;22163:27;22159:1;22151:6;22147:14;22140:51;22023:175;:::o;22204:366::-;22346:3;22367:67;22431:2;22426:3;22367:67;:::i;:::-;22360:74;;22443:93;22532:3;22443:93;:::i;:::-;22561:2;22556:3;22552:12;22545:19;;22204:366;;;:::o;22576:419::-;22742:4;22780:2;22769:9;22765:18;22757:26;;22829:9;22823:4;22819:20;22815:1;22804:9;22800:17;22793:47;22857:131;22983:4;22857:131;:::i;:::-;22849:139;;22576:419;;;:::o;23001:180::-;23141:32;23137:1;23129:6;23125:14;23118:56;23001:180;:::o;23187:366::-;23329:3;23350:67;23414:2;23409:3;23350:67;:::i;:::-;23343:74;;23426:93;23515:3;23426:93;:::i;:::-;23544:2;23539:3;23535:12;23528:19;;23187:366;;;:::o;23559:419::-;23725:4;23763:2;23752:9;23748:18;23740:26;;23812:9;23806:4;23802:20;23798:1;23787:9;23783:17;23776:47;23840:131;23966:4;23840:131;:::i;:::-;23832:139;;23559:419;;;:::o;23984:348::-;24024:7;24047:20;24065:1;24047:20;:::i;:::-;24042:25;;24081:20;24099:1;24081:20;:::i;:::-;24076:25;;24269:1;24201:66;24197:74;24194:1;24191:81;24186:1;24179:9;24172:17;24168:105;24165:131;;;24276:18;;:::i;:::-;24165:131;24324:1;24321;24317:9;24306:20;;23984:348;;;;:::o;24338:170::-;24478:22;24474:1;24466:6;24462:14;24455:46;24338:170;:::o;24514:366::-;24656:3;24677:67;24741:2;24736:3;24677:67;:::i;:::-;24670:74;;24753:93;24842:3;24753:93;:::i;:::-;24871:2;24866:3;24862:12;24855:19;;24514:366;;;:::o;24886:419::-;25052:4;25090:2;25079:9;25075:18;25067:26;;25139:9;25133:4;25129:20;25125:1;25114:9;25110:17;25103:47;25167:131;25293:4;25167:131;:::i;:::-;25159:139;;24886:419;;;:::o;25311:171::-;25451:23;25447:1;25439:6;25435:14;25428:47;25311:171;:::o;25488:366::-;25630:3;25651:67;25715:2;25710:3;25651:67;:::i;:::-;25644:74;;25727:93;25816:3;25727:93;:::i;:::-;25845:2;25840:3;25836:12;25829:19;;25488:366;;;:::o;25860:419::-;26026:4;26064:2;26053:9;26049:18;26041:26;;26113:9;26107:4;26103:20;26099:1;26088:9;26084:17;26077:47;26141:131;26267:4;26141:131;:::i;:::-;26133:139;;25860:419;;;:::o;26285:181::-;26425:33;26421:1;26413:6;26409:14;26402:57;26285:181;:::o;26472:366::-;26614:3;26635:67;26699:2;26694:3;26635:67;:::i;:::-;26628:74;;26711:93;26800:3;26711:93;:::i;:::-;26829:2;26824:3;26820:12;26813:19;;26472:366;;;:::o;26844:419::-;27010:4;27048:2;27037:9;27033:18;27025:26;;27097:9;27091:4;27087:20;27083:1;27072:9;27068:17;27061:47;27125:131;27251:4;27125:131;:::i;:::-;27117:139;;26844:419;;;:::o;27269:297::-;27308:7;27331:19;27348:1;27331:19;:::i;:::-;27326:24;;27364:19;27381:1;27364:19;:::i;:::-;27359:24;;27503:1;27483:18;27479:26;27476:1;27473:33;27468:1;27461:9;27454:17;27450:57;27447:83;;;27510:18;;:::i;:::-;27447:83;27558:1;27555;27551:9;27540:20;;27269:297;;;;:::o;27572:148::-;27674:11;27711:3;27696:18;;27572:148;;;;:::o;27726:377::-;27832:3;27860:39;27893:5;27860:39;:::i;:::-;27915:89;27997:6;27992:3;27915:89;:::i;:::-;27908:96;;28013:52;28058:6;28053:3;28046:4;28039:5;28035:16;28013:52;:::i;:::-;28090:6;28085:3;28081:16;28074:23;;27836:267;27726:377;;;;:::o;28109:141::-;28158:4;28181:3;28173:11;;28204:3;28201:1;28194:14;28238:4;28235:1;28225:18;28217:26;;28109:141;;;:::o;28280:845::-;28383:3;28420:5;28414:12;28449:36;28475:9;28449:36;:::i;:::-;28501:89;28583:6;28578:3;28501:89;:::i;:::-;28494:96;;28621:1;28610:9;28606:17;28637:1;28632:137;;;;28783:1;28778:341;;;;28599:520;;28632:137;28716:4;28712:9;28701;28697:25;28692:3;28685:38;28752:6;28747:3;28743:16;28736:23;;28632:137;;28778:341;28845:38;28877:5;28845:38;:::i;:::-;28905:1;28919:154;28933:6;28930:1;28927:13;28919:154;;;29007:7;29001:14;28997:1;28992:3;28988:11;28981:35;29057:1;29048:7;29044:15;29033:26;;28955:4;28952:1;28948:12;28943:17;;28919:154;;;29102:6;29097:3;29093:16;29086:23;;28785:334;;28599:520;;28387:738;;28280:845;;;;:::o;29131:589::-;29356:3;29378:95;29469:3;29460:6;29378:95;:::i;:::-;29371:102;;29490:95;29581:3;29572:6;29490:95;:::i;:::-;29483:102;;29602:92;29690:3;29681:6;29602:92;:::i;:::-;29595:99;;29711:3;29704:10;;29131:589;;;;;;:::o;29726:171::-;29866:23;29862:1;29854:6;29850:14;29843:47;29726:171;:::o;29903:366::-;30045:3;30066:67;30130:2;30125:3;30066:67;:::i;:::-;30059:74;;30142:93;30231:3;30142:93;:::i;:::-;30260:2;30255:3;30251:12;30244:19;;29903:366;;;:::o;30275:419::-;30441:4;30479:2;30468:9;30464:18;30456:26;;30528:9;30522:4;30518:20;30514:1;30503:9;30499:17;30492:47;30556:131;30682:4;30556:131;:::i;:::-;30548:139;;30275:419;;;:::o;30700:181::-;30840:33;30836:1;30828:6;30824:14;30817:57;30700:181;:::o;30887:366::-;31029:3;31050:67;31114:2;31109:3;31050:67;:::i;:::-;31043:74;;31126:93;31215:3;31126:93;:::i;:::-;31244:2;31239:3;31235:12;31228:19;;30887:366;;;:::o;31259:419::-;31425:4;31463:2;31452:9;31448:18;31440:26;;31512:9;31506:4;31502:20;31498:1;31487:9;31483:17;31476:47;31540:131;31666:4;31540:131;:::i;:::-;31532:139;;31259:419;;;:::o;31684:225::-;31824:34;31820:1;31812:6;31808:14;31801:58;31893:8;31888:2;31880:6;31876:15;31869:33;31684:225;:::o;31915:366::-;32057:3;32078:67;32142:2;32137:3;32078:67;:::i;:::-;32071:74;;32154:93;32243:3;32154:93;:::i;:::-;32272:2;32267:3;32263:12;32256:19;;31915:366;;;:::o;32287:419::-;32453:4;32491:2;32480:9;32476:18;32468:26;;32540:9;32534:4;32530:20;32526:1;32515:9;32511:17;32504:47;32568:131;32694:4;32568:131;:::i;:::-;32560:139;;32287:419;;;:::o;32712:98::-;32763:6;32797:5;32791:12;32781:22;;32712:98;;;:::o;32816:168::-;32899:11;32933:6;32928:3;32921:19;32973:4;32968:3;32964:14;32949:29;;32816:168;;;;:::o;32990:360::-;33076:3;33104:38;33136:5;33104:38;:::i;:::-;33158:70;33221:6;33216:3;33158:70;:::i;:::-;33151:77;;33237:52;33282:6;33277:3;33270:4;33263:5;33259:16;33237:52;:::i;:::-;33314:29;33336:6;33314:29;:::i;:::-;33309:3;33305:39;33298:46;;33080:270;32990:360;;;;:::o;33356:640::-;33551:4;33589:3;33578:9;33574:19;33566:27;;33603:71;33671:1;33660:9;33656:17;33647:6;33603:71;:::i;:::-;33684:72;33752:2;33741:9;33737:18;33728:6;33684:72;:::i;:::-;33766;33834:2;33823:9;33819:18;33810:6;33766:72;:::i;:::-;33885:9;33879:4;33875:20;33870:2;33859:9;33855:18;33848:48;33913:76;33984:4;33975:6;33913:76;:::i;:::-;33905:84;;33356:640;;;;;;;:::o;34002:141::-;34058:5;34089:6;34083:13;34074:22;;34105:32;34131:5;34105:32;:::i;:::-;34002:141;;;;:::o;34149:349::-;34218:6;34267:2;34255:9;34246:7;34242:23;34238:32;34235:119;;;34273:79;;:::i;:::-;34235:119;34393:1;34418:63;34473:7;34464:6;34453:9;34449:22;34418:63;:::i;:::-;34408:73;;34364:127;34149:349;;;;:::o
Swarm Source
ipfs://5cfdc63271ed251de7fb2c22ceefc67201950150c4c05af9f881f5b527427f97
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.