Token 10X: Africa's First Cryptocurrency Hub
LESLAR Metaverse Token
The main purpose of this project is to educate and introduce the digital world to the Indonesian citizens. With a community that the founder already has, LESLAR METAVERSE will be the first largest destination in the world of metaverse from Indonesia to the world.
A new element is found that i...
About LESLAR Metaverse
The main purpose of this project is to educate and introduce the digital world to the Indonesian citizens. With a community that the founder already has, LESLAR METAVERSE will be the first largest destination in the world of metaverse from Indonesia to the world.
A new element is found that is the very basis needed for the creation of a new virtual world. The Royalists are the main rulers of this world, with their King and Queen. Then we have The Militech, which functions as soldier and peacekeepers of the metaverse. The Rebels are the rogue citizens who prefer independence. The Metastreet are the rich and elite citizens. They all fight for expansion in LESLAR Metaverse. Who has the most $LESLAR will conquer LESLAR Metaverse.
A new element is found that is the very basis needed for the creation of a new virtual world. The Royalists are the main rulers of this world, with their King and Queen. Then we have The Militech, which functions as soldier and peacekeepers of the metaverse. The Rebels are the rogue citizens who prefer independence. The Metastreet are the rich and elite citizens. They all fight for expansion in LESLAR Metaverse. Who has the most $LESLAR will conquer LESLAR Metaverse.
120 total visits
Token information and links
Circulating Supply
1000000000000000000000 LESLAR
Token Contract (BSC Chain)
0X0F2420FC7CE2446C35CD37F514486AA88D703BC3
Contract license:
Launch Date
1647082481
KYC Information
No
Audit Information
https://www.leslarmetaverse.com/static/leslar-metaverse-audit.pdf
Team Information
Team leader: Rizky Billar
Team leader contact: https://www.instagram.com/rizkybillar
Contract source code
{{
"language": "Solidity",
"sources": {
"contracts/LESLAR.sol": {
"content": "//SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\n// __ __________ ___ ___ \n// / / / __/ __/ / / _ | / _ \\\n// / /__/ _/_\\ \\/ /__/ __ |/ , _/\n// /____/___/___/____/_/ |_/_/|_| \n// LESLAR METAVERSE\n\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/utils/Context.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport \"./abstracts/core/Tokenomics.sol\";\nimport \"./abstracts/core/RFI.sol\";\nimport \"./abstracts/features/Expensify.sol\";\nimport \"./abstracts/features/TxPolice.sol\";\nimport \"./abstracts/core/Pancake.sol\";\nimport \"./abstracts/helpers/Helpers.sol\";\n\ncontract LESLAR is \n\tIERC20Metadata, \n\tContext, \n\tOwnable,\n\tTokenomics, \n\tRFI,\n\tTxPolice,\n\tExpensify\n{\n\tusing SafeMath for uint256;\n\n\tconstructor() {\n\t\t// Set special addresses\n\t\tspecialAddresses[owner()] = true;\n\t\tspecialAddresses[address(this)] = true;\n\t\tspecialAddresses[deadAddr] = true;\n\t\t// Set limit exemptions\n\t\tLimitExemptions memory exemptions;\n\t\texemptions.all = true;\n\t\tlimitExemptions[owner()] = exemptions;\n\t\tlimitExemptions[address(this)] = exemptions;\n\t}\n\n/* ------------------------------- IERC20 Meta ------------------------------ */\n\n\tfunction name() external pure override returns(string memory) { return NAME;}\n\tfunction symbol() external pure override returns(string memory) { return SYMBOL;}\n\tfunction decimals() external pure override returns(uint8) { return DECIMALS; }\t\n\n/* -------------------------------- Overrides ------------------------------- */\n\n\tfunction beforeTokenTransfer(address from, address to, uint256 amount) \n\t\tinternal \n\t\toverride \n\t{\n\t\t// Make sure max transaction and wallet size limits are not exceeded.\n\t\tTransactionLimitType[2] memory limits = [\n\t\t\tTransactionLimitType.TRANSACTION, \n\t\t\tTransactionLimitType.WALLET\n\t\t];\n\t\tguardMaxLimits(from, to, amount, limits);\n\t\tenforceCyclicSellLimit(from, to, amount);\n\t\t// Try to execute all our accumulator features.\n\t\ttriggerFeatures(from);\n\t}\n\n\tfunction takeFee(address from, address to) \n\t\tinternal \n\t\tview \n\t\toverride \n\t\treturns(bool) \n\t{\n\t\treturn canTakeFee(from, to);\n\t}\n\n/* -------------------------- Accumulator Triggers -------------------------- */\n\n\t// Will keep track of how often each trigger has been called already.\n\tuint256 internal triggerCount = 0;\n\t// Will keep track of trigger indexes, which can be triggered during current tx.\n\tuint8 internal canTrigger = 0;\n\n\t/**\n\t* @notice Convenience wrapper function which tries to trigger our custom \n\t* features.\n\t*/\n\tfunction triggerFeatures(address from) private {\n\t\tuint256 contractTokenBalance = balanceOf(address(this));\n\t\t// First determine which triggers can be triggered.\n\t\tif (!liquidityPools[from]) {\n\t\t\tif (canTax(contractTokenBalance)) {\n\t\t\t\tcanTrigger = 1;\n\t\t\t}\n\t\t}\n\n\t\t// Avoid falling into a tx loop.\n\t\tif (!inTriggerProcess) {\n\t\t\tif (canTax(contractTokenBalance)) {\n\t\t\t\t_triggerTax();\n\t\t\t\tdelete canTrigger;\n\t\t\t}\n\t\t}\n\t}\n\n/* ---------------------------- Internal Triggers --------------------------- */\n\n\t/**\n\t* @notice Triggers tax and updates triggerLog\n\t*/\n\tfunction _triggerTax() internal {\n\t\ttaxify(accumulatedForTax);\n\t\ttriggerCount = triggerCount.add(1);\n\t}\n\n/* ---------------------------- External Triggers --------------------------- */\n\n\t/**\n\t* @notice Allows to trigger tax manually.\n\t*/\n\tfunction triggerTax() external onlyOwner {\n\t\tuint256 contractTokenBalance = balanceOf(address(this));\n\t\trequire(canTax(contractTokenBalance), \"Not enough tokens accumulated.\");\n\t\t_triggerTax();\n\t}\n}"
},
"@openzeppelin/contracts/utils/math/SafeMath.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)\n\npragma solidity ^0.8.0;\n\n// CAUTION\n// This version of SafeMath should only be used with Solidity 0.8 or later,\n// because it relies on the compiler's built in overflow checks.\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations.\n *\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\n * now has built in overflow checking.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's ` ` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n return a b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n return a * b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator.\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b <= a, errorMessage);\n return a - b;\n }\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b > 0, errorMessage);\n return a / b;\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b > 0, errorMessage);\n return a % b;\n }\n }\n}\n"
},
"@openzeppelin/contracts/utils/Context.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n"
},
"@openzeppelin/contracts/access/Ownable.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor() {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n"
},
"@openzeppelin/contracts/token/ERC20/IERC20.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `from` to `to` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(\n address from,\n address to,\n uint256 amount\n ) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n"
},
"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n *\n * _Available since v4.1._\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"
},
"contracts/abstracts/core/Tokenomics.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\nabstract contract Tokenomics is IERC20, Ownable {\n\tusing SafeMath for uint256;\n mapping (address => bool) private _isBot;\n\n/* ---------------------------------- Token --------------------------------- */\n\n\tstring internal constant NAME = \"LESLAR Metaverse\";\n\tstring internal constant SYMBOL = \"LESLAR\";\n\n\tuint8 internal constant DECIMALS = 9;\n\tuint256 internal constant ZEROES = 10 ** DECIMALS;\n\n\tuint256 private constant MAX = ~uint256(0);\n\tuint256 internal constant _tTotal = 1000000000000 * ZEROES;\n\tuint256 internal _rTotal = (MAX - (MAX % _tTotal));\n\n\taddress public deadAddr = 0x000000000000000000000000000000000000dEaD;\n\n/* ---------------------------------- Fees ---------------------------------- */\n\n\t// To be collected for tax\n\tuint256 public _taxFee = 3;\n\t// Used to cache fee when removing fee temporarily.\n\tuint256 internal _previousTaxFee = _taxFee;\n\t// Will keep tabs on the amount which should be taken from wallet for taxes.\n\tuint256 public accumulatedForTax = 0;\n\n\t/**\n\t * @notice Allows setting Tax fee.\n\t */\n\tfunction setTaxFee(uint256 fee)\n\t\texternal \n\t\tonlyOwner\n\t\tsameValue(_taxFee, fee)\n\t{\n\t\t_taxFee = fee;\n\t}\n\n\t/**\n\t * @notice Allows temporarily set all feees to 0. \n\t * It can be restored later to the previous fees.\n\t */\n\tfunction disableAllFeesTemporarily()\n\t\texternal\n\t\tonlyOwner\n\t{\n\t\tremoveAllFee();\n\t}\n\n\t/**\n\t * @notice Restore all fees from previously set.\n\t */\n\tfunction restoreAllFees()\n\t\texternal\n\t\tonlyOwner\n\t{\n\t\trestoreAllFee();\n\t}\n\n\t/**\n\t * @notice Temporarily stops all fees. Caches the fees into secondary variables,\n\t * so it can be reinstated later.\n\t */\n\tfunction removeAllFee() internal {\n\t\tif (_taxFee == 0) return;\n\n\t\t_previousTaxFee = _taxFee;\n\n\t\t_taxFee = 0;\n\t}\n\n\t/**\n\t * @notice Restores all fees removed previously, using cached variables.\n\t */\n\tfunction restoreAllFee() internal {\n\t\t_taxFee = _previousTaxFee;\n\t}\n\n\tfunction calculateTaxFee(\n\t\tuint256 amount,\n\t\tuint8 multiplier\n\t) internal view returns(uint256) {\n\t\treturn amount.mul(_taxFee).mul(multiplier).div(10 ** 2);\n\t}\n\n/* --------------------------- Triggers and limits -------------------------- */\n\n\t// One contract accumulates 0.01% of total supply, trigger tax wallet sendout.\n\tuint256 public minToTax = _tTotal.mul(1).div(10000);\n\n\t/**\n\t@notice External function allowing to set minimum amount of tokens which trigger\n\t* tax send out.\n\t*/\n\tfunction setMinToTax(uint256 minTokens) \n\t\texternal \n\t\tonlyOwner \n\t\tsupplyBounds(minTokens)\n\t{\n\t\tminToTax = minTokens * 10 ** 5;\n\t}\n\n/* --------------------------------- IERC20 --------------------------------- */\n\tfunction totalSupply() external pure override returns(uint256) {\n\t\treturn _tTotal;\n\t}\n\n\tfunction totalFees() external view returns(uint256) { \n\t\treturn _taxFee; \n\t}\n\n/* ---------------------------- Anti Bot System --------------------------- */\n\n function setAntibot(address account, bool _bot) external onlyOwner{\n require(_isBot[account] != _bot, \"Value already set\");\n _isBot[account] = _bot;\n }\n\n function isBot(address account) public view returns(bool){\n return _isBot[account];\n }\n\n/* -------------------------------- Modifiers ------------------------------- */\n\n // Use this in case BNB are sent to the contract by mistake\n function rescueBNB(uint256 weiAmount) external onlyOwner{\n require(address(this).balance >= weiAmount, \"insufficient BNB balance\");\n payable(msg.sender).transfer(weiAmount);\n }\n\n function rescueBEP20Tokens(address tokenAddress) external onlyOwner{\n IERC20(tokenAddress).transfer(msg.sender, IERC20(tokenAddress).balanceOf(address(this)));\n }\n\n/* -------------------------------- Modifiers ------------------------------- */\n\n\tmodifier supplyBounds(uint256 minTokens) {\n\t\trequire(minTokens * 10 ** 5 > 0, \"Amount must be more than 0\");\n\t\trequire(minTokens * 10 ** 5 <= _tTotal, \"Amount must be not bigger than total supply\");\n\t\t_;\n\t}\n\n\tmodifier sameValue(uint256 firstValue, uint256 secondValue) {\n\t\trequire(firstValue != secondValue, \"Already set to this value.\");\n\t\t_;\n\t}\n}"
},
"contracts/abstracts/core/RFI.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"../core/Tokenomics.sol\";\nimport \"../core/Pancake.sol\";\n\nabstract contract RFI is IERC20, Ownable, Tokenomics, Pancake {\n\tusing SafeMath for uint256;\n\n\tmapping(address => uint256) internal _rOwned;\n\tmapping(address => uint256) internal _tOwned;\n\tmapping(address => mapping(address => uint256)) private _allowances;\n\n\tstruct TValues {\n\t\tuint256 tTransferAmount;\n\t\tuint256 tFee;\n\t}\n\n\tstruct RValues {\n\t\tuint256 rAmount;\n\t\tuint256 rTransferAmount;\n\t\tuint256 rFee;\n\t}\n\n\tconstructor() {\n\t\t// Assigns all reflected tokens to the deployer on creation\n\t\t_rOwned[_msgSender()] = _rTotal;\n\n\t\temit Transfer(address(0), _msgSender(), _tTotal);\n\t}\n\n\t/**\n\t * @notice Calculates all values for \"total\" and \"reflected\" states.\n\t * @param tAmount Token amount related to which, all values are calculated.\n\t */\n\tfunction _getValues(\n\t\tuint256 tAmount\n\t) private view returns(\n\t\tTValues memory tValues, RValues memory rValues\n\t) {\n\t\tTValues memory tV = _getTValues(tAmount);\n\t\tRValues memory rV = _getRValues(\n\t\t\ttAmount,\n\t\t\ttV.tFee,\n\t\t\t_getRate()\n\t\t);\n\t\treturn (tV, rV);\n\t}\n\n\t/**\n\t * @notice Calculates values for \"total\" states.\n\t * @param tAmount Token amount related to which, total values are calculated.\n\t */\n\tfunction _getTValues(\n\t\tuint256 tAmount\n\t) private view returns(TValues memory tValues) {\n\t\tTValues memory tV;\n\t\ttV.tFee = calculateTaxFee(tAmount, 1);\n\n\t\tuint256 fees = tV.tFee;\n\t\ttV.tTransferAmount = tAmount.sub(fees);\n\t\treturn tV;\n\t}\n\n\t/**\n\t * @notice Calculates values for \"reflected\" states.\n\t * @param tAmount Token amount related to which, reflected values are calculated.\n\t * @param tFee Total fee related to which, reflected values are calculated.\n\t * @param currentRate Rate used to calculate reflected values.\n\t */\n\tfunction _getRValues(\n\t\tuint256 tAmount,\n\t\tuint256 tFee,\n\t\tuint256 currentRate\n\t) private pure returns(RValues memory rValues) {\n\t\tRValues memory rV;\n\t\trV.rAmount = tAmount.mul(currentRate);\n\t\tuint256 rFee = tFee.mul(currentRate);\n\t\tuint256 fees = rFee;\n\t\trV.rTransferAmount = rV.rAmount.sub(fees);\n\t\treturn rV;\n\t}\n\n\t/**\n\t * @notice Calculates the rate of total suply to reflected supply.\n\t */\n\tfunction _getRate() private view returns(uint256) {\n\t\t(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();\n\t\treturn rSupply.div(tSupply);\n\t}\n\n\t/**\n\t * @notice Returns totals for \"total\" supply and \"reflected\" supply.\n\t */\n\tfunction _getCurrentSupply() private view returns(uint256, uint256) {\n\t\tuint256 rSupply = _rTotal;\n\t\tuint256 tSupply = _tTotal;\n\t\tif (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);\n\t\treturn (rSupply, tSupply);\n\t}\n\n\tfunction tokenFromReflection(\n\t\tuint256 rAmount\n\t) public view returns(uint256) {\n\t\trequire(rAmount <= _rTotal, \"Amount must be less than total reflections\");\n\t\tuint256 currentRate = _getRate();\n\t\treturn rAmount.div(currentRate);\n\t}\n\n/* --------------------------------- Custom --------------------------------- */\n\n\t/**\n\t * @notice ERC20 token transaction approval with allowance.\n\t */\n\tfunction rfiApprove(\n\t\taddress ownr,\n\t\taddress spender,\n\t\tuint256 amount\n\t) internal {\n\t\trequire(ownr != address(0), \"ERC20: approve from the zero address\");\n\t\trequire(spender != address(0), \"ERC20: approve to the zero address\");\n\n\t\t_allowances[ownr][spender] = amount;\n\t\temit Approval(ownr, spender, amount);\n\t}\n\n\tfunction _transfer(\n\t\taddress from,\n\t\taddress to,\n\t\tuint256 amount\n\t) internal {\n\t\trequire(from != address(0), \"ERC20: transfer from the zero address\");\n\t\trequire(to != address(0), \"ERC20: transfer to the zero address\");\n\t\trequire(amount > 0, \"Transfer amount must be greater than zero\");\n\n\t\t// Override this in the main contract to plug your features inside transactions.\n\t\tbeforeTokenTransfer(from, to, amount);\n\n\t\t// Transfer amount, it will take tax, liquidity fee\n\t\tbool take = takeFee(from, to);\n\t\t_tokenTransfer(from, to, amount, take);\n\t}\n\n\t/**\n\t * @notice Performs token transfer with fees.\n\t * @param sender Address of the sender.\n\t * @param recipient Address of the recipient.\n\t * @param amount Amount of tokens to send.\n\t * @param take Toggle on/off fees.\n\t */\n\tfunction _tokenTransfer(\n\t\taddress sender,\n\t\taddress recipient,\n\t\tuint256 amount,\n\t\tbool take\n\t) private {\n\n\t\t// Remove fees for this transaction if needed.\n\t\tif (!take)\n\t\t\tremoveAllFee();\n\n\t\t// Calculate all reflection magic...\n\t\t(TValues memory tV, RValues memory rV) = _getValues(amount);\n\n\t\t// Adjust reflection states\n\t\t_rOwned[sender] = _rOwned[sender].sub(rV.rAmount);\n\t\t_rOwned[recipient] = _rOwned[recipient].add(rV.rTransferAmount);\n\n\t\t// Calcuate fees. If above fees were removed, then these will obviously\n\t\t// not take any fees.\n\t\t_takeTax(tV.tFee);\n\n\t\temit Transfer(sender, recipient, tV.tTransferAmount);\n\n\t\t// Reinstate fees if they were removed for this transaction.\n\t\tif (!take)\n\t\t\trestoreAllFee();\n\t}\n\n\t/**\n\t* @notice Override this function to intercept the transaction and perform \n\t* additional checks or perform certain functions before allowing transaction\n\t* to complete. You can prevent transaction to complete here too.\n\t*/\n\tfunction beforeTokenTransfer(\n\t\taddress from, \n\t\taddress to, \n\t\tuint256 amount\n\t) virtual internal {\n\n\n\t}\n\n\tfunction takeFee(address from, address to) virtual internal returns(bool) {\n\n\n\t\treturn true;\n\t}\n\n/* ------------------------------- Custom fees ------------------------------ */\n\t/**\n\t* @notice Collects tokens from tax fee. Accordingly adjusts \"reflected\" \n\tamounts. \n\t*/\n\tfunction _takeTax(\n\t\tuint256 tFee\n\t) private {\n\t\tuint256 currentRate = _getRate();\n\t\tuint256 rFee = tFee.mul(currentRate);\n\t\t_rOwned[address(this)] = _rOwned[address(this)].add(rFee);\n\t\t// Keep tabs, so when processing is triggered, we know how much should we take.\n\t\taccumulatedForTax = accumulatedForTax.add(tFee);\n\t}\n\n/* --------------------------------- IERC20 --------------------------------- */\n\n\tfunction balanceOf(\n\t\taddress account\n\t) public view override returns(uint256) {\n\t\treturn tokenFromReflection(_rOwned[account]);\n\t}\n\n\tfunction transfer(\n\t\taddress recipient,\n\t\tuint256 amount\n\t) public override returns(bool) {\n\t\t_transfer(_msgSender(), recipient, amount);\n\t\treturn true;\n\t}\n\n\tfunction allowance(\n\t\taddress ownr,\n\t\taddress spender\n\t) public view override returns(uint256) {\n\t\treturn _allowances[ownr][spender];\n\t}\n\n\tfunction approve(\n\t\taddress spender,\n\t\tuint256 amount\n\t) public override returns(bool) {\n\t\trfiApprove(_msgSender(), spender, amount);\n\t\treturn true;\n\t}\n\n\tfunction transferFrom(\n\t\taddress sender,\n\t\taddress recipient,\n\t\tuint256 amount\n\t) public override returns(bool) {\n\t\t_transfer(sender, recipient, amount);\n\t\trfiApprove(\n\t\t\tsender,\n\t\t\t_msgSender(),\n\t\t\t_allowances[sender][_msgSender()].sub(\n\t\t\t\tamount,\n\t\t\t\t\"ERC20: transfer amount exceeds allowance\"\n\t\t\t)\n\t\t);\n\t\treturn true;\n\t}\n\n\tfunction increaseAllowance(\n\t\taddress spender,\n\t\tuint256 addedValue\n\t) public virtual returns(bool) {\n\t\trfiApprove(\n\t\t\t_msgSender(),\n\t\t\tspender,\n\t\t\t_allowances[_msgSender()][spender].add(addedValue)\n\t\t);\n\t\treturn true;\n\t}\n\n\tfunction decreaseAllowance(\n\t\taddress spender,\n\t\tuint256 subtractedValue\n\t) public virtual returns(bool) {\n\t\trfiApprove(\n\t\t\t_msgSender(),\n\t\t\tspender,\n\t\t\t_allowances[_msgSender()][spender]\n\t\t\t.sub(subtractedValue, \"ERC20: decreased allowance below zero\")\n\t\t);\n\t\treturn true;\n\t}\n\n/* -------------------------------- Modifiers ------------------------------- */\n\n\tmodifier onlyOwnerOrHolder {\n\t\trequire(\n\t\t\towner() == _msgSender() || balanceOf(_msgSender()) > 0, \n\t\t\t\"Only the owner and the holder can use this feature.\"\n\t\t\t);\n\t\t_;\n\t}\n\n\tmodifier onlyHolder {\n\t\trequire(\n\t\t\tbalanceOf(_msgSender()) > 0, \n\t\t\t\"Only the holder can use this feature.\"\n\t\t\t);\n\t\t_;\n\t}\n}"
},
"contracts/abstracts/features/Expensify.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"../helpers/Helpers.sol\";\nimport \"../core/Pancake.sol\";\nimport \"../core/Tokenomics.sol\";\nimport \"../features/TxPolice.sol\";\n\nabstract contract Expensify is Ownable, Helpers, Tokenomics, Pancake, TxPolice {\n\tusing SafeMath for uint256;\n\taddress public productDevWallet;\n\taddress public devWallet;\n\taddress public marketingWallet;\n\t// Expenses fee accumulated amount will be divided using these.\n\tuint256 public productDevShare = 30; // 30%\n\tuint256 public devShare = 30; // 30%\n\tuint256 public marketingShare = 40; // 40%\n\n\t/**\n\t* @notice External function allowing to set/change product dev wallet.\n\t* @param wallet: this wallet will receive product dev share.\n\t* @param share: multiplier will be divided by 100. 30 -> 30%, 3 -> 3% etc.\n\t*/\n\tfunction setProductDevWallet(address wallet, uint256 share) \n\t\texternal onlyOwner legitWallet(wallet) \n\t{\n\t\tproductDevWallet = wallet;\n\t\tproductDevShare = share;\n\t\tswapExcludedFromFee(wallet, productDevWallet);\n\t}\n\n\t/**\n\t* @notice External function allowing to set/change dev wallet.\n\t* @param wallet: this wallet will receive dev share.\n\t* @param share: multiplier will be divided by 100. 30 -> 30%, 3 -> 3% etc.\n\t*/\n\tfunction setDevWallet(address wallet, uint256 share) \n\t\texternal onlyOwner legitWallet(wallet)\n\t{\n\t\tdevWallet = wallet;\n\t\tdevShare = share;\n\t\tswapExcludedFromFee(wallet, devWallet);\n\t}\n\n\t/**\n\t* @notice External function allowing to set/change marketing wallet.\n\t* @param wallet: this wallet will receive marketing share.\n\t* @param share: multiplier will be divided by 100. 30 -> 30%, 3 -> 3% etc.\n\t*/\n\tfunction setMarketingWallet(address wallet, uint256 share) \n\t\texternal onlyOwner legitWallet(wallet)\n\t{\n\t\tmarketingWallet = wallet;\n\t\tmarketingShare = share;\n\t\tswapExcludedFromFee(wallet, marketingWallet);\n\t}\n\n\t/** \n\t* @notice Checks if all required prerequisites are met for us to trigger \n\t* taxes send out event.\n\t*/\n\tfunction canTax(\n\t\tuint256 contractTokenBalance\n\t) \n\t\tinternal \n\t\tview\n\t\treturns(bool) \n\t{\n\t\treturn contractTokenBalance >= accumulatedForTax\n && accumulatedForTax >= minToTax;\n\t}\n\n\t/**\n\t* @notice Splits tokens into pieces for product dev, dev and marketing wallets \n\t* and sends them out.\n\t* Note: Shares must add up to 100, otherwise tax fee will not be \n\t\tdistributed properly. And that can invite many other issues.\n\t\tSo we can't proceed. You will see \"Taxify\" event triggered on \n\t\tthe blockchain with \"0, 0, 0\" then. This will guide you to check and fix\n\t\tyour share setup.\n\t\tWallets must be set. But we will not use \"require\", so not to trigger \n\t\ttransaction failure just because someone forgot to set up the wallet \n\t\taddresses. If you see \"Taxify\" event with \"0, 0, 0\" values, then \n\t\tcheck if you have set the wallets.\n\t\t@param tokenAmount amount of tokens to take from balance and send out.\n\t*/\n\tfunction taxify(\n\t\tuint256 tokenAmount\n\t) internal lockTheProcess {\n\t\tuint256 productDevPiece;\n\t\tuint256 devPiece;\n\t\tuint256 marketingPiece;\n\n\t\tif (\n\t\t\tproductDevShare.add(devShare).add(marketingShare) == 100\n\t\t\t&& productDevWallet != address(0) \n\t\t\t&& devWallet != address(0)\n\t\t\t&& marketingWallet != address(0)\n\t\t) {\n\t\t\tproductDevPiece = tokenAmount.mul(productDevShare).div(100);\n\t\t\tdevPiece = tokenAmount.mul(devShare).div(100);\n\t\t\t// Make sure all tokens are distributed.\n\t\t\tmarketingPiece = tokenAmount.sub(productDevPiece).sub(devPiece);\n\t\t\t_transfer(address(this), productDevWallet, productDevPiece);\n\t\t\t_transfer(address(this), devWallet, devPiece);\n\t\t\t_transfer(address(this), marketingWallet, marketingPiece);\n\t\t\t// Reset the accumulator, only if tokens actually sent, otherwise we keep\n\t\t\t// acumulating until above mentioned things are fixed.\n\t\t\taccumulatedForTax = 0;\n\t\t}\n\t\t\n \t\temit TaxifyDone(productDevPiece, devPiece, marketingPiece);\n\t}\n\n/* --------------------------------- Events --------------------------------- */\n\tevent TaxifyDone(\n\t\tuint256 tokensSentToProductDev,\n\t\tuint256 tokensSentToDev,\n\t\tuint256 tokensSentToMarketing\n\t);\n}"
},
"contracts/abstracts/features/TxPolice.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"../core/Pancake.sol\";\nimport \"../core/Tokenomics.sol\";\nimport \"../core/RFI.sol\";\nimport \"../core/Supply.sol\";\n\nabstract contract TxPolice is Tokenomics, Pancake, RFI, Supply {\n\tusing SafeMath for uint256;\n\t// Wallet hard cap 2% of total supply\n\tuint256 public maxWalletSize = _tTotal.mul(2).div(100);\n\t// Can transfer wallet-to-wallet 100%\n\tuint256 public maxTxAmount = _tTotal.mul(100).div(100);\n\t// Convenience enum to differentiate transaction limit types.\n\tenum TransactionLimitType { TRANSACTION, WALLET, SELL }\n\t// Convenience enum to differentiate transaction types.\n\tenum TransactionType { REGULAR, SELL, BUY }\n\n\t// Global toggle to avoid trigger loops\n\tbool internal inTriggerProcess;\n\tmodifier lockTheProcess {\n\t\tinTriggerProcess = true;\n\t\t_;\n\t\tinTriggerProcess = false;\n\t}\n\n\t// Sometimes you just have addresses which should be exempt from any \n\t// limitations and fees.\n\tmapping(address => bool) public specialAddresses;\n\n\t// Toggle multiple exemptions from transaction limits.\n\tstruct LimitExemptions {\n\t\tbool all;\n\t\tbool transaction;\n\t\tbool wallet;\n\t\tbool sell;\n\t\tbool fees;\n\t}\n\n\t// Keeps a record of addresses with limitation exemptions\n\tmapping(address => LimitExemptions) internal limitExemptions;\n\n/* --------------------------- Exemption Utilities -------------------------- */\n\n\t/**\n\t* @notice External function allowing owner to toggle various limit exemptions\n\t* for any address.\n\t*/\n\tfunction toggleLimitExemptions(\n\t\taddress addr, \n\t\tbool allToggle, \n\t\tbool txToggle, \n\t\tbool walletToggle, \n\t\tbool sellToggle,\n\t\tbool feesToggle\n\t) \n\t\tpublic \n\t\tonlyOwner\n\t{\n\t\tLimitExemptions memory ex = limitExemptions[addr];\n\t\tex.all = allToggle;\n\t\tex.transaction = txToggle;\n\t\tex.wallet = walletToggle;\n\t\tex.sell = sellToggle;\n\t\tex.fees = feesToggle;\n\t\tlimitExemptions[addr] = ex;\n\t}\n\n\t/**\n\t* @notice External function allowing owner toggle any address as special address.\n\t*/\n\tfunction toggleSpecialWallets(address specialAddr, bool toggle) \n\t\texternal \n\t\tonlyOwner \n\t{\n\t\tspecialAddresses[specialAddr] = toggle;\n\t}\n\n/* ------------------------------- Sell Limit ------------------------------- */\n\t// Toggle for sell limit feature\n\tbool public isSellLimitEnabled = true;\n\t// Sell limit cycle period\n\tuint256 public sellCycleHours = 24;\n\t// Hour multiplier\n\tuint256 private hour = 60 * 60;\n\t// Changing this you can increase/decrease decimals of your maxSellAllowancePerCycle \n\tuint256 public maxSellAllowanceMultiplier = 100;\n\t// (address => amount)\n\tmapping(address => uint256) private cycleSells;\n\t// (address => lastTimestamp)\n\tmapping(address => uint256) private lastSellTimestamp;\n\n\t/**\n\t* @notice Tracks and limits sell transactions per user per cycle set.\n\t* Unless user is a special address or has exemptions.\n\t*/\n\tfunction enforceCyclicSellLimit(address from, address to, uint256 amount) \n\t\tinternal \n\t{\n\t\t// Identify if selling... otherwise quit.\n\t\tbool isSell = getTransactionType(from, to) == TransactionType.SELL;\n\n\t\t// Guards\n\t\t// Get exemptions if any for tx sender and receiver.\n\t\tif (\n\t\t\tlimitExemptions[from].all\n\t\t\t|| limitExemptions[from].sell\n\t\t\t|| specialAddresses[from] \n\t\t\t|| !isSellLimitEnabled\n\t\t) { \n\n\t\t\treturn; \n\t\t}\n\n\t\tif (!isSell) { return; }\n\n\t\t// First check if sell amount doesn't exceed total max allowance.\n\t\tuint256 maxAllowance = maxSellAllowancePerCycle();\n\n\t\trequire(amount <= maxAllowance, \"Can't sell more than cycle allowance!\");\n\n\t\t// Then check if sell cycle has passed. If so, just update the maps and quit.\n\t\tif (hasSellCycleEnded(from)) {\n\t\t\tlastSellTimestamp[from] = block.timestamp;\n\t\t\tcycleSells[from] = amount;\n\t\t\treturn;\n\t\t}\n\n\t\t// If cycle has not yet passed... check if combined amount doesn't excceed the max allowance.\n\t\tuint256 combinedAmount = amount.add(cycleSells[from]);\n\n\t\trequire(combinedAmount <= maxAllowance, \"Combined cycle sell amount exceeds cycle allowance!\");\n\n\t\t// If all good just increment sells map. (don't update timestamp map, cause then \n\t\t// sell cycle will never end for this poor holder...)\n\t\tcycleSells[from] = combinedAmount;\n\t\treturn;\n\t}\n\n\t/**\n\t * @notice Calculates current maximum sell allowance per day based on the \n\t * total circulating supply.\n\t */\n\tfunction maxSellAllowancePerCycle() public view returns(uint256) {\n\t\t// 1% of total circulating supply.\n\t\treturn totalCirculatingSupply().mul(1).div(maxSellAllowanceMultiplier);\n\t}\n\n\t/**\n\t* @notice Allows to adjust your maxSellAllowancePerCycle.\n\t* 100 = 1% \n\t*/\n\tfunction setMaxSellAllowanceMultiplier(uint256 mult) external onlyOwner {\n\t\trequire(mult > 0, \"Multiplier can't be 0.\");\n\t\tmaxSellAllowanceMultiplier = mult;\n\t}\n\n\tfunction hasSellCycleEnded(address holderAddr) \n\t\tinternal \n\t\tview \n\t\treturns(bool) \n\t{\n\t\tuint256 lastSell = lastSellTimestamp[holderAddr];\n\t\tuint256 timeSinceLastSell = block.timestamp.sub(lastSell);\n\t\tbool cycleEnded = timeSinceLastSell >= sellCycleHours.mul(hour);\n\n\t\treturn cycleEnded;\n\t}\n\n\t/**\n\t* @notice External functions which allows to set selling limit period.\n\t*/\n\tfunction setSellCycleHours(uint256 hoursCycle) external onlyOwner {\n\t\trequire(hoursCycle >= 0, \"Hours can't be 0.\");\n\t\tsellCycleHours = hoursCycle;\n\t}\n\n\t/**\n\t* @notice External functions which allows to disable selling limits.\n\t*/\n\tfunction disableSellLimit() external onlyOwner {\n\t\trequire(isSellLimitEnabled, \"Selling limit already enabled.\");\n\t\tisSellLimitEnabled = false;\n\t}\n\n\t/**\n\t* @notice External functions which allows to enable selling limits.\n\t*/\n\tfunction enableSellLimit() external onlyOwner {\n\t\trequire(!isSellLimitEnabled, \"Selling limit already disabled.\");\n\t\tisSellLimitEnabled = true;\n\t}\n\n\t/**\n\t* @notice External function which can be called by a holder to see how much \n\t* sell allowance is left for the current cycle period.\n\t*/\n\tfunction sellAllowanceLeft() external view returns(uint256) {\n\t\taddress sender = _msgSender();\n\t\tbool isSpecial = specialAddresses[sender];\n\t\tbool isExemptFromAll = limitExemptions[sender].all;\n\t\tbool isExemptFromSell = limitExemptions[sender].sell;\n\t\tbool isExemptFromWallet = limitExemptions[sender].wallet;\n\n\t\t// First guard exemptions\n\t\tif (\n\t\t\tisSpecial || isExemptFromAll \n\t\t\t|| (isExemptFromSell && isExemptFromWallet)) \n\t\t{\n\t\t\treturn balanceOf(sender);\n\t\t} else if (isExemptFromSell && !isExemptFromWallet) {\n\t\t\treturn maxWalletSize;\n\t\t}\n\n\t\t// Next quard toggle and check cycle\n\t\tuint256 maxAllowance = maxWalletSize;\n\t\tif (isSellLimitEnabled) {\n\t\t\tmaxAllowance = maxSellAllowancePerCycle();\n\t\t\tif (!hasSellCycleEnded(sender)) {\n\t\t\t\tmaxAllowance = maxAllowance.sub(cycleSells[sender]);\n\t\t\t}\n\t\t} else if (isExemptFromWallet) {\n\t\t\tmaxAllowance = balanceOf(sender);\n\t\t}\n\t\treturn maxAllowance;\n\t}\n\n/* --------------------------------- Guards --------------------------------- */\n\n\t/**\n\t* @notice Checks passed multiple limitTypes and if required enforces maximum\n\t* limits.\n\t* NOTE: extend this function with more limit types if needed.\n\t*/\n\tfunction guardMaxLimits(\n\t\taddress from, \n\t\taddress to, \n\t\tuint256 amount,\n\t\tTransactionLimitType[2] memory limitTypes\n\t) internal view {\n\t\t// Get exemptions if any for tx sender and receiver.\n\t\tLimitExemptions memory senderExemptions = limitExemptions[from];\n\t\tLimitExemptions memory receiverExemptions = limitExemptions[to];\n\n\t\t// First check if any special cases\n\t\tif (\n\t\t\tsenderExemptions.all && receiverExemptions.all \n\t\t\t|| specialAddresses[from] \n\t\t\t|| specialAddresses[to] \n\t\t\t|| liquidityPools[to]\n\t\t) { return; }\n\n\t\t// If no... then go through each limit type and apply if no exemptions.\n\t\tfor (uint256 i = 0; i < limitTypes.length; i = 1) {\n\t\t\tif (\n\t\t\t\tlimitTypes[i] == TransactionLimitType.TRANSACTION \n\t\t\t\t&& !senderExemptions.transaction\n\t\t\t) {\n\t\t\t\trequire(\n\t\t\t\t\tamount <= maxTxAmount,\n\t\t\t\t\t\"Transfer amount exceeds the maxTxAmount.\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tlimitTypes[i] == TransactionLimitType.WALLET \n\t\t\t\t&& !receiverExemptions.wallet\n\t\t\t) {\n\t\t\t\tuint256 toBalance = balanceOf(to);\n\t\t\t\trequire(\n\t\t\t\t\ttoBalance.add(amount) <= maxWalletSize,\n\t\t\t\t\t\"Exceeds maximum wallet size allowed.\"\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n/* ---------------------------------- Fees ---------------------------------- */\n\nfunction canTakeFee(address from, address to) \n\tinternal view returns(bool) \n{\t\n\tbool take = true;\n\tif (\n\t\tlimitExemptions[from].all \n\t\t|| limitExemptions[to].all\n\t\t|| limitExemptions[from].fees \n\t\t|| limitExemptions[to].fees \n\t\t|| specialAddresses[from] \n\t\t|| specialAddresses[to]\n\t) { take = false; }\n\n\treturn take;\n}\n\n\t/**\n\t* @notice Updates old and new wallet fee exemptions.\n\t*/\n\tfunction swapExcludedFromFee(address newWallet, address oldWallet) internal {\n\t\tif (oldWallet != address(0)) {\n\t\t\ttoggleLimitExemptions(oldWallet, false, false, false, false, false);\n\t\t}\n\t\ttoggleLimitExemptions(newWallet, false, false, false, true, true);\n\t}\n\n/* --------------------------------- Helpers -------------------------------- */\n\n\t/**\n\t* @notice Helper function to determine what kind of transaction it is.\n\t* @param from transaction sender\n\t* @param to transaction receiver\n\t*/\n\tfunction getTransactionType(address from, address to) \n\t\tinternal view returns(TransactionType)\n\t{\n\t\tif (liquidityPools[from] && !liquidityPools[to]) {\n\t\t\t// LP -> addr\n\t\t\treturn TransactionType.BUY;\n\t\t} else if (!liquidityPools[from] && liquidityPools[to]) {\n\t\t\t// addr -> LP\n\t\t\treturn TransactionType.SELL;\n\t\t}\n\t\treturn TransactionType.REGULAR;\n\t}\n}"
},
"contracts/abstracts/core/Pancake.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\n\nabstract contract Pancake is Ownable {\n\tusing SafeMath for uint256;\n\t// Using Uniswap lib, because Pancakeswap forks are trash ATM...\n\tIUniswapV2Router02 internal uniswapV2Router;\n\t// We will call createPair() when we decide. To avoid snippers and bots.\n\taddress internal uniswapV2Pair;\n\t// This will be set when we call initDEXRouter().\n\taddress internal routerAddr;\n\t// To keep track of all LPs.\n\tmapping(address => bool) public liquidityPools;\n\n\t// To receive BNB from pancakeV2Router when swaping\n\treceive() external payable {}\n\n\t/**\n\t* @notice Initialises PCS router using the address. In addition creates a pair.\n\t* @param router Pancakeswap router address\n\t*/\n\tfunction initDEXRouter(address router) \n\t\texternal\n\t\tonlyOwner\n\t{\n\t\t// In case we already have set uniswapV2Pair before, remove it from LPs mapping.\n\t\tif (uniswapV2Pair != address(0)) {\n\t\t\tremoveAddressFromLPs(uniswapV2Pair);\n\t\t}\n\t\trouterAddr = router;\n\t\tIUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);\n\t\tuniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(\n\t\t\taddress(this), \n\t\t\t_uniswapV2Router.WETH()\n\t\t);\n\t\tuniswapV2Router = _uniswapV2Router;\n\t\taddAddressToLPs(uniswapV2Pair);\n\t\temit RouterSet(router, uniswapV2Pair);\n\t}\n\n\t/**\n\t * @notice Swaps passed tokens for BNB using Pancakeswap router and returns \n\t * actual amount received.\n\t */\n\tfunction swapTokensForBnb(\n\t\tuint256 tokenAmount\n\t) internal returns(uint256) {\n\t\tuint256 initialBalance = address(this).balance;\n\t\t// generate the pancake pair path of token -> wbnb\n\t\taddress[] memory path = new address[](2);\n\t\tpath[0] = address(this);\n\t\tpath[1] = uniswapV2Router.WETH();\n\n\t\t// Make the swap\n\t\tuniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(\n\t\t\ttokenAmount,\n\t\t\t0, // accept any amount of BNB\n\t\t\tpath,\n\t\t\taddress(this),\n\t\t\tblock.timestamp\n\t\t);\n\n\t\tuint256 bnbReceived = address(this).balance.sub(initialBalance);\n\t\treturn bnbReceived;\n\t}\n\n\t/**\n\t* @notice Adds address to a liquidity pool map. Can be called externaly.\n\t*/\n\tfunction addAddressToLPs(address lpAddr) public onlyOwner {\n\t\tliquidityPools[lpAddr] = true;\n\t}\n\n\t/**\n\t* @notice Removes address from a liquidity pool map. Can be called externaly.\n\t*/\n\tfunction removeAddressFromLPs(address lpAddr) public onlyOwner {\n\t\tliquidityPools[lpAddr] = false;\n\t}\n\n/* --------------------------------- Events --------------------------------- */\n\tevent RouterSet(address indexed router, address indexed pair);\n\n/* -------------------------------- Modifiers ------------------------------- */\n\tmodifier pcsInitialized {\n\t\trequire(routerAddr != address(0), 'Router address has not been set!');\n\t\trequire(uniswapV2Pair != address(0), 'PCS pair not created yet!');\n\t\t_;\n\t}\n}"
},
"contracts/abstracts/helpers/Helpers.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nabstract contract Helpers {\n\n/* -------------------------------- Modifiers ------------------------------- */\n\n\tmodifier legitWallet(address wallet) {\n\t\trequire(wallet != address(0), \"Wallet address must be set!\");\n\t\trequire(wallet != address(this), \"Wallet address can't be this contract.\");\n\t\t_;\n\t}\n}"
},
"@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol": {
"content": "pragma solidity >=0.5.0;\n\ninterface IUniswapV2Factory {\n event PairCreated(address indexed token0, address indexed token1, address pair, uint);\n\n function feeTo() external view returns (address);\n function feeToSetter() external view returns (address);\n\n function getPair(address tokenA, address tokenB) external view returns (address pair);\n function allPairs(uint) external view returns (address pair);\n function allPairsLength() external view returns (uint);\n\n function createPair(address tokenA, address tokenB) external returns (address pair);\n\n function setFeeTo(address) external;\n function setFeeToSetter(address) external;\n}\n"
},
"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol": {
"content": "pragma solidity >=0.5.0;\n\ninterface IUniswapV2Pair {\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n function name() external pure returns (string memory);\n function symbol() external pure returns (string memory);\n function decimals() external pure returns (uint8);\n function totalSupply() external view returns (uint);\n function balanceOf(address owner) external view returns (uint);\n function allowance(address owner, address spender) external view returns (uint);\n\n function approve(address spender, uint value) external returns (bool);\n function transfer(address to, uint value) external returns (bool);\n function transferFrom(address from, address to, uint value) external returns (bool);\n\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n function PERMIT_TYPEHASH() external pure returns (bytes32);\n function nonces(address owner) external view returns (uint);\n\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;\n\n event Mint(address indexed sender, uint amount0, uint amount1);\n event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);\n event Swap(\n address indexed sender,\n uint amount0In,\n uint amount1In,\n uint amount0Out,\n uint amount1Out,\n address indexed to\n );\n event Sync(uint112 reserve0, uint112 reserve1);\n\n function MINIMUM_LIQUIDITY() external pure returns (uint);\n function factory() external view returns (address);\n function token0() external view returns (address);\n function token1() external view returns (address);\n function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\n function price0CumulativeLast() external view returns (uint);\n function price1CumulativeLast() external view returns (uint);\n function kLast() external view returns (uint);\n\n function mint(address to) external returns (uint liquidity);\n function burn(address to) external returns (uint amount0, uint amount1);\n function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;\n function skim(address to) external;\n function sync() external;\n\n function initialize(address, address) external;\n}\n"
},
"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol": {
"content": "pragma solidity >=0.6.2;\n\ninterface IUniswapV2Router01 {\n function factory() external pure returns (address);\n function WETH() external pure returns (address);\n\n function addLiquidity(\n address tokenA,\n address tokenB,\n uint amountADesired,\n uint amountBDesired,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline\n ) external returns (uint amountA, uint amountB, uint liquidity);\n function addLiquidityETH(\n address token,\n uint amountTokenDesired,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external payable returns (uint amountToken, uint amountETH, uint liquidity);\n function removeLiquidity(\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline\n ) external returns (uint amountA, uint amountB);\n function removeLiquidityETH(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external returns (uint amountToken, uint amountETH);\n function removeLiquidityWithPermit(\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountA, uint amountB);\n function removeLiquidityETHWithPermit(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountToken, uint amountETH);\n function swapExactTokensForTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external returns (uint[] memory amounts);\n function swapTokensForExactTokens(\n uint amountOut,\n uint amountInMax,\n address[] calldata path,\n address to,\n uint deadline\n ) external returns (uint[] memory amounts);\n function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)\n external\n payable\n returns (uint[] memory amounts);\n function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)\n external\n returns (uint[] memory amounts);\n function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)\n external\n returns (uint[] memory amounts);\n function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)\n external\n payable\n returns (uint[] memory amounts);\n\n function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);\n function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);\n function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);\n function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);\n function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);\n}\n"
},
"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol": {
"content": "pragma solidity >=0.6.2;\n\nimport './IUniswapV2Router01.sol';\n\ninterface IUniswapV2Router02 is IUniswapV2Router01 {\n function removeLiquidityETHSupportingFeeOnTransferTokens(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external returns (uint amountETH);\n function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountETH);\n\n function swapExactTokensForTokensSupportingFeeOnTransferTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external;\n function swapExactETHForTokensSupportingFeeOnTransferTokens(\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external payable;\n function swapExactTokensForETHSupportingFeeOnTransferTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external;\n}\n"
},
"contracts/abstracts/core/Supply.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport \"./Tokenomics.sol\";\nimport \"./RFI.sol\";\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\n\nabstract contract Supply is Tokenomics, RFI {\n\tusing SafeMath for uint256;\n\t/**\n\t * @notice Calculates current total circulating supply by substracting \"burned\"\n\t * tokens.\n\t */\n\tfunction totalCirculatingSupply() public view returns(uint256) {\n\t\treturn _tTotal.sub(balanceOf(deadAddr));\n\t}\n}"
}
},
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}
}}
"language": "Solidity",
"sources": {
"contracts/LESLAR.sol": {
"content": "//SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\n// __ __________ ___ ___ \n// / / / __/ __/ / / _ | / _ \\\n// / /__/ _/_\\ \\/ /__/ __ |/ , _/\n// /____/___/___/____/_/ |_/_/|_| \n// LESLAR METAVERSE\n\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/utils/Context.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport \"./abstracts/core/Tokenomics.sol\";\nimport \"./abstracts/core/RFI.sol\";\nimport \"./abstracts/features/Expensify.sol\";\nimport \"./abstracts/features/TxPolice.sol\";\nimport \"./abstracts/core/Pancake.sol\";\nimport \"./abstracts/helpers/Helpers.sol\";\n\ncontract LESLAR is \n\tIERC20Metadata, \n\tContext, \n\tOwnable,\n\tTokenomics, \n\tRFI,\n\tTxPolice,\n\tExpensify\n{\n\tusing SafeMath for uint256;\n\n\tconstructor() {\n\t\t// Set special addresses\n\t\tspecialAddresses[owner()] = true;\n\t\tspecialAddresses[address(this)] = true;\n\t\tspecialAddresses[deadAddr] = true;\n\t\t// Set limit exemptions\n\t\tLimitExemptions memory exemptions;\n\t\texemptions.all = true;\n\t\tlimitExemptions[owner()] = exemptions;\n\t\tlimitExemptions[address(this)] = exemptions;\n\t}\n\n/* ------------------------------- IERC20 Meta ------------------------------ */\n\n\tfunction name() external pure override returns(string memory) { return NAME;}\n\tfunction symbol() external pure override returns(string memory) { return SYMBOL;}\n\tfunction decimals() external pure override returns(uint8) { return DECIMALS; }\t\n\n/* -------------------------------- Overrides ------------------------------- */\n\n\tfunction beforeTokenTransfer(address from, address to, uint256 amount) \n\t\tinternal \n\t\toverride \n\t{\n\t\t// Make sure max transaction and wallet size limits are not exceeded.\n\t\tTransactionLimitType[2] memory limits = [\n\t\t\tTransactionLimitType.TRANSACTION, \n\t\t\tTransactionLimitType.WALLET\n\t\t];\n\t\tguardMaxLimits(from, to, amount, limits);\n\t\tenforceCyclicSellLimit(from, to, amount);\n\t\t// Try to execute all our accumulator features.\n\t\ttriggerFeatures(from);\n\t}\n\n\tfunction takeFee(address from, address to) \n\t\tinternal \n\t\tview \n\t\toverride \n\t\treturns(bool) \n\t{\n\t\treturn canTakeFee(from, to);\n\t}\n\n/* -------------------------- Accumulator Triggers -------------------------- */\n\n\t// Will keep track of how often each trigger has been called already.\n\tuint256 internal triggerCount = 0;\n\t// Will keep track of trigger indexes, which can be triggered during current tx.\n\tuint8 internal canTrigger = 0;\n\n\t/**\n\t* @notice Convenience wrapper function which tries to trigger our custom \n\t* features.\n\t*/\n\tfunction triggerFeatures(address from) private {\n\t\tuint256 contractTokenBalance = balanceOf(address(this));\n\t\t// First determine which triggers can be triggered.\n\t\tif (!liquidityPools[from]) {\n\t\t\tif (canTax(contractTokenBalance)) {\n\t\t\t\tcanTrigger = 1;\n\t\t\t}\n\t\t}\n\n\t\t// Avoid falling into a tx loop.\n\t\tif (!inTriggerProcess) {\n\t\t\tif (canTax(contractTokenBalance)) {\n\t\t\t\t_triggerTax();\n\t\t\t\tdelete canTrigger;\n\t\t\t}\n\t\t}\n\t}\n\n/* ---------------------------- Internal Triggers --------------------------- */\n\n\t/**\n\t* @notice Triggers tax and updates triggerLog\n\t*/\n\tfunction _triggerTax() internal {\n\t\ttaxify(accumulatedForTax);\n\t\ttriggerCount = triggerCount.add(1);\n\t}\n\n/* ---------------------------- External Triggers --------------------------- */\n\n\t/**\n\t* @notice Allows to trigger tax manually.\n\t*/\n\tfunction triggerTax() external onlyOwner {\n\t\tuint256 contractTokenBalance = balanceOf(address(this));\n\t\trequire(canTax(contractTokenBalance), \"Not enough tokens accumulated.\");\n\t\t_triggerTax();\n\t}\n}"
},
"@openzeppelin/contracts/utils/math/SafeMath.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)\n\npragma solidity ^0.8.0;\n\n// CAUTION\n// This version of SafeMath should only be used with Solidity 0.8 or later,\n// because it relies on the compiler's built in overflow checks.\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations.\n *\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\n * now has built in overflow checking.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's ` ` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n return a b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n return a * b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator.\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b <= a, errorMessage);\n return a - b;\n }\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b > 0, errorMessage);\n return a / b;\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b > 0, errorMessage);\n return a % b;\n }\n }\n}\n"
},
"@openzeppelin/contracts/utils/Context.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n"
},
"@openzeppelin/contracts/access/Ownable.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor() {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n"
},
"@openzeppelin/contracts/token/ERC20/IERC20.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `from` to `to` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(\n address from,\n address to,\n uint256 amount\n ) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n"
},
"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n *\n * _Available since v4.1._\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"
},
"contracts/abstracts/core/Tokenomics.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\nabstract contract Tokenomics is IERC20, Ownable {\n\tusing SafeMath for uint256;\n mapping (address => bool) private _isBot;\n\n/* ---------------------------------- Token --------------------------------- */\n\n\tstring internal constant NAME = \"LESLAR Metaverse\";\n\tstring internal constant SYMBOL = \"LESLAR\";\n\n\tuint8 internal constant DECIMALS = 9;\n\tuint256 internal constant ZEROES = 10 ** DECIMALS;\n\n\tuint256 private constant MAX = ~uint256(0);\n\tuint256 internal constant _tTotal = 1000000000000 * ZEROES;\n\tuint256 internal _rTotal = (MAX - (MAX % _tTotal));\n\n\taddress public deadAddr = 0x000000000000000000000000000000000000dEaD;\n\n/* ---------------------------------- Fees ---------------------------------- */\n\n\t// To be collected for tax\n\tuint256 public _taxFee = 3;\n\t// Used to cache fee when removing fee temporarily.\n\tuint256 internal _previousTaxFee = _taxFee;\n\t// Will keep tabs on the amount which should be taken from wallet for taxes.\n\tuint256 public accumulatedForTax = 0;\n\n\t/**\n\t * @notice Allows setting Tax fee.\n\t */\n\tfunction setTaxFee(uint256 fee)\n\t\texternal \n\t\tonlyOwner\n\t\tsameValue(_taxFee, fee)\n\t{\n\t\t_taxFee = fee;\n\t}\n\n\t/**\n\t * @notice Allows temporarily set all feees to 0. \n\t * It can be restored later to the previous fees.\n\t */\n\tfunction disableAllFeesTemporarily()\n\t\texternal\n\t\tonlyOwner\n\t{\n\t\tremoveAllFee();\n\t}\n\n\t/**\n\t * @notice Restore all fees from previously set.\n\t */\n\tfunction restoreAllFees()\n\t\texternal\n\t\tonlyOwner\n\t{\n\t\trestoreAllFee();\n\t}\n\n\t/**\n\t * @notice Temporarily stops all fees. Caches the fees into secondary variables,\n\t * so it can be reinstated later.\n\t */\n\tfunction removeAllFee() internal {\n\t\tif (_taxFee == 0) return;\n\n\t\t_previousTaxFee = _taxFee;\n\n\t\t_taxFee = 0;\n\t}\n\n\t/**\n\t * @notice Restores all fees removed previously, using cached variables.\n\t */\n\tfunction restoreAllFee() internal {\n\t\t_taxFee = _previousTaxFee;\n\t}\n\n\tfunction calculateTaxFee(\n\t\tuint256 amount,\n\t\tuint8 multiplier\n\t) internal view returns(uint256) {\n\t\treturn amount.mul(_taxFee).mul(multiplier).div(10 ** 2);\n\t}\n\n/* --------------------------- Triggers and limits -------------------------- */\n\n\t// One contract accumulates 0.01% of total supply, trigger tax wallet sendout.\n\tuint256 public minToTax = _tTotal.mul(1).div(10000);\n\n\t/**\n\t@notice External function allowing to set minimum amount of tokens which trigger\n\t* tax send out.\n\t*/\n\tfunction setMinToTax(uint256 minTokens) \n\t\texternal \n\t\tonlyOwner \n\t\tsupplyBounds(minTokens)\n\t{\n\t\tminToTax = minTokens * 10 ** 5;\n\t}\n\n/* --------------------------------- IERC20 --------------------------------- */\n\tfunction totalSupply() external pure override returns(uint256) {\n\t\treturn _tTotal;\n\t}\n\n\tfunction totalFees() external view returns(uint256) { \n\t\treturn _taxFee; \n\t}\n\n/* ---------------------------- Anti Bot System --------------------------- */\n\n function setAntibot(address account, bool _bot) external onlyOwner{\n require(_isBot[account] != _bot, \"Value already set\");\n _isBot[account] = _bot;\n }\n\n function isBot(address account) public view returns(bool){\n return _isBot[account];\n }\n\n/* -------------------------------- Modifiers ------------------------------- */\n\n // Use this in case BNB are sent to the contract by mistake\n function rescueBNB(uint256 weiAmount) external onlyOwner{\n require(address(this).balance >= weiAmount, \"insufficient BNB balance\");\n payable(msg.sender).transfer(weiAmount);\n }\n\n function rescueBEP20Tokens(address tokenAddress) external onlyOwner{\n IERC20(tokenAddress).transfer(msg.sender, IERC20(tokenAddress).balanceOf(address(this)));\n }\n\n/* -------------------------------- Modifiers ------------------------------- */\n\n\tmodifier supplyBounds(uint256 minTokens) {\n\t\trequire(minTokens * 10 ** 5 > 0, \"Amount must be more than 0\");\n\t\trequire(minTokens * 10 ** 5 <= _tTotal, \"Amount must be not bigger than total supply\");\n\t\t_;\n\t}\n\n\tmodifier sameValue(uint256 firstValue, uint256 secondValue) {\n\t\trequire(firstValue != secondValue, \"Already set to this value.\");\n\t\t_;\n\t}\n}"
},
"contracts/abstracts/core/RFI.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"../core/Tokenomics.sol\";\nimport \"../core/Pancake.sol\";\n\nabstract contract RFI is IERC20, Ownable, Tokenomics, Pancake {\n\tusing SafeMath for uint256;\n\n\tmapping(address => uint256) internal _rOwned;\n\tmapping(address => uint256) internal _tOwned;\n\tmapping(address => mapping(address => uint256)) private _allowances;\n\n\tstruct TValues {\n\t\tuint256 tTransferAmount;\n\t\tuint256 tFee;\n\t}\n\n\tstruct RValues {\n\t\tuint256 rAmount;\n\t\tuint256 rTransferAmount;\n\t\tuint256 rFee;\n\t}\n\n\tconstructor() {\n\t\t// Assigns all reflected tokens to the deployer on creation\n\t\t_rOwned[_msgSender()] = _rTotal;\n\n\t\temit Transfer(address(0), _msgSender(), _tTotal);\n\t}\n\n\t/**\n\t * @notice Calculates all values for \"total\" and \"reflected\" states.\n\t * @param tAmount Token amount related to which, all values are calculated.\n\t */\n\tfunction _getValues(\n\t\tuint256 tAmount\n\t) private view returns(\n\t\tTValues memory tValues, RValues memory rValues\n\t) {\n\t\tTValues memory tV = _getTValues(tAmount);\n\t\tRValues memory rV = _getRValues(\n\t\t\ttAmount,\n\t\t\ttV.tFee,\n\t\t\t_getRate()\n\t\t);\n\t\treturn (tV, rV);\n\t}\n\n\t/**\n\t * @notice Calculates values for \"total\" states.\n\t * @param tAmount Token amount related to which, total values are calculated.\n\t */\n\tfunction _getTValues(\n\t\tuint256 tAmount\n\t) private view returns(TValues memory tValues) {\n\t\tTValues memory tV;\n\t\ttV.tFee = calculateTaxFee(tAmount, 1);\n\n\t\tuint256 fees = tV.tFee;\n\t\ttV.tTransferAmount = tAmount.sub(fees);\n\t\treturn tV;\n\t}\n\n\t/**\n\t * @notice Calculates values for \"reflected\" states.\n\t * @param tAmount Token amount related to which, reflected values are calculated.\n\t * @param tFee Total fee related to which, reflected values are calculated.\n\t * @param currentRate Rate used to calculate reflected values.\n\t */\n\tfunction _getRValues(\n\t\tuint256 tAmount,\n\t\tuint256 tFee,\n\t\tuint256 currentRate\n\t) private pure returns(RValues memory rValues) {\n\t\tRValues memory rV;\n\t\trV.rAmount = tAmount.mul(currentRate);\n\t\tuint256 rFee = tFee.mul(currentRate);\n\t\tuint256 fees = rFee;\n\t\trV.rTransferAmount = rV.rAmount.sub(fees);\n\t\treturn rV;\n\t}\n\n\t/**\n\t * @notice Calculates the rate of total suply to reflected supply.\n\t */\n\tfunction _getRate() private view returns(uint256) {\n\t\t(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();\n\t\treturn rSupply.div(tSupply);\n\t}\n\n\t/**\n\t * @notice Returns totals for \"total\" supply and \"reflected\" supply.\n\t */\n\tfunction _getCurrentSupply() private view returns(uint256, uint256) {\n\t\tuint256 rSupply = _rTotal;\n\t\tuint256 tSupply = _tTotal;\n\t\tif (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);\n\t\treturn (rSupply, tSupply);\n\t}\n\n\tfunction tokenFromReflection(\n\t\tuint256 rAmount\n\t) public view returns(uint256) {\n\t\trequire(rAmount <= _rTotal, \"Amount must be less than total reflections\");\n\t\tuint256 currentRate = _getRate();\n\t\treturn rAmount.div(currentRate);\n\t}\n\n/* --------------------------------- Custom --------------------------------- */\n\n\t/**\n\t * @notice ERC20 token transaction approval with allowance.\n\t */\n\tfunction rfiApprove(\n\t\taddress ownr,\n\t\taddress spender,\n\t\tuint256 amount\n\t) internal {\n\t\trequire(ownr != address(0), \"ERC20: approve from the zero address\");\n\t\trequire(spender != address(0), \"ERC20: approve to the zero address\");\n\n\t\t_allowances[ownr][spender] = amount;\n\t\temit Approval(ownr, spender, amount);\n\t}\n\n\tfunction _transfer(\n\t\taddress from,\n\t\taddress to,\n\t\tuint256 amount\n\t) internal {\n\t\trequire(from != address(0), \"ERC20: transfer from the zero address\");\n\t\trequire(to != address(0), \"ERC20: transfer to the zero address\");\n\t\trequire(amount > 0, \"Transfer amount must be greater than zero\");\n\n\t\t// Override this in the main contract to plug your features inside transactions.\n\t\tbeforeTokenTransfer(from, to, amount);\n\n\t\t// Transfer amount, it will take tax, liquidity fee\n\t\tbool take = takeFee(from, to);\n\t\t_tokenTransfer(from, to, amount, take);\n\t}\n\n\t/**\n\t * @notice Performs token transfer with fees.\n\t * @param sender Address of the sender.\n\t * @param recipient Address of the recipient.\n\t * @param amount Amount of tokens to send.\n\t * @param take Toggle on/off fees.\n\t */\n\tfunction _tokenTransfer(\n\t\taddress sender,\n\t\taddress recipient,\n\t\tuint256 amount,\n\t\tbool take\n\t) private {\n\n\t\t// Remove fees for this transaction if needed.\n\t\tif (!take)\n\t\t\tremoveAllFee();\n\n\t\t// Calculate all reflection magic...\n\t\t(TValues memory tV, RValues memory rV) = _getValues(amount);\n\n\t\t// Adjust reflection states\n\t\t_rOwned[sender] = _rOwned[sender].sub(rV.rAmount);\n\t\t_rOwned[recipient] = _rOwned[recipient].add(rV.rTransferAmount);\n\n\t\t// Calcuate fees. If above fees were removed, then these will obviously\n\t\t// not take any fees.\n\t\t_takeTax(tV.tFee);\n\n\t\temit Transfer(sender, recipient, tV.tTransferAmount);\n\n\t\t// Reinstate fees if they were removed for this transaction.\n\t\tif (!take)\n\t\t\trestoreAllFee();\n\t}\n\n\t/**\n\t* @notice Override this function to intercept the transaction and perform \n\t* additional checks or perform certain functions before allowing transaction\n\t* to complete. You can prevent transaction to complete here too.\n\t*/\n\tfunction beforeTokenTransfer(\n\t\taddress from, \n\t\taddress to, \n\t\tuint256 amount\n\t) virtual internal {\n\n\n\t}\n\n\tfunction takeFee(address from, address to) virtual internal returns(bool) {\n\n\n\t\treturn true;\n\t}\n\n/* ------------------------------- Custom fees ------------------------------ */\n\t/**\n\t* @notice Collects tokens from tax fee. Accordingly adjusts \"reflected\" \n\tamounts. \n\t*/\n\tfunction _takeTax(\n\t\tuint256 tFee\n\t) private {\n\t\tuint256 currentRate = _getRate();\n\t\tuint256 rFee = tFee.mul(currentRate);\n\t\t_rOwned[address(this)] = _rOwned[address(this)].add(rFee);\n\t\t// Keep tabs, so when processing is triggered, we know how much should we take.\n\t\taccumulatedForTax = accumulatedForTax.add(tFee);\n\t}\n\n/* --------------------------------- IERC20 --------------------------------- */\n\n\tfunction balanceOf(\n\t\taddress account\n\t) public view override returns(uint256) {\n\t\treturn tokenFromReflection(_rOwned[account]);\n\t}\n\n\tfunction transfer(\n\t\taddress recipient,\n\t\tuint256 amount\n\t) public override returns(bool) {\n\t\t_transfer(_msgSender(), recipient, amount);\n\t\treturn true;\n\t}\n\n\tfunction allowance(\n\t\taddress ownr,\n\t\taddress spender\n\t) public view override returns(uint256) {\n\t\treturn _allowances[ownr][spender];\n\t}\n\n\tfunction approve(\n\t\taddress spender,\n\t\tuint256 amount\n\t) public override returns(bool) {\n\t\trfiApprove(_msgSender(), spender, amount);\n\t\treturn true;\n\t}\n\n\tfunction transferFrom(\n\t\taddress sender,\n\t\taddress recipient,\n\t\tuint256 amount\n\t) public override returns(bool) {\n\t\t_transfer(sender, recipient, amount);\n\t\trfiApprove(\n\t\t\tsender,\n\t\t\t_msgSender(),\n\t\t\t_allowances[sender][_msgSender()].sub(\n\t\t\t\tamount,\n\t\t\t\t\"ERC20: transfer amount exceeds allowance\"\n\t\t\t)\n\t\t);\n\t\treturn true;\n\t}\n\n\tfunction increaseAllowance(\n\t\taddress spender,\n\t\tuint256 addedValue\n\t) public virtual returns(bool) {\n\t\trfiApprove(\n\t\t\t_msgSender(),\n\t\t\tspender,\n\t\t\t_allowances[_msgSender()][spender].add(addedValue)\n\t\t);\n\t\treturn true;\n\t}\n\n\tfunction decreaseAllowance(\n\t\taddress spender,\n\t\tuint256 subtractedValue\n\t) public virtual returns(bool) {\n\t\trfiApprove(\n\t\t\t_msgSender(),\n\t\t\tspender,\n\t\t\t_allowances[_msgSender()][spender]\n\t\t\t.sub(subtractedValue, \"ERC20: decreased allowance below zero\")\n\t\t);\n\t\treturn true;\n\t}\n\n/* -------------------------------- Modifiers ------------------------------- */\n\n\tmodifier onlyOwnerOrHolder {\n\t\trequire(\n\t\t\towner() == _msgSender() || balanceOf(_msgSender()) > 0, \n\t\t\t\"Only the owner and the holder can use this feature.\"\n\t\t\t);\n\t\t_;\n\t}\n\n\tmodifier onlyHolder {\n\t\trequire(\n\t\t\tbalanceOf(_msgSender()) > 0, \n\t\t\t\"Only the holder can use this feature.\"\n\t\t\t);\n\t\t_;\n\t}\n}"
},
"contracts/abstracts/features/Expensify.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"../helpers/Helpers.sol\";\nimport \"../core/Pancake.sol\";\nimport \"../core/Tokenomics.sol\";\nimport \"../features/TxPolice.sol\";\n\nabstract contract Expensify is Ownable, Helpers, Tokenomics, Pancake, TxPolice {\n\tusing SafeMath for uint256;\n\taddress public productDevWallet;\n\taddress public devWallet;\n\taddress public marketingWallet;\n\t// Expenses fee accumulated amount will be divided using these.\n\tuint256 public productDevShare = 30; // 30%\n\tuint256 public devShare = 30; // 30%\n\tuint256 public marketingShare = 40; // 40%\n\n\t/**\n\t* @notice External function allowing to set/change product dev wallet.\n\t* @param wallet: this wallet will receive product dev share.\n\t* @param share: multiplier will be divided by 100. 30 -> 30%, 3 -> 3% etc.\n\t*/\n\tfunction setProductDevWallet(address wallet, uint256 share) \n\t\texternal onlyOwner legitWallet(wallet) \n\t{\n\t\tproductDevWallet = wallet;\n\t\tproductDevShare = share;\n\t\tswapExcludedFromFee(wallet, productDevWallet);\n\t}\n\n\t/**\n\t* @notice External function allowing to set/change dev wallet.\n\t* @param wallet: this wallet will receive dev share.\n\t* @param share: multiplier will be divided by 100. 30 -> 30%, 3 -> 3% etc.\n\t*/\n\tfunction setDevWallet(address wallet, uint256 share) \n\t\texternal onlyOwner legitWallet(wallet)\n\t{\n\t\tdevWallet = wallet;\n\t\tdevShare = share;\n\t\tswapExcludedFromFee(wallet, devWallet);\n\t}\n\n\t/**\n\t* @notice External function allowing to set/change marketing wallet.\n\t* @param wallet: this wallet will receive marketing share.\n\t* @param share: multiplier will be divided by 100. 30 -> 30%, 3 -> 3% etc.\n\t*/\n\tfunction setMarketingWallet(address wallet, uint256 share) \n\t\texternal onlyOwner legitWallet(wallet)\n\t{\n\t\tmarketingWallet = wallet;\n\t\tmarketingShare = share;\n\t\tswapExcludedFromFee(wallet, marketingWallet);\n\t}\n\n\t/** \n\t* @notice Checks if all required prerequisites are met for us to trigger \n\t* taxes send out event.\n\t*/\n\tfunction canTax(\n\t\tuint256 contractTokenBalance\n\t) \n\t\tinternal \n\t\tview\n\t\treturns(bool) \n\t{\n\t\treturn contractTokenBalance >= accumulatedForTax\n && accumulatedForTax >= minToTax;\n\t}\n\n\t/**\n\t* @notice Splits tokens into pieces for product dev, dev and marketing wallets \n\t* and sends them out.\n\t* Note: Shares must add up to 100, otherwise tax fee will not be \n\t\tdistributed properly. And that can invite many other issues.\n\t\tSo we can't proceed. You will see \"Taxify\" event triggered on \n\t\tthe blockchain with \"0, 0, 0\" then. This will guide you to check and fix\n\t\tyour share setup.\n\t\tWallets must be set. But we will not use \"require\", so not to trigger \n\t\ttransaction failure just because someone forgot to set up the wallet \n\t\taddresses. If you see \"Taxify\" event with \"0, 0, 0\" values, then \n\t\tcheck if you have set the wallets.\n\t\t@param tokenAmount amount of tokens to take from balance and send out.\n\t*/\n\tfunction taxify(\n\t\tuint256 tokenAmount\n\t) internal lockTheProcess {\n\t\tuint256 productDevPiece;\n\t\tuint256 devPiece;\n\t\tuint256 marketingPiece;\n\n\t\tif (\n\t\t\tproductDevShare.add(devShare).add(marketingShare) == 100\n\t\t\t&& productDevWallet != address(0) \n\t\t\t&& devWallet != address(0)\n\t\t\t&& marketingWallet != address(0)\n\t\t) {\n\t\t\tproductDevPiece = tokenAmount.mul(productDevShare).div(100);\n\t\t\tdevPiece = tokenAmount.mul(devShare).div(100);\n\t\t\t// Make sure all tokens are distributed.\n\t\t\tmarketingPiece = tokenAmount.sub(productDevPiece).sub(devPiece);\n\t\t\t_transfer(address(this), productDevWallet, productDevPiece);\n\t\t\t_transfer(address(this), devWallet, devPiece);\n\t\t\t_transfer(address(this), marketingWallet, marketingPiece);\n\t\t\t// Reset the accumulator, only if tokens actually sent, otherwise we keep\n\t\t\t// acumulating until above mentioned things are fixed.\n\t\t\taccumulatedForTax = 0;\n\t\t}\n\t\t\n \t\temit TaxifyDone(productDevPiece, devPiece, marketingPiece);\n\t}\n\n/* --------------------------------- Events --------------------------------- */\n\tevent TaxifyDone(\n\t\tuint256 tokensSentToProductDev,\n\t\tuint256 tokensSentToDev,\n\t\tuint256 tokensSentToMarketing\n\t);\n}"
},
"contracts/abstracts/features/TxPolice.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"../core/Pancake.sol\";\nimport \"../core/Tokenomics.sol\";\nimport \"../core/RFI.sol\";\nimport \"../core/Supply.sol\";\n\nabstract contract TxPolice is Tokenomics, Pancake, RFI, Supply {\n\tusing SafeMath for uint256;\n\t// Wallet hard cap 2% of total supply\n\tuint256 public maxWalletSize = _tTotal.mul(2).div(100);\n\t// Can transfer wallet-to-wallet 100%\n\tuint256 public maxTxAmount = _tTotal.mul(100).div(100);\n\t// Convenience enum to differentiate transaction limit types.\n\tenum TransactionLimitType { TRANSACTION, WALLET, SELL }\n\t// Convenience enum to differentiate transaction types.\n\tenum TransactionType { REGULAR, SELL, BUY }\n\n\t// Global toggle to avoid trigger loops\n\tbool internal inTriggerProcess;\n\tmodifier lockTheProcess {\n\t\tinTriggerProcess = true;\n\t\t_;\n\t\tinTriggerProcess = false;\n\t}\n\n\t// Sometimes you just have addresses which should be exempt from any \n\t// limitations and fees.\n\tmapping(address => bool) public specialAddresses;\n\n\t// Toggle multiple exemptions from transaction limits.\n\tstruct LimitExemptions {\n\t\tbool all;\n\t\tbool transaction;\n\t\tbool wallet;\n\t\tbool sell;\n\t\tbool fees;\n\t}\n\n\t// Keeps a record of addresses with limitation exemptions\n\tmapping(address => LimitExemptions) internal limitExemptions;\n\n/* --------------------------- Exemption Utilities -------------------------- */\n\n\t/**\n\t* @notice External function allowing owner to toggle various limit exemptions\n\t* for any address.\n\t*/\n\tfunction toggleLimitExemptions(\n\t\taddress addr, \n\t\tbool allToggle, \n\t\tbool txToggle, \n\t\tbool walletToggle, \n\t\tbool sellToggle,\n\t\tbool feesToggle\n\t) \n\t\tpublic \n\t\tonlyOwner\n\t{\n\t\tLimitExemptions memory ex = limitExemptions[addr];\n\t\tex.all = allToggle;\n\t\tex.transaction = txToggle;\n\t\tex.wallet = walletToggle;\n\t\tex.sell = sellToggle;\n\t\tex.fees = feesToggle;\n\t\tlimitExemptions[addr] = ex;\n\t}\n\n\t/**\n\t* @notice External function allowing owner toggle any address as special address.\n\t*/\n\tfunction toggleSpecialWallets(address specialAddr, bool toggle) \n\t\texternal \n\t\tonlyOwner \n\t{\n\t\tspecialAddresses[specialAddr] = toggle;\n\t}\n\n/* ------------------------------- Sell Limit ------------------------------- */\n\t// Toggle for sell limit feature\n\tbool public isSellLimitEnabled = true;\n\t// Sell limit cycle period\n\tuint256 public sellCycleHours = 24;\n\t// Hour multiplier\n\tuint256 private hour = 60 * 60;\n\t// Changing this you can increase/decrease decimals of your maxSellAllowancePerCycle \n\tuint256 public maxSellAllowanceMultiplier = 100;\n\t// (address => amount)\n\tmapping(address => uint256) private cycleSells;\n\t// (address => lastTimestamp)\n\tmapping(address => uint256) private lastSellTimestamp;\n\n\t/**\n\t* @notice Tracks and limits sell transactions per user per cycle set.\n\t* Unless user is a special address or has exemptions.\n\t*/\n\tfunction enforceCyclicSellLimit(address from, address to, uint256 amount) \n\t\tinternal \n\t{\n\t\t// Identify if selling... otherwise quit.\n\t\tbool isSell = getTransactionType(from, to) == TransactionType.SELL;\n\n\t\t// Guards\n\t\t// Get exemptions if any for tx sender and receiver.\n\t\tif (\n\t\t\tlimitExemptions[from].all\n\t\t\t|| limitExemptions[from].sell\n\t\t\t|| specialAddresses[from] \n\t\t\t|| !isSellLimitEnabled\n\t\t) { \n\n\t\t\treturn; \n\t\t}\n\n\t\tif (!isSell) { return; }\n\n\t\t// First check if sell amount doesn't exceed total max allowance.\n\t\tuint256 maxAllowance = maxSellAllowancePerCycle();\n\n\t\trequire(amount <= maxAllowance, \"Can't sell more than cycle allowance!\");\n\n\t\t// Then check if sell cycle has passed. If so, just update the maps and quit.\n\t\tif (hasSellCycleEnded(from)) {\n\t\t\tlastSellTimestamp[from] = block.timestamp;\n\t\t\tcycleSells[from] = amount;\n\t\t\treturn;\n\t\t}\n\n\t\t// If cycle has not yet passed... check if combined amount doesn't excceed the max allowance.\n\t\tuint256 combinedAmount = amount.add(cycleSells[from]);\n\n\t\trequire(combinedAmount <= maxAllowance, \"Combined cycle sell amount exceeds cycle allowance!\");\n\n\t\t// If all good just increment sells map. (don't update timestamp map, cause then \n\t\t// sell cycle will never end for this poor holder...)\n\t\tcycleSells[from] = combinedAmount;\n\t\treturn;\n\t}\n\n\t/**\n\t * @notice Calculates current maximum sell allowance per day based on the \n\t * total circulating supply.\n\t */\n\tfunction maxSellAllowancePerCycle() public view returns(uint256) {\n\t\t// 1% of total circulating supply.\n\t\treturn totalCirculatingSupply().mul(1).div(maxSellAllowanceMultiplier);\n\t}\n\n\t/**\n\t* @notice Allows to adjust your maxSellAllowancePerCycle.\n\t* 100 = 1% \n\t*/\n\tfunction setMaxSellAllowanceMultiplier(uint256 mult) external onlyOwner {\n\t\trequire(mult > 0, \"Multiplier can't be 0.\");\n\t\tmaxSellAllowanceMultiplier = mult;\n\t}\n\n\tfunction hasSellCycleEnded(address holderAddr) \n\t\tinternal \n\t\tview \n\t\treturns(bool) \n\t{\n\t\tuint256 lastSell = lastSellTimestamp[holderAddr];\n\t\tuint256 timeSinceLastSell = block.timestamp.sub(lastSell);\n\t\tbool cycleEnded = timeSinceLastSell >= sellCycleHours.mul(hour);\n\n\t\treturn cycleEnded;\n\t}\n\n\t/**\n\t* @notice External functions which allows to set selling limit period.\n\t*/\n\tfunction setSellCycleHours(uint256 hoursCycle) external onlyOwner {\n\t\trequire(hoursCycle >= 0, \"Hours can't be 0.\");\n\t\tsellCycleHours = hoursCycle;\n\t}\n\n\t/**\n\t* @notice External functions which allows to disable selling limits.\n\t*/\n\tfunction disableSellLimit() external onlyOwner {\n\t\trequire(isSellLimitEnabled, \"Selling limit already enabled.\");\n\t\tisSellLimitEnabled = false;\n\t}\n\n\t/**\n\t* @notice External functions which allows to enable selling limits.\n\t*/\n\tfunction enableSellLimit() external onlyOwner {\n\t\trequire(!isSellLimitEnabled, \"Selling limit already disabled.\");\n\t\tisSellLimitEnabled = true;\n\t}\n\n\t/**\n\t* @notice External function which can be called by a holder to see how much \n\t* sell allowance is left for the current cycle period.\n\t*/\n\tfunction sellAllowanceLeft() external view returns(uint256) {\n\t\taddress sender = _msgSender();\n\t\tbool isSpecial = specialAddresses[sender];\n\t\tbool isExemptFromAll = limitExemptions[sender].all;\n\t\tbool isExemptFromSell = limitExemptions[sender].sell;\n\t\tbool isExemptFromWallet = limitExemptions[sender].wallet;\n\n\t\t// First guard exemptions\n\t\tif (\n\t\t\tisSpecial || isExemptFromAll \n\t\t\t|| (isExemptFromSell && isExemptFromWallet)) \n\t\t{\n\t\t\treturn balanceOf(sender);\n\t\t} else if (isExemptFromSell && !isExemptFromWallet) {\n\t\t\treturn maxWalletSize;\n\t\t}\n\n\t\t// Next quard toggle and check cycle\n\t\tuint256 maxAllowance = maxWalletSize;\n\t\tif (isSellLimitEnabled) {\n\t\t\tmaxAllowance = maxSellAllowancePerCycle();\n\t\t\tif (!hasSellCycleEnded(sender)) {\n\t\t\t\tmaxAllowance = maxAllowance.sub(cycleSells[sender]);\n\t\t\t}\n\t\t} else if (isExemptFromWallet) {\n\t\t\tmaxAllowance = balanceOf(sender);\n\t\t}\n\t\treturn maxAllowance;\n\t}\n\n/* --------------------------------- Guards --------------------------------- */\n\n\t/**\n\t* @notice Checks passed multiple limitTypes and if required enforces maximum\n\t* limits.\n\t* NOTE: extend this function with more limit types if needed.\n\t*/\n\tfunction guardMaxLimits(\n\t\taddress from, \n\t\taddress to, \n\t\tuint256 amount,\n\t\tTransactionLimitType[2] memory limitTypes\n\t) internal view {\n\t\t// Get exemptions if any for tx sender and receiver.\n\t\tLimitExemptions memory senderExemptions = limitExemptions[from];\n\t\tLimitExemptions memory receiverExemptions = limitExemptions[to];\n\n\t\t// First check if any special cases\n\t\tif (\n\t\t\tsenderExemptions.all && receiverExemptions.all \n\t\t\t|| specialAddresses[from] \n\t\t\t|| specialAddresses[to] \n\t\t\t|| liquidityPools[to]\n\t\t) { return; }\n\n\t\t// If no... then go through each limit type and apply if no exemptions.\n\t\tfor (uint256 i = 0; i < limitTypes.length; i = 1) {\n\t\t\tif (\n\t\t\t\tlimitTypes[i] == TransactionLimitType.TRANSACTION \n\t\t\t\t&& !senderExemptions.transaction\n\t\t\t) {\n\t\t\t\trequire(\n\t\t\t\t\tamount <= maxTxAmount,\n\t\t\t\t\t\"Transfer amount exceeds the maxTxAmount.\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tlimitTypes[i] == TransactionLimitType.WALLET \n\t\t\t\t&& !receiverExemptions.wallet\n\t\t\t) {\n\t\t\t\tuint256 toBalance = balanceOf(to);\n\t\t\t\trequire(\n\t\t\t\t\ttoBalance.add(amount) <= maxWalletSize,\n\t\t\t\t\t\"Exceeds maximum wallet size allowed.\"\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n/* ---------------------------------- Fees ---------------------------------- */\n\nfunction canTakeFee(address from, address to) \n\tinternal view returns(bool) \n{\t\n\tbool take = true;\n\tif (\n\t\tlimitExemptions[from].all \n\t\t|| limitExemptions[to].all\n\t\t|| limitExemptions[from].fees \n\t\t|| limitExemptions[to].fees \n\t\t|| specialAddresses[from] \n\t\t|| specialAddresses[to]\n\t) { take = false; }\n\n\treturn take;\n}\n\n\t/**\n\t* @notice Updates old and new wallet fee exemptions.\n\t*/\n\tfunction swapExcludedFromFee(address newWallet, address oldWallet) internal {\n\t\tif (oldWallet != address(0)) {\n\t\t\ttoggleLimitExemptions(oldWallet, false, false, false, false, false);\n\t\t}\n\t\ttoggleLimitExemptions(newWallet, false, false, false, true, true);\n\t}\n\n/* --------------------------------- Helpers -------------------------------- */\n\n\t/**\n\t* @notice Helper function to determine what kind of transaction it is.\n\t* @param from transaction sender\n\t* @param to transaction receiver\n\t*/\n\tfunction getTransactionType(address from, address to) \n\t\tinternal view returns(TransactionType)\n\t{\n\t\tif (liquidityPools[from] && !liquidityPools[to]) {\n\t\t\t// LP -> addr\n\t\t\treturn TransactionType.BUY;\n\t\t} else if (!liquidityPools[from] && liquidityPools[to]) {\n\t\t\t// addr -> LP\n\t\t\treturn TransactionType.SELL;\n\t\t}\n\t\treturn TransactionType.REGULAR;\n\t}\n}"
},
"contracts/abstracts/core/Pancake.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\n\nabstract contract Pancake is Ownable {\n\tusing SafeMath for uint256;\n\t// Using Uniswap lib, because Pancakeswap forks are trash ATM...\n\tIUniswapV2Router02 internal uniswapV2Router;\n\t// We will call createPair() when we decide. To avoid snippers and bots.\n\taddress internal uniswapV2Pair;\n\t// This will be set when we call initDEXRouter().\n\taddress internal routerAddr;\n\t// To keep track of all LPs.\n\tmapping(address => bool) public liquidityPools;\n\n\t// To receive BNB from pancakeV2Router when swaping\n\treceive() external payable {}\n\n\t/**\n\t* @notice Initialises PCS router using the address. In addition creates a pair.\n\t* @param router Pancakeswap router address\n\t*/\n\tfunction initDEXRouter(address router) \n\t\texternal\n\t\tonlyOwner\n\t{\n\t\t// In case we already have set uniswapV2Pair before, remove it from LPs mapping.\n\t\tif (uniswapV2Pair != address(0)) {\n\t\t\tremoveAddressFromLPs(uniswapV2Pair);\n\t\t}\n\t\trouterAddr = router;\n\t\tIUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);\n\t\tuniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(\n\t\t\taddress(this), \n\t\t\t_uniswapV2Router.WETH()\n\t\t);\n\t\tuniswapV2Router = _uniswapV2Router;\n\t\taddAddressToLPs(uniswapV2Pair);\n\t\temit RouterSet(router, uniswapV2Pair);\n\t}\n\n\t/**\n\t * @notice Swaps passed tokens for BNB using Pancakeswap router and returns \n\t * actual amount received.\n\t */\n\tfunction swapTokensForBnb(\n\t\tuint256 tokenAmount\n\t) internal returns(uint256) {\n\t\tuint256 initialBalance = address(this).balance;\n\t\t// generate the pancake pair path of token -> wbnb\n\t\taddress[] memory path = new address[](2);\n\t\tpath[0] = address(this);\n\t\tpath[1] = uniswapV2Router.WETH();\n\n\t\t// Make the swap\n\t\tuniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(\n\t\t\ttokenAmount,\n\t\t\t0, // accept any amount of BNB\n\t\t\tpath,\n\t\t\taddress(this),\n\t\t\tblock.timestamp\n\t\t);\n\n\t\tuint256 bnbReceived = address(this).balance.sub(initialBalance);\n\t\treturn bnbReceived;\n\t}\n\n\t/**\n\t* @notice Adds address to a liquidity pool map. Can be called externaly.\n\t*/\n\tfunction addAddressToLPs(address lpAddr) public onlyOwner {\n\t\tliquidityPools[lpAddr] = true;\n\t}\n\n\t/**\n\t* @notice Removes address from a liquidity pool map. Can be called externaly.\n\t*/\n\tfunction removeAddressFromLPs(address lpAddr) public onlyOwner {\n\t\tliquidityPools[lpAddr] = false;\n\t}\n\n/* --------------------------------- Events --------------------------------- */\n\tevent RouterSet(address indexed router, address indexed pair);\n\n/* -------------------------------- Modifiers ------------------------------- */\n\tmodifier pcsInitialized {\n\t\trequire(routerAddr != address(0), 'Router address has not been set!');\n\t\trequire(uniswapV2Pair != address(0), 'PCS pair not created yet!');\n\t\t_;\n\t}\n}"
},
"contracts/abstracts/helpers/Helpers.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nabstract contract Helpers {\n\n/* -------------------------------- Modifiers ------------------------------- */\n\n\tmodifier legitWallet(address wallet) {\n\t\trequire(wallet != address(0), \"Wallet address must be set!\");\n\t\trequire(wallet != address(this), \"Wallet address can't be this contract.\");\n\t\t_;\n\t}\n}"
},
"@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol": {
"content": "pragma solidity >=0.5.0;\n\ninterface IUniswapV2Factory {\n event PairCreated(address indexed token0, address indexed token1, address pair, uint);\n\n function feeTo() external view returns (address);\n function feeToSetter() external view returns (address);\n\n function getPair(address tokenA, address tokenB) external view returns (address pair);\n function allPairs(uint) external view returns (address pair);\n function allPairsLength() external view returns (uint);\n\n function createPair(address tokenA, address tokenB) external returns (address pair);\n\n function setFeeTo(address) external;\n function setFeeToSetter(address) external;\n}\n"
},
"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol": {
"content": "pragma solidity >=0.5.0;\n\ninterface IUniswapV2Pair {\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n function name() external pure returns (string memory);\n function symbol() external pure returns (string memory);\n function decimals() external pure returns (uint8);\n function totalSupply() external view returns (uint);\n function balanceOf(address owner) external view returns (uint);\n function allowance(address owner, address spender) external view returns (uint);\n\n function approve(address spender, uint value) external returns (bool);\n function transfer(address to, uint value) external returns (bool);\n function transferFrom(address from, address to, uint value) external returns (bool);\n\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n function PERMIT_TYPEHASH() external pure returns (bytes32);\n function nonces(address owner) external view returns (uint);\n\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;\n\n event Mint(address indexed sender, uint amount0, uint amount1);\n event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);\n event Swap(\n address indexed sender,\n uint amount0In,\n uint amount1In,\n uint amount0Out,\n uint amount1Out,\n address indexed to\n );\n event Sync(uint112 reserve0, uint112 reserve1);\n\n function MINIMUM_LIQUIDITY() external pure returns (uint);\n function factory() external view returns (address);\n function token0() external view returns (address);\n function token1() external view returns (address);\n function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\n function price0CumulativeLast() external view returns (uint);\n function price1CumulativeLast() external view returns (uint);\n function kLast() external view returns (uint);\n\n function mint(address to) external returns (uint liquidity);\n function burn(address to) external returns (uint amount0, uint amount1);\n function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;\n function skim(address to) external;\n function sync() external;\n\n function initialize(address, address) external;\n}\n"
},
"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol": {
"content": "pragma solidity >=0.6.2;\n\ninterface IUniswapV2Router01 {\n function factory() external pure returns (address);\n function WETH() external pure returns (address);\n\n function addLiquidity(\n address tokenA,\n address tokenB,\n uint amountADesired,\n uint amountBDesired,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline\n ) external returns (uint amountA, uint amountB, uint liquidity);\n function addLiquidityETH(\n address token,\n uint amountTokenDesired,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external payable returns (uint amountToken, uint amountETH, uint liquidity);\n function removeLiquidity(\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline\n ) external returns (uint amountA, uint amountB);\n function removeLiquidityETH(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external returns (uint amountToken, uint amountETH);\n function removeLiquidityWithPermit(\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountA, uint amountB);\n function removeLiquidityETHWithPermit(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountToken, uint amountETH);\n function swapExactTokensForTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external returns (uint[] memory amounts);\n function swapTokensForExactTokens(\n uint amountOut,\n uint amountInMax,\n address[] calldata path,\n address to,\n uint deadline\n ) external returns (uint[] memory amounts);\n function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)\n external\n payable\n returns (uint[] memory amounts);\n function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)\n external\n returns (uint[] memory amounts);\n function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)\n external\n returns (uint[] memory amounts);\n function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)\n external\n payable\n returns (uint[] memory amounts);\n\n function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);\n function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);\n function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);\n function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);\n function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);\n}\n"
},
"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol": {
"content": "pragma solidity >=0.6.2;\n\nimport './IUniswapV2Router01.sol';\n\ninterface IUniswapV2Router02 is IUniswapV2Router01 {\n function removeLiquidityETHSupportingFeeOnTransferTokens(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external returns (uint amountETH);\n function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountETH);\n\n function swapExactTokensForTokensSupportingFeeOnTransferTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external;\n function swapExactETHForTokensSupportingFeeOnTransferTokens(\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external payable;\n function swapExactTokensForETHSupportingFeeOnTransferTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external;\n}\n"
},
"contracts/abstracts/core/Supply.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport \"./Tokenomics.sol\";\nimport \"./RFI.sol\";\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\n\nabstract contract Supply is Tokenomics, RFI {\n\tusing SafeMath for uint256;\n\t/**\n\t * @notice Calculates current total circulating supply by substracting \"burned\"\n\t * tokens.\n\t */\n\tfunction totalCirculatingSupply() public view returns(uint256) {\n\t\treturn _tTotal.sub(balanceOf(deadAddr));\n\t}\n}"
}
},
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}
}}