Token
Overview
Total Supply:
0 N/A
Holders:
0 addresses
Transfers:
-
Contract:
Decimals:
18
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
MamboScorer
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @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); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.11; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; contract MamboScorer is Ownable { mapping(address => bool) public grandfathered; bool public globalCanBot = true; uint256 public mambonautScore = 5; uint256 public vloaterScore = 3; uint256 public pairScore = 2; address public mambonauts = 0x2EE475A5CdC31c040ba1af3B0C4D66CA5C31c49a; address public vloaters = 0x365AF8B26A4b476D986B719d165710Fc2AC9f261; uint256 public whaleBreakpoint = 150; struct WalletScore { address wallet; uint256 score; } function setGlobalCanBot(bool status) public onlyOwner { globalCanBot = status; } function setWhaleBreakpoint(uint256 breakpoint_) public onlyOwner { whaleBreakpoint = breakpoint_; } function setMambonautScore(uint256 mambonautScore_) public onlyOwner { mambonautScore = mambonautScore_; } function setVloaterScore(uint256 vloaterScore_) public onlyOwner { vloaterScore = vloaterScore_; } function setPairScore(uint256 pairScore_) public onlyOwner { pairScore = pairScore_; } function setMambonauts(address mambonauts_) public onlyOwner { mambonauts = mambonauts_; } function setVloaters(address vloaters_) public onlyOwner { vloaters = vloaters_; } function setGrandfathered(address user) public onlyOwner { grandfathered[user] = true; } function removeGrandfathered(address user) public onlyOwner { grandfathered[user] = false; } function scoreWallet(address user) public view returns(uint256) { return _scoreWallet(user); } function scoreManyWallets(address[] memory users) public view returns(WalletScore[] memory) { uint256 len = users.length; WalletScore[] memory scores = new WalletScore[](len); for(uint256 i = 0; i < users.length; i++) { scores[i] = WalletScore(users[i], _scoreWallet(users[i])); } return scores; } function _scoreWallet(address user) private view returns(uint256) { IERC721 mambonautsContract = IERC721(mambonauts); IERC721 vloatersContract = IERC721(vloaters); uint256 mamboAmount = mambonautsContract.balanceOf(user); uint256 vloaterAmount = vloatersContract.balanceOf(user); uint256 pairAmount = mamboAmount > vloaterAmount ? vloaterAmount : mamboAmount; return (mamboAmount * mambonautScore) + (vloaterAmount * vloaterScore) + (pairAmount * pairScore); } function canUserBot(address user) public view returns(bool) { if( !globalCanBot ) { return false; } if( grandfathered[user] == true ) { return true; } return _scoreWallet(user) >= whaleBreakpoint; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"canUserBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalCanBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"grandfathered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mambonautScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mambonauts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"removeGrandfathered","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"scoreManyWallets","outputs":[{"components":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"score","type":"uint256"}],"internalType":"struct MamboScorer.WalletScore[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scoreWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setGlobalCanBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"setGrandfathered","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mambonautScore_","type":"uint256"}],"name":"setMambonautScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mambonauts_","type":"address"}],"name":"setMambonauts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pairScore_","type":"uint256"}],"name":"setPairScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vloaterScore_","type":"uint256"}],"name":"setVloaterScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vloaters_","type":"address"}],"name":"setVloaters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"breakpoint_","type":"uint256"}],"name":"setWhaleBreakpoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vloaterScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vloaters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whaleBreakpoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526001600260006101000a81548160ff021916908315150217905550600560035560036004556002600555732ee475a5cdc31c040ba1af3b0c4d66ca5c31c49a600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073365af8b26a4b476d986b719d165710fc2ac9f261600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060966008553480156100e957600080fd5b506101066100fb61010b60201b60201c565b61011360201b60201c565b6101d7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6117e4806101e66000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063b765ea6d1161007c578063b765ea6d14610378578063b7b039b114610394578063df43d274146103b2578063eed4df75146103ce578063f0ad12da146103ea578063f2fde38b146104085761014d565b8063715018a6146102dc578063746ec170146102e65780637cdeda95146103045780638c9708a6146103205780638da5cb5b1461033c578063a91e04101461035a5761014d565b8063332965eb11610115578063332965eb14610206578063389c42e6146102225780635319fb3e1461024057806362fd30181461025e57806369a43e201461027c57806370dab56f146102ac5761014d565b8063055d4cb8146101525780631759a3611461016e5780631fb356201461019e5780632815ddcb146101ce57806329d12b7b146101ea575b600080fd5b61016c600480360381019061016791906110e6565b610424565b005b61018860048036038101906101839190611171565b6104aa565b60405161019591906111b9565b60405180910390f35b6101b860048036038101906101b39190611171565b6104ca565b6040516101c591906111b9565b60405180910390f35b6101e860048036038101906101e39190611171565b610560565b005b61020460048036038101906101ff91906110e6565b610620565b005b610220600480360381019061021b9190611171565b6106a6565b005b61022a61077c565b60405161023791906111e3565b60405180910390f35b610248610782565b60405161025591906111e3565b60405180910390f35b610266610788565b604051610273919061120d565b60405180910390f35b61029660048036038101906102919190611171565b6107ae565b6040516102a391906111e3565b60405180910390f35b6102c660048036038101906102c19190611381565b6107c0565b6040516102d391906114c6565b60405180910390f35b6102e46108cf565b005b6102ee610957565b6040516102fb91906111e3565b60405180910390f35b61031e600480360381019061031991906110e6565b61095d565b005b61033a60048036038101906103359190611171565b6109e3565b005b610344610aa3565b604051610351919061120d565b60405180910390f35b610362610acc565b60405161036f919061120d565b60405180910390f35b610392600480360381019061038d91906110e6565b610af2565b005b61039c610b78565b6040516103a991906111e3565b60405180910390f35b6103cc60048036038101906103c79190611514565b610b7e565b005b6103e860048036038101906103e39190611171565b610c17565b005b6103f2610cee565b6040516103ff91906111b9565b60405180910390f35b610422600480360381019061041d9190611171565b610d01565b005b61042c610df8565b73ffffffffffffffffffffffffffffffffffffffff1661044a610aa3565b73ffffffffffffffffffffffffffffffffffffffff16146104a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104979061159e565b60405180910390fd5b8060048190555050565b60016020528060005260406000206000915054906101000a900460ff1681565b6000600260009054906101000a900460ff166104e9576000905061055b565b60011515600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361054a576001905061055b565b60085461055683610e00565b101590505b919050565b610568610df8565b73ffffffffffffffffffffffffffffffffffffffff16610586610aa3565b73ffffffffffffffffffffffffffffffffffffffff16146105dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d39061159e565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610628610df8565b73ffffffffffffffffffffffffffffffffffffffff16610646610aa3565b73ffffffffffffffffffffffffffffffffffffffff161461069c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106939061159e565b60405180910390fd5b8060088190555050565b6106ae610df8565b73ffffffffffffffffffffffffffffffffffffffff166106cc610aa3565b73ffffffffffffffffffffffffffffffffffffffff1614610722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107199061159e565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60085481565b60055481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006107b982610e00565b9050919050565b606060008251905060008167ffffffffffffffff8111156107e4576107e361123e565b5b60405190808252806020026020018201604052801561081d57816020015b61080a61106c565b8152602001906001900390816108025790505b50905060005b84518110156108c457604051806040016040528086838151811061084a576108496115be565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168152602001610890878481518110610883576108826115be565b5b6020026020010151610e00565b8152508282815181106108a6576108a56115be565b5b602002602001018190525080806108bc9061161c565b915050610823565b508092505050919050565b6108d7610df8565b73ffffffffffffffffffffffffffffffffffffffff166108f5610aa3565b73ffffffffffffffffffffffffffffffffffffffff161461094b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109429061159e565b60405180910390fd5b6109556000610fa8565b565b60045481565b610965610df8565b73ffffffffffffffffffffffffffffffffffffffff16610983610aa3565b73ffffffffffffffffffffffffffffffffffffffff16146109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d09061159e565b60405180910390fd5b8060058190555050565b6109eb610df8565b73ffffffffffffffffffffffffffffffffffffffff16610a09610aa3565b73ffffffffffffffffffffffffffffffffffffffff1614610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a569061159e565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610afa610df8565b73ffffffffffffffffffffffffffffffffffffffff16610b18610aa3565b73ffffffffffffffffffffffffffffffffffffffff1614610b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b659061159e565b60405180910390fd5b8060038190555050565b60035481565b610b86610df8565b73ffffffffffffffffffffffffffffffffffffffff16610ba4610aa3565b73ffffffffffffffffffffffffffffffffffffffff1614610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf19061159e565b60405180910390fd5b80600260006101000a81548160ff02191690831515021790555050565b610c1f610df8565b73ffffffffffffffffffffffffffffffffffffffff16610c3d610aa3565b73ffffffffffffffffffffffffffffffffffffffff1614610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a9061159e565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600260009054906101000a900460ff1681565b610d09610df8565b73ffffffffffffffffffffffffffffffffffffffff16610d27610aa3565b73ffffffffffffffffffffffffffffffffffffffff1614610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d749061159e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de3906116d6565b60405180910390fd5b610df581610fa8565b50565b600033905090565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401610e8a919061120d565b602060405180830381865afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb919061170b565b905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401610f08919061120d565b602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f49919061170b565b90506000818311610f5a5782610f5c565b815b905060055481610f6c9190611738565b60045483610f7a9190611738565b60035485610f889190611738565b610f92919061177a565b610f9c919061177a565b95505050505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6110c3816110b0565b81146110ce57600080fd5b50565b6000813590506110e0816110ba565b92915050565b6000602082840312156110fc576110fb6110a6565b5b600061110a848285016110d1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061113e82611113565b9050919050565b61114e81611133565b811461115957600080fd5b50565b60008135905061116b81611145565b92915050565b600060208284031215611187576111866110a6565b5b60006111958482850161115c565b91505092915050565b60008115159050919050565b6111b38161119e565b82525050565b60006020820190506111ce60008301846111aa565b92915050565b6111dd816110b0565b82525050565b60006020820190506111f860008301846111d4565b92915050565b61120781611133565b82525050565b600060208201905061122260008301846111fe565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6112768261122d565b810181811067ffffffffffffffff821117156112955761129461123e565b5b80604052505050565b60006112a861109c565b90506112b4828261126d565b919050565b600067ffffffffffffffff8211156112d4576112d361123e565b5b602082029050602081019050919050565b600080fd5b60006112fd6112f8846112b9565b61129e565b905080838252602082019050602084028301858111156113205761131f6112e5565b5b835b818110156113495780611335888261115c565b845260208401935050602081019050611322565b5050509392505050565b600082601f83011261136857611367611228565b5b81356113788482602086016112ea565b91505092915050565b600060208284031215611397576113966110a6565b5b600082013567ffffffffffffffff8111156113b5576113b46110ab565b5b6113c184828501611353565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6113ff81611133565b82525050565b61140e816110b0565b82525050565b60408201600082015161142a60008501826113f6565b50602082015161143d6020850182611405565b50505050565b600061144f8383611414565b60408301905092915050565b6000602082019050919050565b6000611473826113ca565b61147d81856113d5565b9350611488836113e6565b8060005b838110156114b95781516114a08882611443565b97506114ab8361145b565b92505060018101905061148c565b5085935050505092915050565b600060208201905081810360008301526114e08184611468565b905092915050565b6114f18161119e565b81146114fc57600080fd5b50565b60008135905061150e816114e8565b92915050565b60006020828403121561152a576115296110a6565b5b6000611538848285016114ff565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611588602083611541565b915061159382611552565b602082019050919050565b600060208201905081810360008301526115b78161157b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611627826110b0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611659576116586115ed565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006116c0602683611541565b91506116cb82611664565b604082019050919050565b600060208201905081810360008301526116ef816116b3565b9050919050565b600081519050611705816110ba565b92915050565b600060208284031215611721576117206110a6565b5b600061172f848285016116f6565b91505092915050565b6000611743826110b0565b915061174e836110b0565b925082820261175c816110b0565b91508282048414831517611773576117726115ed565b5b5092915050565b6000611785826110b0565b9150611790836110b0565b92508282019050808211156117a8576117a76115ed565b5b9291505056fea26469706673582212209400772bcf0db060d430a8dd001ef50a7625a6fc2b75f8430dfe84fba012bdef64736f6c63430008110033