[ Download CSV Export ]
OVERVIEW
Absorber is deflationary protocol with an absorption mechanism that gives it an ever-increasing price floor while removing tokens from the circulating supply at the same time offering a long term investment mechanism through passive & active staking.
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Absorber
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2021-01-28 */ pragma solidity ^0.6.0; //SPDX-License-Identifier: MIT abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * // importANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [// importANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * // importANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ interface IpancakeV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IpancakeV2ERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; } interface IpancakeV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IpancakeV2Router02 is IpancakeV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } contract Absorber is IERC20, Ownable, ReentrancyGuard { using SafeMath for uint256; mapping (address => mapping (address => uint256)) private _allowances; bool transferPaused = true; string private _name = "Absorber"; string private _symbol = "ABS"; uint8 private _decimals = 18; IpancakeV2Router02 public constant pancakeV2Router = IpancakeV2Router02(0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F); address public immutable pancakeV2Pair; address public _burnPool = 0x000000000000000000000000000000000000dEaD; mapping (address => uint256) private _aOwned; mapping (address => uint256) private _tOwned; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 100 * 10**4 * 10**18; uint256 private _aTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint8 public feeDecimals; uint32 public feePercentage; uint256 public minTokensBeforeAddToLP; uint256 feeDivider = 9999999999999999999999999; uint256 internal _minimumSupply; uint256 public _totalBurnedTokens; uint256 public _totalBurnedLpTokens; uint256 public _balanceOfLpTokens; bool public inSwapAndAbsorb; bool public swapAndAbsorbEnabled; event FeeUpdated(uint8 feeDecimals, uint32 feePercentage); event MinTokensBeforeAddToLPUpdated(uint256 minTokensBeforeAddToLP); event SwapAndAbsorbEnabledUpdated(bool enabled); event SwapAndAbsorb( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); modifier lockTheAbsorption { inSwapAndAbsorb = true; _; inSwapAndAbsorb = false; } constructor( uint8 _feeDecimals, uint32 _feePercentage, uint256 _minTokensBeforeAddToLP, bool _swapAndAbsorbEnabled)public { // Internal ABS creation, minting it directly to the deployer // deployer needs to then seed the pair with some liquidity _aOwned[_msgSender()] = _aTotal; // Create a pancake pair for this new token pancakeV2Pair = IpancakeV2Factory(pancakeV2Router.factory()) .createPair(address(this), pancakeV2Router.WETH()); // set the rest of the contract variables updateFee(_feeDecimals, _feePercentage); updateMinTokensBeforeAddToLP(_minTokensBeforeAddToLP); updateSwapAndAbsorbEnabled(_swapAndAbsorbEnabled); emit Transfer(address(0), _msgSender(), _tTotal); } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _tTotal; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromAllocation(_aOwned[account]); } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer( address from, address to, uint256 amount ) internal { // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & Reward if sender is the pancake pair. uint256 contractTokenBalance = balanceOf(address(this)); uint256 tokensToLock = calcTokenFee( amount, feeDecimals, feePercentage ); if (to != pancakeV2Pair) tokensToLock = 0; bool overMinTokenBalance = contractTokenBalance >= minTokensBeforeAddToLP; bool interactWithpancake = to == pancakeV2Pair; if ( overMinTokenBalance && !inSwapAndAbsorb && interactWithpancake && swapAndAbsorbEnabled ) { swapAndAbsorb(contractTokenBalance); } if (tokensToLock > 0 && interactWithpancake){ if (_isExcluded[from] && !_isExcluded[to]) { _transferFromExcluded(from, address(this), tokensToLock); } else if (!_isExcluded[from] && _isExcluded[to]) { _transferToExcluded(from, address(this), tokensToLock); } else if (!_isExcluded[from] && !_isExcluded[to]) { _transferStandard(from, address(this), tokensToLock); } else if (_isExcluded[from] && _isExcluded[to]) { _transferBothExcluded(from, address(this), tokensToLock); } else { _transferStandard(from, address(this), tokensToLock); } } uint256 tokensToTransfer = amount.sub(tokensToLock); if (_isExcluded[from] && !_isExcluded[to]) { _transferFromExcluded(from, to, tokensToTransfer); } else if (!_isExcluded[from] && _isExcluded[to]) { _transferToExcluded(from, to, tokensToTransfer); } else if (!_isExcluded[from] && !_isExcluded[to]) { _transferStandard(from, to, tokensToTransfer); } else if (_isExcluded[from] && _isExcluded[to]) { _transferBothExcluded(from, to, tokensToTransfer); } else { _transferStandard(from, to, tokensToTransfer); } } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } function minimumSupply() external view returns (uint256){ return _minimumSupply; } /* override the internal _transfer function so that we can take the fee, and conditionally do the swap + liquditiy */ function swapAndAbsorb(uint256 contractTokenBalance) private lockTheAbsorption { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- breaks the ETH -> ABS swap when swap+absorb is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to pancake addLiquidity(otherHalf, newBalance); emit SwapAndAbsorb(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the pancake pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = pancakeV2Router.WETH(); _approve(address(this), address(pancakeV2Router), tokenAmount); // make the swap pancakeV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(pancakeV2Router), tokenAmount); // add the liquidity pancakeV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function updateFeesAndSwapsEnabled(uint8 absFeeDecimals, uint32 absFeePercentage, uint256 absFeeDivider, bool _enabled) public onlyOwner nonReentrant { require(absFeeDivider >= 5, "The fee cannot be more than 5%"); require(absFeeDivider <= 1000, "The fee cannot be less than 0.1%"); require(absFeePercentage <= 15, "The fee cannot be more than 15%"); feeDivider = absFeeDivider; feeDecimals = absFeeDecimals; feePercentage = absFeePercentage; emit FeeUpdated(absFeeDecimals, absFeePercentage); if (swapAndAbsorbEnabled != _enabled){ swapAndAbsorbEnabled = _enabled; emit SwapAndAbsorbEnabledUpdated(_enabled); } } /* calculates a percentage of tokens to hold as the fee */ function calcTokenFee( uint256 _amount, uint8 _feeDecimals, uint32 _feePercentage ) public pure returns (uint256 locked) { locked = _amount.mul(_feePercentage).div( 10**(uint256(_feeDecimals) + 2) ); } receive() external payable {} /// /// Ownership adjustments /// function updateFee(uint8 _feeDecimals, uint32 _feePercentage) public onlyOwner nonReentrant { require(_feePercentage <= 15, "The fee can't be more than 15%"); feeDecimals = _feeDecimals; feePercentage = _feePercentage; emit FeeUpdated(_feeDecimals, _feePercentage); } function updateMinTokensBeforeAddToLP(uint256 _minTokensBeforeAddToLP) public onlyOwner nonReentrant { minTokensBeforeAddToLP = _minTokensBeforeAddToLP; emit MinTokensBeforeAddToLPUpdated(_minTokensBeforeAddToLP); } function updateSwapAndAbsorbEnabled(bool _enabled) public onlyOwner nonReentrant { swapAndAbsorbEnabled = _enabled; emit SwapAndAbsorbEnabledUpdated(_enabled); } function burnLiq(address _token, address _to, uint256 _amount) public onlyOwner nonReentrant { require(_to != address(0),"ERC20 transfer to zero address"); IpancakeV2ERC20 token = IpancakeV2ERC20(_token); _totalBurnedLpTokens = _totalBurnedLpTokens.sub(_amount); token.transfer(_burnPool, _amount); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 aAmount, uint256 aTransferAmount, uint256 aFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount); _aOwned[sender] = _aOwned[sender].sub(aAmount); _aOwned[recipient] = _aOwned[recipient].add(aTransferAmount); _allocationFee(aFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 aAmount, uint256 aTransferAmount, uint256 aFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount); _aOwned[sender] = _aOwned[sender].sub(aAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _aOwned[recipient] = _aOwned[recipient].add(aTransferAmount); _allocationFee(aFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 aAmount, uint256 aTransferAmount, uint256 aFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _aOwned[sender] = _aOwned[sender].sub(aAmount); _aOwned[recipient] = _aOwned[recipient].add(aTransferAmount); _allocationFee(aFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 aAmount, uint256 aTransferAmount, uint256 aFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _aOwned[sender] = _aOwned[sender].sub(aAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _aOwned[recipient] = _aOwned[recipient].add(aTransferAmount); _allocationFee(aFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _allocationFee(uint256 aFee, uint256 tFee) private { _aTotal = _aTotal.sub(aFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee) = __getTValues(tAmount); uint256 currentRate = _getRate(); (uint256 aAmount, uint256 aTransferAmount, uint256 aFee) = _getAValues(tAmount, tFee, currentRate); return (aAmount, aTransferAmount, aFee, tTransferAmount, tFee); } function changeFeeDivider(uint256 n) external onlyOwner { require(n >= 5, "The fee can't be more than 20%"); require(n <= 1000, "The fee can't be less than 0.1%"); feeDivider = n; } function __getTValues(uint256 tAmount) private view returns (uint256, uint256) { uint256 tFee = tAmount.div(feeDivider); uint256 tTransferAmount = tAmount.sub(tFee); return (tTransferAmount, tFee); } function _getAValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 aAmount = tAmount.mul(currentRate); uint256 aFee = tFee.mul(currentRate); uint256 aTransferAmount = aAmount.sub(aFee); return (aAmount, aTransferAmount, aFee); } function _getRate() private view returns(uint256) { (uint256 aSupply, uint256 tSupply) = _getCurrentSupply(); return aSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 aSupply = _aTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_aOwned[_excluded[i]] > aSupply || _tOwned[_excluded[i]] > tSupply) return (_aTotal, _tTotal); aSupply = aSupply.sub(_aOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (aSupply < _aTotal.div(_tTotal)) return (_aTotal, _tTotal); return (aSupply, tSupply); } function allocate(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 aAmount,,,,) = _getValues(tAmount); _aOwned[sender] = _aOwned[sender].sub(aAmount); _aTotal = _aTotal.sub(aAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function allocationFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 aAmount,,,,) = _getValues(tAmount); return aAmount; } else { (,uint256 aTransferAmount,,,) = _getValues(tAmount); return aTransferAmount; } } function tokenFromAllocation(uint256 aAmount) public view returns(uint256) { require(aAmount <= _aTotal, "Amount must be less than the total allocations"); uint256 currentRate = _getRate(); return aAmount.div(currentRate); } function excludeAccount(address account) external onlyOwner nonReentrant { require(!_isExcluded[account], "Account is already excluded"); if(_aOwned[account] > 0) { _tOwned[account] = tokenFromAllocation(_aOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(address account) external onlyOwner nonReentrant { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } }
[{"inputs":[{"internalType":"uint8","name":"_feeDecimals","type":"uint8"},{"internalType":"uint32","name":"_feePercentage","type":"uint32"},{"internalType":"uint256","name":"_minTokensBeforeAddToLP","type":"uint256"},{"internalType":"bool","name":"_swapAndAbsorbEnabled","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"feeDecimals","type":"uint8"},{"indexed":false,"internalType":"uint32","name":"feePercentage","type":"uint32"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeAddToLP","type":"uint256"}],"name":"MinTokensBeforeAddToLPUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndAbsorb","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndAbsorbEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_balanceOfLpTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBurnedLpTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"allocate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"allocationFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint8","name":"_feeDecimals","type":"uint8"},{"internalType":"uint32","name":"_feePercentage","type":"uint32"}],"name":"calcTokenFee","outputs":[{"internalType":"uint256","name":"locked","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"changeFeeDivider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercentage","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndAbsorb","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minTokensBeforeAddToLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeV2Router","outputs":[{"internalType":"contract IpancakeV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndAbsorbEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"aAmount","type":"uint256"}],"name":"tokenFromAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_feeDecimals","type":"uint8"},{"internalType":"uint32","name":"_feePercentage","type":"uint32"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"absFeeDecimals","type":"uint8"},{"internalType":"uint32","name":"absFeePercentage","type":"uint32"},{"internalType":"uint256","name":"absFeeDivider","type":"uint256"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateFeesAndSwapsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokensBeforeAddToLP","type":"uint256"}],"name":"updateMinTokensBeforeAddToLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapAndAbsorbEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6003805460ff1916600117905560e0604052600860a08190526720b139b7b93132b960c11b60c0908152620000389160049190620006fe565b506040805180820190915260038082526241425360e81b60209092019182526200006591600591620006fe565b5060068054601260ff1990911617610100600160a81b03191662dead0017905569d3c21bcecceda10000006000190619600b556a0845951614014849ffffff600f55348015620000b457600080fd5b50604051620035483803806200354883398181016040526080811015620000da57600080fd5b50805160208201516040830151606090930151919290916000620000fd620003a4565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018055600b54600760006200015c620003a4565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055507305ff2b0db69458a0750badebc4f9e13add608c7f6001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ce57600080fd5b505afa158015620001e3573d6000803e3d6000fd5b505050506040513d6020811015620001fa57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039092169163c9c653969130917305ff2b0db69458a0750badebc4f9e13add608c7f9163ad5c4648916004808301926020929190829003018186803b1580156200025c57600080fd5b505afa15801562000271573d6000803e3d6000fd5b505050506040513d60208110156200028857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620002db57600080fd5b505af1158015620002f0573d6000803e3d6000fd5b505050506040513d60208110156200030757600080fd5b505160601b6001600160601b031916608052620003258484620003a8565b62000330826200051a565b6200033b8162000602565b62000345620003a4565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69d3c21bcecceda10000006040518082815260200191505060405180910390a3505050506200079a565b3390565b620003b2620003a4565b6000546001600160a01b0390811691161462000404576040805162461bcd60e51b8152602060048201819052602482015260008051602062003528833981519152604482015290519081900360640190fd5b600260015414156200044c576040805162461bcd60e51b815260206004820152601f602482015260008051602062003508833981519152604482015290519081900360640190fd5b6002600155600f63ffffffff82161115620004ae576040805162461bcd60e51b815260206004820152601e60248201527f546865206665652063616e2774206265206d6f7265207468616e203135250000604482015290519081900360640190fd5b600d805463ffffffff8316610100810264ffffffff001960ff871660ff199094168417161790925560408051918252602082019290925281517f460fa919625630f734b5d86356a2511f134b6df313c793ca09e0399de8d933a0929181900390910190a1505060018055565b62000524620003a4565b6000546001600160a01b0390811691161462000576576040805162461bcd60e51b8152602060048201819052602482015260008051602062003528833981519152604482015290519081900360640190fd5b60026001541415620005be576040805162461bcd60e51b815260206004820152601f602482015260008051602062003508833981519152604482015290519081900360640190fd5b6002600155600e8190556040805182815290517fa19cd73a84349518e5c3d968935fb1f202c6eb5b69967184ad5013bbf24af63b9181900360200190a15060018055565b6200060c620003a4565b6000546001600160a01b039081169116146200065e576040805162461bcd60e51b8152602060048201819052602482015260008051602062003528833981519152604482015290519081900360640190fd5b60026001541415620006a6576040805162461bcd60e51b815260206004820152601f602482015260008051602062003508833981519152604482015290519081900360640190fd5b600260015560148054821515610100810261ff00199092169190911790915560408051918252517ff6048fff6212fd7a65ba15a0d33e029f1e2297a028e8951998aea1d8ead7b30a9181900360200190a15060018055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200074157805160ff191683800117855562000771565b8280016001018555821562000771579182015b828111156200077157825182559160200191906001019062000754565b506200077f92915062000783565b5090565b5b808211156200077f576000815560010162000784565b60805160601c612d46620007c260003980610fd15280611d9f5280611de45250612d466000f3fe6080604052600436106102295760003560e01c806390ca796b11610123578063cc0f1786116100ab578063f2cc0c181161006f578063f2cc0c181461080a578063f2fde38b1461083d578063f51d4df514610870578063f84354f114610885578063ff7c4790146108b857610230565b8063cc0f178614610757578063d5cbed9b1461076c578063dd62ed3e14610781578063e3c2fa11146107bc578063eaa93e78146107d157610230565b8063a001ecdd116100f2578063a001ecdd14610661578063a457c2d71461068f578063a9059cbb146106c8578063bdb2637014610701578063c44b75b01461072d57610230565b806390ca796b146105f857806391fe5a641461062257806395d89b41146106375780639fd3677f1461064c57610230565b80634183d35e116101b1578063689dc62d11610175578063689dc62d1461054357806370a0823114610586578063715018a6146105b95780637ede036d146105ce5780638da5cb5b146105e357610230565b80634183d35e1461044c5780634a45b7d91461047657806354bf9359146104a85780635a15ba24146104e7578063632a6a351461052e57610230565b806323b872dd116101f857806323b872dd1461036457806328d2bc91146103a7578063313ce567146103bc5780633793d4b5146103e7578063395093511461041357610230565b806306fdde0314610235578063095ea7b3146102bf57806318160ddd1461030c5780631a4cd1b11461033357610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108cd565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028457818101518382015260200161026c565b50505050905090810190601f1680156102b15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102cb57600080fd5b506102f8600480360360408110156102e257600080fd5b506001600160a01b038135169060200135610963565b604080519115158252519081900360200190f35b34801561031857600080fd5b50610321610981565b60408051918252519081900360200190f35b34801561033f57600080fd5b5061034861098f565b604080516001600160a01b039092168252519081900360200190f35b34801561037057600080fd5b506102f86004803603606081101561038757600080fd5b506001600160a01b038135811691602081013590911690604001356109a7565b3480156103b357600080fd5b50610348610a2e565b3480156103c857600080fd5b506103d1610a42565b6040805160ff9092168252519081900360200190f35b3480156103f357600080fd5b506104116004803603602081101561040a57600080fd5b5035610a4b565b005b34801561041f57600080fd5b506102f86004803603604081101561043657600080fd5b506001600160a01b038135169060200135610b55565b34801561045857600080fd5b506104116004803603602081101561046f57600080fd5b5035610ba3565b34801561048257600080fd5b506103216004803603604081101561049957600080fd5b50803590602001351515610c85565b3480156104b457600080fd5b50610321600480360360608110156104cb57600080fd5b50803590602081013560ff16906040013563ffffffff16610d1d565b3480156104f357600080fd5b506104116004803603608081101561050a57600080fd5b5060ff8135169063ffffffff60208201351690604081013590606001351515610d4d565b34801561053a57600080fd5b50610348610fcf565b34801561054f57600080fd5b506104116004803603606081101561056657600080fd5b506001600160a01b03813581169160208101359091169060400135610ff3565b34801561059257600080fd5b50610321600480360360208110156105a957600080fd5b50356001600160a01b0316611194565b3480156105c557600080fd5b506104116111fe565b3480156105da57600080fd5b506103216112a0565b3480156105ef57600080fd5b506103486112a6565b34801561060457600080fd5b506104116004803603602081101561061b57600080fd5b50356112b5565b34801561062e57600080fd5b5061032161138d565b34801561064357600080fd5b5061024a611393565b34801561065857600080fd5b506103216113f4565b34801561066d57600080fd5b506106766113fa565b6040805163ffffffff9092168252519081900360200190f35b34801561069b57600080fd5b506102f8600480360360408110156106b257600080fd5b506001600160a01b03813516906020013561140b565b3480156106d457600080fd5b506102f8600480360360408110156106eb57600080fd5b506001600160a01b038135169060200135611473565b34801561070d57600080fd5b506104116004803603602081101561072457600080fd5b50351515611487565b34801561073957600080fd5b506103216004803603602081101561075057600080fd5b503561157d565b34801561076357600080fd5b506103d16115dd565b34801561077857600080fd5b506102f86115e6565b34801561078d57600080fd5b50610321600480360360408110156107a457600080fd5b506001600160a01b03813581169160200135166115f4565b3480156107c857600080fd5b506102f861161f565b3480156107dd57600080fd5b50610411600480360360408110156107f457600080fd5b50803560ff16906020013563ffffffff16611628565b34801561081657600080fd5b506104116004803603602081101561082d57600080fd5b50356001600160a01b0316611793565b34801561084957600080fd5b506104116004803603602081101561086057600080fd5b50356001600160a01b0316611968565b34801561087c57600080fd5b50610321611a60565b34801561089157600080fd5b50610411600480360360208110156108a857600080fd5b50356001600160a01b0316611a66565b3480156108c457600080fd5b50610321611c76565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109595780601f1061092e57610100808354040283529160200191610959565b820191906000526020600020905b81548152906001019060200180831161093c57829003601f168201915b5050505050905090565b6000610977610970611c7c565b8484611c80565b5060015b92915050565b69d3c21bcecceda100000090565b7305ff2b0db69458a0750badebc4f9e13add608c7f81565b60006109b4848484611d6c565b610a24846109c0611c7c565b610a1f85604051806060016040528060288152602001612c54602891396001600160a01b038a166000908152600260205260408120906109fe611c7c565b6001600160a01b03168152602081019190915260400160002054919061211f565b611c80565b5060019392505050565b60065461010090046001600160a01b031681565b60065460ff1690565b610a53611c7c565b6000546001600160a01b03908116911614610aa3576040805162461bcd60e51b81526020600482018190526024820152600080516020612c7c833981519152604482015290519081900360640190fd5b6005811015610af9576040805162461bcd60e51b815260206004820152601e60248201527f546865206665652063616e2774206265206d6f7265207468616e203230250000604482015290519081900360640190fd5b6103e8811115610b50576040805162461bcd60e51b815260206004820152601f60248201527f546865206665652063616e2774206265206c657373207468616e20302e312500604482015290519081900360640190fd5b600f55565b6000610977610b62611c7c565b84610a1f8560026000610b73611c7c565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906121b6565b610bab611c7c565b6000546001600160a01b03908116911614610bfb576040805162461bcd60e51b81526020600482018190526024820152600080516020612c7c833981519152604482015290519081900360640190fd5b60026001541415610c41576040805162461bcd60e51b815260206004820152601f6024820152600080516020612b9d833981519152604482015290519081900360640190fd5b6002600155600e8190556040805182815290517fa19cd73a84349518e5c3d968935fb1f202c6eb5b69967184ad5013bbf24af63b9181900360200190a15060018055565b600069d3c21bcecceda1000000831115610ce6576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610d04576000610cf684612210565b5092945061097b9350505050565b6000610d0f84612210565b5091945061097b9350505050565b6000610d45600260ff851601600a0a610d3f8663ffffffff8087169061225c16565b906122b5565b949350505050565b610d55611c7c565b6000546001600160a01b03908116911614610da5576040805162461bcd60e51b81526020600482018190526024820152600080516020612c7c833981519152604482015290519081900360640190fd5b60026001541415610deb576040805162461bcd60e51b815260206004820152601f6024820152600080516020612b9d833981519152604482015290519081900360640190fd5b60026001556005821015610e46576040805162461bcd60e51b815260206004820152601e60248201527f546865206665652063616e6e6f74206265206d6f7265207468616e2035250000604482015290519081900360640190fd5b6103e8821115610e9d576040805162461bcd60e51b815260206004820181905260248201527f546865206665652063616e6e6f74206265206c657373207468616e20302e3125604482015290519081900360640190fd5b600f8363ffffffff161115610ef9576040805162461bcd60e51b815260206004820152601f60248201527f546865206665652063616e6e6f74206265206d6f7265207468616e2031352500604482015290519081900360640190fd5b600f829055600d805463ffffffff8516610100810264ffffffff001960ff891660ff199094168417161790925560408051918252602082019290925281517f460fa919625630f734b5d86356a2511f134b6df313c793ca09e0399de8d933a0929181900390910190a160145460ff61010090910416151581151514610fc55760148054821515610100810261ff00199092169190911790915560408051918252517ff6048fff6212fd7a65ba15a0d33e029f1e2297a028e8951998aea1d8ead7b30a9181900360200190a15b5050600180555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610ffb611c7c565b6000546001600160a01b0390811691161461104b576040805162461bcd60e51b81526020600482018190526024820152600080516020612c7c833981519152604482015290519081900360640190fd5b60026001541415611091576040805162461bcd60e51b815260206004820152601f6024820152600080516020612b9d833981519152604482015290519081900360640190fd5b60026001556001600160a01b0382166110f1576040805162461bcd60e51b815260206004820152601e60248201527f4552433230207472616e7366657220746f207a65726f20616464726573730000604482015290519081900360640190fd5b601254839061110090836122f7565b6012556006546040805163a9059cbb60e01b81526101009092046001600160a01b0390811660048401526024830185905290519083169163a9059cbb9160448083019260209291908290030181600087803b15801561115e57600080fd5b505af1158015611172573d6000803e3d6000fd5b505050506040513d602081101561118857600080fd5b50506001805550505050565b6001600160a01b03811660009081526009602052604081205460ff16156111d457506001600160a01b0381166000908152600860205260409020546111f9565b6001600160a01b0382166000908152600760205260409020546111f69061157d565b90505b919050565b611206611c7c565b6000546001600160a01b03908116911614611256576040805162461bcd60e51b81526020600482018190526024820152600080516020612c7c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60105490565b6000546001600160a01b031690565b60006112bf611c7c565b6001600160a01b03811660009081526009602052604090205490915060ff161561131a5760405162461bcd60e51b815260040180806020018281038252602c815260200180612cc0602c913960400191505060405180910390fd5b600061132583612210565b505050506001600160a01b03831660009081526007602052604090205490915061134f90826122f7565b6001600160a01b038316600090815260076020526040902055600b5461137590826122f7565b600b55600c5461138590846121b6565b600c55505050565b60115481565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109595780601f1061092e57610100808354040283529160200191610959565b600e5481565b600d54610100900463ffffffff1681565b6000610977611418611c7c565b84610a1f85604051806060016040528060258152602001612cec6025913960026000611442611c7c565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061211f565b6000610977611480611c7c565b8484611d6c565b61148f611c7c565b6000546001600160a01b039081169116146114df576040805162461bcd60e51b81526020600482018190526024820152600080516020612c7c833981519152604482015290519081900360640190fd5b60026001541415611525576040805162461bcd60e51b815260206004820152601f6024820152600080516020612b9d833981519152604482015290519081900360640190fd5b600260015560148054821515610100810261ff00199092169190911790915560408051918252517ff6048fff6212fd7a65ba15a0d33e029f1e2297a028e8951998aea1d8ead7b30a9181900360200190a15060018055565b6000600b548211156115c05760405162461bcd60e51b815260040180806020018281038252602e815260200180612c05602e913960400191505060405180910390fd5b60006115ca612339565b90506115d683826122b5565b9392505050565b600d5460ff1681565b601454610100900460ff1681565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b60145460ff1681565b611630611c7c565b6000546001600160a01b03908116911614611680576040805162461bcd60e51b81526020600482018190526024820152600080516020612c7c833981519152604482015290519081900360640190fd5b600260015414156116c6576040805162461bcd60e51b815260206004820152601f6024820152600080516020612b9d833981519152604482015290519081900360640190fd5b6002600155600f63ffffffff82161115611727576040805162461bcd60e51b815260206004820152601e60248201527f546865206665652063616e2774206265206d6f7265207468616e203135250000604482015290519081900360640190fd5b600d805463ffffffff8316610100810264ffffffff001960ff871660ff199094168417161790925560408051918252602082019290925281517f460fa919625630f734b5d86356a2511f134b6df313c793ca09e0399de8d933a0929181900390910190a1505060018055565b61179b611c7c565b6000546001600160a01b039081169116146117eb576040805162461bcd60e51b81526020600482018190526024820152600080516020612c7c833981519152604482015290519081900360640190fd5b60026001541415611831576040805162461bcd60e51b815260206004820152601f6024820152600080516020612b9d833981519152604482015290519081900360640190fd5b60026001556001600160a01b03811660009081526009602052604090205460ff16156118a4576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260076020526040902054156118fe576001600160a01b0381166000908152600760205260409020546118e49061157d565b6001600160a01b0382166000908152600860205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a8054808301825592527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890910180546001600160a01b0319169092179091558055565b611970611c7c565b6000546001600160a01b039081169116146119c0576040805162461bcd60e51b81526020600482018190526024820152600080516020612c7c833981519152604482015290519081900360640190fd5b6001600160a01b038116611a055760405162461bcd60e51b8152600401808060200182810382526026815260200180612bbd6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60125481565b611a6e611c7c565b6000546001600160a01b03908116911614611abe576040805162461bcd60e51b81526020600482018190526024820152600080516020612c7c833981519152604482015290519081900360640190fd5b60026001541415611b04576040805162461bcd60e51b815260206004820152601f6024820152600080516020612b9d833981519152604482015290519081900360640190fd5b60026001556001600160a01b03811660009081526009602052604090205460ff16611b76576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600a54811015611c6e57816001600160a01b0316600a8281548110611b9a57fe5b6000918252602090912001546001600160a01b03161415611c6657600a80546000198101908110611bc757fe5b600091825260209091200154600a80546001600160a01b039092169183908110611bed57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600882526040808220829055600990925220805460ff19169055600a805480611c3f57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611c6e565b600101611b79565b505060018055565b60135481565b3390565b6001600160a01b038316611cc55760405162461bcd60e51b8152600401808060200182810382526024815260200180612c9c6024913960400191505060405180910390fd5b6001600160a01b038216611d0a5760405162461bcd60e51b8152600401808060200182810382526022815260200180612be36022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000611d7730611194565b600d54909150600090611d9b90849060ff811690610100900463ffffffff16610d1d565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614611dda575060005b600e5482108015907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811690871614908290611e22575060145460ff16155b8015611e2b5750805b8015611e3e5750601454610100900460ff165b15611e4c57611e4c8461235c565b600083118015611e595750805b15611fb2576001600160a01b03871660009081526009602052604090205460ff168015611e9f57506001600160a01b03861660009081526009602052604090205460ff16155b15611eb457611eaf8730856123f9565b611fb2565b6001600160a01b03871660009081526009602052604090205460ff16158015611ef557506001600160a01b03861660009081526009602052604090205460ff165b15611f0557611eaf873085612510565b6001600160a01b03871660009081526009602052604090205460ff16158015611f4757506001600160a01b03861660009081526009602052604090205460ff16155b15611f5757611eaf8730856125b6565b6001600160a01b03871660009081526009602052604090205460ff168015611f9757506001600160a01b03861660009081526009602052604090205460ff165b15611fa757611eaf8730856125f7565b611fb28730856125b6565b6000611fbe86856122f7565b6001600160a01b03891660009081526009602052604090205490915060ff16801561200257506001600160a01b03871660009081526009602052604090205460ff16155b15612017576120128888836123f9565b612115565b6001600160a01b03881660009081526009602052604090205460ff1615801561205857506001600160a01b03871660009081526009602052604090205460ff165b1561206857612012888883612510565b6001600160a01b03881660009081526009602052604090205460ff161580156120aa57506001600160a01b03871660009081526009602052604090205460ff16155b156120ba576120128888836125b6565b6001600160a01b03881660009081526009602052604090205460ff1680156120fa57506001600160a01b03871660009081526009602052604090205460ff165b1561210a576120128888836125f7565b6121158888836125b6565b5050505050505050565b600081848411156121ae5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561217357818101518382015260200161215b565b50505050905090810190601f1680156121a05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156115d6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080600080600080600061222488612667565b915091506000612232612339565b905060008060006122448c868661269a565b919e909d50909b509599509397509395505050505050565b60008261226b5750600061097b565b8282028284828161227857fe5b04146115d65760405162461bcd60e51b8152600401808060200182810382526021815260200180612c336021913960400191505060405180910390fd5b60006115d683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126d6565b60006115d683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061211f565b600080600061234661273b565b909250905061235582826122b5565b9250505090565b6014805460ff1916600117905560006123768260026122b5565b9050600061238483836122f7565b905047612390836128be565b600061239c47836122f7565b90506123a88382612ab1565b604080518581526020810183905280820185905290517f4ef2142970fd06465a66d49cd924fdd56a52bae776dc706128dfeb6a49ce97c79181900360600190a150506014805460ff19169055505050565b600080600080600061240a86612210565b6001600160a01b038d166000908152600860205260409020549499509297509095509350915061243a90876122f7565b6001600160a01b03891660009081526008602090815260408083209390935560079052205461246990866122f7565b6001600160a01b03808a16600090815260076020526040808220939093559089168152205461249890856121b6565b6001600160a01b0388166000908152600760205260409020556124bb8382612b78565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b600080600080600061252186612210565b6001600160a01b038d166000908152600760205260409020549499509297509095509350915061255190866122f7565b6001600160a01b03808a16600090815260076020908152604080832094909455918a1681526008909152205461258790836121b6565b6001600160a01b03881660009081526008602090815260408083209390935560079052205461249890856121b6565b60008060008060006125c786612210565b6001600160a01b038d166000908152600760205260409020549499509297509095509350915061246990866122f7565b600080600080600061260886612210565b6001600160a01b038d166000908152600860205260409020549499509297509095509350915061263890876122f7565b6001600160a01b03891660009081526008602090815260408083209390935560079052205461255190866122f7565b6000806000612681600f54856122b590919063ffffffff16565b9050600061268f85836122f7565b935090915050915091565b60008080806126a9878661225c565b905060006126b7878761225c565b905060006126c583836122f7565b929992985090965090945050505050565b600081836127255760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561217357818101518382015260200161215b565b50600083858161273157fe5b0495945050505050565b600b54600090819069d3c21bcecceda1000000825b600a5481101561287c578260076000600a848154811061276c57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806127d157508160086000600a84815481106127aa57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156127f057600b5469d3c21bcecceda1000000945094505050506128ba565b61283060076000600a848154811061280457fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122f7565b925061287260086000600a848154811061284657fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122f7565b9150600101612750565b50600b546128949069d3c21bcecceda10000006122b5565b8210156128b457600b5469d3c21bcecceda10000009350935050506128ba565b90925090505b9091565b604080516002808252606080830184529260208301908036833701905050905030816000815181106128ec57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507305ff2b0db69458a0750badebc4f9e13add608c7f6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561295957600080fd5b505afa15801561296d573d6000803e3d6000fd5b505050506040513d602081101561298357600080fd5b505181518290600190811061299457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506129d3307305ff2b0db69458a0750badebc4f9e13add608c7f84611c80565b7305ff2b0db69458a0750badebc4f9e13add608c7f6001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612a6c578181015183820152602001612a54565b505050509050019650505050505050600060405180830381600087803b158015612a9557600080fd5b505af1158015612aa9573d6000803e3d6000fd5b505050505050565b612ad0307305ff2b0db69458a0750badebc4f9e13add608c7f84611c80565b6040805163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a482015290517305ff2b0db69458a0750badebc4f9e13add608c7f9163f305d71991849160c48082019260609290919082900301818588803b158015612b4757600080fd5b505af1158015612b5b573d6000803e3d6000fd5b50505050506040513d6060811015612b7257600080fd5b50505050565b600b54612b8590836122f7565b600b55600c54612b9590826121b6565b600c55505056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e2074686520746f74616c20616c6c6f636174696f6e73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200157b3b650827cc6ff243f29356128688dbf32654afaecf78a1b0745da809f8f64736f6c634300060c00335265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
26372:22495:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29097:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31278:169;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31278:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;30172:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;26699:115;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;26699:115:0;;;;;;;;;;;;;;31921:321;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31921:321:0;;;;;;;;;;;;;;;;;:::i;26866:69::-;;;;;;;;;;;;;:::i;30024:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45386:213;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45386:213:0;;:::i;:::-;;32651:218;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32651:218:0;;;;;;;;:::i;41857:270::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41857:270:0;;:::i;47315:434::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47315:434:0;;;;;;;;;:::i;41144:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41144:269:0;;;;;;;;;;;;;;;;:::i;40290:768::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40290:768:0;;;;;;;;;;;;;;;;;;;;;;;:::i;26821:38::-;;;;;;;;;;;;;:::i;42327:361::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42327:361:0;;;;;;;;;;;;;;;;;:::i;30330:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30330:199:0;-1:-1:-1;;;;;30330:199:0;;:::i;2096:148::-;;;;;;;;;;;;;:::i;37907:97::-;;;;;;;;;;;;;:::i;1454:79::-;;;;;;;;;;;;;:::i;46930:377::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46930:377:0;;:::i;27544:33::-;;;;;;;;;;;;;:::i;29299:87::-;;;;;;;;;;;;;:::i;27406:37::-;;;;;;;;;;;;;:::i;27372:27::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33372:269;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33372:269:0;;;;;;;;:::i;30742:175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30742:175:0;;;;;;;;:::i;42135:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42135:184:0;;;;:::i;47757:257::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47757:257:0;;:::i;27341:24::-;;;;;;;;;;;;;:::i;27707:32::-;;;;;;;;;;;;;:::i;30980:151::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30980:151:0;;;;;;;;;;:::i;27673:27::-;;;;;;;;;;;;;:::i;41509:340::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41509:340:0;;;;;;;;;;;:::i;48022:343::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48022:343:0;-1:-1:-1;;;;;48022:343:0;;:::i;2399:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2399:244:0;-1:-1:-1;;;;;2399:244:0;;:::i;27584:35::-;;;;;;;;;;;;;:::i;48373:489::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48373:489:0;-1:-1:-1;;;;;48373:489:0;;:::i;27626:33::-;;;;;;;;;;;;;:::i;29097:83::-;29167:5;29160:12;;;;;;;;-1:-1:-1;;29160:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29134:13;;29160:12;;29167:5;;29160:12;;29167:5;29160:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29097:83;:::o;31278:169::-;31361:4;31378:39;31387:12;:10;:12::i;:::-;31401:7;31410:6;31378:8;:39::i;:::-;-1:-1:-1;31435:4:0;31278:169;;;;;:::o;30172:95::-;27221:20;30172:95;:::o;26699:115::-;26771:42;26699:115;:::o;31921:321::-;32027:4;32044:36;32054:6;32062:9;32073:6;32044:9;:36::i;:::-;32091:121;32100:6;32108:12;:10;:12::i;:::-;32122:89;32160:6;32122:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32122:19:0;;;;;;:11;:19;;;;;;32142:12;:10;:12::i;:::-;-1:-1:-1;;;;;32122:33:0;;;;;;;;;;;;-1:-1:-1;32122:33:0;;;:89;:37;:89::i;:::-;32091:8;:121::i;:::-;-1:-1:-1;32230:4:0;31921:321;;;;;:::o;26866:69::-;;;;;;-1:-1:-1;;;;;26866:69:0;;:::o;30024:83::-;30090:9;;;;30024:83;:::o;45386:213::-;1676:12;:10;:12::i;:::-;1666:6;;-1:-1:-1;;;;;1666:6:0;;;:22;;;1658:67;;;;;-1:-1:-1;;;1658:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1658:67:0;;;;;;;;;;;;;;;45466:1:::1;45461;:6;;45453:49;;;::::0;;-1:-1:-1;;;45453:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;45526:4;45521:1;:9;;45513:53;;;::::0;;-1:-1:-1;;;45513:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;45577:10;:14:::0;45386:213::o;32651:218::-;32739:4;32756:83;32765:12;:10;:12::i;:::-;32779:7;32788:50;32827:10;32788:11;:25;32800:12;:10;:12::i;:::-;-1:-1:-1;;;;;32788:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;32788:25:0;;;:34;;;;;;;;;;;:38;:50::i;41857:270::-;1676:12;:10;:12::i;:::-;1666:6;;-1:-1:-1;;;;;1666:6:0;;;:22;;;1658:67;;;;;-1:-1:-1;;;1658:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1658:67:0;;;;;;;;;;;;;;;25415:1:::1;26021:7;;:19;;26013:63;;;::::0;;-1:-1:-1;;;26013:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26013:63:0;;;;;;;;;;;;;::::1;;25415:1;26154:7;:18:::0;42001:22:::2;:48:::0;;;42065:54:::2;::::0;;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;-1:-1:-1::0;25371:1:0::1;26333:22:::0;;41857:270::o;47315:434::-;47405:7;27221:20;47433:7;:18;;47425:62;;;;;-1:-1:-1;;;47425:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;47503:17;47498:244;;47538:15;47561:19;47572:7;47561:10;:19::i;:::-;-1:-1:-1;47537:43:0;;-1:-1:-1;47595:14:0;;-1:-1:-1;;;;47595:14:0;47498:244;47644:23;47674:19;47685:7;47674:10;:19::i;:::-;-1:-1:-1;47642:51:0;;-1:-1:-1;47708:22:0;;-1:-1:-1;;;;47708:22:0;41144:269;41281:14;41317:88;41392:1;41368:21;;;:25;41363:2;:31;41317:27;:7;:27;;;;;:11;:27;:::i;:::-;:31;;:88::i;:::-;41308:97;41144:269;-1:-1:-1;;;;41144:269:0:o;40290:768::-;1676:12;:10;:12::i;:::-;1666:6;;-1:-1:-1;;;;;1666:6:0;;;:22;;;1658:67;;;;;-1:-1:-1;;;1658:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1658:67:0;;;;;;;;;;;;;;;25415:1:::1;26021:7;;:19;;26013:63;;;::::0;;-1:-1:-1;;;26013:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26013:63:0;;;;;;;;;;;;;::::1;;25415:1;26154:7;:18:::0;40508:1:::2;40491:18:::0;::::2;;40483:61;;;::::0;;-1:-1:-1;;;40483:61:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;40580:4;40563:13;:21;;40555:66;;;::::0;;-1:-1:-1;;;40555:66:0;;::::2;;::::0;::::2;::::0;;;;;;;::::2;::::0;;;;;;;;;;;;;::::2;;40660:2;40640:16;:22;;;;40632:66;;;::::0;;-1:-1:-1;;;40632:66:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;40709:10;:26:::0;;;40746:11:::2;:28:::0;;40785:32:::2;::::0;::::2;40746:28;40785:32:::0;::::2;-1:-1:-1::0;;40746:28:0::2;::::0;::::2;-1:-1:-1::0;;40746:28:0;;::::2;::::0;::::2;40785:32;;::::0;;;40833:44:::2;::::0;;;;;::::2;::::0;::::2;::::0;;;;;;::::2;::::0;;;;;;;;;::::2;40902:20;::::0;::::2;;::::0;;::::2;;:32;;::::0;::::2;;;40898:144;;40946:20;:31:::0;;;::::2;;;::::0;::::2;-1:-1:-1::0;;40946:31:0;;::::2;::::0;;;::::2;::::0;;;40993:37:::2;::::0;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;40898:144;-1:-1:-1::0;;25371:1:0::1;26333:22:::0;;-1:-1:-1;;40290:768:0:o;26821:38::-;;;:::o;42327:361::-;1676:12;:10;:12::i;:::-;1666:6;;-1:-1:-1;;;;;1666:6:0;;;:22;;;1658:67;;;;;-1:-1:-1;;;1658:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1658:67:0;;;;;;;;;;;;;;;25415:1:::1;26021:7;;:19;;26013:63;;;::::0;;-1:-1:-1;;;26013:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26013:63:0;;;;;;;;;;;;;::::1;;25415:1;26154:7;:18:::0;-1:-1:-1;;;;;42439:17:0;::::2;42431:59;;;::::0;;-1:-1:-1;;;42431:59:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;42592:20;::::0;42551:6;;42592:33:::2;::::0;42617:7;42592:24:::2;:33::i;:::-;42569:20;:56:::0;42661:9:::2;::::0;42646:34:::2;::::0;;-1:-1:-1;;;42646:34:0;;42661:9:::2;::::0;;::::2;-1:-1:-1::0;;;;;42661:9:0;;::::2;42646:34;::::0;::::2;::::0;;;;;;;;;:14;;::::2;::::0;::::2;::::0;:34;;;;;::::2;::::0;;;;;;;;-1:-1:-1;42646:14:0;:34;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;25371:1:0::1;26333:22:::0;;-1:-1:-1;;;;42327:361:0:o;30330:199::-;-1:-1:-1;;;;;30421:20:0;;30396:7;30421:20;;;:11;:20;;;;;;;;30417:49;;;-1:-1:-1;;;;;;30450:16:0;;;;;;:7;:16;;;;;;30443:23;;30417:49;-1:-1:-1;;;;;30504:16:0;;;;;;:7;:16;;;;;;30484:37;;:19;:37::i;:::-;30477:44;;30330:199;;;;:::o;2096:148::-;1676:12;:10;:12::i;:::-;1666:6;;-1:-1:-1;;;;;1666:6:0;;;:22;;;1658:67;;;;;-1:-1:-1;;;1658:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1658:67:0;;;;;;;;;;;;;;;2203:1:::1;2187:6:::0;;2166:40:::1;::::0;-1:-1:-1;;;;;2187:6:0;;::::1;::::0;2166:40:::1;::::0;2203:1;;2166:40:::1;2234:1;2217:19:::0;;-1:-1:-1;;;;;;2217:19:0::1;::::0;;2096:148::o;37907:97::-;37982:14;;37907:97;:::o;1454:79::-;1492:7;1519:6;-1:-1:-1;;;;;1519:6:0;1454:79;:::o;46930:377::-;46983:14;47000:12;:10;:12::i;:::-;-1:-1:-1;;;;;47032:19:0;;;;;;:11;:19;;;;;;46983:29;;-1:-1:-1;47032:19:0;;47031:20;47023:77;;;;-1:-1:-1;;;47023:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47112:15;47135:19;47146:7;47135:10;:19::i;:::-;-1:-1:-1;;;;;;;;;47183:15:0;;;;;;:7;:15;;;;;;47111:43;;-1:-1:-1;47183:28:0;;47111:43;47183:19;:28::i;:::-;-1:-1:-1;;;;;47165:15:0;;;;;;:7;:15;;;;;:46;47232:7;;:20;;47244:7;47232:11;:20::i;:::-;47222:7;:30;47276:10;;:23;;47291:7;47276:14;:23::i;:::-;47263:10;:36;-1:-1:-1;;;46930:377:0:o;27544:33::-;;;;:::o;29299:87::-;29371:7;29364:14;;;;;;;;-1:-1:-1;;29364:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29338:13;;29364:14;;29371:7;;29364:14;;29371:7;29364:14;;;;;;;;;;;;;;;;;;;;;;;;27406:37;;;;:::o;27372:27::-;;;;;;;;;:::o;33372:269::-;33465:4;33482:129;33491:12;:10;:12::i;:::-;33505:7;33514:96;33553:15;33514:96;;;;;;;;;;;;;;;;;:11;:25;33526:12;:10;:12::i;:::-;-1:-1:-1;;;;;33514:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;33514:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;30742:175::-;30828:4;30845:42;30855:12;:10;:12::i;:::-;30869:9;30880:6;30845:9;:42::i;42135:184::-;1676:12;:10;:12::i;:::-;1666:6;;-1:-1:-1;;;;;1666:6:0;;;:22;;;1658:67;;;;;-1:-1:-1;;;1658:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1658:67:0;;;;;;;;;;;;;;;25415:1:::1;26021:7;;:19;;26013:63;;;::::0;;-1:-1:-1;;;26013:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26013:63:0;;;;;;;;;;;;;::::1;;25415:1;26154:7;:18:::0;42227:20:::2;:31:::0;;;::::2;;;::::0;::::2;-1:-1:-1::0;;42227:31:0;;::::2;::::0;;;::::2;::::0;;;42274:37:::2;::::0;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;-1:-1:-1::0;25371:1:0::1;26333:22:::0;;42135:184::o;47757:257::-;47823:7;47862;;47851;:18;;47843:77;;;;-1:-1:-1;;;47843:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47931:19;47954:10;:8;:10::i;:::-;47931:33;-1:-1:-1;47982:24:0;:7;47931:33;47982:11;:24::i;:::-;47975:31;47757:257;-1:-1:-1;;;47757:257:0:o;27341:24::-;;;;;;:::o;27707:32::-;;;;;;;;;:::o;30980:151::-;-1:-1:-1;;;;;31096:18:0;;;31069:7;31096:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;30980:151::o;27673:27::-;;;;;;:::o;41509:340::-;1676:12;:10;:12::i;:::-;1666:6;;-1:-1:-1;;;;;1666:6:0;;;:22;;;1658:67;;;;;-1:-1:-1;;;1658:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1658:67:0;;;;;;;;;;;;;;;25415:1:::1;26021:7;;:19;;26013:63;;;::::0;;-1:-1:-1;;;26013:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26013:63:0;;;;;;;;;;;;;::::1;;25415:1;26154:7;:18:::0;41670:2:::2;41652:20;::::0;::::2;;;41644:63;;;::::0;;-1:-1:-1;;;41644:63:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;41718:11;:26:::0;;41755:30:::2;::::0;::::2;41718:26;41755:30:::0;::::2;-1:-1:-1::0;;41718:26:0::2;::::0;::::2;-1:-1:-1::0;;41718:26:0;;::::2;::::0;::::2;41755:30;;::::0;;;41801:40:::2;::::0;;;;;::::2;::::0;::::2;::::0;;;;;;::::2;::::0;;;;;;;;;::::2;-1:-1:-1::0;;25371:1:0::1;26333:22:::0;;41509:340::o;48022:343::-;1676:12;:10;:12::i;:::-;1666:6;;-1:-1:-1;;;;;1666:6:0;;;:22;;;1658:67;;;;;-1:-1:-1;;;1658:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1658:67:0;;;;;;;;;;;;;;;25415:1:::1;26021:7;;:19;;26013:63;;;::::0;;-1:-1:-1;;;26013:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26013:63:0;;;;;;;;;;;;;::::1;;25415:1;26154:7;:18:::0;-1:-1:-1;;;;;48115:20:0;::::2;;::::0;;;:11:::2;:20;::::0;;;;;::::2;;48114:21;48106:61;;;::::0;;-1:-1:-1;;;48106:61:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;48181:16:0;::::2;48200:1;48181:16:::0;;;:7:::2;:16;::::0;;;;;:20;48178:108:::2;;-1:-1:-1::0;;;;;48257:16:0;::::2;;::::0;;;:7:::2;:16;::::0;;;;;48237:37:::2;::::0;:19:::2;:37::i;:::-;-1:-1:-1::0;;;;;48218:16:0;::::2;;::::0;;;:7:::2;:16;::::0;;;;:56;48178:108:::2;-1:-1:-1::0;;;;;48296:20:0::2;;::::0;;;:11:::2;:20;::::0;;;;:27;;-1:-1:-1;;48296:27:0::2;48319:4;48296:27:::0;;::::2;::::0;;;48334:9:::2;:23:::0;;;;::::2;::::0;;;;;;;::::2;::::0;;-1:-1:-1;;;;;;48334:23:0::2;::::0;;::::2;::::0;;;26333:22;;48022:343::o;2399:244::-;1676:12;:10;:12::i;:::-;1666:6;;-1:-1:-1;;;;;1666:6:0;;;:22;;;1658:67;;;;;-1:-1:-1;;;1658:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1658:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;2488:22:0;::::1;2480:73;;;;-1:-1:-1::0;;;2480:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2590:6;::::0;;2569:38:::1;::::0;-1:-1:-1;;;;;2569:38:0;;::::1;::::0;2590:6;::::1;::::0;2569:38:::1;::::0;::::1;2618:6;:17:::0;;-1:-1:-1;;;;;;2618:17:0::1;-1:-1:-1::0;;;;;2618:17:0;;;::::1;::::0;;;::::1;::::0;;2399:244::o;27584:35::-;;;;:::o;48373:489::-;1676:12;:10;:12::i;:::-;1666:6;;-1:-1:-1;;;;;1666:6:0;;;:22;;;1658:67;;;;;-1:-1:-1;;;1658:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1658:67:0;;;;;;;;;;;;;;;25415:1:::1;26021:7;;:19;;26013:63;;;::::0;;-1:-1:-1;;;26013:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26013:63:0;;;;;;;;;;;;;::::1;;25415:1;26154:7;:18:::0;-1:-1:-1;;;;;48465:20:0;::::2;;::::0;;;:11:::2;:20;::::0;;;;;::::2;;48457:60;;;::::0;;-1:-1:-1;;;48457:60:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;48533:9;48528:327;48552:9;:16:::0;48548:20;::::2;48528:327;;;48610:7;-1:-1:-1::0;;;;;48594:23:0::2;:9;48604:1;48594:12;;;;;;;;;::::0;;;::::2;::::0;;;::::2;::::0;-1:-1:-1;;;;;48594:12:0::2;:23;48590:254;;;48653:9;48663:16:::0;;-1:-1:-1;;48663:20:0;;;48653:31;::::2;;;;;;::::0;;;::::2;::::0;;;::::2;::::0;48638:9:::2;:12:::0;;-1:-1:-1;;;;;48653:31:0;;::::2;::::0;48648:1;;48638:12;::::2;;;;;;::::0;;;::::2;::::0;;;;;;::::2;:46:::0;;-1:-1:-1;;;;;;48638:46:0::2;-1:-1:-1::0;;;;;48638:46:0;;::::2;;::::0;;48703:16;;::::2;::::0;;:7:::2;:16:::0;;;;;;:20;;;48742:11:::2;:20:::0;;;;:28;;-1:-1:-1;;48742:28:0::2;::::0;;48789:9:::2;:15:::0;;;::::2;;;;;::::0;;;::::2;::::0;;;;-1:-1:-1;;48789:15:0;;;;;-1:-1:-1;;;;;;48789:15:0::2;::::0;;;;;48823:5:::2;;48590:254;48570:3;;48528:327;;;-1:-1:-1::0;;25371:1:0::1;26333:22:::0;;48373:489::o;27626:33::-;;;;:::o;92:106::-;180:10;92:106;:::o;36432:346::-;-1:-1:-1;;;;;36534:19:0;;36526:68;;;;-1:-1:-1;;;36526:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36613:21:0;;36605:68;;;;-1:-1:-1;;;36605:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36686:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;36738:32;;;;;;;;;;;;;;;;;36432:346;;;:::o;33645:2346::-;34047:28;34078:24;34096:4;34078:9;:24::i;:::-;34184:11;;34047:55;;-1:-1:-1;34113:20:0;;34136:98;;34163:6;;34184:11;;;;;34210:13;;;;34136:12;:98::i;:::-;34113:121;;34261:13;-1:-1:-1;;;;;34255:19:0;:2;-1:-1:-1;;;;;34255:19:0;;34251:41;;-1:-1:-1;34291:1:0;34251:41;34354:22;;34330:46;;;;;34420:13;-1:-1:-1;;;;;34414:19:0;;;;;;;;34330:46;;34463:52;;-1:-1:-1;34500:15:0;;;;34499:16;34463:52;:88;;;;;34532:19;34463:88;:125;;;;-1:-1:-1;34568:20:0;;;;;;;34463:125;34445:212;;;34616:35;34630:20;34616:13;:35::i;:::-;34682:1;34667:12;:16;:39;;;;;34687:19;34667:39;34663:665;;;-1:-1:-1;;;;;34722:17:0;;;;;;:11;:17;;;;;;;;:37;;;;-1:-1:-1;;;;;;34744:15:0;;;;;;:11;:15;;;;;;;;34743:16;34722:37;34718:603;;;34777:56;34799:4;34813;34820:12;34777:21;:56::i;:::-;34718:603;;;-1:-1:-1;;;;;34856:17:0;;;;;;:11;:17;;;;;;;;34855:18;:37;;;;-1:-1:-1;;;;;;34877:15:0;;;;;;:11;:15;;;;;;;;34855:37;34851:470;;;34910:54;34930:4;34944;34951:12;34910:19;:54::i;34851:470::-;-1:-1:-1;;;;;34987:17:0;;;;;;:11;:17;;;;;;;;34986:18;:38;;;;-1:-1:-1;;;;;;35009:15:0;;;;;;:11;:15;;;;;;;;35008:16;34986:38;34982:339;;;35041:52;35059:4;35073;35080:12;35041:17;:52::i;34982:339::-;-1:-1:-1;;;;;35115:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;35136:15:0;;;;;;:11;:15;;;;;;;;35115:36;35111:210;;;35168:56;35190:4;35204;35211:12;35168:21;:56::i;35111:210::-;35257:52;35275:4;35289;35296:12;35257:17;:52::i;:::-;35346:24;35373;:6;35384:12;35373:10;:24::i;:::-;-1:-1:-1;;;;;35412:17:0;;;;;;:11;:17;;;;;;35346:51;;-1:-1:-1;35412:17:0;;:37;;;;-1:-1:-1;;;;;;35434:15:0;;;;;;:11;:15;;;;;;;;35433:16;35412:37;35408:566;;;35466:49;35488:4;35494:2;35498:16;35466:21;:49::i;:::-;35408:566;;;-1:-1:-1;;;;;35538:17:0;;;;;;:11;:17;;;;;;;;35537:18;:37;;;;-1:-1:-1;;;;;;35559:15:0;;;;;;:11;:15;;;;;;;;35537:37;35533:441;;;35591:47;35611:4;35617:2;35621:16;35591:19;:47::i;35533:441::-;-1:-1:-1;;;;;35661:17:0;;;;;;:11;:17;;;;;;;;35660:18;:38;;;;-1:-1:-1;;;;;;35683:15:0;;;;;;:11;:15;;;;;;;;35682:16;35660:38;35656:318;;;35715:45;35733:4;35739:2;35743:16;35715:17;:45::i;35656:318::-;-1:-1:-1;;;;;35782:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;35803:15:0;;;;;;:11;:15;;;;;;;;35782:36;35778:196;;;35835:49;35857:4;35863:2;35867:16;35835:21;:49::i;35778:196::-;35917:45;35935:4;35941:2;35945:16;35917:17;:45::i;:::-;33645:2346;;;;;;;;:::o;4395:192::-;4481:7;4517:12;4509:6;;;;4501:29;;;;-1:-1:-1;;;4501:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4553:5:0;;;4395:192::o;3492:181::-;3550:7;3582:5;;;3606:6;;;;3598:46;;;;;-1:-1:-1;;;3598:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;44962:412;45021:7;45030;45039;45048;45057;45078:23;45103:12;45119:21;45132:7;45119:12;:21::i;:::-;45077:63;;;;45151:19;45174:10;:8;:10::i;:::-;45151:33;;45196:15;45213:23;45238:12;45254:39;45266:7;45275:4;45281:11;45254;:39::i;:::-;45195:98;;;;-1:-1:-1;45195:98:0;;-1:-1:-1;45344:15:0;;-1:-1:-1;45361:4:0;;-1:-1:-1;44962:412:0;;-1:-1:-1;;;;;;44962:412:0:o;4846:471::-;4904:7;5149:6;5145:47;;-1:-1:-1;5179:1:0;5172:8;;5145:47;5216:5;;;5220:1;5216;:5;:1;5240:5;;;;;:10;5232:56;;;;-1:-1:-1;;;5232:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5793:132;5851:7;5878:39;5882:1;5885;5878:39;;;;;;;;;;;;;;;;;:3;:39::i;3956:136::-;4014:7;4041:43;4045:1;4048;4041:43;;;;;;;;;;;;;;;;;:3;:43::i;46192:163::-;46233:7;46254:15;46271;46290:19;:17;:19::i;:::-;46253:56;;-1:-1:-1;46253:56:0;-1:-1:-1;46327:20:0;46253:56;;46327:11;:20::i;:::-;46320:27;;;;46192:163;:::o;38174:984::-;28113:15;:22;;-1:-1:-1;;28113:22:0;28131:4;28113:22;;;:15;38330:27:::1;:20:::0;38355:1:::1;38330:24;:27::i;:::-;38315:42:::0;-1:-1:-1;38368:17:0::1;38388:30;:20:::0;38315:42;38388:24:::1;:30::i;:::-;38368:50:::0;-1:-1:-1;38721:21:0::1;38787:22;38804:4:::0;38787:16:::1;:22::i;:::-;38933:18;38954:41;:21;38980:14:::0;38954:25:::1;:41::i;:::-;38933:62;;39045:35;39058:9;39069:10;39045:12;:35::i;:::-;39108:42;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;28158:15:0;:23;;-1:-1:-1;;28158:23:0;;;-1:-1:-1;;;38174:984:0:o;43688:512::-;43791:15;43808:23;43833:12;43847:23;43872:12;43888:19;43899:7;43888:10;:19::i;:::-;-1:-1:-1;;;;;43936:15:0;;;;;;:7;:15;;;;;;43790:117;;-1:-1:-1;43790:117:0;;-1:-1:-1;43790:117:0;;-1:-1:-1;43790:117:0;-1:-1:-1;43790:117:0;-1:-1:-1;43936:28:0;;43956:7;43936:19;:28::i;:::-;-1:-1:-1;;;;;43918:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43993:7;:15;;;;:28;;44013:7;43993:19;:28::i;:::-;-1:-1:-1;;;;;43975:15:0;;;;;;;:7;:15;;;;;;:46;;;;44053:18;;;;;;;:39;;44076:15;44053:22;:39::i;:::-;-1:-1:-1;;;;;44032:18:0;;;;;;:7;:18;;;;;:60;44106:26;44121:4;44127;44106:14;:26::i;:::-;44165:9;-1:-1:-1;;;;;44148:44:0;44157:6;-1:-1:-1;;;;;44148:44:0;;44176:15;44148:44;;;;;;;;;;;;;;;;;;43688:512;;;;;;;;:::o;43159:521::-;43260:15;43277:23;43302:12;43316:23;43341:12;43357:19;43368:7;43357:10;:19::i;:::-;-1:-1:-1;;;;;43405:15:0;;;;;;:7;:15;;;;;;43259:117;;-1:-1:-1;43259:117:0;;-1:-1:-1;43259:117:0;;-1:-1:-1;43259:117:0;-1:-1:-1;43259:117:0;-1:-1:-1;43405:28:0;;43259:117;43405:19;:28::i;:::-;-1:-1:-1;;;;;43387:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;43465:18;;;;;:7;:18;;;;;:39;;43488:15;43465:22;:39::i;:::-;-1:-1:-1;;;;;43444:18:0;;;;;;:7;:18;;;;;;;;:60;;;;43536:7;:18;;;;:39;;43559:15;43536:22;:39::i;42696:455::-;42795:15;42812:23;42837:12;42851:23;42876:12;42892:19;42903:7;42892:10;:19::i;:::-;-1:-1:-1;;;;;42940:15:0;;;;;;:7;:15;;;;;;42794:117;;-1:-1:-1;42794:117:0;;-1:-1:-1;42794:117:0;;-1:-1:-1;42794:117:0;-1:-1:-1;42794:117:0;-1:-1:-1;42940:28:0;;42794:117;42940:19;:28::i;44208:588::-;44311:15;44328:23;44353:12;44367:23;44392:12;44408:19;44419:7;44408:10;:19::i;:::-;-1:-1:-1;;;;;44456:15:0;;;;;;:7;:15;;;;;;44310:117;;-1:-1:-1;44310:117:0;;-1:-1:-1;44310:117:0;;-1:-1:-1;44310:117:0;-1:-1:-1;44310:117:0;-1:-1:-1;44456:28:0;;44476:7;44456:19;:28::i;:::-;-1:-1:-1;;;;;44438:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44513:7;:15;;;;:28;;44533:7;44513:19;:28::i;45611:231::-;45672:7;45681;45701:12;45716:23;45728:10;;45716:7;:11;;:23;;;;:::i;:::-;45701:38;-1:-1:-1;45750:23:0;45776:17;:7;45701:38;45776:11;:17::i;:::-;45750:43;-1:-1:-1;45829:4:0;;-1:-1:-1;;45611:231:0;;;:::o;45850:334::-;45945:7;;;;46001:24;:7;46013:11;46001;:24::i;:::-;45983:42;-1:-1:-1;46036:12:0;46051:21;:4;46060:11;46051:8;:21::i;:::-;46036:36;-1:-1:-1;46083:23:0;46109:17;:7;46036:36;46109:11;:17::i;:::-;46145:7;;;;-1:-1:-1;46171:4:0;;-1:-1:-1;45850:334:0;;-1:-1:-1;;;;;45850:334:0:o;6421:278::-;6507:7;6542:12;6535:5;6527:28;;;;-1:-1:-1;;;6527:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6566:9;6582:1;6578;:5;;;;;;;6421:278;-1:-1:-1;;;;;6421:278:0:o;46363:561::-;46460:7;;46413;;;;27221:20;46413:7;46520:289;46544:9;:16;46540:20;;46520:289;;;46610:7;46586;:21;46594:9;46604:1;46594:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46594:12:0;46586:21;;;;;;;;;;;;;:31;;:66;;;46645:7;46621;:21;46629:9;46639:1;46629:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46629:12:0;46621:21;;;;;;;;;;;;;:31;46586:66;46582:97;;;46662:7;;27221:20;46654:25;;;;;;;;;46582:97;46704:34;46716:7;:21;46724:9;46734:1;46724:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46724:12:0;46716:21;;;;;;;;;;;;;46704:7;;:11;:34::i;:::-;46694:44;;46763:34;46775:7;:21;46783:9;46793:1;46783:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46783:12:0;46775:21;;;;;;;;;;;;;46763:7;;:11;:34::i;:::-;46753:44;-1:-1:-1;46562:3:0;;46520:289;;;-1:-1:-1;46833:7:0;;:20;;27221;46833:11;:20::i;:::-;46823:7;:30;46819:61;;;46863:7;;27221:20;46855:25;;;;;;;;46819:61;46899:7;;-1:-1:-1;46908:7:0;-1:-1:-1;46363:561:0;;;:::o;39166:589::-;39316:16;;;39330:1;39316:16;;;39292:21;39316:16;;;;;39292:21;39316:16;;;;;;;;;;-1:-1:-1;39316:16:0;39292:40;;39361:4;39343;39348:1;39343:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;39343:23:0;;;-1:-1:-1;;;;;39343:23:0;;;;;26771:42;-1:-1:-1;;;;;39387:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39387:22:0;39377:7;;:4;;39382:1;;39377:7;;;;;;;;;;;:32;-1:-1:-1;;;;;39377:32:0;;;-1:-1:-1;;;;;39377:32:0;;;;;39422:62;39439:4;26771:42;39472:11;39422:8;:62::i;:::-;26771:42;-1:-1:-1;;;;;39523:66:0;;39604:11;39630:1;39674:4;39701;39721:15;39523:224;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39523:224:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39166:589;;:::o;39763:519::-;39911:62;39928:4;26771:42;39961:11;39911:8;:62::i;:::-;40016:258;;;-1:-1:-1;;;40016:258:0;;40088:4;40016:258;;;;;;;;;;;;40134:1;40016:258;;;;;;;;;;;;;;40248:15;40016:258;;;;;;26771:42;;40016:31;;40055:9;;40016:258;;;;;;;;;;;;;;;40055:9;26771:42;40016:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;39763:519:0:o;44804:150::-;44885:7;;:17;;44897:4;44885:11;:17::i;:::-;44875:7;:27;44926:10;;:20;;44941:4;44926:14;:20::i;:::-;44913:10;:33;-1:-1:-1;;44804:150:0:o
Swarm Source
ipfs://0157b3b650827cc6ff243f29356128688dbf32654afaecf78a1b0745da809f8f
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.