Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
5,016 BearX
Holders
855
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 BearXLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BearX
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-04 */ /** *Submitted for verification at Etherscan.io on 2021-11-04 */ /** *Submitted for verification at Etherscan.io on 2021-10-27 */ /** *Submitted for verification at Etherscan.io on 2021-10-26 */ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.0; 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); } function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _setOwner(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface BearToken { function balanceOf(address owner) external view returns (uint256 balance); function allowance(address owner, address spender) external view returns (uint256); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 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"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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); } } } } interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns 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); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } 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); } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // 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; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @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 virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @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) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".png")) : ""; } /** * @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 virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _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 { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _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 { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @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`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); emit Transfer(address(0), to, tokenId); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * 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 ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } contract BearX is ERC721Enumerable, Ownable { using Strings for uint256; string _baseTokenURI; uint256 public gif = 6; uint256 public gifIDs = 1000000000000; uint256 public breed = 5300; uint256 public breedIDs = 10000000000000; uint256 public _maxperWalletWhiteList = 2; uint256 public _maxperTX = 2; uint256 public _limit = 3644; uint256 public _reserved = 50; uint256 public _price = 0.05 ether; uint256 public whitelist_count = 0; address public fundWallet; bool public _paused = true; mapping (address => uint256) public perWallet; mapping (address => bool) public whitelist; BearToken public TokenContract; bool public breedStart = false; uint256 public breedPrice = 1000 ether; constructor(string memory baseURI, address _fundWallet) ERC721("BearX", "BearX") { require(_fundWallet != address(0), "Zero address error"); setBaseURI(baseURI); fundWallet = _fundWallet; } function setBearToken (BearToken _TokenContract) public onlyOwner{ // require(_TokenContract != address(0), "Contract address can't be zero address"); TokenContract = _TokenContract; } function getBearToken(address __address) public view returns(uint256) { require(__address != address(0), "Contract address can't be zero address"); return TokenContract.balanceOf(__address); } function getBearAllowance(address __address) public view returns(uint256) { require(__address != address(0), "Contract address can't be zero address"); return TokenContract.allowance(__address, address(this)); } function MINT_BY_TOKEN(uint256 __id1, uint256 __id2) public payable { uint256 supply = totalSupply(); require( breedStart == true, "Breed paused"); require( TokenContract.balanceOf(msg.sender) >= breedPrice, "You don't have enough tokens"); require( __id1 != __id2 , "Both Token Ids must be different"); require( ownerOf(__id1) == msg.sender, "Caller must be ownerOf Token Id 1"); require( ownerOf(__id2) == msg.sender, "Caller must be ownerOf Token Id 2"); _safeMint( msg.sender, breedIDs + 1 ); breed--; breedIDs++; supply++; TokenContract.transferFrom(msg.sender, fundWallet, breedPrice); } function MINT(uint256 num) public payable { uint256 supply = totalSupply(); require( !_paused, "Sale paused" ); require( num <= _maxperTX, "You are exceeding limit of per transaction BEARX" ); require( supply + num <= _limit - _reserved, "Exceeds maximum BEARX supply" ); require( msg.value >= _price * num, "Ether sent is not correct" ); for(uint256 i; i < num; i++){ _safeMint( msg.sender, supply + i ); } } function giveAway(address _to, uint256 _amount) external onlyOwner() { require( _to != address(0), "Zero address error"); require( _amount <= _reserved, "Exceeds reserved bear supply"); uint256 supply = totalSupply(); for(uint256 i; i < _amount; i++){ _safeMint( _to, supply + i ); } _reserved -= _amount; } function mint_g(address _to, uint256 _amount) external onlyOwner() { require( _to != address(0), "Zero address error"); require( _amount <= gif, "Exceeds gif supply" ); for(uint256 i; i < _amount; i++){ _safeMint( _to, gifIDs ); gif --; gifIDs++; } } function walletOfOwner(address _owner) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function WHITELIST_MINT(uint256 num) public payable { uint256 supply = totalSupply(); require( whitelist[msg.sender] == true, "Only WHITELIST can mint" ); require( perWallet[msg.sender] + num <= _maxperWalletWhiteList, "You are exceeding limit of per wallet BEARX" ); require( supply + num <= _limit - _reserved, "Exceeds maximum BEARX supply" ); require( msg.value >= _price * num, "Ether sent is not correct" ); for(uint256 i; i < num; i++){ _safeMint( msg.sender, supply + i ); } perWallet[msg.sender] += num; } function bulk_whitelist(address[] memory addresses) public onlyOwner() { for(uint i=0; i < addresses.length; i++){ address addr = addresses[i]; if(whitelist[addr] != true && addr != address(0)){ whitelist[addr] = true; whitelist_count++; } } } function remove_whitelist(address _address) public onlyOwner() { require(_address != address(0), "Zero address error"); whitelist[_address] = false; whitelist_count--; } // Just in case Eth does some crazy stuff function setPrice(uint256 _newPrice) public onlyOwner() { _price = _newPrice; } function setFundWallet(address _fundWallet) public onlyOwner() { require(_fundWallet != address(0), "Zero address error"); fundWallet = _fundWallet; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setLimit(uint256 limit) public onlyOwner { _limit = limit; } // function setMaxPerWallet(uint256 limit) public onlyOwner { // _maxperTX = limit; // } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } // function getPrice() public view returns (uint256){ // return _price; // } function pause() public onlyOwner { _paused = !_paused; } function pauseBreed() public onlyOwner { breedStart = !breedStart; } function withdrawAll() public payable onlyOwner { require(payable(fundWallet).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"address","name":"_fundWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"MINT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__id1","type":"uint256"},{"internalType":"uint256","name":"__id2","type":"uint256"}],"name":"MINT_BY_TOKEN","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"TokenContract","outputs":[{"internalType":"contract BearToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"WHITELIST_MINT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxperTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxperWalletWhiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reserved","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":[],"name":"breed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"breedIDs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"breedPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"breedStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"bulk_whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"__address","type":"address"}],"name":"getBearAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"__address","type":"address"}],"name":"getBearToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gif","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gifIDs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint_g","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseBreed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"perWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"remove_whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract BearToken","name":"_TokenContract","type":"address"}],"name":"setBearToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fundWallet","type":"address"}],"name":"setFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelist_count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526006600c5564e8d4a51000600d556114b4600e556509184e72a000600f5560026010556002601155610e3c601255603260135566b1a2bc2ec5000060145560006015556001601660146101000a81548160ff0219169083151502179055506000601960146101000a81548160ff021916908315150217905550683635c9adc5dea00000601a553480156200009757600080fd5b5060405162006786380380620067868339818101604052810190620000bd919062000526565b6040518060400160405280600581526020017f42656172580000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4265617258000000000000000000000000000000000000000000000000000000815250816000908051906020019062000141929190620003ed565b5080600190805190602001906200015a929190620003ed565b5050506200017d620001716200024a60201b60201c565b6200025260201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620001f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e79062000604565b60405180910390fd5b62000201826200031860201b60201c565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620007d8565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003286200024a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200034e620003c360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200039e9062000626565b60405180910390fd5b80600b9080519060200190620003bf929190620003ed565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003fb906200072a565b90600052602060002090601f0160209004810192826200041f57600085556200046b565b82601f106200043a57805160ff19168380011785556200046b565b828001600101855582156200046b579182015b828111156200046a5782518255916020019190600101906200044d565b5b5090506200047a91906200047e565b5090565b5b80821115620004995760008160009055506001016200047f565b5090565b6000620004b4620004ae846200067c565b62000648565b905082815260208101848484011115620004cd57600080fd5b620004da848285620006f4565b509392505050565b600081519050620004f381620007be565b92915050565b600082601f8301126200050b57600080fd5b81516200051d8482602086016200049d565b91505092915050565b600080604083850312156200053a57600080fd5b600083015167ffffffffffffffff8111156200055557600080fd5b6200056385828601620004f9565b92505060206200057685828601620004e2565b9150509250929050565b60006200058f601283620006af565b91507f5a65726f2061646472657373206572726f7200000000000000000000000000006000830152602082019050919050565b6000620005d1602083620006af565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600060208201905081810360008301526200061f8162000580565b9050919050565b600060208201905081810360008301526200064181620005c2565b9050919050565b6000604051905081810181811067ffffffffffffffff821117156200067257620006716200078f565b5b8060405250919050565b600067ffffffffffffffff8211156200069a57620006996200078f565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b6000620006cd82620006d4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b8381101562000714578082015181840152602081019050620006f7565b8381111562000724576000848401525b50505050565b600060028204905060018216806200074357607f821691505b602082108114156200075a576200075962000760565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620007c981620006c0565b8114620007d557600080fd5b50565b615f9e80620007e86000396000f3fe6080604052600436106103355760003560e01c806370a08231116101ab5780639d2873f3116100f7578063ca80014411610095578063e35691231161006f578063e356912314610bc0578063e985e9c514610beb578063f2fde38b14610c28578063f9ca132214610c5157610335565b8063ca80014414610b2f578063d519fd8414610b58578063df2fb92c14610b9557610335565b8063a418b844116100d1578063a418b84414610a77578063b88d4fde14610aa0578063c3d7dafa14610ac9578063c87b56dd14610af257610335565b80639d2873f3146109fa578063a22cb46514610a23578063a3e497a914610a4c57610335565b8063853828b61161016457806395d89b411161013e57806395d89b411461093c5780639688738b14610967578063984621e7146109925780639b19251a146109bd57610335565b8063853828b6146108de5780638da5cb5b146108e857806391b7f5ed1461091357610335565b806370a0823114610806578063715018a6146108435780637c8765441461085a578063808bdf7114610871578063827a4d2f1461089c5780638456cb59146108c757610335565b80634051d41e1161028557806355f804b31161022357806365543320116101fd5780636554332014610769578063664a1ad61461078557806368b85fb1146107b05780636aaa571d146107db57610335565b806355f804b3146106d85780635b88ecd7146107015780636352211e1461072c57610335565b80634d644f6b1161025f5780634d644f6b1461062b5780634eaddff6146106565780634f6ccce71461067257806355ce3b9a146106af57610335565b80634051d41e1461059c57806342842e0e146105c5578063438b6300146105ee57610335565b8063235b6ea1116102f25780632a5f510e116102cc5780632a5f510e146104db5780632d47d29a146105065780632f745c591461054357806335aacecd1461058057610335565b8063235b6ea11461045e57806323b872dd1461048957806327ea6f2b146104b257610335565b806301ffc9a71461033a57806306fdde0314610377578063081812fc146103a2578063095ea7b3146103df57806316c61ccc1461040857806318160ddd14610433575b600080fd5b34801561034657600080fd5b50610361600480360381019061035c919061466d565b610c8e565b60405161036e9190615585565b60405180910390f35b34801561038357600080fd5b5061038c610d08565b60405161039991906155bb565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190614729565b610d9a565b6040516103d6919061549c565b60405180910390f35b3480156103eb57600080fd5b50610406600480360381019061040191906145c7565b610e1f565b005b34801561041457600080fd5b5061041d610f37565b60405161042a9190615585565b60405180910390f35b34801561043f57600080fd5b50610448610f4a565b60405161045591906159fd565b60405180910390f35b34801561046a57600080fd5b50610473610f57565b60405161048091906159fd565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab91906144c1565b610f5d565b005b3480156104be57600080fd5b506104d960048036038101906104d49190614729565b610fbd565b005b3480156104e757600080fd5b506104f0611043565b6040516104fd91906159fd565b60405180910390f35b34801561051257600080fd5b5061052d6004803603810190610528919061445c565b611049565b60405161053a91906159fd565b60405180910390f35b34801561054f57600080fd5b5061056a600480360381019061056591906145c7565b611061565b60405161057791906159fd565b60405180910390f35b61059a60048036038101906105959190614729565b611106565b005b3480156105a857600080fd5b506105c360048036038101906105be919061445c565b61136f565b005b3480156105d157600080fd5b506105ec60048036038101906105e791906144c1565b6114ce565b005b3480156105fa57600080fd5b506106156004803603810190610610919061445c565b6114ee565b6040516106229190615563565b60405180910390f35b34801561063757600080fd5b506106406115e8565b60405161064d91906159fd565b60405180910390f35b610670600480360381019061066b919061477b565b6115ee565b005b34801561067e57600080fd5b5061069960048036038101906106949190614729565b61199f565b6040516106a691906159fd565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d1919061445c565b611a36565b005b3480156106e457600080fd5b506106ff60048036038101906106fa91906146e8565b611b66565b005b34801561070d57600080fd5b50610716611bfc565b60405161072391906159fd565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190614729565b611c02565b604051610760919061549c565b60405180910390f35b610783600480360381019061077e9190614729565b611cb4565b005b34801561079157600080fd5b5061079a611e3a565b6040516107a7919061549c565b60405180910390f35b3480156107bc57600080fd5b506107c5611e60565b6040516107d291906159fd565b60405180910390f35b3480156107e757600080fd5b506107f0611e66565b6040516107fd91906159fd565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061445c565b611e6c565b60405161083a91906159fd565b60405180910390f35b34801561084f57600080fd5b50610858611f24565b005b34801561086657600080fd5b5061086f611fac565b005b34801561087d57600080fd5b50610886612054565b60405161089391906159fd565b60405180910390f35b3480156108a857600080fd5b506108b161205a565b6040516108be91906159fd565b60405180910390f35b3480156108d357600080fd5b506108dc612060565b005b6108e6612108565b005b3480156108f457600080fd5b506108fd6121e6565b60405161090a919061549c565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190614729565b612210565b005b34801561094857600080fd5b50610951612296565b60405161095e91906155bb565b60405180910390f35b34801561097357600080fd5b5061097c612328565b60405161098991906155a0565b60405180910390f35b34801561099e57600080fd5b506109a761234e565b6040516109b491906159fd565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df919061445c565b612354565b6040516109f19190615585565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c91906146bf565b612374565b005b348015610a2f57600080fd5b50610a4a6004803603810190610a45919061458b565b612434565b005b348015610a5857600080fd5b50610a616125b5565b604051610a6e9190615585565b60405180910390f35b348015610a8357600080fd5b50610a9e6004803603810190610a9991906145c7565b6125c8565b005b348015610aac57600080fd5b50610ac76004803603810190610ac29190614510565b612758565b005b348015610ad557600080fd5b50610af06004803603810190610aeb9190614603565b6127ba565b005b348015610afe57600080fd5b50610b196004803603810190610b149190614729565b6129a3565b604051610b2691906155bb565b60405180910390f35b348015610b3b57600080fd5b50610b566004803603810190610b5191906145c7565b612a4a565b005b348015610b6457600080fd5b50610b7f6004803603810190610b7a919061445c565b612bd9565b604051610b8c91906159fd565b60405180910390f35b348015610ba157600080fd5b50610baa612cfc565b604051610bb791906159fd565b60405180910390f35b348015610bcc57600080fd5b50610bd5612d02565b604051610be291906159fd565b60405180910390f35b348015610bf757600080fd5b50610c126004803603810190610c0d9190614485565b612d08565b604051610c1f9190615585565b60405180910390f35b348015610c3457600080fd5b50610c4f6004803603810190610c4a919061445c565b612d9c565b005b348015610c5d57600080fd5b50610c786004803603810190610c73919061445c565b612e94565b604051610c8591906159fd565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d015750610d0082612fb9565b5b9050919050565b606060008054610d1790615d7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4390615d7c565b8015610d905780601f10610d6557610100808354040283529160200191610d90565b820191906000526020600020905b815481529060010190602001808311610d7357829003601f168201915b5050505050905090565b6000610da58261309b565b610de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddb9061587d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e2a82611c02565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e929061595d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610eba613107565b73ffffffffffffffffffffffffffffffffffffffff161480610ee95750610ee881610ee3613107565b612d08565b5b610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f906157dd565b60405180910390fd5b610f32838361310f565b505050565b601660149054906101000a900460ff1681565b6000600880549050905090565b60145481565b610f6e610f68613107565b826131c8565b610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa49061599d565b60405180910390fd5b610fb88383836132a6565b505050565b610fc5613107565b73ffffffffffffffffffffffffffffffffffffffff16610fe36121e6565b73ffffffffffffffffffffffffffffffffffffffff1614611039576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110309061589d565b60405180910390fd5b8060128190555050565b601a5481565b60176020528060005260406000206000915090505481565b600061106c83611e6c565b82106110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a49061561d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000611110610f4a565b905060011515601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119c906155dd565b60405180910390fd5b60105482601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111f39190615b51565b1115611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b9061565d565b60405180910390fd5b6013546012546112449190615c32565b82826112509190615b51565b1115611291576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112889061583d565b60405180910390fd5b8160145461129f9190615bd8565b3410156112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d89061597d565b60405180910390fd5b60005b82811015611314576113013382846112fc9190615b51565b613502565b808061130c90615dae565b9150506112e4565b5081601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113649190615b51565b925050819055505050565b611377613107565b73ffffffffffffffffffffffffffffffffffffffff166113956121e6565b73ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e29061589d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561145b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611452906156dd565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601560008154809291906114c690615d52565b919050555050565b6114e983838360405180602001604052806000815250612758565b505050565b606060006114fb83611e6c565b905060008167ffffffffffffffff81111561153f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561156d5781602001602082028036833780820191505090505b50905060005b828110156115dd576115858582611061565b8282815181106115be577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806115d590615dae565b915050611573565b508092505050919050565b60105481565b60006115f8610f4a565b905060011515601960149054906101000a900460ff16151514611650576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116479061573d565b60405180910390fd5b601a54601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016116ae919061549c565b60206040518083038186803b1580156116c657600080fd5b505afa1580156116da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fe9190614752565b101561173f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611736906158fd565b60405180910390fd5b81831415611782576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117799061579d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166117a284611c02565b73ffffffffffffffffffffffffffffffffffffffff16146117f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ef9061591d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1661181883611c02565b73ffffffffffffffffffffffffffffffffffffffff161461186e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611865906159dd565b60405180910390fd5b611886336001600f546118819190615b51565b613502565b600e600081548092919061189990615d52565b9190505550600f60008154809291906118b190615dae565b919050555080806118c190615dae565b915050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a546040518463ffffffff1660e01b8152600401611947939291906154e0565b602060405180830381600087803b15801561196157600080fd5b505af1158015611975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119999190614644565b50505050565b60006119a9610f4a565b82106119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e1906159bd565b60405180910390fd5b60088281548110611a24577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611a3e613107565b73ffffffffffffffffffffffffffffffffffffffff16611a5c6121e6565b73ffffffffffffffffffffffffffffffffffffffff1614611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa99061589d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b19906156dd565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b6e613107565b73ffffffffffffffffffffffffffffffffffffffff16611b8c6121e6565b73ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd99061589d565b60405180910390fd5b80600b9080519060200190611bf89291906141ab565b5050565b600c5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca29061581d565b60405180910390fd5b80915050919050565b6000611cbe610f4a565b9050601660149054906101000a900460ff1615611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d07906155fd565b60405180910390fd5b601154821115611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c906157bd565b60405180910390fd5b601354601254611d659190615c32565b8282611d719190615b51565b1115611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da99061583d565b60405180910390fd5b81601454611dc09190615bd8565b341015611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df99061597d565b60405180910390fd5b60005b82811015611e3557611e22338284611e1d9190615b51565b613502565b8080611e2d90615dae565b915050611e05565b505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60135481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed4906157fd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611f2c613107565b73ffffffffffffffffffffffffffffffffffffffff16611f4a6121e6565b73ffffffffffffffffffffffffffffffffffffffff1614611fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f979061589d565b60405180910390fd5b611faa6000613520565b565b611fb4613107565b73ffffffffffffffffffffffffffffffffffffffff16611fd26121e6565b73ffffffffffffffffffffffffffffffffffffffff1614612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f9061589d565b60405180910390fd5b601960149054906101000a900460ff1615601960146101000a81548160ff021916908315150217905550565b60115481565b600f5481565b612068613107565b73ffffffffffffffffffffffffffffffffffffffff166120866121e6565b73ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d39061589d565b60405180910390fd5b601660149054906101000a900460ff1615601660146101000a81548160ff021916908315150217905550565b612110613107565b73ffffffffffffffffffffffffffffffffffffffff1661212e6121e6565b73ffffffffffffffffffffffffffffffffffffffff1614612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b9061589d565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506121e457600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612218613107565b73ffffffffffffffffffffffffffffffffffffffff166122366121e6565b73ffffffffffffffffffffffffffffffffffffffff161461228c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122839061589d565b60405180910390fd5b8060148190555050565b6060600180546122a590615d7c565b80601f01602080910402602001604051908101604052809291908181526020018280546122d190615d7c565b801561231e5780601f106122f35761010080835404028352916020019161231e565b820191906000526020600020905b81548152906001019060200180831161230157829003601f168201915b5050505050905090565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b60186020528060005260406000206000915054906101000a900460ff1681565b61237c613107565b73ffffffffffffffffffffffffffffffffffffffff1661239a6121e6565b73ffffffffffffffffffffffffffffffffffffffff16146123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e79061589d565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61243c613107565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a19061571d565b60405180910390fd5b80600560006124b7613107565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612564613107565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125a99190615585565b60405180910390a35050565b601960149054906101000a900460ff1681565b6125d0613107565b73ffffffffffffffffffffffffffffffffffffffff166125ee6121e6565b73ffffffffffffffffffffffffffffffffffffffff1614612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b9061589d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ab906156dd565b60405180910390fd5b600c548111156126f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f09061593d565b60405180910390fd5b60005b818110156127535761271083600d54613502565b600c600081548092919061272390615d52565b9190505550600d600081548092919061273b90615dae565b9190505550808061274b90615dae565b9150506126fc565b505050565b612769612763613107565b836131c8565b6127a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279f9061599d565b60405180910390fd5b6127b4848484846135e6565b50505050565b6127c2613107565b73ffffffffffffffffffffffffffffffffffffffff166127e06121e6565b73ffffffffffffffffffffffffffffffffffffffff1614612836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282d9061589d565b60405180910390fd5b60005b815181101561299f57600082828151811061287d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060011515601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141580156129155750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561298b576001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506015600081548092919061298590615dae565b91905055505b50808061299790615dae565b915050612839565b5050565b60606129ae8261309b565b6129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e4906158dd565b60405180910390fd5b60006129f7613642565b90506000815111612a175760405180602001604052806000815250612a42565b80612a21846136d4565b604051602001612a3292919061546d565b6040516020818303038152906040525b915050919050565b612a52613107565b73ffffffffffffffffffffffffffffffffffffffff16612a706121e6565b73ffffffffffffffffffffffffffffffffffffffff1614612ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abd9061589d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2d906156dd565b60405180910390fd5b601354811115612b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b729061577d565b60405180910390fd5b6000612b85610f4a565b905060005b82811015612bba57612ba7848284612ba29190615b51565b613502565b8080612bb290615dae565b915050612b8a565b508160136000828254612bcd9190615c32565b92505081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c419061569d565b60405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401612ca5919061549c565b60206040518083038186803b158015612cbd57600080fd5b505afa158015612cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf59190614752565b9050919050565b60125481565b60155481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612da4613107565b73ffffffffffffffffffffffffffffffffffffffff16612dc26121e6565b73ffffffffffffffffffffffffffffffffffffffff1614612e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0f9061589d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7f9061567d565b60405180910390fd5b612e9181613520565b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efc9061569d565b60405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e83306040518363ffffffff1660e01b8152600401612f629291906154b7565b60206040518083038186803b158015612f7a57600080fd5b505afa158015612f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb29190614752565b9050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061308457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613094575061309382613881565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661318283611c02565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006131d38261309b565b613212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132099061575d565b60405180910390fd5b600061321d83611c02565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061328c57508373ffffffffffffffffffffffffffffffffffffffff1661327484610d9a565b73ffffffffffffffffffffffffffffffffffffffff16145b8061329d575061329c8185612d08565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166132c682611c02565b73ffffffffffffffffffffffffffffffffffffffff161461331c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613313906158bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561338c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613383906156fd565b60405180910390fd5b6133978383836138eb565b6133a260008261310f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133f29190615c32565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134499190615b51565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61351c8282604051806020016040528060008152506139ff565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6135f18484846132a6565b6135fd84848484613ab6565b61363c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136339061563d565b60405180910390fd5b50505050565b6060600b805461365190615d7c565b80601f016020809104026020016040519081016040528092919081815260200182805461367d90615d7c565b80156136ca5780601f1061369f576101008083540402835291602001916136ca565b820191906000526020600020905b8154815290600101906020018083116136ad57829003601f168201915b5050505050905090565b6060600082141561371c576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061387c565b600082905060005b6000821461374e57808061373790615dae565b915050600a826137479190615ba7565b9150613724565b60008167ffffffffffffffff811115613790577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156137c25781602001600182028036833780820191505090505b5090505b60008514613875576001826137db9190615c32565b9150600a856137ea9190615df7565b60306137f69190615b51565b60f81b818381518110613832577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561386e9190615ba7565b94506137c6565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6138f6838383613c4d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139395761393481613c52565b613978565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613977576139768382613c9b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139bb576139b681613e08565b6139fa565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146139f9576139f88282613f4b565b5b5b505050565b613a098383613fca565b613a166000848484613ab6565b613a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a4c9061563d565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000613ad78473ffffffffffffffffffffffffffffffffffffffff16614198565b15613c40578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613b00613107565b8786866040518563ffffffff1660e01b8152600401613b229493929190615517565b602060405180830381600087803b158015613b3c57600080fd5b505af1925050508015613b6d57506040513d601f19601f82011682018060405250810190613b6a9190614696565b60015b613bf0573d8060008114613b9d576040519150601f19603f3d011682016040523d82523d6000602084013e613ba2565b606091505b50600081511415613be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdf9061563d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613c45565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613ca884611e6c565b613cb29190615c32565b9050600060076000848152602001908152602001600020549050818114613d97576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613e1c9190615c32565b9050600060096000848152602001908152602001600020549050600060088381548110613e72577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613eba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613f2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613f5683611e6c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561403a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140319061585d565b60405180910390fd5b6140438161309b565b15614083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161407a906156bd565b60405180910390fd5b61408f600083836138eb565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546140df9190615b51565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546141b790615d7c565b90600052602060002090601f0160209004810192826141d95760008555614220565b82601f106141f257805160ff1916838001178555614220565b82800160010185558215614220579182015b8281111561421f578251825591602001919060010190614204565b5b50905061422d9190614231565b5090565b5b8082111561424a576000816000905550600101614232565b5090565b600061426161425c84615a49565b615a18565b9050808382526020820190508285602086028201111561428057600080fd5b60005b858110156142b057816142968882614336565b845260208401935060208301925050600181019050614283565b5050509392505050565b60006142cd6142c884615a75565b615a18565b9050828152602081018484840111156142e557600080fd5b6142f0848285615d10565b509392505050565b600061430b61430684615aa5565b615a18565b90508281526020810184848401111561432357600080fd5b61432e848285615d10565b509392505050565b60008135905061434581615ef5565b92915050565b600082601f83011261435c57600080fd5b813561436c84826020860161424e565b91505092915050565b60008135905061438481615f0c565b92915050565b60008151905061439981615f0c565b92915050565b6000813590506143ae81615f23565b92915050565b6000815190506143c381615f23565b92915050565b600082601f8301126143da57600080fd5b81356143ea8482602086016142ba565b91505092915050565b60008135905061440281615f3a565b92915050565b600082601f83011261441957600080fd5b81356144298482602086016142f8565b91505092915050565b60008135905061444181615f51565b92915050565b60008151905061445681615f51565b92915050565b60006020828403121561446e57600080fd5b600061447c84828501614336565b91505092915050565b6000806040838503121561449857600080fd5b60006144a685828601614336565b92505060206144b785828601614336565b9150509250929050565b6000806000606084860312156144d657600080fd5b60006144e486828701614336565b93505060206144f586828701614336565b925050604061450686828701614432565b9150509250925092565b6000806000806080858703121561452657600080fd5b600061453487828801614336565b945050602061454587828801614336565b935050604061455687828801614432565b925050606085013567ffffffffffffffff81111561457357600080fd5b61457f878288016143c9565b91505092959194509250565b6000806040838503121561459e57600080fd5b60006145ac85828601614336565b92505060206145bd85828601614375565b9150509250929050565b600080604083850312156145da57600080fd5b60006145e885828601614336565b92505060206145f985828601614432565b9150509250929050565b60006020828403121561461557600080fd5b600082013567ffffffffffffffff81111561462f57600080fd5b61463b8482850161434b565b91505092915050565b60006020828403121561465657600080fd5b60006146648482850161438a565b91505092915050565b60006020828403121561467f57600080fd5b600061468d8482850161439f565b91505092915050565b6000602082840312156146a857600080fd5b60006146b6848285016143b4565b91505092915050565b6000602082840312156146d157600080fd5b60006146df848285016143f3565b91505092915050565b6000602082840312156146fa57600080fd5b600082013567ffffffffffffffff81111561471457600080fd5b61472084828501614408565b91505092915050565b60006020828403121561473b57600080fd5b600061474984828501614432565b91505092915050565b60006020828403121561476457600080fd5b600061477284828501614447565b91505092915050565b6000806040838503121561478e57600080fd5b600061479c85828601614432565b92505060206147ad85828601614432565b9150509250929050565b60006147c3838361544f565b60208301905092915050565b6147d881615c66565b82525050565b60006147e982615ae5565b6147f38185615b13565b93506147fe83615ad5565b8060005b8381101561482f57815161481688826147b7565b975061482183615b06565b925050600181019050614802565b5085935050505092915050565b61484581615c78565b82525050565b600061485682615af0565b6148608185615b24565b9350614870818560208601615d1f565b61487981615ee4565b840191505092915050565b61488d81615cec565b82525050565b600061489e82615afb565b6148a88185615b35565b93506148b8818560208601615d1f565b6148c181615ee4565b840191505092915050565b60006148d782615afb565b6148e18185615b46565b93506148f1818560208601615d1f565b80840191505092915050565b600061490a601783615b35565b91507f4f6e6c792057484954454c4953542063616e206d696e740000000000000000006000830152602082019050919050565b600061494a600b83615b35565b91507f53616c65207061757365640000000000000000000000000000000000000000006000830152602082019050919050565b600061498a602b83615b35565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006149f0603283615b35565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614a56602b83615b35565b91507f596f752061726520657863656564696e67206c696d6974206f6620706572207760008301527f616c6c65742042454152580000000000000000000000000000000000000000006020830152604082019050919050565b6000614abc602683615b35565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614b22602683615b35565b91507f436f6e747261637420616464726573732063616e2774206265207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614b88601c83615b35565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614bc8600483615b46565b91507f2e706e67000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b6000614c08601283615b35565b91507f5a65726f2061646472657373206572726f7200000000000000000000000000006000830152602082019050919050565b6000614c48602483615b35565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614cae601983615b35565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614cee600c83615b35565b91507f42726565642070617573656400000000000000000000000000000000000000006000830152602082019050919050565b6000614d2e602c83615b35565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614d94601c83615b35565b91507f45786365656473207265736572766564206265617220737570706c79000000006000830152602082019050919050565b6000614dd4602083615b35565b91507f426f746820546f6b656e20496473206d75737420626520646966666572656e746000830152602082019050919050565b6000614e14603083615b35565b91507f596f752061726520657863656564696e67206c696d6974206f6620706572207460008301527f72616e73616374696f6e204245415258000000000000000000000000000000006020830152604082019050919050565b6000614e7a603883615b35565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614ee0602a83615b35565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f46602983615b35565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614fac601c83615b35565b91507f45786365656473206d6178696d756d20424541525820737570706c79000000006000830152602082019050919050565b6000614fec602083615b35565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061502c602c83615b35565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000615092602083615b35565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006150d2602983615b35565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000615138602f83615b35565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061519e601c83615b35565b91507f596f7520646f6e2774206861766520656e6f75676820746f6b656e73000000006000830152602082019050919050565b60006151de602183615b35565b91507f43616c6c6572206d757374206265206f776e65724f6620546f6b656e2049642060008301527f31000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615244601283615b35565b91507f457863656564732067696620737570706c7900000000000000000000000000006000830152602082019050919050565b6000615284602183615b35565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006152ea601983615b35565b91507f45746865722073656e74206973206e6f7420636f7272656374000000000000006000830152602082019050919050565b600061532a603183615b35565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000615390602c83615b35565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b60006153f6602183615b35565b91507f43616c6c6572206d757374206265206f776e65724f6620546f6b656e2049642060008301527f32000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61545881615ce2565b82525050565b61546781615ce2565b82525050565b600061547982856148cc565b915061548582846148cc565b915061549082614bbb565b91508190509392505050565b60006020820190506154b160008301846147cf565b92915050565b60006040820190506154cc60008301856147cf565b6154d960208301846147cf565b9392505050565b60006060820190506154f560008301866147cf565b61550260208301856147cf565b61550f604083018461545e565b949350505050565b600060808201905061552c60008301876147cf565b61553960208301866147cf565b615546604083018561545e565b8181036060830152615558818461484b565b905095945050505050565b6000602082019050818103600083015261557d81846147de565b905092915050565b600060208201905061559a600083018461483c565b92915050565b60006020820190506155b56000830184614884565b92915050565b600060208201905081810360008301526155d58184614893565b905092915050565b600060208201905081810360008301526155f6816148fd565b9050919050565b600060208201905081810360008301526156168161493d565b9050919050565b600060208201905081810360008301526156368161497d565b9050919050565b60006020820190508181036000830152615656816149e3565b9050919050565b6000602082019050818103600083015261567681614a49565b9050919050565b6000602082019050818103600083015261569681614aaf565b9050919050565b600060208201905081810360008301526156b681614b15565b9050919050565b600060208201905081810360008301526156d681614b7b565b9050919050565b600060208201905081810360008301526156f681614bfb565b9050919050565b6000602082019050818103600083015261571681614c3b565b9050919050565b6000602082019050818103600083015261573681614ca1565b9050919050565b6000602082019050818103600083015261575681614ce1565b9050919050565b6000602082019050818103600083015261577681614d21565b9050919050565b6000602082019050818103600083015261579681614d87565b9050919050565b600060208201905081810360008301526157b681614dc7565b9050919050565b600060208201905081810360008301526157d681614e07565b9050919050565b600060208201905081810360008301526157f681614e6d565b9050919050565b6000602082019050818103600083015261581681614ed3565b9050919050565b6000602082019050818103600083015261583681614f39565b9050919050565b6000602082019050818103600083015261585681614f9f565b9050919050565b6000602082019050818103600083015261587681614fdf565b9050919050565b600060208201905081810360008301526158968161501f565b9050919050565b600060208201905081810360008301526158b681615085565b9050919050565b600060208201905081810360008301526158d6816150c5565b9050919050565b600060208201905081810360008301526158f68161512b565b9050919050565b6000602082019050818103600083015261591681615191565b9050919050565b60006020820190508181036000830152615936816151d1565b9050919050565b6000602082019050818103600083015261595681615237565b9050919050565b6000602082019050818103600083015261597681615277565b9050919050565b60006020820190508181036000830152615996816152dd565b9050919050565b600060208201905081810360008301526159b68161531d565b9050919050565b600060208201905081810360008301526159d681615383565b9050919050565b600060208201905081810360008301526159f6816153e9565b9050919050565b6000602082019050615a12600083018461545e565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615a3f57615a3e615eb5565b5b8060405250919050565b600067ffffffffffffffff821115615a6457615a63615eb5565b5b602082029050602081019050919050565b600067ffffffffffffffff821115615a9057615a8f615eb5565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115615ac057615abf615eb5565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000615b5c82615ce2565b9150615b6783615ce2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615b9c57615b9b615e28565b5b828201905092915050565b6000615bb282615ce2565b9150615bbd83615ce2565b925082615bcd57615bcc615e57565b5b828204905092915050565b6000615be382615ce2565b9150615bee83615ce2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615c2757615c26615e28565b5b828202905092915050565b6000615c3d82615ce2565b9150615c4883615ce2565b925082821015615c5b57615c5a615e28565b5b828203905092915050565b6000615c7182615cc2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000615cbb82615c66565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615cf782615cfe565b9050919050565b6000615d0982615cc2565b9050919050565b82818337600083830152505050565b60005b83811015615d3d578082015181840152602081019050615d22565b83811115615d4c576000848401525b50505050565b6000615d5d82615ce2565b91506000821415615d7157615d70615e28565b5b600182039050919050565b60006002820490506001821680615d9457607f821691505b60208210811415615da857615da7615e86565b5b50919050565b6000615db982615ce2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615dec57615deb615e28565b5b600182019050919050565b6000615e0282615ce2565b9150615e0d83615ce2565b925082615e1d57615e1c615e57565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b615efe81615c66565b8114615f0957600080fd5b50565b615f1581615c78565b8114615f2057600080fd5b50565b615f2c81615c84565b8114615f3757600080fd5b50565b615f4381615cb0565b8114615f4e57600080fd5b50565b615f5a81615ce2565b8114615f6557600080fd5b5056fea2646970667358221220c378b59f1d96b79cffb8a1b144a01e2e605f9398248a2bce3a6bf9166203b6da64736f6c63430008000033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000043a3f032e34467e8f692244461ca1b422f9af230000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f6d657461646174612e62656172786c6162732e636f6d2f00
Deployed Bytecode
0x6080604052600436106103355760003560e01c806370a08231116101ab5780639d2873f3116100f7578063ca80014411610095578063e35691231161006f578063e356912314610bc0578063e985e9c514610beb578063f2fde38b14610c28578063f9ca132214610c5157610335565b8063ca80014414610b2f578063d519fd8414610b58578063df2fb92c14610b9557610335565b8063a418b844116100d1578063a418b84414610a77578063b88d4fde14610aa0578063c3d7dafa14610ac9578063c87b56dd14610af257610335565b80639d2873f3146109fa578063a22cb46514610a23578063a3e497a914610a4c57610335565b8063853828b61161016457806395d89b411161013e57806395d89b411461093c5780639688738b14610967578063984621e7146109925780639b19251a146109bd57610335565b8063853828b6146108de5780638da5cb5b146108e857806391b7f5ed1461091357610335565b806370a0823114610806578063715018a6146108435780637c8765441461085a578063808bdf7114610871578063827a4d2f1461089c5780638456cb59146108c757610335565b80634051d41e1161028557806355f804b31161022357806365543320116101fd5780636554332014610769578063664a1ad61461078557806368b85fb1146107b05780636aaa571d146107db57610335565b806355f804b3146106d85780635b88ecd7146107015780636352211e1461072c57610335565b80634d644f6b1161025f5780634d644f6b1461062b5780634eaddff6146106565780634f6ccce71461067257806355ce3b9a146106af57610335565b80634051d41e1461059c57806342842e0e146105c5578063438b6300146105ee57610335565b8063235b6ea1116102f25780632a5f510e116102cc5780632a5f510e146104db5780632d47d29a146105065780632f745c591461054357806335aacecd1461058057610335565b8063235b6ea11461045e57806323b872dd1461048957806327ea6f2b146104b257610335565b806301ffc9a71461033a57806306fdde0314610377578063081812fc146103a2578063095ea7b3146103df57806316c61ccc1461040857806318160ddd14610433575b600080fd5b34801561034657600080fd5b50610361600480360381019061035c919061466d565b610c8e565b60405161036e9190615585565b60405180910390f35b34801561038357600080fd5b5061038c610d08565b60405161039991906155bb565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190614729565b610d9a565b6040516103d6919061549c565b60405180910390f35b3480156103eb57600080fd5b50610406600480360381019061040191906145c7565b610e1f565b005b34801561041457600080fd5b5061041d610f37565b60405161042a9190615585565b60405180910390f35b34801561043f57600080fd5b50610448610f4a565b60405161045591906159fd565b60405180910390f35b34801561046a57600080fd5b50610473610f57565b60405161048091906159fd565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab91906144c1565b610f5d565b005b3480156104be57600080fd5b506104d960048036038101906104d49190614729565b610fbd565b005b3480156104e757600080fd5b506104f0611043565b6040516104fd91906159fd565b60405180910390f35b34801561051257600080fd5b5061052d6004803603810190610528919061445c565b611049565b60405161053a91906159fd565b60405180910390f35b34801561054f57600080fd5b5061056a600480360381019061056591906145c7565b611061565b60405161057791906159fd565b60405180910390f35b61059a60048036038101906105959190614729565b611106565b005b3480156105a857600080fd5b506105c360048036038101906105be919061445c565b61136f565b005b3480156105d157600080fd5b506105ec60048036038101906105e791906144c1565b6114ce565b005b3480156105fa57600080fd5b506106156004803603810190610610919061445c565b6114ee565b6040516106229190615563565b60405180910390f35b34801561063757600080fd5b506106406115e8565b60405161064d91906159fd565b60405180910390f35b610670600480360381019061066b919061477b565b6115ee565b005b34801561067e57600080fd5b5061069960048036038101906106949190614729565b61199f565b6040516106a691906159fd565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d1919061445c565b611a36565b005b3480156106e457600080fd5b506106ff60048036038101906106fa91906146e8565b611b66565b005b34801561070d57600080fd5b50610716611bfc565b60405161072391906159fd565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190614729565b611c02565b604051610760919061549c565b60405180910390f35b610783600480360381019061077e9190614729565b611cb4565b005b34801561079157600080fd5b5061079a611e3a565b6040516107a7919061549c565b60405180910390f35b3480156107bc57600080fd5b506107c5611e60565b6040516107d291906159fd565b60405180910390f35b3480156107e757600080fd5b506107f0611e66565b6040516107fd91906159fd565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061445c565b611e6c565b60405161083a91906159fd565b60405180910390f35b34801561084f57600080fd5b50610858611f24565b005b34801561086657600080fd5b5061086f611fac565b005b34801561087d57600080fd5b50610886612054565b60405161089391906159fd565b60405180910390f35b3480156108a857600080fd5b506108b161205a565b6040516108be91906159fd565b60405180910390f35b3480156108d357600080fd5b506108dc612060565b005b6108e6612108565b005b3480156108f457600080fd5b506108fd6121e6565b60405161090a919061549c565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190614729565b612210565b005b34801561094857600080fd5b50610951612296565b60405161095e91906155bb565b60405180910390f35b34801561097357600080fd5b5061097c612328565b60405161098991906155a0565b60405180910390f35b34801561099e57600080fd5b506109a761234e565b6040516109b491906159fd565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df919061445c565b612354565b6040516109f19190615585565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c91906146bf565b612374565b005b348015610a2f57600080fd5b50610a4a6004803603810190610a45919061458b565b612434565b005b348015610a5857600080fd5b50610a616125b5565b604051610a6e9190615585565b60405180910390f35b348015610a8357600080fd5b50610a9e6004803603810190610a9991906145c7565b6125c8565b005b348015610aac57600080fd5b50610ac76004803603810190610ac29190614510565b612758565b005b348015610ad557600080fd5b50610af06004803603810190610aeb9190614603565b6127ba565b005b348015610afe57600080fd5b50610b196004803603810190610b149190614729565b6129a3565b604051610b2691906155bb565b60405180910390f35b348015610b3b57600080fd5b50610b566004803603810190610b5191906145c7565b612a4a565b005b348015610b6457600080fd5b50610b7f6004803603810190610b7a919061445c565b612bd9565b604051610b8c91906159fd565b60405180910390f35b348015610ba157600080fd5b50610baa612cfc565b604051610bb791906159fd565b60405180910390f35b348015610bcc57600080fd5b50610bd5612d02565b604051610be291906159fd565b60405180910390f35b348015610bf757600080fd5b50610c126004803603810190610c0d9190614485565b612d08565b604051610c1f9190615585565b60405180910390f35b348015610c3457600080fd5b50610c4f6004803603810190610c4a919061445c565b612d9c565b005b348015610c5d57600080fd5b50610c786004803603810190610c73919061445c565b612e94565b604051610c8591906159fd565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d015750610d0082612fb9565b5b9050919050565b606060008054610d1790615d7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4390615d7c565b8015610d905780601f10610d6557610100808354040283529160200191610d90565b820191906000526020600020905b815481529060010190602001808311610d7357829003601f168201915b5050505050905090565b6000610da58261309b565b610de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddb9061587d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e2a82611c02565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e929061595d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610eba613107565b73ffffffffffffffffffffffffffffffffffffffff161480610ee95750610ee881610ee3613107565b612d08565b5b610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f906157dd565b60405180910390fd5b610f32838361310f565b505050565b601660149054906101000a900460ff1681565b6000600880549050905090565b60145481565b610f6e610f68613107565b826131c8565b610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa49061599d565b60405180910390fd5b610fb88383836132a6565b505050565b610fc5613107565b73ffffffffffffffffffffffffffffffffffffffff16610fe36121e6565b73ffffffffffffffffffffffffffffffffffffffff1614611039576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110309061589d565b60405180910390fd5b8060128190555050565b601a5481565b60176020528060005260406000206000915090505481565b600061106c83611e6c565b82106110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a49061561d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000611110610f4a565b905060011515601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119c906155dd565b60405180910390fd5b60105482601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111f39190615b51565b1115611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b9061565d565b60405180910390fd5b6013546012546112449190615c32565b82826112509190615b51565b1115611291576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112889061583d565b60405180910390fd5b8160145461129f9190615bd8565b3410156112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d89061597d565b60405180910390fd5b60005b82811015611314576113013382846112fc9190615b51565b613502565b808061130c90615dae565b9150506112e4565b5081601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113649190615b51565b925050819055505050565b611377613107565b73ffffffffffffffffffffffffffffffffffffffff166113956121e6565b73ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e29061589d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561145b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611452906156dd565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601560008154809291906114c690615d52565b919050555050565b6114e983838360405180602001604052806000815250612758565b505050565b606060006114fb83611e6c565b905060008167ffffffffffffffff81111561153f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561156d5781602001602082028036833780820191505090505b50905060005b828110156115dd576115858582611061565b8282815181106115be577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806115d590615dae565b915050611573565b508092505050919050565b60105481565b60006115f8610f4a565b905060011515601960149054906101000a900460ff16151514611650576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116479061573d565b60405180910390fd5b601a54601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016116ae919061549c565b60206040518083038186803b1580156116c657600080fd5b505afa1580156116da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fe9190614752565b101561173f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611736906158fd565b60405180910390fd5b81831415611782576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117799061579d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166117a284611c02565b73ffffffffffffffffffffffffffffffffffffffff16146117f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ef9061591d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1661181883611c02565b73ffffffffffffffffffffffffffffffffffffffff161461186e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611865906159dd565b60405180910390fd5b611886336001600f546118819190615b51565b613502565b600e600081548092919061189990615d52565b9190505550600f60008154809291906118b190615dae565b919050555080806118c190615dae565b915050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a546040518463ffffffff1660e01b8152600401611947939291906154e0565b602060405180830381600087803b15801561196157600080fd5b505af1158015611975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119999190614644565b50505050565b60006119a9610f4a565b82106119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e1906159bd565b60405180910390fd5b60088281548110611a24577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611a3e613107565b73ffffffffffffffffffffffffffffffffffffffff16611a5c6121e6565b73ffffffffffffffffffffffffffffffffffffffff1614611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa99061589d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b19906156dd565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b6e613107565b73ffffffffffffffffffffffffffffffffffffffff16611b8c6121e6565b73ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd99061589d565b60405180910390fd5b80600b9080519060200190611bf89291906141ab565b5050565b600c5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca29061581d565b60405180910390fd5b80915050919050565b6000611cbe610f4a565b9050601660149054906101000a900460ff1615611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d07906155fd565b60405180910390fd5b601154821115611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c906157bd565b60405180910390fd5b601354601254611d659190615c32565b8282611d719190615b51565b1115611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da99061583d565b60405180910390fd5b81601454611dc09190615bd8565b341015611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df99061597d565b60405180910390fd5b60005b82811015611e3557611e22338284611e1d9190615b51565b613502565b8080611e2d90615dae565b915050611e05565b505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60135481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed4906157fd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611f2c613107565b73ffffffffffffffffffffffffffffffffffffffff16611f4a6121e6565b73ffffffffffffffffffffffffffffffffffffffff1614611fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f979061589d565b60405180910390fd5b611faa6000613520565b565b611fb4613107565b73ffffffffffffffffffffffffffffffffffffffff16611fd26121e6565b73ffffffffffffffffffffffffffffffffffffffff1614612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f9061589d565b60405180910390fd5b601960149054906101000a900460ff1615601960146101000a81548160ff021916908315150217905550565b60115481565b600f5481565b612068613107565b73ffffffffffffffffffffffffffffffffffffffff166120866121e6565b73ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d39061589d565b60405180910390fd5b601660149054906101000a900460ff1615601660146101000a81548160ff021916908315150217905550565b612110613107565b73ffffffffffffffffffffffffffffffffffffffff1661212e6121e6565b73ffffffffffffffffffffffffffffffffffffffff1614612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b9061589d565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506121e457600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612218613107565b73ffffffffffffffffffffffffffffffffffffffff166122366121e6565b73ffffffffffffffffffffffffffffffffffffffff161461228c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122839061589d565b60405180910390fd5b8060148190555050565b6060600180546122a590615d7c565b80601f01602080910402602001604051908101604052809291908181526020018280546122d190615d7c565b801561231e5780601f106122f35761010080835404028352916020019161231e565b820191906000526020600020905b81548152906001019060200180831161230157829003601f168201915b5050505050905090565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b60186020528060005260406000206000915054906101000a900460ff1681565b61237c613107565b73ffffffffffffffffffffffffffffffffffffffff1661239a6121e6565b73ffffffffffffffffffffffffffffffffffffffff16146123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e79061589d565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61243c613107565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a19061571d565b60405180910390fd5b80600560006124b7613107565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612564613107565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125a99190615585565b60405180910390a35050565b601960149054906101000a900460ff1681565b6125d0613107565b73ffffffffffffffffffffffffffffffffffffffff166125ee6121e6565b73ffffffffffffffffffffffffffffffffffffffff1614612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b9061589d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ab906156dd565b60405180910390fd5b600c548111156126f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f09061593d565b60405180910390fd5b60005b818110156127535761271083600d54613502565b600c600081548092919061272390615d52565b9190505550600d600081548092919061273b90615dae565b9190505550808061274b90615dae565b9150506126fc565b505050565b612769612763613107565b836131c8565b6127a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279f9061599d565b60405180910390fd5b6127b4848484846135e6565b50505050565b6127c2613107565b73ffffffffffffffffffffffffffffffffffffffff166127e06121e6565b73ffffffffffffffffffffffffffffffffffffffff1614612836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282d9061589d565b60405180910390fd5b60005b815181101561299f57600082828151811061287d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060011515601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141580156129155750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561298b576001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506015600081548092919061298590615dae565b91905055505b50808061299790615dae565b915050612839565b5050565b60606129ae8261309b565b6129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e4906158dd565b60405180910390fd5b60006129f7613642565b90506000815111612a175760405180602001604052806000815250612a42565b80612a21846136d4565b604051602001612a3292919061546d565b6040516020818303038152906040525b915050919050565b612a52613107565b73ffffffffffffffffffffffffffffffffffffffff16612a706121e6565b73ffffffffffffffffffffffffffffffffffffffff1614612ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abd9061589d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2d906156dd565b60405180910390fd5b601354811115612b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b729061577d565b60405180910390fd5b6000612b85610f4a565b905060005b82811015612bba57612ba7848284612ba29190615b51565b613502565b8080612bb290615dae565b915050612b8a565b508160136000828254612bcd9190615c32565b92505081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c419061569d565b60405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401612ca5919061549c565b60206040518083038186803b158015612cbd57600080fd5b505afa158015612cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf59190614752565b9050919050565b60125481565b60155481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612da4613107565b73ffffffffffffffffffffffffffffffffffffffff16612dc26121e6565b73ffffffffffffffffffffffffffffffffffffffff1614612e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0f9061589d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7f9061567d565b60405180910390fd5b612e9181613520565b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efc9061569d565b60405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e83306040518363ffffffff1660e01b8152600401612f629291906154b7565b60206040518083038186803b158015612f7a57600080fd5b505afa158015612f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb29190614752565b9050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061308457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613094575061309382613881565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661318283611c02565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006131d38261309b565b613212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132099061575d565b60405180910390fd5b600061321d83611c02565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061328c57508373ffffffffffffffffffffffffffffffffffffffff1661327484610d9a565b73ffffffffffffffffffffffffffffffffffffffff16145b8061329d575061329c8185612d08565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166132c682611c02565b73ffffffffffffffffffffffffffffffffffffffff161461331c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613313906158bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561338c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613383906156fd565b60405180910390fd5b6133978383836138eb565b6133a260008261310f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133f29190615c32565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134499190615b51565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61351c8282604051806020016040528060008152506139ff565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6135f18484846132a6565b6135fd84848484613ab6565b61363c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136339061563d565b60405180910390fd5b50505050565b6060600b805461365190615d7c565b80601f016020809104026020016040519081016040528092919081815260200182805461367d90615d7c565b80156136ca5780601f1061369f576101008083540402835291602001916136ca565b820191906000526020600020905b8154815290600101906020018083116136ad57829003601f168201915b5050505050905090565b6060600082141561371c576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061387c565b600082905060005b6000821461374e57808061373790615dae565b915050600a826137479190615ba7565b9150613724565b60008167ffffffffffffffff811115613790577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156137c25781602001600182028036833780820191505090505b5090505b60008514613875576001826137db9190615c32565b9150600a856137ea9190615df7565b60306137f69190615b51565b60f81b818381518110613832577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561386e9190615ba7565b94506137c6565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6138f6838383613c4d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139395761393481613c52565b613978565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613977576139768382613c9b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139bb576139b681613e08565b6139fa565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146139f9576139f88282613f4b565b5b5b505050565b613a098383613fca565b613a166000848484613ab6565b613a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a4c9061563d565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000613ad78473ffffffffffffffffffffffffffffffffffffffff16614198565b15613c40578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613b00613107565b8786866040518563ffffffff1660e01b8152600401613b229493929190615517565b602060405180830381600087803b158015613b3c57600080fd5b505af1925050508015613b6d57506040513d601f19601f82011682018060405250810190613b6a9190614696565b60015b613bf0573d8060008114613b9d576040519150601f19603f3d011682016040523d82523d6000602084013e613ba2565b606091505b50600081511415613be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdf9061563d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613c45565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613ca884611e6c565b613cb29190615c32565b9050600060076000848152602001908152602001600020549050818114613d97576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613e1c9190615c32565b9050600060096000848152602001908152602001600020549050600060088381548110613e72577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613eba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613f2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613f5683611e6c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561403a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140319061585d565b60405180910390fd5b6140438161309b565b15614083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161407a906156bd565b60405180910390fd5b61408f600083836138eb565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546140df9190615b51565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546141b790615d7c565b90600052602060002090601f0160209004810192826141d95760008555614220565b82601f106141f257805160ff1916838001178555614220565b82800160010185558215614220579182015b8281111561421f578251825591602001919060010190614204565b5b50905061422d9190614231565b5090565b5b8082111561424a576000816000905550600101614232565b5090565b600061426161425c84615a49565b615a18565b9050808382526020820190508285602086028201111561428057600080fd5b60005b858110156142b057816142968882614336565b845260208401935060208301925050600181019050614283565b5050509392505050565b60006142cd6142c884615a75565b615a18565b9050828152602081018484840111156142e557600080fd5b6142f0848285615d10565b509392505050565b600061430b61430684615aa5565b615a18565b90508281526020810184848401111561432357600080fd5b61432e848285615d10565b509392505050565b60008135905061434581615ef5565b92915050565b600082601f83011261435c57600080fd5b813561436c84826020860161424e565b91505092915050565b60008135905061438481615f0c565b92915050565b60008151905061439981615f0c565b92915050565b6000813590506143ae81615f23565b92915050565b6000815190506143c381615f23565b92915050565b600082601f8301126143da57600080fd5b81356143ea8482602086016142ba565b91505092915050565b60008135905061440281615f3a565b92915050565b600082601f83011261441957600080fd5b81356144298482602086016142f8565b91505092915050565b60008135905061444181615f51565b92915050565b60008151905061445681615f51565b92915050565b60006020828403121561446e57600080fd5b600061447c84828501614336565b91505092915050565b6000806040838503121561449857600080fd5b60006144a685828601614336565b92505060206144b785828601614336565b9150509250929050565b6000806000606084860312156144d657600080fd5b60006144e486828701614336565b93505060206144f586828701614336565b925050604061450686828701614432565b9150509250925092565b6000806000806080858703121561452657600080fd5b600061453487828801614336565b945050602061454587828801614336565b935050604061455687828801614432565b925050606085013567ffffffffffffffff81111561457357600080fd5b61457f878288016143c9565b91505092959194509250565b6000806040838503121561459e57600080fd5b60006145ac85828601614336565b92505060206145bd85828601614375565b9150509250929050565b600080604083850312156145da57600080fd5b60006145e885828601614336565b92505060206145f985828601614432565b9150509250929050565b60006020828403121561461557600080fd5b600082013567ffffffffffffffff81111561462f57600080fd5b61463b8482850161434b565b91505092915050565b60006020828403121561465657600080fd5b60006146648482850161438a565b91505092915050565b60006020828403121561467f57600080fd5b600061468d8482850161439f565b91505092915050565b6000602082840312156146a857600080fd5b60006146b6848285016143b4565b91505092915050565b6000602082840312156146d157600080fd5b60006146df848285016143f3565b91505092915050565b6000602082840312156146fa57600080fd5b600082013567ffffffffffffffff81111561471457600080fd5b61472084828501614408565b91505092915050565b60006020828403121561473b57600080fd5b600061474984828501614432565b91505092915050565b60006020828403121561476457600080fd5b600061477284828501614447565b91505092915050565b6000806040838503121561478e57600080fd5b600061479c85828601614432565b92505060206147ad85828601614432565b9150509250929050565b60006147c3838361544f565b60208301905092915050565b6147d881615c66565b82525050565b60006147e982615ae5565b6147f38185615b13565b93506147fe83615ad5565b8060005b8381101561482f57815161481688826147b7565b975061482183615b06565b925050600181019050614802565b5085935050505092915050565b61484581615c78565b82525050565b600061485682615af0565b6148608185615b24565b9350614870818560208601615d1f565b61487981615ee4565b840191505092915050565b61488d81615cec565b82525050565b600061489e82615afb565b6148a88185615b35565b93506148b8818560208601615d1f565b6148c181615ee4565b840191505092915050565b60006148d782615afb565b6148e18185615b46565b93506148f1818560208601615d1f565b80840191505092915050565b600061490a601783615b35565b91507f4f6e6c792057484954454c4953542063616e206d696e740000000000000000006000830152602082019050919050565b600061494a600b83615b35565b91507f53616c65207061757365640000000000000000000000000000000000000000006000830152602082019050919050565b600061498a602b83615b35565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006149f0603283615b35565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614a56602b83615b35565b91507f596f752061726520657863656564696e67206c696d6974206f6620706572207760008301527f616c6c65742042454152580000000000000000000000000000000000000000006020830152604082019050919050565b6000614abc602683615b35565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614b22602683615b35565b91507f436f6e747261637420616464726573732063616e2774206265207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614b88601c83615b35565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614bc8600483615b46565b91507f2e706e67000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b6000614c08601283615b35565b91507f5a65726f2061646472657373206572726f7200000000000000000000000000006000830152602082019050919050565b6000614c48602483615b35565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614cae601983615b35565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614cee600c83615b35565b91507f42726565642070617573656400000000000000000000000000000000000000006000830152602082019050919050565b6000614d2e602c83615b35565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614d94601c83615b35565b91507f45786365656473207265736572766564206265617220737570706c79000000006000830152602082019050919050565b6000614dd4602083615b35565b91507f426f746820546f6b656e20496473206d75737420626520646966666572656e746000830152602082019050919050565b6000614e14603083615b35565b91507f596f752061726520657863656564696e67206c696d6974206f6620706572207460008301527f72616e73616374696f6e204245415258000000000000000000000000000000006020830152604082019050919050565b6000614e7a603883615b35565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614ee0602a83615b35565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f46602983615b35565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614fac601c83615b35565b91507f45786365656473206d6178696d756d20424541525820737570706c79000000006000830152602082019050919050565b6000614fec602083615b35565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061502c602c83615b35565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000615092602083615b35565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006150d2602983615b35565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000615138602f83615b35565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061519e601c83615b35565b91507f596f7520646f6e2774206861766520656e6f75676820746f6b656e73000000006000830152602082019050919050565b60006151de602183615b35565b91507f43616c6c6572206d757374206265206f776e65724f6620546f6b656e2049642060008301527f31000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615244601283615b35565b91507f457863656564732067696620737570706c7900000000000000000000000000006000830152602082019050919050565b6000615284602183615b35565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006152ea601983615b35565b91507f45746865722073656e74206973206e6f7420636f7272656374000000000000006000830152602082019050919050565b600061532a603183615b35565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000615390602c83615b35565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b60006153f6602183615b35565b91507f43616c6c6572206d757374206265206f776e65724f6620546f6b656e2049642060008301527f32000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61545881615ce2565b82525050565b61546781615ce2565b82525050565b600061547982856148cc565b915061548582846148cc565b915061549082614bbb565b91508190509392505050565b60006020820190506154b160008301846147cf565b92915050565b60006040820190506154cc60008301856147cf565b6154d960208301846147cf565b9392505050565b60006060820190506154f560008301866147cf565b61550260208301856147cf565b61550f604083018461545e565b949350505050565b600060808201905061552c60008301876147cf565b61553960208301866147cf565b615546604083018561545e565b8181036060830152615558818461484b565b905095945050505050565b6000602082019050818103600083015261557d81846147de565b905092915050565b600060208201905061559a600083018461483c565b92915050565b60006020820190506155b56000830184614884565b92915050565b600060208201905081810360008301526155d58184614893565b905092915050565b600060208201905081810360008301526155f6816148fd565b9050919050565b600060208201905081810360008301526156168161493d565b9050919050565b600060208201905081810360008301526156368161497d565b9050919050565b60006020820190508181036000830152615656816149e3565b9050919050565b6000602082019050818103600083015261567681614a49565b9050919050565b6000602082019050818103600083015261569681614aaf565b9050919050565b600060208201905081810360008301526156b681614b15565b9050919050565b600060208201905081810360008301526156d681614b7b565b9050919050565b600060208201905081810360008301526156f681614bfb565b9050919050565b6000602082019050818103600083015261571681614c3b565b9050919050565b6000602082019050818103600083015261573681614ca1565b9050919050565b6000602082019050818103600083015261575681614ce1565b9050919050565b6000602082019050818103600083015261577681614d21565b9050919050565b6000602082019050818103600083015261579681614d87565b9050919050565b600060208201905081810360008301526157b681614dc7565b9050919050565b600060208201905081810360008301526157d681614e07565b9050919050565b600060208201905081810360008301526157f681614e6d565b9050919050565b6000602082019050818103600083015261581681614ed3565b9050919050565b6000602082019050818103600083015261583681614f39565b9050919050565b6000602082019050818103600083015261585681614f9f565b9050919050565b6000602082019050818103600083015261587681614fdf565b9050919050565b600060208201905081810360008301526158968161501f565b9050919050565b600060208201905081810360008301526158b681615085565b9050919050565b600060208201905081810360008301526158d6816150c5565b9050919050565b600060208201905081810360008301526158f68161512b565b9050919050565b6000602082019050818103600083015261591681615191565b9050919050565b60006020820190508181036000830152615936816151d1565b9050919050565b6000602082019050818103600083015261595681615237565b9050919050565b6000602082019050818103600083015261597681615277565b9050919050565b60006020820190508181036000830152615996816152dd565b9050919050565b600060208201905081810360008301526159b68161531d565b9050919050565b600060208201905081810360008301526159d681615383565b9050919050565b600060208201905081810360008301526159f6816153e9565b9050919050565b6000602082019050615a12600083018461545e565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615a3f57615a3e615eb5565b5b8060405250919050565b600067ffffffffffffffff821115615a6457615a63615eb5565b5b602082029050602081019050919050565b600067ffffffffffffffff821115615a9057615a8f615eb5565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115615ac057615abf615eb5565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000615b5c82615ce2565b9150615b6783615ce2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615b9c57615b9b615e28565b5b828201905092915050565b6000615bb282615ce2565b9150615bbd83615ce2565b925082615bcd57615bcc615e57565b5b828204905092915050565b6000615be382615ce2565b9150615bee83615ce2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615c2757615c26615e28565b5b828202905092915050565b6000615c3d82615ce2565b9150615c4883615ce2565b925082821015615c5b57615c5a615e28565b5b828203905092915050565b6000615c7182615cc2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000615cbb82615c66565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615cf782615cfe565b9050919050565b6000615d0982615cc2565b9050919050565b82818337600083830152505050565b60005b83811015615d3d578082015181840152602081019050615d22565b83811115615d4c576000848401525b50505050565b6000615d5d82615ce2565b91506000821415615d7157615d70615e28565b5b600182039050919050565b60006002820490506001821680615d9457607f821691505b60208210811415615da857615da7615e86565b5b50919050565b6000615db982615ce2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615dec57615deb615e28565b5b600182019050919050565b6000615e0282615ce2565b9150615e0d83615ce2565b925082615e1d57615e1c615e57565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b615efe81615c66565b8114615f0957600080fd5b50565b615f1581615c78565b8114615f2057600080fd5b50565b615f2c81615c84565b8114615f3757600080fd5b50565b615f4381615cb0565b8114615f4e57600080fd5b50565b615f5a81615ce2565b8114615f6557600080fd5b5056fea2646970667358221220c378b59f1d96b79cffb8a1b144a01e2e605f9398248a2bce3a6bf9166203b6da64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000043a3f032e34467e8f692244461ca1b422f9af230000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f6d657461646174612e62656172786c6162732e636f6d2f00
-----Decoded View---------------
Arg [0] : baseURI (string): https://metadata.bearxlabs.com/
Arg [1] : _fundWallet (address): 0x43a3f032E34467e8f692244461CA1b422f9af230
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000043a3f032e34467e8f692244461ca1b422f9af230
Arg [2] : 000000000000000000000000000000000000000000000000000000000000001f
Arg [3] : 68747470733a2f2f6d657461646174612e62656172786c6162732e636f6d2f00
Deployed Bytecode Sourcemap
35374:6510:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29222:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17354:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18921:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18444:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35912:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29862:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35796:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19811:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41180:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36120:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35945:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29530:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39499:658;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40516:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20221:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39149:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35642:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37093:708;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30052:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40877:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41381:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35488:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17048:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37809:593;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35880:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35561:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35760:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16778:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2428:94;;;;;;;;;;;;;:::i;:::-;;41668:82;;;;;;;;;;;;;:::i;:::-;;35690:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35595:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41589:71;;;;;;;;;;;;;:::i;:::-;;41758:123;;;:::i;:::-;;2205:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40776:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17523:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36046:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35517:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35997:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36401:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19214:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36083:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38804:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20477:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40165:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17698:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38410:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36620:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35725:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35837:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19580:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2530:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36847:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29222:224;29324:4;29363:35;29348:50;;;:11;:50;;;;:90;;;;29402:36;29426:11;29402:23;:36::i;:::-;29348:90;29341:97;;29222:224;;;:::o;17354:100::-;17408:13;17441:5;17434:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17354:100;:::o;18921:221::-;18997:7;19025:16;19033:7;19025;:16::i;:::-;19017:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19110:15;:24;19126:7;19110:24;;;;;;;;;;;;;;;;;;;;;19103:31;;18921:221;;;:::o;18444:411::-;18525:13;18541:23;18556:7;18541:14;:23::i;:::-;18525:39;;18589:5;18583:11;;:2;:11;;;;18575:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;18683:5;18667:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;18692:37;18709:5;18716:12;:10;:12::i;:::-;18692:16;:37::i;:::-;18667:62;18645:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;18826:21;18835:2;18839:7;18826:8;:21::i;:::-;18444:411;;;:::o;35912:26::-;;;;;;;;;;;;;:::o;29862:113::-;29923:7;29950:10;:17;;;;29943:24;;29862:113;:::o;35796:34::-;;;;:::o;19811:339::-;20006:41;20025:12;:10;:12::i;:::-;20039:7;20006:18;:41::i;:::-;19998:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;20114:28;20124:4;20130:2;20134:7;20114:9;:28::i;:::-;19811:339;;;:::o;41180:83::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41250:5:::1;41241:6;:14;;;;41180:83:::0;:::o;36120:38::-;;;;:::o;35945:45::-;;;;;;;;;;;;;;;;;:::o;29530:256::-;29627:7;29663:23;29680:5;29663:16;:23::i;:::-;29655:5;:31;29647:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;29752:12;:19;29765:5;29752:19;;;;;;;;;;;;;;;:26;29772:5;29752:26;;;;;;;;;;;;29745:33;;29530:256;;;;:::o;39499:658::-;39562:14;39579:13;:11;:13::i;:::-;39562:30;;39637:4;39612:29;;:9;:21;39622:10;39612:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;39603:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;39738:22;;39731:3;39707:9;:21;39717:10;39707:21;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;:53;;39698:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;39856:9;;39847:6;;:18;;;;:::i;:::-;39840:3;39831:6;:12;;;;:::i;:::-;:34;;39822:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;39953:3;39944:6;;:12;;;;:::i;:::-;39931:9;:25;;39922:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;40025:9;40021:90;40040:3;40036:1;:7;40021:90;;;40064:35;40075:10;40096:1;40087:6;:10;;;;:::i;:::-;40064:9;:35::i;:::-;40045:3;;;;;:::i;:::-;;;;40021:90;;;;40146:3;40121:9;:21;40131:10;40121:21;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;39499:658;;:::o;40516:201::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40618:1:::1;40598:22;;:8;:22;;;;40590:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;40676:5;40654:9;:19;40664:8;40654:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;40692:15;;:17;;;;;;;;;:::i;:::-;;;;;;40516:201:::0;:::o;20221:185::-;20359:39;20376:4;20382:2;20386:7;20359:39;;;;;;;;;;;;:16;:39::i;:::-;20221:185;;;:::o;39149:342::-;39208:16;39237:18;39258:17;39268:6;39258:9;:17::i;:::-;39237:38;;39288:25;39330:10;39316:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39288:53;;39356:9;39352:106;39371:10;39367:1;:14;39352:106;;;39416:30;39436:6;39444:1;39416:19;:30::i;:::-;39402:8;39411:1;39402:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;39383:3;;;;;:::i;:::-;;;;39352:106;;;;39475:8;39468:15;;;;39149:342;;;:::o;35642:41::-;;;;:::o;37093:708::-;37172:15;37190:13;:11;:13::i;:::-;37172:31;;37237:4;37223:18;;:10;;;;;;;;;;;:18;;;37214:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37324:10;;37285:13;;;;;;;;;;;:23;;;37309:10;37285:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;37276:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;37397:5;37388;:14;;37379:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37478:10;37460:28;;:14;37468:5;37460:7;:14::i;:::-;:28;;;37451:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;37564:10;37546:28;;:14;37554:5;37546:7;:14::i;:::-;:28;;;37537:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;37625:37;37636:10;37659:1;37648:8;;:12;;;;:::i;:::-;37625:9;:37::i;:::-;37673:5;;:7;;;;;;;;;:::i;:::-;;;;;;37691:8;;:10;;;;;;;;;:::i;:::-;;;;;;37712:8;;;;;:::i;:::-;;;;37731:13;;;;;;;;;;;:26;;;37758:10;37770;;;;;;;;;;;37782;;37731:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37093:708;;;:::o;30052:233::-;30127:7;30163:30;:28;:30::i;:::-;30155:5;:38;30147:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;30260:10;30271:5;30260:17;;;;;;;;;;;;;;;;;;;;;;;;30253:24;;30052:233;;;:::o;40877:173::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40982:1:::1;40959:25;;:11;:25;;;;40951:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41031:11;41018:10;;:24;;;;;;;;;;;;;;;;;;40877:173:::0;:::o;41381:102::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41468:7:::1;41452:13;:23;;;;;;;;;;;;:::i;:::-;;41381:102:::0;:::o;35488:22::-;;;;:::o;17048:239::-;17120:7;17140:13;17156:7;:16;17164:7;17156:16;;;;;;;;;;;;;;;;;;;;;17140:32;;17208:1;17191:19;;:5;:19;;;;17183:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17274:5;17267:12;;;17048:239;;;:::o;37809:593::-;37862:14;37879:13;:11;:13::i;:::-;37862:30;;37913:7;;;;;;;;;;;37912:8;37903:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;38002:9;;37995:3;:16;;37986:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;38140:9;;38131:6;;:18;;;;:::i;:::-;38124:3;38115:6;:12;;;;:::i;:::-;:34;;38106:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;38237:3;38228:6;;:12;;;;:::i;:::-;38215:9;:25;;38206:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;38309:9;38305:90;38324:3;38320:1;:7;38305:90;;;38348:35;38359:10;38380:1;38371:6;:10;;;;:::i;:::-;38348:9;:35::i;:::-;38329:3;;;;;:::i;:::-;;;;38305:90;;;;37809:593;;:::o;35880:25::-;;;;;;;;;;;;;:::o;35561:27::-;;;;:::o;35760:29::-;;;;:::o;16778:208::-;16850:7;16895:1;16878:19;;:5;:19;;;;16870:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16962:9;:16;16972:5;16962:16;;;;;;;;;;;;;;;;16955:23;;16778:208;;;:::o;2428:94::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2493:21:::1;2511:1;2493:9;:21::i;:::-;2428:94::o:0;41668:82::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41732:10:::1;;;;;;;;;;;41731:11;41718:10;;:24;;;;;;;;;;;;;;;;;;41668:82::o:0;35690:28::-;;;;:::o;35595:40::-;;;;:::o;41589:71::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41645:7:::1;;;;;;;;;;;41644:8;41634:7;;:18;;;;;;;;;;;;;;;;;;41589:71::o:0;41758:123::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41833:10:::1;;;;;;;;;;;41825:24;;:47;41850:21;41825:47;;;;;;;;;;;;;;;;;;;;;;;41817:56;;;::::0;::::1;;41758:123::o:0;2205:87::-;2251:7;2278:6;;;;;;;;;;;2271:13;;2205:87;:::o;40776:93::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40852:9:::1;40843:6;:18;;;;40776:93:::0;:::o;17523:104::-;17579:13;17612:7;17605:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17523:104;:::o;36046:30::-;;;;;;;;;;;;;:::o;35517:37::-;;;;:::o;35997:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;36401:207::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36586:14:::1;36570:13;;:30;;;;;;;;;;;;;;;;;;36401:207:::0;:::o;19214:295::-;19329:12;:10;:12::i;:::-;19317:24;;:8;:24;;;;19309:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19429:8;19384:18;:32;19403:12;:10;:12::i;:::-;19384:32;;;;;;;;;;;;;;;:42;19417:8;19384:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;19482:8;19453:48;;19468:12;:10;:12::i;:::-;19453:48;;;19492:8;19453:48;;;;;;:::i;:::-;;;;;;;;19214:295;;:::o;36083:30::-;;;;;;;;;;;;;:::o;38804:333::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38907:1:::1;38891:18;;:3;:18;;;;38882:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;38963:3;;38952:7;:14;;38943:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;39007:9;39003:127;39022:7;39018:1;:11;39003:127;;;39050:24;39061:3;39066:6;;39050:9;:24::i;:::-;39089:3;;:6;;;;;;;;;:::i;:::-;;;;;;39110;;:8;;;;;;;;;:::i;:::-;;;;;;39031:3;;;;;:::i;:::-;;;;39003:127;;;;38804:333:::0;;:::o;20477:328::-;20652:41;20671:12;:10;:12::i;:::-;20685:7;20652:18;:41::i;:::-;20644:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;20758:39;20772:4;20778:2;20782:7;20791:5;20758:13;:39::i;:::-;20477:328;;;;:::o;40165:339::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40251:6:::1;40247:250;40265:9;:16;40261:1;:20;40247:250;;;40302:12;40317:9;40327:1;40317:12;;;;;;;;;;;;;;;;;;;;;;40302:27;;40366:4;40347:23;;:9;:15;40357:4;40347:15;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;;:45;;;;;40390:1;40374:18;;:4;:18;;;;40347:45;40344:142;;;40430:4;40412:9;:15;40422:4;40412:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;40453:15;;:17;;;;;;;;;:::i;:::-;;;;;;40344:142;40247:250;40283:3;;;;;:::i;:::-;;;;40247:250;;;;40165:339:::0;:::o;17698:342::-;17771:13;17805:16;17813:7;17805;:16::i;:::-;17797:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;17886:21;17910:10;:8;:10::i;:::-;17886:34;;17962:1;17944:7;17938:21;:25;:94;;;;;;;;;;;;;;;;;17990:7;17999:18;:7;:16;:18::i;:::-;17973:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17938:94;17931:101;;;17698:342;;;:::o;38410:382::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38515:1:::1;38499:18;;:3;:18;;;;38490:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;38571:9;;38560:7;:20;;38551:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;38626:14;38643:13;:11;:13::i;:::-;38626:30;;38671:9;38667:87;38686:7;38682:1;:11;38667:87;;;38714:28;38725:3;38739:1;38730:6;:10;;;;:::i;:::-;38714:9;:28::i;:::-;38695:3;;;;;:::i;:::-;;;;38667:87;;;;38777:7;38764:9;;:20;;;;;;;:::i;:::-;;;;;;;;2411:1;38410:382:::0;;:::o;36620:215::-;36681:7;36730:1;36709:23;;:9;:23;;;;36701:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;36793:13;;;;;;;;;;;:23;;;36817:9;36793:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36786:41;;36620:215;;;:::o;35725:28::-;;;;:::o;35837:36::-;;;;:::o;19580:164::-;19677:4;19701:18;:25;19720:5;19701:25;;;;;;;;;;;;;;;:35;19727:8;19701:35;;;;;;;;;;;;;;;;;;;;;;;;;19694:42;;19580:164;;;;:::o;2530:192::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2639:1:::1;2619:22;;:8;:22;;;;2611:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2695:19;2705:8;2695:9;:19::i;:::-;2530:192:::0;:::o;36847:234::-;36912:7;36961:1;36940:23;;:9;:23;;;;36932:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;37024:13;;;;;;;;;;;:23;;;37048:9;37067:4;37024:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37017:56;;36847:234;;;:::o;16409:305::-;16511:4;16563:25;16548:40;;;:11;:40;;;;:105;;;;16620:33;16605:48;;;:11;:48;;;;16548:105;:158;;;;16670:36;16694:11;16670:23;:36::i;:::-;16548:158;16528:178;;16409:305;;;:::o;22315:127::-;22380:4;22432:1;22404:30;;:7;:16;22412:7;22404:16;;;;;;;;;;;;;;;;;;;;;:30;;;;22397:37;;22315:127;;;:::o;1756:98::-;1809:7;1836:10;1829:17;;1756:98;:::o;26366:174::-;26468:2;26441:15;:24;26457:7;26441:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26524:7;26520:2;26486:46;;26495:23;26510:7;26495:14;:23::i;:::-;26486:46;;;;;;;;;;;;26366:174;;:::o;22609:348::-;22702:4;22727:16;22735:7;22727;:16::i;:::-;22719:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22803:13;22819:23;22834:7;22819:14;:23::i;:::-;22803:39;;22872:5;22861:16;;:7;:16;;;:51;;;;22905:7;22881:31;;:20;22893:7;22881:11;:20::i;:::-;:31;;;22861:51;:87;;;;22916:32;22933:5;22940:7;22916:16;:32::i;:::-;22861:87;22853:96;;;22609:348;;;;:::o;25670:578::-;25829:4;25802:31;;:23;25817:7;25802:14;:23::i;:::-;:31;;;25794:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;25912:1;25898:16;;:2;:16;;;;25890:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;25968:39;25989:4;25995:2;25999:7;25968:20;:39::i;:::-;26072:29;26089:1;26093:7;26072:8;:29::i;:::-;26133:1;26114:9;:15;26124:4;26114:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;26162:1;26145:9;:13;26155:2;26145:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;26193:2;26174:7;:16;26182:7;26174:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26232:7;26228:2;26213:27;;26222:4;26213:27;;;;;;;;;;;;25670:578;;;:::o;23299:110::-;23375:26;23385:2;23389:7;23375:26;;;;;;;;;;;;:9;:26::i;:::-;23299:110;;:::o;2730:173::-;2786:16;2805:6;;;;;;;;;;;2786:25;;2831:8;2822:6;;:17;;;;;;;;;;;;;;;;;;2886:8;2855:40;;2876:8;2855:40;;;;;;;;;;;;2730:173;;:::o;21687:315::-;21844:28;21854:4;21860:2;21864:7;21844:9;:28::i;:::-;21891:48;21914:4;21920:2;21924:7;21933:5;21891:22;:48::i;:::-;21883:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;21687:315;;;;:::o;41058:114::-;41118:13;41151;41144:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41058:114;:::o;371:534::-;427:13;468:1;459:5;:10;455:53;;;486:10;;;;;;;;;;;;;;;;;;;;;455:53;518:12;533:5;518:20;;549:14;574:78;589:1;581:4;:9;574:78;;607:8;;;;;:::i;:::-;;;;638:2;630:10;;;;;:::i;:::-;;;574:78;;;662:19;694:6;684:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;662:39;;712:154;728:1;719:5;:10;712:154;;756:1;746:11;;;;;:::i;:::-;;;823:2;815:5;:10;;;;:::i;:::-;802:2;:24;;;;:::i;:::-;789:39;;772:6;779;772:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;852:2;843:11;;;;;:::i;:::-;;;712:154;;;890:6;876:21;;;;;371:534;;;;:::o;9497:157::-;9582:4;9621:25;9606:40;;;:11;:40;;;;9599:47;;9497:157;;;:::o;30898:589::-;31042:45;31069:4;31075:2;31079:7;31042:26;:45::i;:::-;31120:1;31104:18;;:4;:18;;;31100:187;;;31139:40;31171:7;31139:31;:40::i;:::-;31100:187;;;31209:2;31201:10;;:4;:10;;;31197:90;;31228:47;31261:4;31267:7;31228:32;:47::i;:::-;31197:90;31100:187;31315:1;31301:16;;:2;:16;;;31297:183;;;31334:45;31371:7;31334:36;:45::i;:::-;31297:183;;;31407:4;31401:10;;:2;:10;;;31397:83;;31428:40;31456:2;31460:7;31428:27;:40::i;:::-;31397:83;31297:183;30898:589;;;:::o;23636:390::-;23766:18;23772:2;23776:7;23766:5;:18::i;:::-;23817:54;23848:1;23852:2;23856:7;23865:5;23817:22;:54::i;:::-;23795:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;24000:7;23996:2;23975:33;;23992:1;23975:33;;;;;;;;;;;;23636:390;;;:::o;27105:799::-;27260:4;27281:15;:2;:13;;;:15::i;:::-;27277:620;;;27333:2;27317:36;;;27354:12;:10;:12::i;:::-;27368:4;27374:7;27383:5;27317:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27313:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27576:1;27559:6;:13;:18;27555:272;;;27602:60;;;;;;;;;;:::i;:::-;;;;;;;;27555:272;27777:6;27771:13;27762:6;27758:2;27754:15;27747:38;27313:529;27450:41;;;27440:51;;;:6;:51;;;;27433:58;;;;;27277:620;27881:4;27874:11;;27105:799;;;;;;;:::o;28476:126::-;;;;:::o;32210:164::-;32314:10;:17;;;;32287:15;:24;32303:7;32287:24;;;;;;;;;;;:44;;;;32342:10;32358:7;32342:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32210:164;:::o;33001:988::-;33267:22;33317:1;33292:22;33309:4;33292:16;:22::i;:::-;:26;;;;:::i;:::-;33267:51;;33329:18;33350:17;:26;33368:7;33350:26;;;;;;;;;;;;33329:47;;33497:14;33483:10;:28;33479:328;;33528:19;33550:12;:18;33563:4;33550:18;;;;;;;;;;;;;;;:34;33569:14;33550:34;;;;;;;;;;;;33528:56;;33634:11;33601:12;:18;33614:4;33601:18;;;;;;;;;;;;;;;:30;33620:10;33601:30;;;;;;;;;;;:44;;;;33751:10;33718:17;:30;33736:11;33718:30;;;;;;;;;;;:43;;;;33479:328;;33903:17;:26;33921:7;33903:26;;;;;;;;;;;33896:33;;;33947:12;:18;33960:4;33947:18;;;;;;;;;;;;;;;:34;33966:14;33947:34;;;;;;;;;;;33940:41;;;33001:988;;;;:::o;34284:1079::-;34537:22;34582:1;34562:10;:17;;;;:21;;;;:::i;:::-;34537:46;;34594:18;34615:15;:24;34631:7;34615:24;;;;;;;;;;;;34594:45;;34966:19;34988:10;34999:14;34988:26;;;;;;;;;;;;;;;;;;;;;;;;34966:48;;35052:11;35027:10;35038;35027:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;35163:10;35132:15;:28;35148:11;35132:28;;;;;;;;;;;:41;;;;35304:15;:24;35320:7;35304:24;;;;;;;;;;;35297:31;;;35339:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34284:1079;;;;:::o;31788:221::-;31873:14;31890:20;31907:2;31890:16;:20::i;:::-;31873:37;;31948:7;31921:12;:16;31934:2;31921:16;;;;;;;;;;;;;;;:24;31938:6;31921:24;;;;;;;;;;;:34;;;;31995:6;31966:17;:26;31984:7;31966:26;;;;;;;;;;;:35;;;;31788:221;;;:::o;24362:382::-;24456:1;24442:16;;:2;:16;;;;24434:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24515:16;24523:7;24515;:16::i;:::-;24514:17;24506:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24577:45;24606:1;24610:2;24614:7;24577:20;:45::i;:::-;24652:1;24635:9;:13;24645:2;24635:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;24683:2;24664:7;:16;24672:7;24664:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;24728:7;24724:2;24703:33;;24720:1;24703:33;;;;;;;;;;;;24362:382;;:::o;3253:196::-;3313:4;3330:12;3397:7;3385:20;3377:28;;3440:1;3433:4;:8;3426:15;;;3253:196;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:342::-;;754:64;769:48;810:6;769:48;:::i;:::-;754:64;:::i;:::-;745:73;;841:6;834:5;827:21;879:4;872:5;868:16;917:3;908:6;903:3;899:16;896:25;893:2;;;934:1;931;924:12;893:2;947:41;981:6;976:3;971;947:41;:::i;:::-;735:259;;;;;;:::o;1000:344::-;;1103:65;1118:49;1160:6;1118:49;:::i;:::-;1103:65;:::i;:::-;1094:74;;1191:6;1184:5;1177:21;1229:4;1222:5;1218:16;1267:3;1258:6;1253:3;1249:16;1246:25;1243:2;;;1284:1;1281;1274:12;1243:2;1297:41;1331:6;1326:3;1321;1297:41;:::i;:::-;1084:260;;;;;;:::o;1350:139::-;;1434:6;1421:20;1412:29;;1450:33;1477:5;1450:33;:::i;:::-;1402:87;;;;:::o;1512:303::-;;1632:3;1625:4;1617:6;1613:17;1609:27;1599:2;;1650:1;1647;1640:12;1599:2;1690:6;1677:20;1715:94;1805:3;1797:6;1790:4;1782:6;1778:17;1715:94;:::i;:::-;1706:103;;1589:226;;;;;:::o;1821:133::-;;1902:6;1889:20;1880:29;;1918:30;1942:5;1918:30;:::i;:::-;1870:84;;;;:::o;1960:137::-;;2045:6;2039:13;2030:22;;2061:30;2085:5;2061:30;:::i;:::-;2020:77;;;;:::o;2103:137::-;;2186:6;2173:20;2164:29;;2202:32;2228:5;2202:32;:::i;:::-;2154:86;;;;:::o;2246:141::-;;2333:6;2327:13;2318:22;;2349:32;2375:5;2349:32;:::i;:::-;2308:79;;;;:::o;2406:271::-;;2510:3;2503:4;2495:6;2491:17;2487:27;2477:2;;2528:1;2525;2518:12;2477:2;2568:6;2555:20;2593:78;2667:3;2659:6;2652:4;2644:6;2640:17;2593:78;:::i;:::-;2584:87;;2467:210;;;;;:::o;2683:173::-;;2784:6;2771:20;2762:29;;2800:50;2844:5;2800:50;:::i;:::-;2752:104;;;;:::o;2876:273::-;;2981:3;2974:4;2966:6;2962:17;2958:27;2948:2;;2999:1;2996;2989:12;2948:2;3039:6;3026:20;3064:79;3139:3;3131:6;3124:4;3116:6;3112:17;3064:79;:::i;:::-;3055:88;;2938:211;;;;;:::o;3155:139::-;;3239:6;3226:20;3217:29;;3255:33;3282:5;3255:33;:::i;:::-;3207:87;;;;:::o;3300:143::-;;3388:6;3382:13;3373:22;;3404:33;3431:5;3404:33;:::i;:::-;3363:80;;;;:::o;3449:262::-;;3557:2;3545:9;3536:7;3532:23;3528:32;3525:2;;;3573:1;3570;3563:12;3525:2;3616:1;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3587:117;3515:196;;;;:::o;3717:407::-;;;3842:2;3830:9;3821:7;3817:23;3813:32;3810:2;;;3858:1;3855;3848:12;3810:2;3901:1;3926:53;3971:7;3962:6;3951:9;3947:22;3926:53;:::i;:::-;3916:63;;3872:117;4028:2;4054:53;4099:7;4090:6;4079:9;4075:22;4054:53;:::i;:::-;4044:63;;3999:118;3800:324;;;;;:::o;4130:552::-;;;;4272:2;4260:9;4251:7;4247:23;4243:32;4240:2;;;4288:1;4285;4278:12;4240:2;4331:1;4356:53;4401:7;4392:6;4381:9;4377:22;4356:53;:::i;:::-;4346:63;;4302:117;4458:2;4484:53;4529:7;4520:6;4509:9;4505:22;4484:53;:::i;:::-;4474:63;;4429:118;4586:2;4612:53;4657:7;4648:6;4637:9;4633:22;4612:53;:::i;:::-;4602:63;;4557:118;4230:452;;;;;:::o;4688:809::-;;;;;4856:3;4844:9;4835:7;4831:23;4827:33;4824:2;;;4873:1;4870;4863:12;4824:2;4916:1;4941:53;4986:7;4977:6;4966:9;4962:22;4941:53;:::i;:::-;4931:63;;4887:117;5043:2;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5014:118;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5327:2;5316:9;5312:18;5299:32;5358:18;5350:6;5347:30;5344:2;;;5390:1;5387;5380:12;5344:2;5418:62;5472:7;5463:6;5452:9;5448:22;5418:62;:::i;:::-;5408:72;;5270:220;4814:683;;;;;;;:::o;5503:401::-;;;5625:2;5613:9;5604:7;5600:23;5596:32;5593:2;;;5641:1;5638;5631:12;5593:2;5684:1;5709:53;5754:7;5745:6;5734:9;5730:22;5709:53;:::i;:::-;5699:63;;5655:117;5811:2;5837:50;5879:7;5870:6;5859:9;5855:22;5837:50;:::i;:::-;5827:60;;5782:115;5583:321;;;;;:::o;5910:407::-;;;6035:2;6023:9;6014:7;6010:23;6006:32;6003:2;;;6051:1;6048;6041:12;6003:2;6094:1;6119:53;6164:7;6155:6;6144:9;6140:22;6119:53;:::i;:::-;6109:63;;6065:117;6221:2;6247:53;6292:7;6283:6;6272:9;6268:22;6247:53;:::i;:::-;6237:63;;6192:118;5993:324;;;;;:::o;6323:405::-;;6456:2;6444:9;6435:7;6431:23;6427:32;6424:2;;;6472:1;6469;6462:12;6424:2;6543:1;6532:9;6528:17;6515:31;6573:18;6565:6;6562:30;6559:2;;;6605:1;6602;6595:12;6559:2;6633:78;6703:7;6694:6;6683:9;6679:22;6633:78;:::i;:::-;6623:88;;6486:235;6414:314;;;;:::o;6734:278::-;;6850:2;6838:9;6829:7;6825:23;6821:32;6818:2;;;6866:1;6863;6856:12;6818:2;6909:1;6934:61;6987:7;6978:6;6967:9;6963:22;6934:61;:::i;:::-;6924:71;;6880:125;6808:204;;;;:::o;7018:260::-;;7125:2;7113:9;7104:7;7100:23;7096:32;7093:2;;;7141:1;7138;7131:12;7093:2;7184:1;7209:52;7253:7;7244:6;7233:9;7229:22;7209:52;:::i;:::-;7199:62;;7155:116;7083:195;;;;:::o;7284:282::-;;7402:2;7390:9;7381:7;7377:23;7373:32;7370:2;;;7418:1;7415;7408:12;7370:2;7461:1;7486:63;7541:7;7532:6;7521:9;7517:22;7486:63;:::i;:::-;7476:73;;7432:127;7360:206;;;;:::o;7572:296::-;;7697:2;7685:9;7676:7;7672:23;7668:32;7665:2;;;7713:1;7710;7703:12;7665:2;7756:1;7781:70;7843:7;7834:6;7823:9;7819:22;7781:70;:::i;:::-;7771:80;;7727:134;7655:213;;;;:::o;7874:375::-;;7992:2;7980:9;7971:7;7967:23;7963:32;7960:2;;;8008:1;8005;7998:12;7960:2;8079:1;8068:9;8064:17;8051:31;8109:18;8101:6;8098:30;8095:2;;;8141:1;8138;8131:12;8095:2;8169:63;8224:7;8215:6;8204:9;8200:22;8169:63;:::i;:::-;8159:73;;8022:220;7950:299;;;;:::o;8255:262::-;;8363:2;8351:9;8342:7;8338:23;8334:32;8331:2;;;8379:1;8376;8369:12;8331:2;8422:1;8447:53;8492:7;8483:6;8472:9;8468:22;8447:53;:::i;:::-;8437:63;;8393:117;8321:196;;;;:::o;8523:284::-;;8642:2;8630:9;8621:7;8617:23;8613:32;8610:2;;;8658:1;8655;8648:12;8610:2;8701:1;8726:64;8782:7;8773:6;8762:9;8758:22;8726:64;:::i;:::-;8716:74;;8672:128;8600:207;;;;:::o;8813:407::-;;;8938:2;8926:9;8917:7;8913:23;8909:32;8906:2;;;8954:1;8951;8944:12;8906:2;8997:1;9022:53;9067:7;9058:6;9047:9;9043:22;9022:53;:::i;:::-;9012:63;;8968:117;9124:2;9150:53;9195:7;9186:6;9175:9;9171:22;9150:53;:::i;:::-;9140:63;;9095:118;8896:324;;;;;:::o;9226:179::-;;9316:46;9358:3;9350:6;9316:46;:::i;:::-;9394:4;9389:3;9385:14;9371:28;;9306:99;;;;:::o;9411:118::-;9498:24;9516:5;9498:24;:::i;:::-;9493:3;9486:37;9476:53;;:::o;9565:732::-;;9713:54;9761:5;9713:54;:::i;:::-;9783:86;9862:6;9857:3;9783:86;:::i;:::-;9776:93;;9893:56;9943:5;9893:56;:::i;:::-;9972:7;10003:1;9988:284;10013:6;10010:1;10007:13;9988:284;;;10089:6;10083:13;10116:63;10175:3;10160:13;10116:63;:::i;:::-;10109:70;;10202:60;10255:6;10202:60;:::i;:::-;10192:70;;10048:224;10035:1;10032;10028:9;10023:14;;9988:284;;;9992:14;10288:3;10281:10;;9689:608;;;;;;;:::o;10303:109::-;10384:21;10399:5;10384:21;:::i;:::-;10379:3;10372:34;10362:50;;:::o;10418:360::-;;10532:38;10564:5;10532:38;:::i;:::-;10586:70;10649:6;10644:3;10586:70;:::i;:::-;10579:77;;10665:52;10710:6;10705:3;10698:4;10691:5;10687:16;10665:52;:::i;:::-;10742:29;10764:6;10742:29;:::i;:::-;10737:3;10733:39;10726:46;;10508:270;;;;;:::o;10784:165::-;10888:54;10936:5;10888:54;:::i;:::-;10883:3;10876:67;10866:83;;:::o;10955:364::-;;11071:39;11104:5;11071:39;:::i;:::-;11126:71;11190:6;11185:3;11126:71;:::i;:::-;11119:78;;11206:52;11251:6;11246:3;11239:4;11232:5;11228:16;11206:52;:::i;:::-;11283:29;11305:6;11283:29;:::i;:::-;11278:3;11274:39;11267:46;;11047:272;;;;;:::o;11325:377::-;;11459:39;11492:5;11459:39;:::i;:::-;11514:89;11596:6;11591:3;11514:89;:::i;:::-;11507:96;;11612:52;11657:6;11652:3;11645:4;11638:5;11634:16;11612:52;:::i;:::-;11689:6;11684:3;11680:16;11673:23;;11435:267;;;;;:::o;11708:321::-;;11871:67;11935:2;11930:3;11871:67;:::i;:::-;11864:74;;11968:25;11964:1;11959:3;11955:11;11948:46;12020:2;12015:3;12011:12;12004:19;;11854:175;;;:::o;12035:309::-;;12198:67;12262:2;12257:3;12198:67;:::i;:::-;12191:74;;12295:13;12291:1;12286:3;12282:11;12275:34;12335:2;12330:3;12326:12;12319:19;;12181:163;;;:::o;12350:375::-;;12513:67;12577:2;12572:3;12513:67;:::i;:::-;12506:74;;12610:34;12606:1;12601:3;12597:11;12590:55;12676:13;12671:2;12666:3;12662:12;12655:35;12716:2;12711:3;12707:12;12700:19;;12496:229;;;:::o;12731:382::-;;12894:67;12958:2;12953:3;12894:67;:::i;:::-;12887:74;;12991:34;12987:1;12982:3;12978:11;12971:55;13057:20;13052:2;13047:3;13043:12;13036:42;13104:2;13099:3;13095:12;13088:19;;12877:236;;;:::o;13119:375::-;;13282:67;13346:2;13341:3;13282:67;:::i;:::-;13275:74;;13379:34;13375:1;13370:3;13366:11;13359:55;13445:13;13440:2;13435:3;13431:12;13424:35;13485:2;13480:3;13476:12;13469:19;;13265:229;;;:::o;13500:370::-;;13663:67;13727:2;13722:3;13663:67;:::i;:::-;13656:74;;13760:34;13756:1;13751:3;13747:11;13740:55;13826:8;13821:2;13816:3;13812:12;13805:30;13861:2;13856:3;13852:12;13845:19;;13646:224;;;:::o;13876:370::-;;14039:67;14103:2;14098:3;14039:67;:::i;:::-;14032:74;;14136:34;14132:1;14127:3;14123:11;14116:55;14202:8;14197:2;14192:3;14188:12;14181:30;14237:2;14232:3;14228:12;14221:19;;14022:224;;;:::o;14252:326::-;;14415:67;14479:2;14474:3;14415:67;:::i;:::-;14408:74;;14512:30;14508:1;14503:3;14499:11;14492:51;14569:2;14564:3;14560:12;14553:19;;14398:180;;;:::o;14584:336::-;;14765:84;14847:1;14842:3;14765:84;:::i;:::-;14758:91;;14879:6;14875:1;14870:3;14866:11;14859:27;14912:1;14907:3;14903:11;14896:18;;14748:172;;;:::o;14926:316::-;;15089:67;15153:2;15148:3;15089:67;:::i;:::-;15082:74;;15186:20;15182:1;15177:3;15173:11;15166:41;15233:2;15228:3;15224:12;15217:19;;15072:170;;;:::o;15248:368::-;;15411:67;15475:2;15470:3;15411:67;:::i;:::-;15404:74;;15508:34;15504:1;15499:3;15495:11;15488:55;15574:6;15569:2;15564:3;15560:12;15553:28;15607:2;15602:3;15598:12;15591:19;;15394:222;;;:::o;15622:323::-;;15785:67;15849:2;15844:3;15785:67;:::i;:::-;15778:74;;15882:27;15878:1;15873:3;15869:11;15862:48;15936:2;15931:3;15927:12;15920:19;;15768:177;;;:::o;15951:310::-;;16114:67;16178:2;16173:3;16114:67;:::i;:::-;16107:74;;16211:14;16207:1;16202:3;16198:11;16191:35;16252:2;16247:3;16243:12;16236:19;;16097:164;;;:::o;16267:376::-;;16430:67;16494:2;16489:3;16430:67;:::i;:::-;16423:74;;16527:34;16523:1;16518:3;16514:11;16507:55;16593:14;16588:2;16583:3;16579:12;16572:36;16634:2;16629:3;16625:12;16618:19;;16413:230;;;:::o;16649:326::-;;16812:67;16876:2;16871:3;16812:67;:::i;:::-;16805:74;;16909:30;16905:1;16900:3;16896:11;16889:51;16966:2;16961:3;16957:12;16950:19;;16795:180;;;:::o;16981:330::-;;17144:67;17208:2;17203:3;17144:67;:::i;:::-;17137:74;;17241:34;17237:1;17232:3;17228:11;17221:55;17302:2;17297:3;17293:12;17286:19;;17127:184;;;:::o;17317:380::-;;17480:67;17544:2;17539:3;17480:67;:::i;:::-;17473:74;;17577:34;17573:1;17568:3;17564:11;17557:55;17643:18;17638:2;17633:3;17629:12;17622:40;17688:2;17683:3;17679:12;17672:19;;17463:234;;;:::o;17703:388::-;;17866:67;17930:2;17925:3;17866:67;:::i;:::-;17859:74;;17963:34;17959:1;17954:3;17950:11;17943:55;18029:26;18024:2;18019:3;18015:12;18008:48;18082:2;18077:3;18073:12;18066:19;;17849:242;;;:::o;18097:374::-;;18260:67;18324:2;18319:3;18260:67;:::i;:::-;18253:74;;18357:34;18353:1;18348:3;18344:11;18337:55;18423:12;18418:2;18413:3;18409:12;18402:34;18462:2;18457:3;18453:12;18446:19;;18243:228;;;:::o;18477:373::-;;18640:67;18704:2;18699:3;18640:67;:::i;:::-;18633:74;;18737:34;18733:1;18728:3;18724:11;18717:55;18803:11;18798:2;18793:3;18789:12;18782:33;18841:2;18836:3;18832:12;18825:19;;18623:227;;;:::o;18856:326::-;;19019:67;19083:2;19078:3;19019:67;:::i;:::-;19012:74;;19116:30;19112:1;19107:3;19103:11;19096:51;19173:2;19168:3;19164:12;19157:19;;19002:180;;;:::o;19188:330::-;;19351:67;19415:2;19410:3;19351:67;:::i;:::-;19344:74;;19448:34;19444:1;19439:3;19435:11;19428:55;19509:2;19504:3;19500:12;19493:19;;19334:184;;;:::o;19524:376::-;;19687:67;19751:2;19746:3;19687:67;:::i;:::-;19680:74;;19784:34;19780:1;19775:3;19771:11;19764:55;19850:14;19845:2;19840:3;19836:12;19829:36;19891:2;19886:3;19882:12;19875:19;;19670:230;;;:::o;19906:330::-;;20069:67;20133:2;20128:3;20069:67;:::i;:::-;20062:74;;20166:34;20162:1;20157:3;20153:11;20146:55;20227:2;20222:3;20218:12;20211:19;;20052:184;;;:::o;20242:373::-;;20405:67;20469:2;20464:3;20405:67;:::i;:::-;20398:74;;20502:34;20498:1;20493:3;20489:11;20482:55;20568:11;20563:2;20558:3;20554:12;20547:33;20606:2;20601:3;20597:12;20590:19;;20388:227;;;:::o;20621:379::-;;20784:67;20848:2;20843:3;20784:67;:::i;:::-;20777:74;;20881:34;20877:1;20872:3;20868:11;20861:55;20947:17;20942:2;20937:3;20933:12;20926:39;20991:2;20986:3;20982:12;20975:19;;20767:233;;;:::o;21006:326::-;;21169:67;21233:2;21228:3;21169:67;:::i;:::-;21162:74;;21266:30;21262:1;21257:3;21253:11;21246:51;21323:2;21318:3;21314:12;21307:19;;21152:180;;;:::o;21338:365::-;;21501:67;21565:2;21560:3;21501:67;:::i;:::-;21494:74;;21598:34;21594:1;21589:3;21585:11;21578:55;21664:3;21659:2;21654:3;21650:12;21643:25;21694:2;21689:3;21685:12;21678:19;;21484:219;;;:::o;21709:316::-;;21872:67;21936:2;21931:3;21872:67;:::i;:::-;21865:74;;21969:20;21965:1;21960:3;21956:11;21949:41;22016:2;22011:3;22007:12;22000:19;;21855:170;;;:::o;22031:365::-;;22194:67;22258:2;22253:3;22194:67;:::i;:::-;22187:74;;22291:34;22287:1;22282:3;22278:11;22271:55;22357:3;22352:2;22347:3;22343:12;22336:25;22387:2;22382:3;22378:12;22371:19;;22177:219;;;:::o;22402:323::-;;22565:67;22629:2;22624:3;22565:67;:::i;:::-;22558:74;;22662:27;22658:1;22653:3;22649:11;22642:48;22716:2;22711:3;22707:12;22700:19;;22548:177;;;:::o;22731:381::-;;22894:67;22958:2;22953:3;22894:67;:::i;:::-;22887:74;;22991:34;22987:1;22982:3;22978:11;22971:55;23057:19;23052:2;23047:3;23043:12;23036:41;23103:2;23098:3;23094:12;23087:19;;22877:235;;;:::o;23118:376::-;;23281:67;23345:2;23340:3;23281:67;:::i;:::-;23274:74;;23378:34;23374:1;23369:3;23365:11;23358:55;23444:14;23439:2;23434:3;23430:12;23423:36;23485:2;23480:3;23476:12;23469:19;;23264:230;;;:::o;23500:365::-;;23663:67;23727:2;23722:3;23663:67;:::i;:::-;23656:74;;23760:34;23756:1;23751:3;23747:11;23740:55;23826:3;23821:2;23816:3;23812:12;23805:25;23856:2;23851:3;23847:12;23840:19;;23646:219;;;:::o;23871:108::-;23948:24;23966:5;23948:24;:::i;:::-;23943:3;23936:37;23926:53;;:::o;23985:118::-;24072:24;24090:5;24072:24;:::i;:::-;24067:3;24060:37;24050:53;;:::o;24109:701::-;;24412:95;24503:3;24494:6;24412:95;:::i;:::-;24405:102;;24524:95;24615:3;24606:6;24524:95;:::i;:::-;24517:102;;24636:148;24780:3;24636:148;:::i;:::-;24629:155;;24801:3;24794:10;;24394:416;;;;;:::o;24816:222::-;;24947:2;24936:9;24932:18;24924:26;;24960:71;25028:1;25017:9;25013:17;25004:6;24960:71;:::i;:::-;24914:124;;;;:::o;25044:332::-;;25203:2;25192:9;25188:18;25180:26;;25216:71;25284:1;25273:9;25269:17;25260:6;25216:71;:::i;:::-;25297:72;25365:2;25354:9;25350:18;25341:6;25297:72;:::i;:::-;25170:206;;;;;:::o;25382:442::-;;25569:2;25558:9;25554:18;25546:26;;25582:71;25650:1;25639:9;25635:17;25626:6;25582:71;:::i;:::-;25663:72;25731:2;25720:9;25716:18;25707:6;25663:72;:::i;:::-;25745;25813:2;25802:9;25798:18;25789:6;25745:72;:::i;:::-;25536:288;;;;;;:::o;25830:640::-;;26063:3;26052:9;26048:19;26040:27;;26077:71;26145:1;26134:9;26130:17;26121:6;26077:71;:::i;:::-;26158:72;26226:2;26215:9;26211:18;26202:6;26158:72;:::i;:::-;26240;26308:2;26297:9;26293:18;26284:6;26240:72;:::i;:::-;26359:9;26353:4;26349:20;26344:2;26333:9;26329:18;26322:48;26387:76;26458:4;26449:6;26387:76;:::i;:::-;26379:84;;26030:440;;;;;;;:::o;26476:373::-;;26657:2;26646:9;26642:18;26634:26;;26706:9;26700:4;26696:20;26692:1;26681:9;26677:17;26670:47;26734:108;26837:4;26828:6;26734:108;:::i;:::-;26726:116;;26624:225;;;;:::o;26855:210::-;;26980:2;26969:9;26965:18;26957:26;;26993:65;27055:1;27044:9;27040:17;27031:6;26993:65;:::i;:::-;26947:118;;;;:::o;27071:256::-;;27219:2;27208:9;27204:18;27196:26;;27232:88;27317:1;27306:9;27302:17;27293:6;27232:88;:::i;:::-;27186:141;;;;:::o;27333:313::-;;27484:2;27473:9;27469:18;27461:26;;27533:9;27527:4;27523:20;27519:1;27508:9;27504:17;27497:47;27561:78;27634:4;27625:6;27561:78;:::i;:::-;27553:86;;27451:195;;;;:::o;27652:419::-;;27856:2;27845:9;27841:18;27833:26;;27905:9;27899:4;27895:20;27891:1;27880:9;27876:17;27869:47;27933:131;28059:4;27933:131;:::i;:::-;27925:139;;27823:248;;;:::o;28077:419::-;;28281:2;28270:9;28266:18;28258:26;;28330:9;28324:4;28320:20;28316:1;28305:9;28301:17;28294:47;28358:131;28484:4;28358:131;:::i;:::-;28350:139;;28248:248;;;:::o;28502:419::-;;28706:2;28695:9;28691:18;28683:26;;28755:9;28749:4;28745:20;28741:1;28730:9;28726:17;28719:47;28783:131;28909:4;28783:131;:::i;:::-;28775:139;;28673:248;;;:::o;28927:419::-;;29131:2;29120:9;29116:18;29108:26;;29180:9;29174:4;29170:20;29166:1;29155:9;29151:17;29144:47;29208:131;29334:4;29208:131;:::i;:::-;29200:139;;29098:248;;;:::o;29352:419::-;;29556:2;29545:9;29541:18;29533:26;;29605:9;29599:4;29595:20;29591:1;29580:9;29576:17;29569:47;29633:131;29759:4;29633:131;:::i;:::-;29625:139;;29523:248;;;:::o;29777:419::-;;29981:2;29970:9;29966:18;29958:26;;30030:9;30024:4;30020:20;30016:1;30005:9;30001:17;29994:47;30058:131;30184:4;30058:131;:::i;:::-;30050:139;;29948:248;;;:::o;30202:419::-;;30406:2;30395:9;30391:18;30383:26;;30455:9;30449:4;30445:20;30441:1;30430:9;30426:17;30419:47;30483:131;30609:4;30483:131;:::i;:::-;30475:139;;30373:248;;;:::o;30627:419::-;;30831:2;30820:9;30816:18;30808:26;;30880:9;30874:4;30870:20;30866:1;30855:9;30851:17;30844:47;30908:131;31034:4;30908:131;:::i;:::-;30900:139;;30798:248;;;:::o;31052:419::-;;31256:2;31245:9;31241:18;31233:26;;31305:9;31299:4;31295:20;31291:1;31280:9;31276:17;31269:47;31333:131;31459:4;31333:131;:::i;:::-;31325:139;;31223:248;;;:::o;31477:419::-;;31681:2;31670:9;31666:18;31658:26;;31730:9;31724:4;31720:20;31716:1;31705:9;31701:17;31694:47;31758:131;31884:4;31758:131;:::i;:::-;31750:139;;31648:248;;;:::o;31902:419::-;;32106:2;32095:9;32091:18;32083:26;;32155:9;32149:4;32145:20;32141:1;32130:9;32126:17;32119:47;32183:131;32309:4;32183:131;:::i;:::-;32175:139;;32073:248;;;:::o;32327:419::-;;32531:2;32520:9;32516:18;32508:26;;32580:9;32574:4;32570:20;32566:1;32555:9;32551:17;32544:47;32608:131;32734:4;32608:131;:::i;:::-;32600:139;;32498:248;;;:::o;32752:419::-;;32956:2;32945:9;32941:18;32933:26;;33005:9;32999:4;32995:20;32991:1;32980:9;32976:17;32969:47;33033:131;33159:4;33033:131;:::i;:::-;33025:139;;32923:248;;;:::o;33177:419::-;;33381:2;33370:9;33366:18;33358:26;;33430:9;33424:4;33420:20;33416:1;33405:9;33401:17;33394:47;33458:131;33584:4;33458:131;:::i;:::-;33450:139;;33348:248;;;:::o;33602:419::-;;33806:2;33795:9;33791:18;33783:26;;33855:9;33849:4;33845:20;33841:1;33830:9;33826:17;33819:47;33883:131;34009:4;33883:131;:::i;:::-;33875:139;;33773:248;;;:::o;34027:419::-;;34231:2;34220:9;34216:18;34208:26;;34280:9;34274:4;34270:20;34266:1;34255:9;34251:17;34244:47;34308:131;34434:4;34308:131;:::i;:::-;34300:139;;34198:248;;;:::o;34452:419::-;;34656:2;34645:9;34641:18;34633:26;;34705:9;34699:4;34695:20;34691:1;34680:9;34676:17;34669:47;34733:131;34859:4;34733:131;:::i;:::-;34725:139;;34623:248;;;:::o;34877:419::-;;35081:2;35070:9;35066:18;35058:26;;35130:9;35124:4;35120:20;35116:1;35105:9;35101:17;35094:47;35158:131;35284:4;35158:131;:::i;:::-;35150:139;;35048:248;;;:::o;35302:419::-;;35506:2;35495:9;35491:18;35483:26;;35555:9;35549:4;35545:20;35541:1;35530:9;35526:17;35519:47;35583:131;35709:4;35583:131;:::i;:::-;35575:139;;35473:248;;;:::o;35727:419::-;;35931:2;35920:9;35916:18;35908:26;;35980:9;35974:4;35970:20;35966:1;35955:9;35951:17;35944:47;36008:131;36134:4;36008:131;:::i;:::-;36000:139;;35898:248;;;:::o;36152:419::-;;36356:2;36345:9;36341:18;36333:26;;36405:9;36399:4;36395:20;36391:1;36380:9;36376:17;36369:47;36433:131;36559:4;36433:131;:::i;:::-;36425:139;;36323:248;;;:::o;36577:419::-;;36781:2;36770:9;36766:18;36758:26;;36830:9;36824:4;36820:20;36816:1;36805:9;36801:17;36794:47;36858:131;36984:4;36858:131;:::i;:::-;36850:139;;36748:248;;;:::o;37002:419::-;;37206:2;37195:9;37191:18;37183:26;;37255:9;37249:4;37245:20;37241:1;37230:9;37226:17;37219:47;37283:131;37409:4;37283:131;:::i;:::-;37275:139;;37173:248;;;:::o;37427:419::-;;37631:2;37620:9;37616:18;37608:26;;37680:9;37674:4;37670:20;37666:1;37655:9;37651:17;37644:47;37708:131;37834:4;37708:131;:::i;:::-;37700:139;;37598:248;;;:::o;37852:419::-;;38056:2;38045:9;38041:18;38033:26;;38105:9;38099:4;38095:20;38091:1;38080:9;38076:17;38069:47;38133:131;38259:4;38133:131;:::i;:::-;38125:139;;38023:248;;;:::o;38277:419::-;;38481:2;38470:9;38466:18;38458:26;;38530:9;38524:4;38520:20;38516:1;38505:9;38501:17;38494:47;38558:131;38684:4;38558:131;:::i;:::-;38550:139;;38448:248;;;:::o;38702:419::-;;38906:2;38895:9;38891:18;38883:26;;38955:9;38949:4;38945:20;38941:1;38930:9;38926:17;38919:47;38983:131;39109:4;38983:131;:::i;:::-;38975:139;;38873:248;;;:::o;39127:419::-;;39331:2;39320:9;39316:18;39308:26;;39380:9;39374:4;39370:20;39366:1;39355:9;39351:17;39344:47;39408:131;39534:4;39408:131;:::i;:::-;39400:139;;39298:248;;;:::o;39552:419::-;;39756:2;39745:9;39741:18;39733:26;;39805:9;39799:4;39795:20;39791:1;39780:9;39776:17;39769:47;39833:131;39959:4;39833:131;:::i;:::-;39825:139;;39723:248;;;:::o;39977:419::-;;40181:2;40170:9;40166:18;40158:26;;40230:9;40224:4;40220:20;40216:1;40205:9;40201:17;40194:47;40258:131;40384:4;40258:131;:::i;:::-;40250:139;;40148:248;;;:::o;40402:419::-;;40606:2;40595:9;40591:18;40583:26;;40655:9;40649:4;40645:20;40641:1;40630:9;40626:17;40619:47;40683:131;40809:4;40683:131;:::i;:::-;40675:139;;40573:248;;;:::o;40827:419::-;;41031:2;41020:9;41016:18;41008:26;;41080:9;41074:4;41070:20;41066:1;41055:9;41051:17;41044:47;41108:131;41234:4;41108:131;:::i;:::-;41100:139;;40998:248;;;:::o;41252:419::-;;41456:2;41445:9;41441:18;41433:26;;41505:9;41499:4;41495:20;41491:1;41480:9;41476:17;41469:47;41533:131;41659:4;41533:131;:::i;:::-;41525:139;;41423:248;;;:::o;41677:222::-;;41808:2;41797:9;41793:18;41785:26;;41821:71;41889:1;41878:9;41874:17;41865:6;41821:71;:::i;:::-;41775:124;;;;:::o;41905:283::-;;41971:2;41965:9;41955:19;;42013:4;42005:6;42001:17;42120:6;42108:10;42105:22;42084:18;42072:10;42069:34;42066:62;42063:2;;;42131:18;;:::i;:::-;42063:2;42171:10;42167:2;42160:22;41945:243;;;;:::o;42194:311::-;;42361:18;42353:6;42350:30;42347:2;;;42383:18;;:::i;:::-;42347:2;42433:4;42425:6;42421:17;42413:25;;42493:4;42487;42483:15;42475:23;;42276:229;;;:::o;42511:331::-;;42662:18;42654:6;42651:30;42648:2;;;42684:18;;:::i;:::-;42648:2;42769:4;42765:9;42758:4;42750:6;42746:17;42742:33;42734:41;;42830:4;42824;42820:15;42812:23;;42577:265;;;:::o;42848:332::-;;43000:18;42992:6;42989:30;42986:2;;;43022:18;;:::i;:::-;42986:2;43107:4;43103:9;43096:4;43088:6;43084:17;43080:33;43072:41;;43168:4;43162;43158:15;43150:23;;42915:265;;;:::o;43186:132::-;;43276:3;43268:11;;43306:4;43301:3;43297:14;43289:22;;43258:60;;;:::o;43324:114::-;;43425:5;43419:12;43409:22;;43398:40;;;:::o;43444:98::-;;43529:5;43523:12;43513:22;;43502:40;;;:::o;43548:99::-;;43634:5;43628:12;43618:22;;43607:40;;;:::o;43653:113::-;;43755:4;43750:3;43746:14;43738:22;;43728:38;;;:::o;43772:184::-;;43905:6;43900:3;43893:19;43945:4;43940:3;43936:14;43921:29;;43883:73;;;;:::o;43962:168::-;;44079:6;44074:3;44067:19;44119:4;44114:3;44110:14;44095:29;;44057:73;;;;:::o;44136:169::-;;44254:6;44249:3;44242:19;44294:4;44289:3;44285:14;44270:29;;44232:73;;;;:::o;44311:148::-;;44450:3;44435:18;;44425:34;;;;:::o;44465:305::-;;44524:20;44542:1;44524:20;:::i;:::-;44519:25;;44558:20;44576:1;44558:20;:::i;:::-;44553:25;;44712:1;44644:66;44640:74;44637:1;44634:81;44631:2;;;44718:18;;:::i;:::-;44631:2;44762:1;44759;44755:9;44748:16;;44509:261;;;;:::o;44776:185::-;;44833:20;44851:1;44833:20;:::i;:::-;44828:25;;44867:20;44885:1;44867:20;:::i;:::-;44862:25;;44906:1;44896:2;;44911:18;;:::i;:::-;44896:2;44953:1;44950;44946:9;44941:14;;44818:143;;;;:::o;44967:348::-;;45030:20;45048:1;45030:20;:::i;:::-;45025:25;;45064:20;45082:1;45064:20;:::i;:::-;45059:25;;45252:1;45184:66;45180:74;45177:1;45174:81;45169:1;45162:9;45155:17;45151:105;45148:2;;;45259:18;;:::i;:::-;45148:2;45307:1;45304;45300:9;45289:20;;45015:300;;;;:::o;45321:191::-;;45381:20;45399:1;45381:20;:::i;:::-;45376:25;;45415:20;45433:1;45415:20;:::i;:::-;45410:25;;45454:1;45451;45448:8;45445:2;;;45459:18;;:::i;:::-;45445:2;45504:1;45501;45497:9;45489:17;;45366:146;;;;:::o;45518:96::-;;45584:24;45602:5;45584:24;:::i;:::-;45573:35;;45563:51;;;:::o;45620:90::-;;45697:5;45690:13;45683:21;45672:32;;45662:48;;;:::o;45716:149::-;;45792:66;45785:5;45781:78;45770:89;;45760:105;;;:::o;45871:113::-;;45954:24;45972:5;45954:24;:::i;:::-;45943:35;;45933:51;;;:::o;45990:126::-;;46067:42;46060:5;46056:54;46045:65;;46035:81;;;:::o;46122:77::-;;46188:5;46177:16;;46167:32;;;:::o;46205:160::-;;46305:54;46353:5;46305:54;:::i;:::-;46292:67;;46282:83;;;:::o;46371:130::-;;46471:24;46489:5;46471:24;:::i;:::-;46458:37;;46448:53;;;:::o;46507:154::-;46591:6;46586:3;46581;46568:30;46653:1;46644:6;46639:3;46635:16;46628:27;46558:103;;;:::o;46667:307::-;46735:1;46745:113;46759:6;46756:1;46753:13;46745:113;;;46844:1;46839:3;46835:11;46829:18;46825:1;46820:3;46816:11;46809:39;46781:2;46778:1;46774:10;46769:15;;46745:113;;;46876:6;46873:1;46870:13;46867:2;;;46956:1;46947:6;46942:3;46938:16;46931:27;46867:2;46716:258;;;;:::o;46980:171::-;;47042:24;47060:5;47042:24;:::i;:::-;47033:33;;47088:4;47081:5;47078:15;47075:2;;;47096:18;;:::i;:::-;47075:2;47143:1;47136:5;47132:13;47125:20;;47023:128;;;:::o;47157:320::-;;47238:1;47232:4;47228:12;47218:22;;47285:1;47279:4;47275:12;47306:18;47296:2;;47362:4;47354:6;47350:17;47340:27;;47296:2;47424;47416:6;47413:14;47393:18;47390:38;47387:2;;;47443:18;;:::i;:::-;47387:2;47208:269;;;;:::o;47483:233::-;;47545:24;47563:5;47545:24;:::i;:::-;47536:33;;47591:66;47584:5;47581:77;47578:2;;;47661:18;;:::i;:::-;47578:2;47708:1;47701:5;47697:13;47690:20;;47526:190;;;:::o;47722:176::-;;47771:20;47789:1;47771:20;:::i;:::-;47766:25;;47805:20;47823:1;47805:20;:::i;:::-;47800:25;;47844:1;47834:2;;47849:18;;:::i;:::-;47834:2;47890:1;47887;47883:9;47878:14;;47756:142;;;;:::o;47904:180::-;47952:77;47949:1;47942:88;48049:4;48046:1;48039:15;48073:4;48070:1;48063:15;48090:180;48138:77;48135:1;48128:88;48235:4;48232:1;48225:15;48259:4;48256:1;48249:15;48276:180;48324:77;48321:1;48314:88;48421:4;48418:1;48411:15;48445:4;48442:1;48435:15;48462:180;48510:77;48507:1;48500:88;48607:4;48604:1;48597:15;48631:4;48628:1;48621:15;48648:102;;48740:2;48736:7;48731:2;48724:5;48720:14;48716:28;48706:38;;48696:54;;;:::o;48756:122::-;48829:24;48847:5;48829:24;:::i;:::-;48822:5;48819:35;48809:2;;48868:1;48865;48858:12;48809:2;48799:79;:::o;48884:116::-;48954:21;48969:5;48954:21;:::i;:::-;48947:5;48944:32;48934:2;;48990:1;48987;48980:12;48934:2;48924:76;:::o;49006:120::-;49078:23;49095:5;49078:23;:::i;:::-;49071:5;49068:34;49058:2;;49116:1;49113;49106:12;49058:2;49048:78;:::o;49132:156::-;49222:41;49257:5;49222:41;:::i;:::-;49215:5;49212:52;49202:2;;49278:1;49275;49268:12;49202:2;49192:96;:::o;49294:122::-;49367:24;49385:5;49367:24;:::i;:::-;49360:5;49357:35;49347:2;;49406:1;49403;49396:12;49347:2;49337:79;:::o
Swarm Source
ipfs://c378b59f1d96b79cffb8a1b144a01e2e605f9398248a2bce3a6bf9166203b6da
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.