Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 7 from a total of 7 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Cost | 15770867 | 1243 days ago | IN | 0 ETH | 0.00072689 | ||||
| Set Pause | 15770711 | 1243 days ago | IN | 0 ETH | 0.00087618 | ||||
| Set Pause | 15770710 | 1243 days ago | IN | 0 ETH | 0.00084662 | ||||
| Mint To Address | 15720939 | 1250 days ago | IN | 0 ETH | 0.00182699 | ||||
| Mint To Address | 15720921 | 1250 days ago | IN | 0 ETH | 0.00284339 | ||||
| Mint To Address | 15720885 | 1250 days ago | IN | 0 ETH | 0.00223672 | ||||
| Mint To Address | 15539790 | 1275 days ago | IN | 0 ETH | 0.00265144 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
LuckyOne
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-09-15
*/
// SPDX-License-Identifier: GPL-3.0
/*
## ## ## ###### ## ## ## ## ####### ## ## ########
## ## ## ## ## ## ## ## ## ## ## ### ## ##
## ## ## ## ## ## #### ## ## #### ## ##
## ## ## ## ##### ## ## ## ## ## ## ######
## ## ## ## ## ## ## ## ## ## #### ##
## ## ## ## ## ## ## ## ## ## ## ### ##
######## ####### ###### ## ## ## ####### ## ## ########
*/
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
pragma solidity ^0.8.0;
abstract contract ReentrancyGuard {
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
_status = _NOT_ENTERED;
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
function toString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity ^0.8.0;
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);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
function isContract(address account) internal view returns (bool) {
return account.code.length > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
interface IERC721Receiver {
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @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);
function ownerOf(uint256 tokenId) external view returns (address owner);
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
function approve(address to, uint256 tokenId) external;
function setApprovalForAll(address operator, bool _approved) external;
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);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @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);
}
// File: erc721a/contracts/IERC721A.sol
// ERC721A Contracts v3.3.0
// Creator: Chiru Labs
pragma solidity ^0.8.4;
/**
* @dev Interface of an ERC721A compliant contract.
*/
interface IERC721A is IERC721, IERC721Metadata {
/**
* 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();
// Compiler will pack this into a single 256bit word.
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;
}
// Compiler will pack this into a single 256bit word.
struct AddressData {
// Realistically, 2**64-1 is more than enough.
uint64 balance;
// Keeps track of mint count with minimal overhead for tokenomics.
uint64 numberMinted;
// Keeps track of burn count with minimal overhead for tokenomics.
uint64 numberBurned;
// For miscellaneous variable(s) pertaining to the address
// (e.g. number of whitelist mint slots used).
// If there are multiple variables, please pack them into a uint64.
uint64 aux;
}
/**
* @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);
}
// File: erc721a/contracts/ERC721A.sol
// ERC721A Contracts v3.3.0
// Creator: Chiru Labs
pragma solidity ^0.8.4;
/**
* @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 Context, ERC165, IERC721A {
using Address for address;
using Strings for uint256;
// The tokenId of the next token to be minted.
uint256 internal _currentIndex;
// The number of tokens burned.
uint256 internal _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 _ownershipOf implementation for details.
mapping(uint256 => TokenOwnership) internal _ownerships;
// Mapping owner address to address data
mapping(address => AddressData) private _addressData;
// 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();
}
/**
* To change the starting tokenId, please override this function.
*/
function _startTokenId() internal view virtual returns (uint256) {
return 0;
}
/**
* @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
*/
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();
}
}
/**
* 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 See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view override returns (uint256) {
if (owner == address(0)) revert BalanceQueryForZeroAddress();
return uint256(_addressData[owner].balance);
}
/**
* Returns the number of tokens minted by `owner`.
*/
function _numberMinted(address owner) internal view returns (uint256) {
return uint256(_addressData[owner].numberMinted);
}
/**
* Returns the number of tokens burned by or on behalf of `owner`.
*/
function _numberBurned(address owner) internal view returns (uint256) {
return uint256(_addressData[owner].numberBurned);
}
/**
* Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
*/
function _getAux(address owner) internal view returns (uint64) {
return _addressData[owner].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 {
_addressData[owner].aux = aux;
}
/**
* 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) {
uint256 curr = tokenId;
unchecked {
if (_startTokenId() <= curr) if (curr < _currentIndex) {
TokenOwnership memory ownership = _ownerships[curr];
if (!ownership.burned) {
if (ownership.addr != address(0)) {
return ownership;
}
// 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.
while (true) {
curr--;
ownership = _ownerships[curr];
if (ownership.addr != address(0)) {
return ownership;
}
}
}
}
}
revert OwnerQueryForNonexistentToken();
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view override returns (address) {
return _ownershipOf(tokenId).addr;
}
/**
* @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, tokenId.toString())) : '';
}
/**
* @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 See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public override {
address owner = ERC721A.ownerOf(tokenId);
if (to == owner) revert ApprovalToCurrentOwner();
if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) {
revert ApprovalCallerNotOwnerNorApproved();
}
_approve(to, tokenId, owner);
}
/**
* @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 == _msgSender()) revert ApproveToCaller();
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), 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.isContract()) 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 && !_ownerships[tokenId].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 {
_addressData[to].balance += uint64(quantity);
_addressData[to].numberMinted += uint64(quantity);
_ownerships[startTokenId].addr = to;
_ownerships[startTokenId].startTimestamp = uint64(block.timestamp);
uint256 updatedIndex = startTokenId;
uint256 end = updatedIndex + quantity;
if (to.isContract()) {
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 {
_addressData[to].balance += uint64(quantity);
_addressData[to].numberMinted += uint64(quantity);
_ownerships[startTokenId].addr = to;
_ownerships[startTokenId].startTimestamp = uint64(block.timestamp);
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 {
TokenOwnership memory prevOwnership = _ownershipOf(tokenId);
if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
bool isApprovedOrOwner = (_msgSender() == from ||
isApprovedForAll(from, _msgSender()) ||
getApproved(tokenId) == _msgSender());
if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
if (to == address(0)) revert TransferToZeroAddress();
_beforeTokenTransfers(from, to, tokenId, 1);
// Clear approvals from the previous owner
_approve(address(0), tokenId, from);
// 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 {
_addressData[from].balance -= 1;
_addressData[to].balance += 1;
TokenOwnership storage currSlot = _ownerships[tokenId];
currSlot.addr = to;
currSlot.startTimestamp = uint64(block.timestamp);
// If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
// Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
uint256 nextTokenId = tokenId + 1;
TokenOwnership storage nextSlot = _ownerships[nextTokenId];
if (nextSlot.addr == address(0)) {
// This will suffice for checking _exists(nextTokenId),
// as a burned slot cannot contain the zero address.
if (nextTokenId != _currentIndex) {
nextSlot.addr = from;
nextSlot.startTimestamp = prevOwnership.startTimestamp;
}
}
}
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 {
TokenOwnership memory prevOwnership = _ownershipOf(tokenId);
address from = prevOwnership.addr;
if (approvalCheck) {
bool isApprovedOrOwner = (_msgSender() == from ||
isApprovedForAll(from, _msgSender()) ||
getApproved(tokenId) == _msgSender());
if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
}
_beforeTokenTransfers(from, address(0), tokenId, 1);
// Clear approvals from the previous owner
_approve(address(0), tokenId, from);
// 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 {
AddressData storage addressData = _addressData[from];
addressData.balance -= 1;
addressData.numberBurned += 1;
// Keep track of who burned the token, and the timestamp of burning.
TokenOwnership storage currSlot = _ownerships[tokenId];
currSlot.addr = from;
currSlot.startTimestamp = uint64(block.timestamp);
currSlot.burned = true;
// If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
// Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
uint256 nextTokenId = tokenId + 1;
TokenOwnership storage nextSlot = _ownerships[nextTokenId];
if (nextSlot.addr == address(0)) {
// This will suffice for checking _exists(nextTokenId),
// as a burned slot cannot contain the zero address.
if (nextTokenId != _currentIndex) {
nextSlot.addr = from;
nextSlot.startTimestamp = prevOwnership.startTimestamp;
}
}
}
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 Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(
address to,
uint256 tokenId,
address owner
) private {
_tokenApprovals[tokenId] = to;
emit Approval(owner, to, tokenId);
}
function _checkContractOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert TransferToNonERC721ReceiverImplementer();
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
}
function _beforeTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
function _afterTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
}
// File: contracts/LuckyOne.sol
pragma solidity >= 0.8.0 < 0.9.0;
contract LuckyOne is ERC721A, Ownable, ReentrancyGuard {
using Strings for uint256;
string public uriPrefix;
string public notRevealedURI;
string public uriSuffix = ".json";
uint256 public MAX_SUPPLY = 7777;
uint256 public FREE_SUPPLY = 777;
uint256 public MAX_PER_ADDRESS = 7;
uint256 public MAX_PER_TRX = 7;
uint256 public MINT_PRICE = 0.4 ether;
bool public pause = true;
bool public revealed = false;
mapping(address => uint256) public addressMintedBalance;
mapping(address => uint256) public freeClaim;
constructor() ERC721A ( "Lucky One", "LYO" ) {
setNotRevealedURI( "ipfs://QmPCNDYJeMesDwDSbQKuYXQqaWSuugYyFtqNN8QNZ9hJrU/hidden.json" );
}
// ~~~~~~~~~~~~~~~~~~~~ URI's ~~~~~~~~~~~~~~~~~~~~
function _baseURI() internal view virtual override returns (string memory) {
return uriPrefix;
}
// ~~~~~~~~~~~~~~~~~~~~ Modifiers ~~~~~~~~~~~~~~~~~~~~
modifier mintCompliance(uint256 _mintAmount) {
if (msg.sender != owner()) {
require(!pause, "The contract is paused!");
require(_mintAmount <= MAX_PER_TRX, "Max mint per transaction exceeded!");
}
require(_mintAmount > 0, "Mint amount can't be zero.");
require(tx.origin == msg.sender, "The caller is another contract");
require(totalSupply() + _mintAmount <= MAX_SUPPLY, "Beyond Max Supply");
_;
}
// ~~~~~~~~~~~~~~~~~~~~ Mint Functions ~~~~~~~~~~~~~~~~~~~~
// MINT
function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
if (msg.sender != owner()) {
require(addressMintedBalance[msg.sender] + _mintAmount <= MAX_PER_ADDRESS, "Max mint per wallet exceeded!");
require(msg.value >= MINT_PRICE * _mintAmount, "Insufficient funds!");
}
if (addressMintedBalance[msg.sender] < 3) {
if (addressMintedBalance[msg.sender] + _mintAmount >= 3) {
freeClaim[msg.sender] += 1;
}
if (addressMintedBalance[msg.sender] + _mintAmount >= 6) {
freeClaim[msg.sender] += 1;
}
}
if (addressMintedBalance[msg.sender] >= 3) {
if (addressMintedBalance[msg.sender] < 6) {
if (addressMintedBalance[msg.sender] + _mintAmount >= 6) {
freeClaim[msg.sender] += 1;
}
}
}
addressMintedBalance[msg.sender] += _mintAmount;
_safeMint(msg.sender, _mintAmount);
}
// FREE MINT
function mintfree() public {
if (msg.sender != owner()) {
require(!pause, "The contract is paused!");
}
require(FREE_SUPPLY - 1 >= 0, "Not enough free supply!");
require(FREE_SUPPLY > 0, "Free supply sold out.");
require(freeClaim[msg.sender] >= 1, "Can claim only 1 free for each 3 mints!");
FREE_SUPPLY -= 1;
freeClaim[msg.sender] -= 1;
_safeMint(msg.sender, 1);
}
// MINT for address
function mintToAddress(uint256 _mintAmount, address _receiver) public onlyOwner {
require(totalSupply() + _mintAmount <= MAX_SUPPLY, "Mint amount exceeds max supply!");
_safeMint(_receiver, _mintAmount);
}
// ~~~~~~~~~~~~~~~~~~~~ Checks ~~~~~~~~~~~~~~~~~~~~
// TOKEN URI
function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
require(_exists(_tokenId),"ERC721Metadata: URI query for nonexistent token.");
if (revealed == false) { return notRevealedURI; }
string memory currentBaseURI = _baseURI();
return bytes(currentBaseURI).length > 0
? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
: "";
}
// Start Token
function _startTokenId() internal view virtual override returns (uint256) {
return 1;
}
// Check Wallet assets
function walletOfOwner(address _owner) public view returns (uint256[] memory) {
uint256 ownerTokenCount = balanceOf(_owner);
uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
uint256 currentTokenId = _startTokenId();
uint256 ownedTokenIndex = 0;
address latestOwnerAddress;
while (ownedTokenIndex < ownerTokenCount && currentTokenId < _currentIndex) {
TokenOwnership memory ownership = _ownerships[currentTokenId];
if (!ownership.burned) {
if (ownership.addr != address(0)) {
latestOwnerAddress = ownership.addr;
}
if (latestOwnerAddress == _owner) {
ownedTokenIds[ownedTokenIndex] = currentTokenId;
ownedTokenIndex++;
}
}
currentTokenId++;
}
return ownedTokenIds;
}
// ~~~~~~~~~~~~~~~~~~~~ onlyOwner Functions ~~~~~~~~~~~~~~~~~~~~
// BaseURI
function setUriPrefix(string memory _uriPrefix) public onlyOwner {
uriPrefix = _uriPrefix;
}
// NotRevealedURI
function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
notRevealedURI = _notRevealedURI;
}
function setCost(uint256 _cost) public onlyOwner {
MINT_PRICE = _cost;
}
function setMaxPerAddress(uint256 _maxPerAdd) public onlyOwner {
MAX_PER_ADDRESS = _maxPerAdd;
}
function setMaxPerTrx(uint256 _maxPerTrx) public onlyOwner {
MAX_PER_TRX = _maxPerTrx;
}
function setPause(bool _state) public onlyOwner {
pause = _state;
}
function setReveal(bool _state) public onlyOwner {
revealed = _state;
}
function withdraw() external onlyOwner nonReentrant {
(bool success, ) = payable(owner()).call{value: address(this).balance}("");
require(success);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"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":[],"name":"FREE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_ADDRESS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TRX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"","type":"address"}],"name":"freeClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintfree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerAdd","type":"uint256"}],"name":"setMaxPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerTrx","type":"uint256"}],"name":"setMaxPerTrx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000372565b50611e61600d55610309600e556007600f55600760105567058d15e1762800006011556001601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff021916908315150217905550348015620000b757600080fd5b506040518060400160405280600981526020017f4c75636b79204f6e6500000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4c594f000000000000000000000000000000000000000000000000000000000081525081600290805190602001906200013c92919062000372565b5080600390805190602001906200015592919062000372565b5062000166620001c660201b60201c565b60008190555050506200018e62000182620001cf60201b60201c565b620001d760201b60201c565b6001600981905550620001c0604051806080016040528060418152602001620050f2604191396200029d60201b60201c565b6200050a565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002ad620001cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002d36200034860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200032c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003239062000449565b60405180910390fd5b80600b90805190602001906200034492919062000372565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000380906200047c565b90600052602060002090601f016020900481019282620003a45760008555620003f0565b82601f10620003bf57805160ff1916838001178555620003f0565b82800160010185558215620003f0579182015b82811115620003ef578251825591602001919060010190620003d2565b5b509050620003ff919062000403565b5090565b5b808211156200041e57600081600090555060010162000404565b5090565b6000620004316020836200046b565b91506200043e82620004e1565b602082019050919050565b60006020820190508181036000830152620004648162000422565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200049557607f821691505b60208210811415620004ac57620004ab620004b2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614bd8806200051a6000396000f3fe6080604052600436106102465760003560e01c80636a14550c116101395780639858cf19116100b6578063c002d23d1161007a578063c002d23d14610849578063c87b56dd14610874578063df106d13146108b1578063e985e9c5146108da578063f2c4ce1e14610917578063f2fde38b1461094057610246565b80639858cf1914610787578063a0712d68146107b2578063a22cb465146107ce578063b88d4fde146107f7578063bedb86fb1461082057610246565b80637ec4a659116100fd5780637ec4a659146106a05780638456cb59146106c95780638da5cb5b146106f457806393a9af071461071f57806395d89b411461075c57610246565b80636a14550c146105cd57806370a08231146105f8578063715018a614610635578063722503801461064c5780637bddd65b1461067757610246565b806332cb6b0c116101c7578063512b658d1161018b578063512b658d146104e6578063518302271461050f5780635503a0e81461053a57806362b99ad4146105655780636352211e1461059057610246565b806332cb6b0c146104155780633ccfd60b1461044057806342842e0e14610457578063438b63001461048057806344a0d68a146104bd57610246565b806318160ddd1161020e57806318160ddd1461034457806318cae2691461036f57806319cae2cb146103ac57806323b872dd146103c35780632a3f300c146103ec57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f05780630aaef28514610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613b4e565b610969565b60405161027f9190614131565b60405180910390f35b34801561029457600080fd5b5061029d610a4b565b6040516102aa919061414c565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613bf1565b610add565b6040516102e791906140a8565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613ae1565b610b59565b005b34801561032557600080fd5b5061032e610c5e565b60405161033b919061434e565b60405180910390f35b34801561035057600080fd5b50610359610c64565b604051610366919061434e565b60405180910390f35b34801561037b57600080fd5b506103966004803603810190610391919061395e565b610c7b565b6040516103a3919061434e565b60405180910390f35b3480156103b857600080fd5b506103c1610c93565b005b3480156103cf57600080fd5b506103ea60048036038101906103e591906139cb565b610eb6565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613b21565b610ec6565b005b34801561042157600080fd5b5061042a610f5f565b604051610437919061434e565b60405180910390f35b34801561044c57600080fd5b50610455610f65565b005b34801561046357600080fd5b5061047e600480360381019061047991906139cb565b6110b7565b005b34801561048c57600080fd5b506104a760048036038101906104a2919061395e565b6110d7565b6040516104b4919061410f565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613bf1565b6112eb565b005b3480156104f257600080fd5b5061050d60048036038101906105089190613c1e565b611371565b005b34801561051b57600080fd5b50610524611452565b6040516105319190614131565b60405180910390f35b34801561054657600080fd5b5061054f611465565b60405161055c919061414c565b60405180910390f35b34801561057157600080fd5b5061057a6114f3565b604051610587919061414c565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b29190613bf1565b611581565b6040516105c491906140a8565b60405180910390f35b3480156105d957600080fd5b506105e2611597565b6040516105ef919061434e565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a919061395e565b61159d565b60405161062c919061434e565b60405180910390f35b34801561064157600080fd5b5061064a61166d565b005b34801561065857600080fd5b506106616116f5565b60405161066e919061414c565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190613bf1565b611783565b005b3480156106ac57600080fd5b506106c760048036038101906106c29190613ba8565b611809565b005b3480156106d557600080fd5b506106de61189f565b6040516106eb9190614131565b60405180910390f35b34801561070057600080fd5b506107096118b2565b60405161071691906140a8565b60405180910390f35b34801561072b57600080fd5b506107466004803603810190610741919061395e565b6118dc565b604051610753919061434e565b60405180910390f35b34801561076857600080fd5b506107716118f4565b60405161077e919061414c565b60405180910390f35b34801561079357600080fd5b5061079c611986565b6040516107a9919061434e565b60405180910390f35b6107cc60048036038101906107c79190613bf1565b61198c565b005b3480156107da57600080fd5b506107f560048036038101906107f09190613aa1565b611fbb565b005b34801561080357600080fd5b5061081e60048036038101906108199190613a1e565b612133565b005b34801561082c57600080fd5b5061084760048036038101906108429190613b21565b6121ab565b005b34801561085557600080fd5b5061085e612244565b60405161086b919061434e565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190613bf1565b61224a565b6040516108a8919061414c565b60405180910390f35b3480156108bd57600080fd5b506108d860048036038101906108d39190613bf1565b6123a3565b005b3480156108e657600080fd5b5061090160048036038101906108fc919061398b565b612429565b60405161090e9190614131565b60405180910390f35b34801561092357600080fd5b5061093e60048036038101906109399190613ba8565b6124bd565b005b34801561094c57600080fd5b506109676004803603810190610962919061395e565b612553565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a3457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a445750610a438261264b565b5b9050919050565b606060028054610a5a90614657565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8690614657565b8015610ad35780601f10610aa857610100808354040283529160200191610ad3565b820191906000526020600020905b815481529060010190602001808311610ab657829003601f168201915b5050505050905090565b6000610ae8826126b5565b610b1e576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b6482611581565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bcc576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610beb612703565b73ffffffffffffffffffffffffffffffffffffffff1614610c4e57610c1781610c12612703565b612429565b610c4d576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610c5983838361270b565b505050565b600f5481565b6000610c6e6127bd565b6001546000540303905090565b60136020528060005260406000206000915090505481565b610c9b6118b2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d1e57601260009054906101000a900460ff1615610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d149061426e565b60405180910390fd5b5b60006001600e54610d2f919061456d565b1015610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d67906141ce565b60405180910390fd5b6000600e5411610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac9061420e565b60405180910390fd5b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f9061430e565b60405180910390fd5b6001600e6000828254610e4b919061456d565b925050819055506001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ea2919061456d565b92505081905550610eb43360016127c6565b565b610ec18383836127e4565b505050565b610ece612703565b73ffffffffffffffffffffffffffffffffffffffff16610eec6118b2565b73ffffffffffffffffffffffffffffffffffffffff1614610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f399061424e565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b600d5481565b610f6d612703565b73ffffffffffffffffffffffffffffffffffffffff16610f8b6118b2565b73ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd89061424e565b60405180910390fd5b60026009541415611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e906142ce565b60405180910390fd5b600260098190555060006110396118b2565b73ffffffffffffffffffffffffffffffffffffffff164760405161105c90614093565b60006040518083038185875af1925050503d8060008114611099576040519150601f19603f3d011682016040523d82523d6000602084013e61109e565b606091505b50509050806110ac57600080fd5b506001600981905550565b6110d283838360405180602001604052806000815250612133565b505050565b606060006110e48361159d565b905060008167ffffffffffffffff811115611102576111016147f0565b5b6040519080825280602002602001820160405280156111305781602001602082028036833780820191505090505b509050600061113d6127bd565b90506000805b8482108015611153575060005483105b156112de576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516112ca57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461126657806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112c957838584815181106112ae576112ad6147c1565b5b60200260200101818152505082806112c5906146ba565b9350505b5b83806112d5906146ba565b94505050611143565b8395505050505050919050565b6112f3612703565b73ffffffffffffffffffffffffffffffffffffffff166113116118b2565b73ffffffffffffffffffffffffffffffffffffffff1614611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e9061424e565b60405180910390fd5b8060118190555050565b611379612703565b73ffffffffffffffffffffffffffffffffffffffff166113976118b2565b73ffffffffffffffffffffffffffffffffffffffff16146113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e49061424e565b60405180910390fd5b600d54826113f9610c64565b611403919061448c565b1115611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b9061418e565b60405180910390fd5b61144e81836127c6565b5050565b601260019054906101000a900460ff1681565b600c805461147290614657565b80601f016020809104026020016040519081016040528092919081815260200182805461149e90614657565b80156114eb5780601f106114c0576101008083540402835291602001916114eb565b820191906000526020600020905b8154815290600101906020018083116114ce57829003601f168201915b505050505081565b600a805461150090614657565b80601f016020809104026020016040519081016040528092919081815260200182805461152c90614657565b80156115795780601f1061154e57610100808354040283529160200191611579565b820191906000526020600020905b81548152906001019060200180831161155c57829003601f168201915b505050505081565b600061158c82612c9a565b600001519050919050565b60105481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611605576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611675612703565b73ffffffffffffffffffffffffffffffffffffffff166116936118b2565b73ffffffffffffffffffffffffffffffffffffffff16146116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e09061424e565b60405180910390fd5b6116f36000612f25565b565b600b805461170290614657565b80601f016020809104026020016040519081016040528092919081815260200182805461172e90614657565b801561177b5780601f106117505761010080835404028352916020019161177b565b820191906000526020600020905b81548152906001019060200180831161175e57829003601f168201915b505050505081565b61178b612703565b73ffffffffffffffffffffffffffffffffffffffff166117a96118b2565b73ffffffffffffffffffffffffffffffffffffffff16146117ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f69061424e565b60405180910390fd5b80600f8190555050565b611811612703565b73ffffffffffffffffffffffffffffffffffffffff1661182f6118b2565b73ffffffffffffffffffffffffffffffffffffffff1614611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c9061424e565b60405180910390fd5b80600a908051906020019061189b92919061372f565b5050565b601260009054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60146020528060005260406000206000915090505481565b60606003805461190390614657565b80601f016020809104026020016040519081016040528092919081815260200182805461192f90614657565b801561197c5780601f106119515761010080835404028352916020019161197c565b820191906000526020600020905b81548152906001019060200180831161195f57829003601f168201915b5050505050905090565b600e5481565b806119956118b2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a5d57601260009054906101000a900460ff1615611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061426e565b60405180910390fd5b601054811115611a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a53906142ae565b60405180910390fd5b5b60008111611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a979061422e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b05906141ae565b60405180910390fd5b600d5481611b1a610c64565b611b24919061448c565b1115611b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5c9061428e565b60405180910390fd5b611b6d6118b2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c7f57600f5482601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bed919061448c565b1115611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c25906141ee565b60405180910390fd5b81601154611c3c9190614513565b341015611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c759061432e565b60405180910390fd5b5b6003601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611e1c57600382601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d14919061448c565b10611d71576001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d69919061448c565b925050819055505b600682601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dbe919061448c565b10611e1b576001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e13919061448c565b925050819055505b5b6003601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611f57576006601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611f5657600682601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef8919061448c565b10611f55576001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f4d919061448c565b925050819055505b5b5b81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fa6919061448c565b92505081905550611fb733836127c6565b5050565b611fc3612703565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612028576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000612035612703565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120e2612703565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121279190614131565b60405180910390a35050565b61213e8484846127e4565b61215d8373ffffffffffffffffffffffffffffffffffffffff16612feb565b156121a55761216e8484848461300e565b6121a4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6121b3612703565b73ffffffffffffffffffffffffffffffffffffffff166121d16118b2565b73ffffffffffffffffffffffffffffffffffffffff1614612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e9061424e565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b60115481565b6060612255826126b5565b612294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228b906142ee565b60405180910390fd5b60001515601260019054906101000a900460ff161515141561234257600b80546122bd90614657565b80601f01602080910402602001604051908101604052809291908181526020018280546122e990614657565b80156123365780601f1061230b57610100808354040283529160200191612336565b820191906000526020600020905b81548152906001019060200180831161231957829003601f168201915b5050505050905061239e565b600061234c61316e565b9050600081511161236c576040518060200160405280600081525061239a565b8061237684613200565b600c60405160200161238a93929190614062565b6040516020818303038152906040525b9150505b919050565b6123ab612703565b73ffffffffffffffffffffffffffffffffffffffff166123c96118b2565b73ffffffffffffffffffffffffffffffffffffffff161461241f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124169061424e565b60405180910390fd5b8060108190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124c5612703565b73ffffffffffffffffffffffffffffffffffffffff166124e36118b2565b73ffffffffffffffffffffffffffffffffffffffff1614612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125309061424e565b60405180910390fd5b80600b908051906020019061254f92919061372f565b5050565b61255b612703565b73ffffffffffffffffffffffffffffffffffffffff166125796118b2565b73ffffffffffffffffffffffffffffffffffffffff16146125cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c69061424e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561263f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126369061416e565b60405180910390fd5b61264881612f25565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816126c06127bd565b111580156126cf575060005482105b80156126fc575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6127e0828260405180602001604052806000815250613361565b5050565b60006127ef82612c9a565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461285a576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661287b612703565b73ffffffffffffffffffffffffffffffffffffffff1614806128aa57506128a9856128a4612703565b612429565b5b806128ef57506128b8612703565b73ffffffffffffffffffffffffffffffffffffffff166128d784610add565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612928576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561298f576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61299c8585856001613723565b6129a86000848761270b565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c28576000548214612c2757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c938585856001613729565b5050505050565b612ca26137b5565b600082905080612cb06127bd565b11612eee57600054811015612eed576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612eeb57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612dcf578092505050612f20565b5b600115612eea57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ee5578092505050612f20565b612dd0565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613034612703565b8786866040518563ffffffff1660e01b815260040161305694939291906140c3565b602060405180830381600087803b15801561307057600080fd5b505af19250505080156130a157506040513d601f19601f8201168201806040525081019061309e9190613b7b565b60015b61311b573d80600081146130d1576040519150601f19603f3d011682016040523d82523d6000602084013e6130d6565b606091505b50600081511415613113576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a805461317d90614657565b80601f01602080910402602001604051908101604052809291908181526020018280546131a990614657565b80156131f65780601f106131cb576101008083540402835291602001916131f6565b820191906000526020600020905b8154815290600101906020018083116131d957829003601f168201915b5050505050905090565b60606000821415613248576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061335c565b600082905060005b6000821461327a578080613263906146ba565b915050600a8261327391906144e2565b9150613250565b60008167ffffffffffffffff811115613296576132956147f0565b5b6040519080825280601f01601f1916602001820160405280156132c85781602001600182028036833780820191505090505b5090505b60008514613355576001826132e1919061456d565b9150600a856132f09190614703565b60306132fc919061448c565b60f81b818381518110613312576133116147c1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561334e91906144e2565b94506132cc565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156133ce576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415613409576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134166000858386613723565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506135d78673ffffffffffffffffffffffffffffffffffffffff16612feb565b1561369c575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461364c600087848060010195508761300e565b613682576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106135dd57826000541461369757600080fd5b613707565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821061369d575b81600081905550505061371d6000858386613729565b50505050565b50505050565b50505050565b82805461373b90614657565b90600052602060002090601f01602090048101928261375d57600085556137a4565b82601f1061377657805160ff19168380011785556137a4565b828001600101855582156137a4579182015b828111156137a3578251825591602001919060010190613788565b5b5090506137b191906137f8565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156138115760008160009055506001016137f9565b5090565b60006138286138238461438e565b614369565b90508281526020810184848401111561384457613843614824565b5b61384f848285614615565b509392505050565b600061386a613865846143bf565b614369565b90508281526020810184848401111561388657613885614824565b5b613891848285614615565b509392505050565b6000813590506138a881614b46565b92915050565b6000813590506138bd81614b5d565b92915050565b6000813590506138d281614b74565b92915050565b6000815190506138e781614b74565b92915050565b600082601f8301126139025761390161481f565b5b8135613912848260208601613815565b91505092915050565b600082601f8301126139305761392f61481f565b5b8135613940848260208601613857565b91505092915050565b60008135905061395881614b8b565b92915050565b6000602082840312156139745761397361482e565b5b600061398284828501613899565b91505092915050565b600080604083850312156139a2576139a161482e565b5b60006139b085828601613899565b92505060206139c185828601613899565b9150509250929050565b6000806000606084860312156139e4576139e361482e565b5b60006139f286828701613899565b9350506020613a0386828701613899565b9250506040613a1486828701613949565b9150509250925092565b60008060008060808587031215613a3857613a3761482e565b5b6000613a4687828801613899565b9450506020613a5787828801613899565b9350506040613a6887828801613949565b925050606085013567ffffffffffffffff811115613a8957613a88614829565b5b613a95878288016138ed565b91505092959194509250565b60008060408385031215613ab857613ab761482e565b5b6000613ac685828601613899565b9250506020613ad7858286016138ae565b9150509250929050565b60008060408385031215613af857613af761482e565b5b6000613b0685828601613899565b9250506020613b1785828601613949565b9150509250929050565b600060208284031215613b3757613b3661482e565b5b6000613b45848285016138ae565b91505092915050565b600060208284031215613b6457613b6361482e565b5b6000613b72848285016138c3565b91505092915050565b600060208284031215613b9157613b9061482e565b5b6000613b9f848285016138d8565b91505092915050565b600060208284031215613bbe57613bbd61482e565b5b600082013567ffffffffffffffff811115613bdc57613bdb614829565b5b613be88482850161391b565b91505092915050565b600060208284031215613c0757613c0661482e565b5b6000613c1584828501613949565b91505092915050565b60008060408385031215613c3557613c3461482e565b5b6000613c4385828601613949565b9250506020613c5485828601613899565b9150509250929050565b6000613c6a8383614044565b60208301905092915050565b613c7f816145a1565b82525050565b6000613c9082614415565b613c9a8185614443565b9350613ca5836143f0565b8060005b83811015613cd6578151613cbd8882613c5e565b9750613cc883614436565b925050600181019050613ca9565b5085935050505092915050565b613cec816145b3565b82525050565b6000613cfd82614420565b613d078185614454565b9350613d17818560208601614624565b613d2081614833565b840191505092915050565b6000613d368261442b565b613d408185614470565b9350613d50818560208601614624565b613d5981614833565b840191505092915050565b6000613d6f8261442b565b613d798185614481565b9350613d89818560208601614624565b80840191505092915050565b60008154613da281614657565b613dac8186614481565b94506001821660008114613dc75760018114613dd857613e0b565b60ff19831686528186019350613e0b565b613de185614400565b60005b83811015613e0357815481890152600182019150602081019050613de4565b838801955050505b50505092915050565b6000613e21602683614470565b9150613e2c82614844565b604082019050919050565b6000613e44601f83614470565b9150613e4f82614893565b602082019050919050565b6000613e67601e83614470565b9150613e72826148bc565b602082019050919050565b6000613e8a601783614470565b9150613e95826148e5565b602082019050919050565b6000613ead601d83614470565b9150613eb88261490e565b602082019050919050565b6000613ed0601583614470565b9150613edb82614937565b602082019050919050565b6000613ef3601a83614470565b9150613efe82614960565b602082019050919050565b6000613f16602083614470565b9150613f2182614989565b602082019050919050565b6000613f39601783614470565b9150613f44826149b2565b602082019050919050565b6000613f5c601183614470565b9150613f67826149db565b602082019050919050565b6000613f7f600083614465565b9150613f8a82614a04565b600082019050919050565b6000613fa2602283614470565b9150613fad82614a07565b604082019050919050565b6000613fc5601f83614470565b9150613fd082614a56565b602082019050919050565b6000613fe8603083614470565b9150613ff382614a7f565b604082019050919050565b600061400b602783614470565b915061401682614ace565b604082019050919050565b600061402e601383614470565b915061403982614b1d565b602082019050919050565b61404d8161460b565b82525050565b61405c8161460b565b82525050565b600061406e8286613d64565b915061407a8285613d64565b91506140868284613d95565b9150819050949350505050565b600061409e82613f72565b9150819050919050565b60006020820190506140bd6000830184613c76565b92915050565b60006080820190506140d86000830187613c76565b6140e56020830186613c76565b6140f26040830185614053565b81810360608301526141048184613cf2565b905095945050505050565b600060208201905081810360008301526141298184613c85565b905092915050565b60006020820190506141466000830184613ce3565b92915050565b600060208201905081810360008301526141668184613d2b565b905092915050565b6000602082019050818103600083015261418781613e14565b9050919050565b600060208201905081810360008301526141a781613e37565b9050919050565b600060208201905081810360008301526141c781613e5a565b9050919050565b600060208201905081810360008301526141e781613e7d565b9050919050565b6000602082019050818103600083015261420781613ea0565b9050919050565b6000602082019050818103600083015261422781613ec3565b9050919050565b6000602082019050818103600083015261424781613ee6565b9050919050565b6000602082019050818103600083015261426781613f09565b9050919050565b6000602082019050818103600083015261428781613f2c565b9050919050565b600060208201905081810360008301526142a781613f4f565b9050919050565b600060208201905081810360008301526142c781613f95565b9050919050565b600060208201905081810360008301526142e781613fb8565b9050919050565b6000602082019050818103600083015261430781613fdb565b9050919050565b6000602082019050818103600083015261432781613ffe565b9050919050565b6000602082019050818103600083015261434781614021565b9050919050565b60006020820190506143636000830184614053565b92915050565b6000614373614384565b905061437f8282614689565b919050565b6000604051905090565b600067ffffffffffffffff8211156143a9576143a86147f0565b5b6143b282614833565b9050602081019050919050565b600067ffffffffffffffff8211156143da576143d96147f0565b5b6143e382614833565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006144978261460b565b91506144a28361460b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144d7576144d6614734565b5b828201905092915050565b60006144ed8261460b565b91506144f88361460b565b92508261450857614507614763565b5b828204905092915050565b600061451e8261460b565b91506145298361460b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561456257614561614734565b5b828202905092915050565b60006145788261460b565b91506145838361460b565b92508282101561459657614595614734565b5b828203905092915050565b60006145ac826145eb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614642578082015181840152602081019050614627565b83811115614651576000848401525b50505050565b6000600282049050600182168061466f57607f821691505b6020821081141561468357614682614792565b5b50919050565b61469282614833565b810181811067ffffffffffffffff821117156146b1576146b06147f0565b5b80604052505050565b60006146c58261460b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146f8576146f7614734565b5b600182019050919050565b600061470e8261460b565b91506147198361460b565b92508261472957614728614763565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742065786365656473206d617820737570706c792100600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4e6f7420656e6f756768206672656520737570706c7921000000000000000000600082015250565b7f4d6178206d696e74207065722077616c6c657420657863656564656421000000600082015250565b7f4672656520737570706c7920736f6c64206f75742e0000000000000000000000600082015250565b7f4d696e7420616d6f756e742063616e2774206265207a65726f2e000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4265796f6e64204d617820537570706c79000000000000000000000000000000600082015250565b50565b7f4d6178206d696e7420706572207472616e73616374696f6e206578636565646560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b7f43616e20636c61696d206f6e6c792031206672656520666f722065616368203360008201527f206d696e74732100000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614b4f816145a1565b8114614b5a57600080fd5b50565b614b66816145b3565b8114614b7157600080fd5b50565b614b7d816145bf565b8114614b8857600080fd5b50565b614b948161460b565b8114614b9f57600080fd5b5056fea264697066735822122059d12db580b7cb2de5529deed20d90b934170cf0dfe27a043a8ec70b8a703f1364736f6c63430008070033697066733a2f2f516d50434e44594a654d65734477445362514b755958517161575375756759794674714e4e38514e5a39684a72552f68696464656e2e6a736f6e
Deployed Bytecode
0x6080604052600436106102465760003560e01c80636a14550c116101395780639858cf19116100b6578063c002d23d1161007a578063c002d23d14610849578063c87b56dd14610874578063df106d13146108b1578063e985e9c5146108da578063f2c4ce1e14610917578063f2fde38b1461094057610246565b80639858cf1914610787578063a0712d68146107b2578063a22cb465146107ce578063b88d4fde146107f7578063bedb86fb1461082057610246565b80637ec4a659116100fd5780637ec4a659146106a05780638456cb59146106c95780638da5cb5b146106f457806393a9af071461071f57806395d89b411461075c57610246565b80636a14550c146105cd57806370a08231146105f8578063715018a614610635578063722503801461064c5780637bddd65b1461067757610246565b806332cb6b0c116101c7578063512b658d1161018b578063512b658d146104e6578063518302271461050f5780635503a0e81461053a57806362b99ad4146105655780636352211e1461059057610246565b806332cb6b0c146104155780633ccfd60b1461044057806342842e0e14610457578063438b63001461048057806344a0d68a146104bd57610246565b806318160ddd1161020e57806318160ddd1461034457806318cae2691461036f57806319cae2cb146103ac57806323b872dd146103c35780632a3f300c146103ec57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f05780630aaef28514610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613b4e565b610969565b60405161027f9190614131565b60405180910390f35b34801561029457600080fd5b5061029d610a4b565b6040516102aa919061414c565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613bf1565b610add565b6040516102e791906140a8565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613ae1565b610b59565b005b34801561032557600080fd5b5061032e610c5e565b60405161033b919061434e565b60405180910390f35b34801561035057600080fd5b50610359610c64565b604051610366919061434e565b60405180910390f35b34801561037b57600080fd5b506103966004803603810190610391919061395e565b610c7b565b6040516103a3919061434e565b60405180910390f35b3480156103b857600080fd5b506103c1610c93565b005b3480156103cf57600080fd5b506103ea60048036038101906103e591906139cb565b610eb6565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613b21565b610ec6565b005b34801561042157600080fd5b5061042a610f5f565b604051610437919061434e565b60405180910390f35b34801561044c57600080fd5b50610455610f65565b005b34801561046357600080fd5b5061047e600480360381019061047991906139cb565b6110b7565b005b34801561048c57600080fd5b506104a760048036038101906104a2919061395e565b6110d7565b6040516104b4919061410f565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613bf1565b6112eb565b005b3480156104f257600080fd5b5061050d60048036038101906105089190613c1e565b611371565b005b34801561051b57600080fd5b50610524611452565b6040516105319190614131565b60405180910390f35b34801561054657600080fd5b5061054f611465565b60405161055c919061414c565b60405180910390f35b34801561057157600080fd5b5061057a6114f3565b604051610587919061414c565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b29190613bf1565b611581565b6040516105c491906140a8565b60405180910390f35b3480156105d957600080fd5b506105e2611597565b6040516105ef919061434e565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a919061395e565b61159d565b60405161062c919061434e565b60405180910390f35b34801561064157600080fd5b5061064a61166d565b005b34801561065857600080fd5b506106616116f5565b60405161066e919061414c565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190613bf1565b611783565b005b3480156106ac57600080fd5b506106c760048036038101906106c29190613ba8565b611809565b005b3480156106d557600080fd5b506106de61189f565b6040516106eb9190614131565b60405180910390f35b34801561070057600080fd5b506107096118b2565b60405161071691906140a8565b60405180910390f35b34801561072b57600080fd5b506107466004803603810190610741919061395e565b6118dc565b604051610753919061434e565b60405180910390f35b34801561076857600080fd5b506107716118f4565b60405161077e919061414c565b60405180910390f35b34801561079357600080fd5b5061079c611986565b6040516107a9919061434e565b60405180910390f35b6107cc60048036038101906107c79190613bf1565b61198c565b005b3480156107da57600080fd5b506107f560048036038101906107f09190613aa1565b611fbb565b005b34801561080357600080fd5b5061081e60048036038101906108199190613a1e565b612133565b005b34801561082c57600080fd5b5061084760048036038101906108429190613b21565b6121ab565b005b34801561085557600080fd5b5061085e612244565b60405161086b919061434e565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190613bf1565b61224a565b6040516108a8919061414c565b60405180910390f35b3480156108bd57600080fd5b506108d860048036038101906108d39190613bf1565b6123a3565b005b3480156108e657600080fd5b5061090160048036038101906108fc919061398b565b612429565b60405161090e9190614131565b60405180910390f35b34801561092357600080fd5b5061093e60048036038101906109399190613ba8565b6124bd565b005b34801561094c57600080fd5b506109676004803603810190610962919061395e565b612553565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a3457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a445750610a438261264b565b5b9050919050565b606060028054610a5a90614657565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8690614657565b8015610ad35780601f10610aa857610100808354040283529160200191610ad3565b820191906000526020600020905b815481529060010190602001808311610ab657829003601f168201915b5050505050905090565b6000610ae8826126b5565b610b1e576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b6482611581565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bcc576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610beb612703565b73ffffffffffffffffffffffffffffffffffffffff1614610c4e57610c1781610c12612703565b612429565b610c4d576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610c5983838361270b565b505050565b600f5481565b6000610c6e6127bd565b6001546000540303905090565b60136020528060005260406000206000915090505481565b610c9b6118b2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d1e57601260009054906101000a900460ff1615610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d149061426e565b60405180910390fd5b5b60006001600e54610d2f919061456d565b1015610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d67906141ce565b60405180910390fd5b6000600e5411610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac9061420e565b60405180910390fd5b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f9061430e565b60405180910390fd5b6001600e6000828254610e4b919061456d565b925050819055506001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ea2919061456d565b92505081905550610eb43360016127c6565b565b610ec18383836127e4565b505050565b610ece612703565b73ffffffffffffffffffffffffffffffffffffffff16610eec6118b2565b73ffffffffffffffffffffffffffffffffffffffff1614610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f399061424e565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b600d5481565b610f6d612703565b73ffffffffffffffffffffffffffffffffffffffff16610f8b6118b2565b73ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd89061424e565b60405180910390fd5b60026009541415611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e906142ce565b60405180910390fd5b600260098190555060006110396118b2565b73ffffffffffffffffffffffffffffffffffffffff164760405161105c90614093565b60006040518083038185875af1925050503d8060008114611099576040519150601f19603f3d011682016040523d82523d6000602084013e61109e565b606091505b50509050806110ac57600080fd5b506001600981905550565b6110d283838360405180602001604052806000815250612133565b505050565b606060006110e48361159d565b905060008167ffffffffffffffff811115611102576111016147f0565b5b6040519080825280602002602001820160405280156111305781602001602082028036833780820191505090505b509050600061113d6127bd565b90506000805b8482108015611153575060005483105b156112de576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516112ca57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461126657806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112c957838584815181106112ae576112ad6147c1565b5b60200260200101818152505082806112c5906146ba565b9350505b5b83806112d5906146ba565b94505050611143565b8395505050505050919050565b6112f3612703565b73ffffffffffffffffffffffffffffffffffffffff166113116118b2565b73ffffffffffffffffffffffffffffffffffffffff1614611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e9061424e565b60405180910390fd5b8060118190555050565b611379612703565b73ffffffffffffffffffffffffffffffffffffffff166113976118b2565b73ffffffffffffffffffffffffffffffffffffffff16146113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e49061424e565b60405180910390fd5b600d54826113f9610c64565b611403919061448c565b1115611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b9061418e565b60405180910390fd5b61144e81836127c6565b5050565b601260019054906101000a900460ff1681565b600c805461147290614657565b80601f016020809104026020016040519081016040528092919081815260200182805461149e90614657565b80156114eb5780601f106114c0576101008083540402835291602001916114eb565b820191906000526020600020905b8154815290600101906020018083116114ce57829003601f168201915b505050505081565b600a805461150090614657565b80601f016020809104026020016040519081016040528092919081815260200182805461152c90614657565b80156115795780601f1061154e57610100808354040283529160200191611579565b820191906000526020600020905b81548152906001019060200180831161155c57829003601f168201915b505050505081565b600061158c82612c9a565b600001519050919050565b60105481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611605576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611675612703565b73ffffffffffffffffffffffffffffffffffffffff166116936118b2565b73ffffffffffffffffffffffffffffffffffffffff16146116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e09061424e565b60405180910390fd5b6116f36000612f25565b565b600b805461170290614657565b80601f016020809104026020016040519081016040528092919081815260200182805461172e90614657565b801561177b5780601f106117505761010080835404028352916020019161177b565b820191906000526020600020905b81548152906001019060200180831161175e57829003601f168201915b505050505081565b61178b612703565b73ffffffffffffffffffffffffffffffffffffffff166117a96118b2565b73ffffffffffffffffffffffffffffffffffffffff16146117ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f69061424e565b60405180910390fd5b80600f8190555050565b611811612703565b73ffffffffffffffffffffffffffffffffffffffff1661182f6118b2565b73ffffffffffffffffffffffffffffffffffffffff1614611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c9061424e565b60405180910390fd5b80600a908051906020019061189b92919061372f565b5050565b601260009054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60146020528060005260406000206000915090505481565b60606003805461190390614657565b80601f016020809104026020016040519081016040528092919081815260200182805461192f90614657565b801561197c5780601f106119515761010080835404028352916020019161197c565b820191906000526020600020905b81548152906001019060200180831161195f57829003601f168201915b5050505050905090565b600e5481565b806119956118b2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a5d57601260009054906101000a900460ff1615611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061426e565b60405180910390fd5b601054811115611a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a53906142ae565b60405180910390fd5b5b60008111611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a979061422e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b05906141ae565b60405180910390fd5b600d5481611b1a610c64565b611b24919061448c565b1115611b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5c9061428e565b60405180910390fd5b611b6d6118b2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c7f57600f5482601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bed919061448c565b1115611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c25906141ee565b60405180910390fd5b81601154611c3c9190614513565b341015611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c759061432e565b60405180910390fd5b5b6003601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611e1c57600382601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d14919061448c565b10611d71576001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d69919061448c565b925050819055505b600682601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dbe919061448c565b10611e1b576001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e13919061448c565b925050819055505b5b6003601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611f57576006601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611f5657600682601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef8919061448c565b10611f55576001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f4d919061448c565b925050819055505b5b5b81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fa6919061448c565b92505081905550611fb733836127c6565b5050565b611fc3612703565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612028576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000612035612703565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120e2612703565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121279190614131565b60405180910390a35050565b61213e8484846127e4565b61215d8373ffffffffffffffffffffffffffffffffffffffff16612feb565b156121a55761216e8484848461300e565b6121a4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6121b3612703565b73ffffffffffffffffffffffffffffffffffffffff166121d16118b2565b73ffffffffffffffffffffffffffffffffffffffff1614612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e9061424e565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b60115481565b6060612255826126b5565b612294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228b906142ee565b60405180910390fd5b60001515601260019054906101000a900460ff161515141561234257600b80546122bd90614657565b80601f01602080910402602001604051908101604052809291908181526020018280546122e990614657565b80156123365780601f1061230b57610100808354040283529160200191612336565b820191906000526020600020905b81548152906001019060200180831161231957829003601f168201915b5050505050905061239e565b600061234c61316e565b9050600081511161236c576040518060200160405280600081525061239a565b8061237684613200565b600c60405160200161238a93929190614062565b6040516020818303038152906040525b9150505b919050565b6123ab612703565b73ffffffffffffffffffffffffffffffffffffffff166123c96118b2565b73ffffffffffffffffffffffffffffffffffffffff161461241f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124169061424e565b60405180910390fd5b8060108190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124c5612703565b73ffffffffffffffffffffffffffffffffffffffff166124e36118b2565b73ffffffffffffffffffffffffffffffffffffffff1614612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125309061424e565b60405180910390fd5b80600b908051906020019061254f92919061372f565b5050565b61255b612703565b73ffffffffffffffffffffffffffffffffffffffff166125796118b2565b73ffffffffffffffffffffffffffffffffffffffff16146125cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c69061424e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561263f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126369061416e565b60405180910390fd5b61264881612f25565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816126c06127bd565b111580156126cf575060005482105b80156126fc575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6127e0828260405180602001604052806000815250613361565b5050565b60006127ef82612c9a565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461285a576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661287b612703565b73ffffffffffffffffffffffffffffffffffffffff1614806128aa57506128a9856128a4612703565b612429565b5b806128ef57506128b8612703565b73ffffffffffffffffffffffffffffffffffffffff166128d784610add565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612928576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561298f576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61299c8585856001613723565b6129a86000848761270b565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c28576000548214612c2757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c938585856001613729565b5050505050565b612ca26137b5565b600082905080612cb06127bd565b11612eee57600054811015612eed576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612eeb57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612dcf578092505050612f20565b5b600115612eea57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ee5578092505050612f20565b612dd0565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613034612703565b8786866040518563ffffffff1660e01b815260040161305694939291906140c3565b602060405180830381600087803b15801561307057600080fd5b505af19250505080156130a157506040513d601f19601f8201168201806040525081019061309e9190613b7b565b60015b61311b573d80600081146130d1576040519150601f19603f3d011682016040523d82523d6000602084013e6130d6565b606091505b50600081511415613113576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a805461317d90614657565b80601f01602080910402602001604051908101604052809291908181526020018280546131a990614657565b80156131f65780601f106131cb576101008083540402835291602001916131f6565b820191906000526020600020905b8154815290600101906020018083116131d957829003601f168201915b5050505050905090565b60606000821415613248576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061335c565b600082905060005b6000821461327a578080613263906146ba565b915050600a8261327391906144e2565b9150613250565b60008167ffffffffffffffff811115613296576132956147f0565b5b6040519080825280601f01601f1916602001820160405280156132c85781602001600182028036833780820191505090505b5090505b60008514613355576001826132e1919061456d565b9150600a856132f09190614703565b60306132fc919061448c565b60f81b818381518110613312576133116147c1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561334e91906144e2565b94506132cc565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156133ce576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415613409576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134166000858386613723565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506135d78673ffffffffffffffffffffffffffffffffffffffff16612feb565b1561369c575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461364c600087848060010195508761300e565b613682576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106135dd57826000541461369757600080fd5b613707565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821061369d575b81600081905550505061371d6000858386613729565b50505050565b50505050565b50505050565b82805461373b90614657565b90600052602060002090601f01602090048101928261375d57600085556137a4565b82601f1061377657805160ff19168380011785556137a4565b828001600101855582156137a4579182015b828111156137a3578251825591602001919060010190613788565b5b5090506137b191906137f8565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156138115760008160009055506001016137f9565b5090565b60006138286138238461438e565b614369565b90508281526020810184848401111561384457613843614824565b5b61384f848285614615565b509392505050565b600061386a613865846143bf565b614369565b90508281526020810184848401111561388657613885614824565b5b613891848285614615565b509392505050565b6000813590506138a881614b46565b92915050565b6000813590506138bd81614b5d565b92915050565b6000813590506138d281614b74565b92915050565b6000815190506138e781614b74565b92915050565b600082601f8301126139025761390161481f565b5b8135613912848260208601613815565b91505092915050565b600082601f8301126139305761392f61481f565b5b8135613940848260208601613857565b91505092915050565b60008135905061395881614b8b565b92915050565b6000602082840312156139745761397361482e565b5b600061398284828501613899565b91505092915050565b600080604083850312156139a2576139a161482e565b5b60006139b085828601613899565b92505060206139c185828601613899565b9150509250929050565b6000806000606084860312156139e4576139e361482e565b5b60006139f286828701613899565b9350506020613a0386828701613899565b9250506040613a1486828701613949565b9150509250925092565b60008060008060808587031215613a3857613a3761482e565b5b6000613a4687828801613899565b9450506020613a5787828801613899565b9350506040613a6887828801613949565b925050606085013567ffffffffffffffff811115613a8957613a88614829565b5b613a95878288016138ed565b91505092959194509250565b60008060408385031215613ab857613ab761482e565b5b6000613ac685828601613899565b9250506020613ad7858286016138ae565b9150509250929050565b60008060408385031215613af857613af761482e565b5b6000613b0685828601613899565b9250506020613b1785828601613949565b9150509250929050565b600060208284031215613b3757613b3661482e565b5b6000613b45848285016138ae565b91505092915050565b600060208284031215613b6457613b6361482e565b5b6000613b72848285016138c3565b91505092915050565b600060208284031215613b9157613b9061482e565b5b6000613b9f848285016138d8565b91505092915050565b600060208284031215613bbe57613bbd61482e565b5b600082013567ffffffffffffffff811115613bdc57613bdb614829565b5b613be88482850161391b565b91505092915050565b600060208284031215613c0757613c0661482e565b5b6000613c1584828501613949565b91505092915050565b60008060408385031215613c3557613c3461482e565b5b6000613c4385828601613949565b9250506020613c5485828601613899565b9150509250929050565b6000613c6a8383614044565b60208301905092915050565b613c7f816145a1565b82525050565b6000613c9082614415565b613c9a8185614443565b9350613ca5836143f0565b8060005b83811015613cd6578151613cbd8882613c5e565b9750613cc883614436565b925050600181019050613ca9565b5085935050505092915050565b613cec816145b3565b82525050565b6000613cfd82614420565b613d078185614454565b9350613d17818560208601614624565b613d2081614833565b840191505092915050565b6000613d368261442b565b613d408185614470565b9350613d50818560208601614624565b613d5981614833565b840191505092915050565b6000613d6f8261442b565b613d798185614481565b9350613d89818560208601614624565b80840191505092915050565b60008154613da281614657565b613dac8186614481565b94506001821660008114613dc75760018114613dd857613e0b565b60ff19831686528186019350613e0b565b613de185614400565b60005b83811015613e0357815481890152600182019150602081019050613de4565b838801955050505b50505092915050565b6000613e21602683614470565b9150613e2c82614844565b604082019050919050565b6000613e44601f83614470565b9150613e4f82614893565b602082019050919050565b6000613e67601e83614470565b9150613e72826148bc565b602082019050919050565b6000613e8a601783614470565b9150613e95826148e5565b602082019050919050565b6000613ead601d83614470565b9150613eb88261490e565b602082019050919050565b6000613ed0601583614470565b9150613edb82614937565b602082019050919050565b6000613ef3601a83614470565b9150613efe82614960565b602082019050919050565b6000613f16602083614470565b9150613f2182614989565b602082019050919050565b6000613f39601783614470565b9150613f44826149b2565b602082019050919050565b6000613f5c601183614470565b9150613f67826149db565b602082019050919050565b6000613f7f600083614465565b9150613f8a82614a04565b600082019050919050565b6000613fa2602283614470565b9150613fad82614a07565b604082019050919050565b6000613fc5601f83614470565b9150613fd082614a56565b602082019050919050565b6000613fe8603083614470565b9150613ff382614a7f565b604082019050919050565b600061400b602783614470565b915061401682614ace565b604082019050919050565b600061402e601383614470565b915061403982614b1d565b602082019050919050565b61404d8161460b565b82525050565b61405c8161460b565b82525050565b600061406e8286613d64565b915061407a8285613d64565b91506140868284613d95565b9150819050949350505050565b600061409e82613f72565b9150819050919050565b60006020820190506140bd6000830184613c76565b92915050565b60006080820190506140d86000830187613c76565b6140e56020830186613c76565b6140f26040830185614053565b81810360608301526141048184613cf2565b905095945050505050565b600060208201905081810360008301526141298184613c85565b905092915050565b60006020820190506141466000830184613ce3565b92915050565b600060208201905081810360008301526141668184613d2b565b905092915050565b6000602082019050818103600083015261418781613e14565b9050919050565b600060208201905081810360008301526141a781613e37565b9050919050565b600060208201905081810360008301526141c781613e5a565b9050919050565b600060208201905081810360008301526141e781613e7d565b9050919050565b6000602082019050818103600083015261420781613ea0565b9050919050565b6000602082019050818103600083015261422781613ec3565b9050919050565b6000602082019050818103600083015261424781613ee6565b9050919050565b6000602082019050818103600083015261426781613f09565b9050919050565b6000602082019050818103600083015261428781613f2c565b9050919050565b600060208201905081810360008301526142a781613f4f565b9050919050565b600060208201905081810360008301526142c781613f95565b9050919050565b600060208201905081810360008301526142e781613fb8565b9050919050565b6000602082019050818103600083015261430781613fdb565b9050919050565b6000602082019050818103600083015261432781613ffe565b9050919050565b6000602082019050818103600083015261434781614021565b9050919050565b60006020820190506143636000830184614053565b92915050565b6000614373614384565b905061437f8282614689565b919050565b6000604051905090565b600067ffffffffffffffff8211156143a9576143a86147f0565b5b6143b282614833565b9050602081019050919050565b600067ffffffffffffffff8211156143da576143d96147f0565b5b6143e382614833565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006144978261460b565b91506144a28361460b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144d7576144d6614734565b5b828201905092915050565b60006144ed8261460b565b91506144f88361460b565b92508261450857614507614763565b5b828204905092915050565b600061451e8261460b565b91506145298361460b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561456257614561614734565b5b828202905092915050565b60006145788261460b565b91506145838361460b565b92508282101561459657614595614734565b5b828203905092915050565b60006145ac826145eb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614642578082015181840152602081019050614627565b83811115614651576000848401525b50505050565b6000600282049050600182168061466f57607f821691505b6020821081141561468357614682614792565b5b50919050565b61469282614833565b810181811067ffffffffffffffff821117156146b1576146b06147f0565b5b80604052505050565b60006146c58261460b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146f8576146f7614734565b5b600182019050919050565b600061470e8261460b565b91506147198361460b565b92508261472957614728614763565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742065786365656473206d617820737570706c792100600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4e6f7420656e6f756768206672656520737570706c7921000000000000000000600082015250565b7f4d6178206d696e74207065722077616c6c657420657863656564656421000000600082015250565b7f4672656520737570706c7920736f6c64206f75742e0000000000000000000000600082015250565b7f4d696e7420616d6f756e742063616e2774206265207a65726f2e000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4265796f6e64204d617820537570706c79000000000000000000000000000000600082015250565b50565b7f4d6178206d696e7420706572207472616e73616374696f6e206578636565646560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b7f43616e20636c61696d206f6e6c792031206672656520666f722065616368203360008201527f206d696e74732100000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614b4f816145a1565b8114614b5a57600080fd5b50565b614b66816145b3565b8114614b7157600080fd5b50565b614b7d816145bf565b8114614b8857600080fd5b50565b614b948161460b565b8114614b9f57600080fd5b5056fea264697066735822122059d12db580b7cb2de5529deed20d90b934170cf0dfe27a043a8ec70b8a703f1364736f6c63430008070033
Deployed Bytecode Sourcemap
37368:5880:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20248:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23363:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24867:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24429:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37651:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19488:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37847:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40006:456;;;;;;;;;;;;;:::i;:::-;;25732:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42984:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37573:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43077:162;;;;;;;;;;;;;:::i;:::-;;25973:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41379:827;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42573:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40495:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37806:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37531:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37466:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23171:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37692:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20617:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4635:103;;;;;;;;;;;;;:::i;:::-;;37496:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42667:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42302:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37775:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3984:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37909:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23532:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37612:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38913:1067;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25143:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26229:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42895:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37729:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40798:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42785:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25501:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42439:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4893:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20248:305;20350:4;20402:25;20387:40;;;:11;:40;;;;:105;;;;20459:33;20444:48;;;:11;:48;;;;20387:105;:158;;;;20509:36;20533:11;20509:23;:36::i;:::-;20387:158;20367:178;;20248:305;;;:::o;23363:100::-;23417:13;23450:5;23443:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23363:100;:::o;24867:204::-;24935:7;24960:16;24968:7;24960;:16::i;:::-;24955:64;;24985:34;;;;;;;;;;;;;;24955:64;25039:15;:24;25055:7;25039:24;;;;;;;;;;;;;;;;;;;;;25032:31;;24867:204;;;:::o;24429:372::-;24502:13;24518:24;24534:7;24518:15;:24::i;:::-;24502:40;;24563:5;24557:11;;:2;:11;;;24553:48;;;24577:24;;;;;;;;;;;;;;24553:48;24634:5;24618:21;;:12;:10;:12::i;:::-;:21;;;24614:139;;24645:37;24662:5;24669:12;:10;:12::i;:::-;24645:16;:37::i;:::-;24641:112;;24706:35;;;;;;;;;;;;;;24641:112;24614:139;24765:28;24774:2;24778:7;24787:5;24765:8;:28::i;:::-;24491:310;24429:372;;:::o;37651:34::-;;;;:::o;19488:312::-;19541:7;19766:15;:13;:15::i;:::-;19751:12;;19735:13;;:28;:46;19728:53;;19488:312;:::o;37847:55::-;;;;;;;;;;;;;;;;;:::o;40006:456::-;40062:7;:5;:7::i;:::-;40048:21;;:10;:21;;;40044:96;;40095:5;;;;;;;;;;;40094:6;40086:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;40044:96;40177:1;40172;40158:11;;:15;;;;:::i;:::-;:20;;40150:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;40239:1;40225:11;;:15;40217:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;40310:1;40285:9;:21;40295:10;40285:21;;;;;;;;;;;;;;;;:26;;40277:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;40383:1;40368:11;;:16;;;;;;;:::i;:::-;;;;;;;;40420:1;40395:9;:21;40405:10;40395:21;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;40432:24;40442:10;40454:1;40432:9;:24::i;:::-;40006:456::o;25732:170::-;25866:28;25876:4;25882:2;25886:7;25866:9;:28::i;:::-;25732:170;;;:::o;42984:85::-;4215:12;:10;:12::i;:::-;4204:23;;:7;:5;:7::i;:::-;:23;;;4196:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43055:6:::1;43044:8;;:17;;;;;;;;;;;;;;;;;;42984:85:::0;:::o;37573:32::-;;;;:::o;43077:162::-;4215:12;:10;:12::i;:::-;4204:23;;:7;:5;:7::i;:::-;:23;;;4196:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;828:1:::1;1048:7;;:19;;1040:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;828:1;1181:7;:18;;;;43137:12:::2;43163:7;:5;:7::i;:::-;43155:21;;43184;43155:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43136:74;;;43225:7;43217:16;;;::::0;::::2;;43129:110;784:1:::1;1226:7;:22;;;;43077:162::o:0;25973:185::-;26111:39;26128:4;26134:2;26138:7;26111:39;;;;;;;;;;;;:16;:39::i;:::-;25973:185;;;:::o;41379:827::-;41439:16;41464:23;41490:17;41500:6;41490:9;:17::i;:::-;41464:43;;41514:30;41561:15;41547:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41514:63;;41584:22;41609:15;:13;:15::i;:::-;41584:40;;41631:23;41665:26;41700:474;41725:15;41707;:33;:67;;;;;41761:13;;41744:14;:30;41707:67;41700:474;;;41785:31;41819:11;:27;41831:14;41819:27;;;;;;;;;;;41785:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41862:9;:16;;;41857:285;;41921:1;41895:28;;:9;:14;;;:28;;;41891:94;;41959:9;:14;;;41938:35;;41891:94;42023:6;42001:28;;:18;:28;;;41997:136;;;42077:14;42044:13;42058:15;42044:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;42104:17;;;;;:::i;:::-;;;;41997:136;41857:285;42150:16;;;;;:::i;:::-;;;;41776:398;41700:474;;;42187:13;42180:20;;;;;;;41379:827;;;:::o;42573:86::-;4215:12;:10;:12::i;:::-;4204:23;;:7;:5;:7::i;:::-;:23;;;4196:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42646:5:::1;42633:10;:18;;;;42573:86:::0;:::o;40495:228::-;4215:12;:10;:12::i;:::-;4204:23;;:7;:5;:7::i;:::-;:23;;;4196:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40625:10:::1;;40610:11;40594:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:41;;40586:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40682:33;40692:9;40703:11;40682:9;:33::i;:::-;40495:228:::0;;:::o;37806:28::-;;;;;;;;;;;;;:::o;37531:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37466:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23171:125::-;23235:7;23262:21;23275:7;23262:12;:21::i;:::-;:26;;;23255:33;;23171:125;;;:::o;37692:30::-;;;;:::o;20617:206::-;20681:7;20722:1;20705:19;;:5;:19;;;20701:60;;;20733:28;;;;;;;;;;;;;;20701:60;20787:12;:19;20800:5;20787:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;20779:36;;20772:43;;20617:206;;;:::o;4635:103::-;4215:12;:10;:12::i;:::-;4204:23;;:7;:5;:7::i;:::-;:23;;;4196:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4700:30:::1;4727:1;4700:18;:30::i;:::-;4635:103::o:0;37496:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42667:110::-;4215:12;:10;:12::i;:::-;4204:23;;:7;:5;:7::i;:::-;:23;;;4196:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42759:10:::1;42741:15;:28;;;;42667:110:::0;:::o;42302:106::-;4215:12;:10;:12::i;:::-;4204:23;;:7;:5;:7::i;:::-;:23;;;4196:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42390:10:::1;42378:9;:22;;;;;;;;;;;;:::i;:::-;;42302:106:::0;:::o;37775:24::-;;;;;;;;;;;;;:::o;3984:87::-;4030:7;4057:6;;;;;;;;;;;4050:13;;3984:87;:::o;37909:44::-;;;;;;;;;;;;;;;;;:::o;23532:104::-;23588:13;23621:7;23614:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23532:104;:::o;37612:32::-;;;;:::o;38913:1067::-;38978:11;38422:7;:5;:7::i;:::-;38408:21;;:10;:21;;;38404:188;;38455:5;;;;;;;;;;;38454:6;38446:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;38526:11;;38511;:26;;38503:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38404:188;38624:1;38610:11;:15;38602:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38688:10;38675:23;;:9;:23;;;38667:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38783:10;;38768:11;38752:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:41;;38744:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;39020:7:::1;:5;:7::i;:::-;39006:21;;:10;:21;;;39002:245;;39102:15;;39087:11;39052:20;:32;39073:10;39052:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:65;;39044:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;39200:11;39187:10;;:24;;;;:::i;:::-;39174:9;:37;;39166:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;39002:245;39306:1;39271:20;:32;39292:10;39271:32;;;;;;;;;;;;;;;;:36;39267:318;;;39378:1;39363:11;39328:20;:32;39349:10;39328:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:51;39324:118;;39425:1;39400:9;:21;39410:10;39400:21;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;39324:118;39510:1;39495:11;39460:20;:32;39481:10;39460:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:51;39456:118;;39557:1;39532:9;:21;39542:10;39532:21;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;39456:118;39267:318;39637:1;39601:20;:32;39622:10;39601:32;;;;;;;;;;;;;;;;:37;39597:271;;39694:1;39659:20;:32;39680:10;39659:32;;;;;;;;;;;;;;;;:36;39655:202;;;39770:1;39755:11;39720:20;:32;39741:10;39720:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:51;39716:126;;39821:1;39796:9;:21;39806:10;39796:21;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;39716:126;39655:202;39597:271;39916:11;39880:20;:32;39901:10;39880:32;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;39938:34;39948:10;39960:11;39938:9;:34::i;:::-;38913:1067:::0;;:::o;25143:287::-;25254:12;:10;:12::i;:::-;25242:24;;:8;:24;;;25238:54;;;25275:17;;;;;;;;;;;;;;25238:54;25350:8;25305:18;:32;25324:12;:10;:12::i;:::-;25305:32;;;;;;;;;;;;;;;:42;25338:8;25305:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25403:8;25374:48;;25389:12;:10;:12::i;:::-;25374:48;;;25413:8;25374:48;;;;;;:::i;:::-;;;;;;;;25143:287;;:::o;26229:370::-;26396:28;26406:4;26412:2;26416:7;26396:9;:28::i;:::-;26439:15;:2;:13;;;:15::i;:::-;26435:157;;;26460:56;26491:4;26497:2;26501:7;26510:5;26460:30;:56::i;:::-;26456:136;;26540:40;;;;;;;;;;;;;;26456:136;26435:157;26229:370;;;;:::o;42895:81::-;4215:12;:10;:12::i;:::-;4204:23;;:7;:5;:7::i;:::-;:23;;;4196:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42962:6:::1;42954:5;;:14;;;;;;;;;;;;;;;;;;42895:81:::0;:::o;37729:37::-;;;;:::o;40798:428::-;40872:13;40902:17;40910:8;40902:7;:17::i;:::-;40894:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;41000:5;40988:17;;:8;;;;;;;;;;;:17;;;40984:49;;;41016:14;41009:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40984:49;41041:28;41072:10;:8;:10::i;:::-;41041:41;;41127:1;41102:14;41096:28;:32;:122;;;;;;;;;;;;;;;;;41160:14;41176:19;:8;:17;:19::i;:::-;41197:9;41143:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41096:122;41089:129;;;40798:428;;;;:::o;42785:102::-;4215:12;:10;:12::i;:::-;4204:23;;:7;:5;:7::i;:::-;:23;;;4196:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42869:10:::1;42855:11;:24;;;;42785:102:::0;:::o;25501:164::-;25598:4;25622:18;:25;25641:5;25622:25;;;;;;;;;;;;;;;:35;25648:8;25622:35;;;;;;;;;;;;;;;;;;;;;;;;;25615:42;;25501:164;;;;:::o;42439:126::-;4215:12;:10;:12::i;:::-;4204:23;;:7;:5;:7::i;:::-;:23;;;4196:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42542:15:::1;42525:14;:32;;;;;;;;;;;;:::i;:::-;;42439:126:::0;:::o;4893:201::-;4215:12;:10;:12::i;:::-;4204:23;;:7;:5;:7::i;:::-;:23;;;4196:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5002:1:::1;4982:22;;:8;:22;;;;4974:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5058:28;5077:8;5058:18;:28::i;:::-;4893:201:::0;:::o;11476:157::-;11561:4;11600:25;11585:40;;;:11;:40;;;;11578:47;;11476:157;;;:::o;26854:174::-;26911:4;26954:7;26935:15;:13;:15::i;:::-;:26;;:53;;;;;26975:13;;26965:7;:23;26935:53;:85;;;;;26993:11;:20;27005:7;26993:20;;;;;;;;;;;:27;;;;;;;;;;;;26992:28;26935:85;26928:92;;26854:174;;;:::o;3274:98::-;3327:7;3354:10;3347:17;;3274:98;:::o;36076:196::-;36218:2;36191:15;:24;36207:7;36191:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36256:7;36252:2;36236:28;;36245:5;36236:28;;;;;;;;;;;;36076:196;;;:::o;41252:95::-;41317:7;41340:1;41333:8;;41252:95;:::o;27112:104::-;27181:27;27191:2;27195:8;27181:27;;;;;;;;;;;;:9;:27::i;:::-;27112:104;;:::o;31024:2130::-;31139:35;31177:21;31190:7;31177:12;:21::i;:::-;31139:59;;31237:4;31215:26;;:13;:18;;;:26;;;31211:67;;31250:28;;;;;;;;;;;;;;31211:67;31291:22;31333:4;31317:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;31354:36;31371:4;31377:12;:10;:12::i;:::-;31354:16;:36::i;:::-;31317:73;:126;;;;31431:12;:10;:12::i;:::-;31407:36;;:20;31419:7;31407:11;:20::i;:::-;:36;;;31317:126;31291:153;;31462:17;31457:66;;31488:35;;;;;;;;;;;;;;31457:66;31552:1;31538:16;;:2;:16;;;31534:52;;;31563:23;;;;;;;;;;;;;;31534:52;31599:43;31621:4;31627:2;31631:7;31640:1;31599:21;:43::i;:::-;31707:35;31724:1;31728:7;31737:4;31707:8;:35::i;:::-;32068:1;32038:12;:18;32051:4;32038:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32112:1;32084:12;:16;32097:2;32084:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32130:31;32164:11;:20;32176:7;32164:20;;;;;;;;;;;32130:54;;32215:2;32199:8;:13;;;:18;;;;;;;;;;;;;;;;;;32265:15;32232:8;:23;;;:49;;;;;;;;;;;;;;;;;;32533:19;32565:1;32555:7;:11;32533:33;;32581:31;32615:11;:24;32627:11;32615:24;;;;;;;;;;;32581:58;;32683:1;32658:27;;:8;:13;;;;;;;;;;;;:27;;;32654:384;;;32868:13;;32853:11;:28;32849:174;;32922:4;32906:8;:13;;;:20;;;;;;;;;;;;;;;;;;32975:13;:28;;;32949:8;:23;;;:54;;;;;;;;;;;;;;;;;;32849:174;32654:384;32013:1036;;;33085:7;33081:2;33066:27;;33075:4;33066:27;;;;;;;;;;;;33104:42;33125:4;33131:2;33135:7;33144:1;33104:20;:42::i;:::-;31128:2026;;31024:2130;;;:::o;21998:1111::-;22060:21;;:::i;:::-;22094:12;22109:7;22094:22;;22177:4;22158:15;:13;:15::i;:::-;:23;22154:888;;22194:13;;22187:4;:20;22183:859;;;22228:31;22262:11;:17;22274:4;22262:17;;;;;;;;;;;22228:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22303:9;:16;;;22298:729;;22374:1;22348:28;;:9;:14;;;:28;;;22344:101;;22412:9;22405:16;;;;;;22344:101;22747:261;22754:4;22747:261;;;22787:6;;;;;;;;22832:11;:17;22844:4;22832:17;;;;;;;;;;;22820:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22906:1;22880:28;;:9;:14;;;:28;;;22876:109;;22948:9;22941:16;;;;;;22876:109;22747:261;;;22298:729;22209:833;22183:859;22154:888;23070:31;;;;;;;;;;;;;;21998:1111;;;;:::o;5254:191::-;5328:16;5347:6;;;;;;;;;;;5328:25;;5373:8;5364:6;;:17;;;;;;;;;;;;;;;;;;5428:8;5397:40;;5418:8;5397:40;;;;;;;;;;;;5317:128;5254:191;:::o;5706:115::-;5766:4;5812:1;5790:7;:19;;;:23;5783:30;;5706:115;;;:::o;36282:667::-;36445:4;36482:2;36466:36;;;36503:12;:10;:12::i;:::-;36517:4;36523:7;36532:5;36466:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36462:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36717:1;36700:6;:13;:18;36696:235;;;36746:40;;;;;;;;;;;;;;36696:235;36889:6;36883:13;36874:6;36870:2;36866:15;36859:38;36462:480;36595:45;;;36585:55;;;:6;:55;;;;36578:62;;;36282:667;;;;;;:::o;38174:110::-;38234:13;38267:9;38260:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38174:110;:::o;1532:534::-;1588:13;1629:1;1620:5;:10;1616:53;;;1647:10;;;;;;;;;;;;;;;;;;;;;1616:53;1679:12;1694:5;1679:20;;1710:14;1735:78;1750:1;1742:4;:9;1735:78;;1768:8;;;;;:::i;:::-;;;;1799:2;1791:10;;;;;:::i;:::-;;;1735:78;;;1823:19;1855:6;1845:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1823:39;;1873:154;1889:1;1880:5;:10;1873:154;;1917:1;1907:11;;;;;:::i;:::-;;;1984:2;1976:5;:10;;;;:::i;:::-;1963:2;:24;;;;:::i;:::-;1950:39;;1933:6;1940;1933:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2013:2;2004:11;;;;;:::i;:::-;;;1873:154;;;2051:6;2037:21;;;;;1532:534;;;;:::o;27589:1749::-;27712:20;27735:13;;27712:36;;27777:1;27763:16;;:2;:16;;;27759:48;;;27788:19;;;;;;;;;;;;;;27759:48;27834:1;27822:8;:13;27818:44;;;27844:18;;;;;;;;;;;;;;27818:44;27875:61;27905:1;27909:2;27913:12;27927:8;27875:21;:61::i;:::-;28248:8;28213:12;:16;28226:2;28213:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28312:8;28272:12;:16;28285:2;28272:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28371:2;28338:11;:25;28350:12;28338:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;28438:15;28388:11;:25;28400:12;28388:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;28471:20;28494:12;28471:35;;28521:11;28550:8;28535:12;:23;28521:37;;28579:15;:2;:13;;;:15::i;:::-;28575:631;;;28615:313;28671:12;28667:2;28646:38;;28663:1;28646:38;;;;;;;;;;;;28712:69;28751:1;28755:2;28759:14;;;;;;28775:5;28712:30;:69::i;:::-;28707:174;;28817:40;;;;;;;;;;;;;;28707:174;28923:3;28908:12;:18;28615:313;;29009:12;28992:13;;:29;28988:43;;29023:8;;;28988:43;28575:631;;;29072:119;29128:14;;;;;;29124:2;29103:40;;29120:1;29103:40;;;;;;;;;;;;29186:3;29171:12;:18;29072:119;;28575:631;29236:12;29220:13;:28;;;;28188:1072;;29270:60;29299:1;29303:2;29307:12;29321:8;29270:20;:60::i;:::-;27701:1637;27589:1749;;;:::o;36960:159::-;;;;;:::o;37129:158::-;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:474::-;7555:6;7563;7612:2;7600:9;7591:7;7587:23;7583:32;7580:119;;;7618:79;;:::i;:::-;7580:119;7738:1;7763:53;7808:7;7799:6;7788:9;7784:22;7763:53;:::i;:::-;7753:63;;7709:117;7865:2;7891:53;7936:7;7927:6;7916:9;7912:22;7891:53;:::i;:::-;7881:63;;7836:118;7487:474;;;;;:::o;7967:179::-;8036:10;8057:46;8099:3;8091:6;8057:46;:::i;:::-;8135:4;8130:3;8126:14;8112:28;;7967:179;;;;:::o;8152:118::-;8239:24;8257:5;8239:24;:::i;:::-;8234:3;8227:37;8152:118;;:::o;8306:732::-;8425:3;8454:54;8502:5;8454:54;:::i;:::-;8524:86;8603:6;8598:3;8524:86;:::i;:::-;8517:93;;8634:56;8684:5;8634:56;:::i;:::-;8713:7;8744:1;8729:284;8754:6;8751:1;8748:13;8729:284;;;8830:6;8824:13;8857:63;8916:3;8901:13;8857:63;:::i;:::-;8850:70;;8943:60;8996:6;8943:60;:::i;:::-;8933:70;;8789:224;8776:1;8773;8769:9;8764:14;;8729:284;;;8733:14;9029:3;9022:10;;8430:608;;;8306:732;;;;:::o;9044:109::-;9125:21;9140:5;9125:21;:::i;:::-;9120:3;9113:34;9044:109;;:::o;9159:360::-;9245:3;9273:38;9305:5;9273:38;:::i;:::-;9327:70;9390:6;9385:3;9327:70;:::i;:::-;9320:77;;9406:52;9451:6;9446:3;9439:4;9432:5;9428:16;9406:52;:::i;:::-;9483:29;9505:6;9483:29;:::i;:::-;9478:3;9474:39;9467:46;;9249:270;9159:360;;;;:::o;9525:364::-;9613:3;9641:39;9674:5;9641:39;:::i;:::-;9696:71;9760:6;9755:3;9696:71;:::i;:::-;9689:78;;9776:52;9821:6;9816:3;9809:4;9802:5;9798:16;9776:52;:::i;:::-;9853:29;9875:6;9853:29;:::i;:::-;9848:3;9844:39;9837:46;;9617:272;9525:364;;;;:::o;9895:377::-;10001:3;10029:39;10062:5;10029:39;:::i;:::-;10084:89;10166:6;10161:3;10084:89;:::i;:::-;10077:96;;10182:52;10227:6;10222:3;10215:4;10208:5;10204:16;10182:52;:::i;:::-;10259:6;10254:3;10250:16;10243:23;;10005:267;9895:377;;;;:::o;10302:845::-;10405:3;10442:5;10436:12;10471:36;10497:9;10471:36;:::i;:::-;10523:89;10605:6;10600:3;10523:89;:::i;:::-;10516:96;;10643:1;10632:9;10628:17;10659:1;10654:137;;;;10805:1;10800:341;;;;10621:520;;10654:137;10738:4;10734:9;10723;10719:25;10714:3;10707:38;10774:6;10769:3;10765:16;10758:23;;10654:137;;10800:341;10867:38;10899:5;10867:38;:::i;:::-;10927:1;10941:154;10955:6;10952:1;10949:13;10941:154;;;11029:7;11023:14;11019:1;11014:3;11010:11;11003:35;11079:1;11070:7;11066:15;11055:26;;10977:4;10974:1;10970:12;10965:17;;10941:154;;;11124:6;11119:3;11115:16;11108:23;;10807:334;;10621:520;;10409:738;;10302:845;;;;:::o;11153:366::-;11295:3;11316:67;11380:2;11375:3;11316:67;:::i;:::-;11309:74;;11392:93;11481:3;11392:93;:::i;:::-;11510:2;11505:3;11501:12;11494:19;;11153:366;;;:::o;11525:::-;11667:3;11688:67;11752:2;11747:3;11688:67;:::i;:::-;11681:74;;11764:93;11853:3;11764:93;:::i;:::-;11882:2;11877:3;11873:12;11866:19;;11525:366;;;:::o;11897:::-;12039:3;12060:67;12124:2;12119:3;12060:67;:::i;:::-;12053:74;;12136:93;12225:3;12136:93;:::i;:::-;12254:2;12249:3;12245:12;12238:19;;11897:366;;;:::o;12269:::-;12411:3;12432:67;12496:2;12491:3;12432:67;:::i;:::-;12425:74;;12508:93;12597:3;12508:93;:::i;:::-;12626:2;12621:3;12617:12;12610:19;;12269:366;;;:::o;12641:::-;12783:3;12804:67;12868:2;12863:3;12804:67;:::i;:::-;12797:74;;12880:93;12969:3;12880:93;:::i;:::-;12998:2;12993:3;12989:12;12982:19;;12641:366;;;:::o;13013:::-;13155:3;13176:67;13240:2;13235:3;13176:67;:::i;:::-;13169:74;;13252:93;13341:3;13252:93;:::i;:::-;13370:2;13365:3;13361:12;13354:19;;13013:366;;;:::o;13385:::-;13527:3;13548:67;13612:2;13607:3;13548:67;:::i;:::-;13541:74;;13624:93;13713:3;13624:93;:::i;:::-;13742:2;13737:3;13733:12;13726:19;;13385:366;;;:::o;13757:::-;13899:3;13920:67;13984:2;13979:3;13920:67;:::i;:::-;13913:74;;13996:93;14085:3;13996:93;:::i;:::-;14114:2;14109:3;14105:12;14098:19;;13757:366;;;:::o;14129:::-;14271:3;14292:67;14356:2;14351:3;14292:67;:::i;:::-;14285:74;;14368:93;14457:3;14368:93;:::i;:::-;14486:2;14481:3;14477:12;14470:19;;14129:366;;;:::o;14501:::-;14643:3;14664:67;14728:2;14723:3;14664:67;:::i;:::-;14657:74;;14740:93;14829:3;14740:93;:::i;:::-;14858:2;14853:3;14849:12;14842:19;;14501:366;;;:::o;14873:398::-;15032:3;15053:83;15134:1;15129:3;15053:83;:::i;:::-;15046:90;;15145:93;15234:3;15145:93;:::i;:::-;15263:1;15258:3;15254:11;15247:18;;14873:398;;;:::o;15277:366::-;15419:3;15440:67;15504:2;15499:3;15440:67;:::i;:::-;15433:74;;15516:93;15605:3;15516:93;:::i;:::-;15634:2;15629:3;15625:12;15618:19;;15277:366;;;:::o;15649:::-;15791:3;15812:67;15876:2;15871:3;15812:67;:::i;:::-;15805:74;;15888:93;15977:3;15888:93;:::i;:::-;16006:2;16001:3;15997:12;15990:19;;15649:366;;;:::o;16021:::-;16163:3;16184:67;16248:2;16243:3;16184:67;:::i;:::-;16177:74;;16260:93;16349:3;16260:93;:::i;:::-;16378:2;16373:3;16369:12;16362:19;;16021:366;;;:::o;16393:::-;16535:3;16556:67;16620:2;16615:3;16556:67;:::i;:::-;16549:74;;16632:93;16721:3;16632:93;:::i;:::-;16750:2;16745:3;16741:12;16734:19;;16393:366;;;:::o;16765:::-;16907:3;16928:67;16992:2;16987:3;16928:67;:::i;:::-;16921:74;;17004:93;17093:3;17004:93;:::i;:::-;17122:2;17117:3;17113:12;17106:19;;16765:366;;;:::o;17137:108::-;17214:24;17232:5;17214:24;:::i;:::-;17209:3;17202:37;17137:108;;:::o;17251:118::-;17338:24;17356:5;17338:24;:::i;:::-;17333:3;17326:37;17251:118;;:::o;17375:589::-;17600:3;17622:95;17713:3;17704:6;17622:95;:::i;:::-;17615:102;;17734:95;17825:3;17816:6;17734:95;:::i;:::-;17727:102;;17846:92;17934:3;17925:6;17846:92;:::i;:::-;17839:99;;17955:3;17948:10;;17375:589;;;;;;:::o;17970:379::-;18154:3;18176:147;18319:3;18176:147;:::i;:::-;18169:154;;18340:3;18333:10;;17970:379;;;:::o;18355:222::-;18448:4;18486:2;18475:9;18471:18;18463:26;;18499:71;18567:1;18556:9;18552:17;18543:6;18499:71;:::i;:::-;18355:222;;;;:::o;18583:640::-;18778:4;18816:3;18805:9;18801:19;18793:27;;18830:71;18898:1;18887:9;18883:17;18874:6;18830:71;:::i;:::-;18911:72;18979:2;18968:9;18964:18;18955:6;18911:72;:::i;:::-;18993;19061:2;19050:9;19046:18;19037:6;18993:72;:::i;:::-;19112:9;19106:4;19102:20;19097:2;19086:9;19082:18;19075:48;19140:76;19211:4;19202:6;19140:76;:::i;:::-;19132:84;;18583:640;;;;;;;:::o;19229:373::-;19372:4;19410:2;19399:9;19395:18;19387:26;;19459:9;19453:4;19449:20;19445:1;19434:9;19430:17;19423:47;19487:108;19590:4;19581:6;19487:108;:::i;:::-;19479:116;;19229:373;;;;:::o;19608:210::-;19695:4;19733:2;19722:9;19718:18;19710:26;;19746:65;19808:1;19797:9;19793:17;19784:6;19746:65;:::i;:::-;19608:210;;;;:::o;19824:313::-;19937:4;19975:2;19964:9;19960:18;19952:26;;20024:9;20018:4;20014:20;20010:1;19999:9;19995:17;19988:47;20052:78;20125:4;20116:6;20052:78;:::i;:::-;20044:86;;19824:313;;;;:::o;20143:419::-;20309:4;20347:2;20336:9;20332:18;20324:26;;20396:9;20390:4;20386:20;20382:1;20371:9;20367:17;20360:47;20424:131;20550:4;20424:131;:::i;:::-;20416:139;;20143:419;;;:::o;20568:::-;20734:4;20772:2;20761:9;20757:18;20749:26;;20821:9;20815:4;20811:20;20807:1;20796:9;20792:17;20785:47;20849:131;20975:4;20849:131;:::i;:::-;20841:139;;20568:419;;;:::o;20993:::-;21159:4;21197:2;21186:9;21182:18;21174:26;;21246:9;21240:4;21236:20;21232:1;21221:9;21217:17;21210:47;21274:131;21400:4;21274:131;:::i;:::-;21266:139;;20993:419;;;:::o;21418:::-;21584:4;21622:2;21611:9;21607:18;21599:26;;21671:9;21665:4;21661:20;21657:1;21646:9;21642:17;21635:47;21699:131;21825:4;21699:131;:::i;:::-;21691:139;;21418:419;;;:::o;21843:::-;22009:4;22047:2;22036:9;22032:18;22024:26;;22096:9;22090:4;22086:20;22082:1;22071:9;22067:17;22060:47;22124:131;22250:4;22124:131;:::i;:::-;22116:139;;21843:419;;;:::o;22268:::-;22434:4;22472:2;22461:9;22457:18;22449:26;;22521:9;22515:4;22511:20;22507:1;22496:9;22492:17;22485:47;22549:131;22675:4;22549:131;:::i;:::-;22541:139;;22268:419;;;:::o;22693:::-;22859:4;22897:2;22886:9;22882:18;22874:26;;22946:9;22940:4;22936:20;22932:1;22921:9;22917:17;22910:47;22974:131;23100:4;22974:131;:::i;:::-;22966:139;;22693:419;;;:::o;23118:::-;23284:4;23322:2;23311:9;23307:18;23299:26;;23371:9;23365:4;23361:20;23357:1;23346:9;23342:17;23335:47;23399:131;23525:4;23399:131;:::i;:::-;23391:139;;23118:419;;;:::o;23543:::-;23709:4;23747:2;23736:9;23732:18;23724:26;;23796:9;23790:4;23786:20;23782:1;23771:9;23767:17;23760:47;23824:131;23950:4;23824:131;:::i;:::-;23816:139;;23543:419;;;:::o;23968:::-;24134:4;24172:2;24161:9;24157:18;24149:26;;24221:9;24215:4;24211:20;24207:1;24196:9;24192:17;24185:47;24249:131;24375:4;24249:131;:::i;:::-;24241:139;;23968:419;;;:::o;24393:::-;24559:4;24597:2;24586:9;24582:18;24574:26;;24646:9;24640:4;24636:20;24632:1;24621:9;24617:17;24610:47;24674:131;24800:4;24674:131;:::i;:::-;24666:139;;24393:419;;;:::o;24818:::-;24984:4;25022:2;25011:9;25007:18;24999:26;;25071:9;25065:4;25061:20;25057:1;25046:9;25042:17;25035:47;25099:131;25225:4;25099:131;:::i;:::-;25091:139;;24818:419;;;:::o;25243:::-;25409:4;25447:2;25436:9;25432:18;25424:26;;25496:9;25490:4;25486:20;25482:1;25471:9;25467:17;25460:47;25524:131;25650:4;25524:131;:::i;:::-;25516:139;;25243:419;;;:::o;25668:::-;25834:4;25872:2;25861:9;25857:18;25849:26;;25921:9;25915:4;25911:20;25907:1;25896:9;25892:17;25885:47;25949:131;26075:4;25949:131;:::i;:::-;25941:139;;25668:419;;;:::o;26093:::-;26259:4;26297:2;26286:9;26282:18;26274:26;;26346:9;26340:4;26336:20;26332:1;26321:9;26317:17;26310:47;26374:131;26500:4;26374:131;:::i;:::-;26366:139;;26093:419;;;:::o;26518:222::-;26611:4;26649:2;26638:9;26634:18;26626:26;;26662:71;26730:1;26719:9;26715:17;26706:6;26662:71;:::i;:::-;26518:222;;;;:::o;26746:129::-;26780:6;26807:20;;:::i;:::-;26797:30;;26836:33;26864:4;26856:6;26836:33;:::i;:::-;26746:129;;;:::o;26881:75::-;26914:6;26947:2;26941:9;26931:19;;26881:75;:::o;26962:307::-;27023:4;27113:18;27105:6;27102:30;27099:56;;;27135:18;;:::i;:::-;27099:56;27173:29;27195:6;27173:29;:::i;:::-;27165:37;;27257:4;27251;27247:15;27239:23;;26962:307;;;:::o;27275:308::-;27337:4;27427:18;27419:6;27416:30;27413:56;;;27449:18;;:::i;:::-;27413:56;27487:29;27509:6;27487:29;:::i;:::-;27479:37;;27571:4;27565;27561:15;27553:23;;27275:308;;;:::o;27589:132::-;27656:4;27679:3;27671:11;;27709:4;27704:3;27700:14;27692:22;;27589:132;;;:::o;27727:141::-;27776:4;27799:3;27791:11;;27822:3;27819:1;27812:14;27856:4;27853:1;27843:18;27835:26;;27727:141;;;:::o;27874:114::-;27941:6;27975:5;27969:12;27959:22;;27874:114;;;:::o;27994:98::-;28045:6;28079:5;28073:12;28063:22;;27994:98;;;:::o;28098:99::-;28150:6;28184:5;28178:12;28168:22;;28098:99;;;:::o;28203:113::-;28273:4;28305;28300:3;28296:14;28288:22;;28203:113;;;:::o;28322:184::-;28421:11;28455:6;28450:3;28443:19;28495:4;28490:3;28486:14;28471:29;;28322:184;;;;:::o;28512:168::-;28595:11;28629:6;28624:3;28617:19;28669:4;28664:3;28660:14;28645:29;;28512:168;;;;:::o;28686:147::-;28787:11;28824:3;28809:18;;28686:147;;;;:::o;28839:169::-;28923:11;28957:6;28952:3;28945:19;28997:4;28992:3;28988:14;28973:29;;28839:169;;;;:::o;29014:148::-;29116:11;29153:3;29138:18;;29014:148;;;;:::o;29168:305::-;29208:3;29227:20;29245:1;29227:20;:::i;:::-;29222:25;;29261:20;29279:1;29261:20;:::i;:::-;29256:25;;29415:1;29347:66;29343:74;29340:1;29337:81;29334:107;;;29421:18;;:::i;:::-;29334:107;29465:1;29462;29458:9;29451:16;;29168:305;;;;:::o;29479:185::-;29519:1;29536:20;29554:1;29536:20;:::i;:::-;29531:25;;29570:20;29588:1;29570:20;:::i;:::-;29565:25;;29609:1;29599:35;;29614:18;;:::i;:::-;29599:35;29656:1;29653;29649:9;29644:14;;29479:185;;;;:::o;29670:348::-;29710:7;29733:20;29751:1;29733:20;:::i;:::-;29728:25;;29767:20;29785:1;29767:20;:::i;:::-;29762:25;;29955:1;29887:66;29883:74;29880:1;29877:81;29872:1;29865:9;29858:17;29854:105;29851:131;;;29962:18;;:::i;:::-;29851:131;30010:1;30007;30003:9;29992:20;;29670:348;;;;:::o;30024:191::-;30064:4;30084:20;30102:1;30084:20;:::i;:::-;30079:25;;30118:20;30136:1;30118:20;:::i;:::-;30113:25;;30157:1;30154;30151:8;30148:34;;;30162:18;;:::i;:::-;30148:34;30207:1;30204;30200:9;30192:17;;30024:191;;;;:::o;30221:96::-;30258:7;30287:24;30305:5;30287:24;:::i;:::-;30276:35;;30221:96;;;:::o;30323:90::-;30357:7;30400:5;30393:13;30386:21;30375:32;;30323:90;;;:::o;30419:149::-;30455:7;30495:66;30488:5;30484:78;30473:89;;30419:149;;;:::o;30574:126::-;30611:7;30651:42;30644:5;30640:54;30629:65;;30574:126;;;:::o;30706:77::-;30743:7;30772:5;30761:16;;30706:77;;;:::o;30789:154::-;30873:6;30868:3;30863;30850:30;30935:1;30926:6;30921:3;30917:16;30910:27;30789:154;;;:::o;30949:307::-;31017:1;31027:113;31041:6;31038:1;31035:13;31027:113;;;31126:1;31121:3;31117:11;31111:18;31107:1;31102:3;31098:11;31091:39;31063:2;31060:1;31056:10;31051:15;;31027:113;;;31158:6;31155:1;31152:13;31149:101;;;31238:1;31229:6;31224:3;31220:16;31213:27;31149:101;30998:258;30949:307;;;:::o;31262:320::-;31306:6;31343:1;31337:4;31333:12;31323:22;;31390:1;31384:4;31380:12;31411:18;31401:81;;31467:4;31459:6;31455:17;31445:27;;31401:81;31529:2;31521:6;31518:14;31498:18;31495:38;31492:84;;;31548:18;;:::i;:::-;31492:84;31313:269;31262:320;;;:::o;31588:281::-;31671:27;31693:4;31671:27;:::i;:::-;31663:6;31659:40;31801:6;31789:10;31786:22;31765:18;31753:10;31750:34;31747:62;31744:88;;;31812:18;;:::i;:::-;31744:88;31852:10;31848:2;31841:22;31631:238;31588:281;;:::o;31875:233::-;31914:3;31937:24;31955:5;31937:24;:::i;:::-;31928:33;;31983:66;31976:5;31973:77;31970:103;;;32053:18;;:::i;:::-;31970:103;32100:1;32093:5;32089:13;32082:20;;31875:233;;;:::o;32114:176::-;32146:1;32163:20;32181:1;32163:20;:::i;:::-;32158:25;;32197:20;32215:1;32197:20;:::i;:::-;32192:25;;32236:1;32226:35;;32241:18;;:::i;:::-;32226:35;32282:1;32279;32275:9;32270:14;;32114:176;;;;:::o;32296:180::-;32344:77;32341:1;32334:88;32441:4;32438:1;32431:15;32465:4;32462:1;32455:15;32482:180;32530:77;32527:1;32520:88;32627:4;32624:1;32617:15;32651:4;32648:1;32641:15;32668:180;32716:77;32713:1;32706:88;32813:4;32810:1;32803:15;32837:4;32834:1;32827:15;32854:180;32902:77;32899:1;32892:88;32999:4;32996:1;32989:15;33023:4;33020:1;33013:15;33040:180;33088:77;33085:1;33078:88;33185:4;33182:1;33175:15;33209:4;33206:1;33199:15;33226:117;33335:1;33332;33325:12;33349:117;33458:1;33455;33448:12;33472:117;33581:1;33578;33571:12;33595:117;33704:1;33701;33694:12;33718:102;33759:6;33810:2;33806:7;33801:2;33794:5;33790:14;33786:28;33776:38;;33718:102;;;:::o;33826:225::-;33966:34;33962:1;33954:6;33950:14;33943:58;34035:8;34030:2;34022:6;34018:15;34011:33;33826:225;:::o;34057:181::-;34197:33;34193:1;34185:6;34181:14;34174:57;34057:181;:::o;34244:180::-;34384:32;34380:1;34372:6;34368:14;34361:56;34244:180;:::o;34430:173::-;34570:25;34566:1;34558:6;34554:14;34547:49;34430:173;:::o;34609:179::-;34749:31;34745:1;34737:6;34733:14;34726:55;34609:179;:::o;34794:171::-;34934:23;34930:1;34922:6;34918:14;34911:47;34794:171;:::o;34971:176::-;35111:28;35107:1;35099:6;35095:14;35088:52;34971:176;:::o;35153:182::-;35293:34;35289:1;35281:6;35277:14;35270:58;35153:182;:::o;35341:173::-;35481:25;35477:1;35469:6;35465:14;35458:49;35341:173;:::o;35520:167::-;35660:19;35656:1;35648:6;35644:14;35637:43;35520:167;:::o;35693:114::-;;:::o;35813:221::-;35953:34;35949:1;35941:6;35937:14;35930:58;36022:4;36017:2;36009:6;36005:15;35998:29;35813:221;:::o;36040:181::-;36180:33;36176:1;36168:6;36164:14;36157:57;36040:181;:::o;36227:235::-;36367:34;36363:1;36355:6;36351:14;36344:58;36436:18;36431:2;36423:6;36419:15;36412:43;36227:235;:::o;36468:226::-;36608:34;36604:1;36596:6;36592:14;36585:58;36677:9;36672:2;36664:6;36660:15;36653:34;36468:226;:::o;36700:169::-;36840:21;36836:1;36828:6;36824:14;36817:45;36700:169;:::o;36875:122::-;36948:24;36966:5;36948:24;:::i;:::-;36941:5;36938:35;36928:63;;36987:1;36984;36977:12;36928:63;36875:122;:::o;37003:116::-;37073:21;37088:5;37073:21;:::i;:::-;37066:5;37063:32;37053:60;;37109:1;37106;37099:12;37053:60;37003:116;:::o;37125:120::-;37197:23;37214:5;37197:23;:::i;:::-;37190:5;37187:34;37177:62;;37235:1;37232;37225:12;37177:62;37125:120;:::o;37251:122::-;37324:24;37342:5;37324:24;:::i;:::-;37317:5;37314:35;37304:63;;37363:1;37360;37353:12;37304:63;37251:122;:::o
Swarm Source
ipfs://59d12db580b7cb2de5529deed20d90b934170cf0dfe27a043a8ec70b8a703f13
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.